diff options
| author | Maxime Coste <frrrwww@gmail.com> | 2015-01-23 19:12:15 +0000 |
|---|---|---|
| committer | Maxime Coste <frrrwww@gmail.com> | 2015-01-23 19:12:15 +0000 |
| commit | f4e96e7f2ef7f64e3208551433abf34944f0076f (patch) | |
| tree | 4dfef589a035d7a7224a5e84aae95c4ca2ef51a6 | |
| parent | 02adf234b4166aefe399d0eba27ab365b36ec5a5 (diff) | |
Fix bug when deleting end of buffer text using multiple selections
| -rw-r--r-- | src/selection.cc | 9 | ||||
| -rw-r--r-- | test/compose/eof-multi-delete/cmd | 1 | ||||
| -rw-r--r-- | test/compose/eof-multi-delete/in | 6 | ||||
| -rw-r--r-- | test/compose/eof-multi-delete/out | 2 |
4 files changed, 18 insertions, 0 deletions
diff --git a/src/selection.cc b/src/selection.cc index 8ad933a4..91527080 100644 --- a/src/selection.cc +++ b/src/selection.cc @@ -527,6 +527,15 @@ void SelectionList::erase() sel.anchor() = sel.cursor() = m_buffer->clamp(pos.coord()); changes_tracker.update(*m_buffer, m_timestamp); } + + ByteCoord back_coord = m_buffer->back_coord(); + for (auto& sel : m_selections) + { + if (sel.anchor() > back_coord) + sel.anchor() = back_coord; + if (sel.cursor() > back_coord) + sel.cursor() = back_coord; + } m_buffer->check_invariant(); } diff --git a/test/compose/eof-multi-delete/cmd b/test/compose/eof-multi-delete/cmd new file mode 100644 index 00000000..5c0212bc --- /dev/null +++ b/test/compose/eof-multi-delete/cmd @@ -0,0 +1 @@ +%<a-s><a-K>keep<ret>d diff --git a/test/compose/eof-multi-delete/in b/test/compose/eof-multi-delete/in new file mode 100644 index 00000000..7270a5c6 --- /dev/null +++ b/test/compose/eof-multi-delete/in @@ -0,0 +1,6 @@ +delete +keep +delete +keep +delete +delete diff --git a/test/compose/eof-multi-delete/out b/test/compose/eof-multi-delete/out new file mode 100644 index 00000000..16acb76c --- /dev/null +++ b/test/compose/eof-multi-delete/out @@ -0,0 +1,2 @@ +keep +keep |
