create initial development branch
make variable name clearer
add lines to vector for shiggles
ncurses is cool

need to set noecho() and only echo stuff that makes sense. Nothing that is used to escape,
and add backspace functionality
formulate architecture plan

Draft an overview of the different classes of the program and what they do.
Write up some header files for these classes with partially complete declarations.
implement simple file IO for Buffers

Make Buffers read from a file when constructed and initialize their internal state.
Make Buffers able to write back to their file;
implement lots of stuff

start on Buffer, still have to implement lots of stuff for editing it.
Create a Line class, implement most of it.
Implement quite a bit of Window_manager class.

To do:
Implement Buffer editing.
Implement all ncurses stuff.
Implement Buffer-specific options, use it to decide tab width.
implement window-buffer communication

...mostly.
Also made it compile, after much work.

To do:
update screen.
revisit file io.
take a look at multi-window and -buffer ogranization.
make Window_manager ctor explicit
add a Buffer changelog

Have Buffer-editing commands return a changelog of what was changed,
so that callers (Window) can use this information to update
the Buffer's representation (ncurses window)

TODO: investigate implications of this. Currently exposes internals
by returning an iterator to the entire buffer. Perhaps instead make
a copy. Perhaps make it a vector of strings of all the lines that
were changed.

Also ignored the executable file.
improve Changeset

Fix security holes by having each one keep a copy of new lines.
Complete implementation in buffer-editing commands by allowing combination of changesets.
fix Changeset::combine() comment for accuracy
clean up friendship

remove old commented-out lines.
make whole-class friendship heirarchy.
small cleanup

remove definitions for member functions that were deleted.
remove obsolete comment.
ease copying of Changesets

Instead of returning them on the stack,
return a unique_ptr to one because we fancy now.

Should have no memory leaks because smartness.
Got it to compile.

still have to update screen,
still have to recheck file io,
still have to revisit multi-buffer and -window stuff.
update ncurses window

make Windows update their active ncurses window upon a keypress.
This seems really inefficient for single keypresses, as it redraws
the entire line. Perhaps only redraw single characters if possible.
make file io a bit faster

Instead of copying the list<char> into a string and writing that,
just write individual chars.
refactor Window_manager

use smart pointers to store Windows and Buffers.
use list for Windows instead of vector.

also make it compile.
reduce buffer lookup by Windows

Perform lookup once per edit session instead of once per edit command.
create main

make main start a new session.
Consolidated Window constructors using default argument.
Added some TODOs.