Assumptions in the code / Design decisions:
- All ASCII for now, no real UTF8
- The cursor is only ever on a valid buffer location. This can be the hidden CR of the line, or the 0 at the end.
- Even if the loaded buffer doesn't 0 terminate, it is terminated and then removed at save time if necessary.
- Internally every thing is a '\n'; '\r\n' is converted and converted back if necessary. Mixed files aren't supported, you'll just get a '\n' file
- The window converts the entire buffer to a list of visible character lines. This is used to handle wrapping, and let the user jump around in a wrapped buffer file.
- Cursor is on the virtual line in the wrapped buffer, and can be off screen; but ScrollTo will find it