* Update editor.rs
* Makes sure indent_required is calculated according to the selection type
removed the redundant check for required_indent == 0,
introduced a slightly different path for when no selection = None, and calculated the required tab width and indent position accordingly.
* Undo typo
undid an accidental move of a redraw call outside of a loop
* Corrected indenting with rustfmt
formatted the code with rustfmt to pass the failing CI checks
* Set an index for the last saved change
I added an index that represents the last saved change.
Editors are considered to be unsaved or modified if the current change
is different from the save index. In other words, if the last saved
change is `5`, undoing or redoing past that change should indicate that
the editor has been modified.
This is needed to fix two bugs in COSMIC Edit:
* https://github.com/pop-os/cosmic-edit/issues/116
* https://github.com/pop-os/cosmic-edit/issues/128
* Unit test that confirms pivot logic works
I'll most likely simplify the API as end users don't have a way to
cleanly use `Pivot::Exact` without access to the internal command
buffer.
* Simplify save point API
* Implement more save point unit tests
A unit test for an edge case currently fails but normal usage works.
* Fix edge case for empty command index and pivot
* More save point unit tests for common use cases
- Scroll is identified by line index and layout index, instead of just
layout index
- Shaping has the option to prune, where caches outside of the scroll
view are cleared
- Syntax editor no longer requires layout of all lines, only of lines
inside scroll
- BufferLine has a metadata field that can be used by other abstractions
to know when text was changed