diff options
author | Robin Haberkorn <robin.haberkorn@googlemail.com> | 2013-01-29 20:34:15 +0100 |
---|---|---|
committer | Robin Haberkorn <robin.haberkorn@googlemail.com> | 2013-01-29 20:34:15 +0100 |
commit | 775e91c41924663bc397516565fed2fcdcb52fc8 (patch) | |
tree | 11bdc9aa0ff4aa8247a36a504bfe8ff5decce620 | |
parent | 72c65f59ef95f070442b84cba48be60cbb8195cc (diff) | |
download | sciteco-775e91c41924663bc397516565fed2fcdcb52fc8.tar.gz |
fixed backward search-and-kill (e.g. -FK...$)
-rw-r--r-- | src/search.cpp | 28 |
1 files changed, 19 insertions, 9 deletions
diff --git a/src/search.cpp b/src/search.cpp index a2d7f70..a56ce17 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -524,7 +524,7 @@ StateSearchAll::done(const gchar *str) throw (Error) State * StateSearchKill::done(const gchar *str) throw (Error) { - gint anchor; + gint dot; BEGIN_EXEC(&States::start); @@ -532,19 +532,29 @@ StateSearchKill::done(const gchar *str) throw (Error) StateSearch::done(str); - if (IS_SUCCESS(search_reg->get_integer())) { - undo.push_msg(SCI_GOTOPOS, interface.ssm(SCI_GETCURRENTPOS)); - anchor = interface.ssm(SCI_GETANCHOR); + if (IS_FAILURE(search_reg->get_integer())) + return &States::start; + + dot = interface.ssm(SCI_GETCURRENTPOS); + + interface.ssm(SCI_BEGINUNDOACTION); + if (parameters.dot < dot) { + /* kill forwards */ + gint anchor = interface.ssm(SCI_GETANCHOR); + + undo.push_msg(SCI_GOTOPOS, dot); interface.ssm(SCI_GOTOPOS, anchor); - interface.ssm(SCI_BEGINUNDOACTION); interface.ssm(SCI_DELETERANGE, parameters.dot, anchor - parameters.dot); - interface.ssm(SCI_ENDUNDOACTION); - ring.dirtify(); - - undo.push_msg(SCI_UNDO); + } else { + /* kill backwards */ + interface.ssm(SCI_DELETERANGE, dot, parameters.dot - dot); } + interface.ssm(SCI_ENDUNDOACTION); + ring.dirtify(); + + undo.push_msg(SCI_UNDO); return &States::start; } |