(1) Record initial value of text, select, and checkbox elements and re/set a
dirty class on each when the value changes.
(2) Combine the individual flags into a global dirty flag.
(3) Add 'dirty' status to the document title.
(1) Add UI controls for `keyMap`, `tabSize`, `indentWithTabs`, and
`lineWrapping`; `indentUnit` tracks `tabSize`.
(2) Dispatch `change` events from `loadPrefs` to initialize CM options
from the controls' event listener.
(3) Move stock options from the `CM.fromTextArea` call into `CM.defaults`.
Add `CM.setOption` method, analogous to the instance method, which updates
`CM.defaults` and sets the option in all instances; add `CM.getOption`
which simply returns `CM.defaults[option]`.
(4) Move the new editor functions into `CM.commands` and replace the
functions with commands.
F3, Shift-F3, Ctrl-H - find/find previous/replace
Ctrl-G: go to line dialog
Alt-PgDn: next code section
Alt-PgUp: previous code section
...and many more.
Fixed everything that wasn't lined up properly and shrinked some paddings to make more space for the editor. It also cuts off earlier now.
Not sure what to do with the section borders, they seem alright to me.