aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/search.cpp
diff options
context:
space:
mode:
authorRobin Haberkorn <robin.haberkorn@googlemail.com>2013-01-27 23:12:02 +0100
committerRobin Haberkorn <robin.haberkorn@googlemail.com>2013-01-27 23:12:02 +0100
commit72c65f59ef95f070442b84cba48be60cbb8195cc (patch)
tree84e17879f63f69daff74bc0d5e67b02681d44369 /src/search.cpp
parent5051f4aefbdf0f11097656c3c028b4ef1f2448a3 (diff)
downloadsciteco-72c65f59ef95f070442b84cba48be60cbb8195cc.tar.gz
prevent creating Scintilla UNDO token when FD or FK fails
rubout would undo something different and screw up editor state
Diffstat (limited to 'src/search.cpp')
-rw-r--r--src/search.cpp36
1 files changed, 22 insertions, 14 deletions
diff --git a/src/search.cpp b/src/search.cpp
index 30ae5e7..a2d7f70 100644
--- a/src/search.cpp
+++ b/src/search.cpp
@@ -528,19 +528,23 @@ StateSearchKill::done(const gchar *str) throw (Error)
BEGIN_EXEC(&States::start);
+ QRegister *search_reg = QRegisters::globals["_"];
+
StateSearch::done(str);
- undo.push_msg(SCI_GOTOPOS, interface.ssm(SCI_GETCURRENTPOS));
- anchor = interface.ssm(SCI_GETANCHOR);
- interface.ssm(SCI_GOTOPOS, anchor);
+ if (IS_SUCCESS(search_reg->get_integer())) {
+ undo.push_msg(SCI_GOTOPOS, interface.ssm(SCI_GETCURRENTPOS));
+ anchor = interface.ssm(SCI_GETANCHOR);
+ interface.ssm(SCI_GOTOPOS, anchor);
- interface.ssm(SCI_BEGINUNDOACTION);
- interface.ssm(SCI_DELETERANGE,
- parameters.dot, anchor - parameters.dot);
- interface.ssm(SCI_ENDUNDOACTION);
- ring.dirtify();
+ interface.ssm(SCI_BEGINUNDOACTION);
+ interface.ssm(SCI_DELETERANGE,
+ parameters.dot, anchor - parameters.dot);
+ interface.ssm(SCI_ENDUNDOACTION);
+ ring.dirtify();
- undo.push_msg(SCI_UNDO);
+ undo.push_msg(SCI_UNDO);
+ }
return &States::start;
}
@@ -550,14 +554,18 @@ StateSearchDelete::done(const gchar *str) throw (Error)
{
BEGIN_EXEC(&States::start);
+ QRegister *search_reg = QRegisters::globals["_"];
+
StateSearch::done(str);
- interface.ssm(SCI_BEGINUNDOACTION);
- interface.ssm(SCI_REPLACESEL, 0, (sptr_t)"");
- interface.ssm(SCI_ENDUNDOACTION);
- ring.dirtify();
+ if (IS_SUCCESS(search_reg->get_integer())) {
+ interface.ssm(SCI_BEGINUNDOACTION);
+ interface.ssm(SCI_REPLACESEL, 0, (sptr_t)"");
+ interface.ssm(SCI_ENDUNDOACTION);
+ ring.dirtify();
- undo.push_msg(SCI_UNDO);
+ undo.push_msg(SCI_UNDO);
+ }
return &States::start;
}