aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/search.cpp
diff options
context:
space:
mode:
authorRobin Haberkorn <robin.haberkorn@googlemail.com>2013-01-20 15:59:03 +0100
committerRobin Haberkorn <robin.haberkorn@googlemail.com>2013-01-20 16:03:52 +0100
commit70c6c430a2cd990cad899024c3bab0c8208328b1 (patch)
tree26a71fecaf6a29d0a67e562e11639f95da24b0ed /src/search.cpp
parent1e55387482bd501770aafc4230cbcad870d3abf3 (diff)
downloadsciteco-70c6c430a2cd990cad899024c3bab0c8208328b1.tar.gz
fixed search-replace commands if search fails (do not insert then)
* updated TODO
Diffstat (limited to 'src/search.cpp')
-rw-r--r--src/search.cpp43
1 files changed, 41 insertions, 2 deletions
diff --git a/src/search.cpp b/src/search.cpp
index 060a765..30ae5e7 100644
--- a/src/search.cpp
+++ b/src/search.cpp
@@ -37,10 +37,14 @@ namespace States {
StateSearchAll searchall;
StateSearchKill searchkill;
StateSearchDelete searchdelete;
+
StateReplace replace;
StateReplace_insert replace_insert;
+ StateReplace_ignore replace_ignore;
+
StateReplaceDefault replacedefault;
StateReplaceDefault_insert replacedefault_insert;
+ StateReplaceDefault_ignore replacedefault_ignore;
}
/*
@@ -561,15 +565,35 @@ StateSearchDelete::done(const gchar *str) throw (Error)
State *
StateReplace::done(const gchar *str) throw (Error)
{
+ BEGIN_EXEC(&States::replace_ignore);
+
+ QRegister *search_reg = QRegisters::globals["_"];
+
StateSearchDelete::done(str);
- return &States::replace_insert;
+
+ return IS_SUCCESS(search_reg->get_integer())
+ ? (State *)&States::replace_insert
+ : (State *)&States::replace_ignore;
+}
+
+State *
+StateReplace_ignore::done(const gchar *str __attribute__((unused))) throw (Error)
+{
+ return &States::start;
}
State *
StateReplaceDefault::done(const gchar *str) throw (Error)
{
+ BEGIN_EXEC(&States::replacedefault_ignore);
+
+ QRegister *search_reg = QRegisters::globals["_"];
+
StateSearchDelete::done(str);
- return &States::replacedefault_insert;
+
+ return IS_SUCCESS(search_reg->get_integer())
+ ? (State *)&States::replacedefault_insert
+ : (State *)&States::replacedefault_ignore;
}
State *
@@ -590,3 +614,18 @@ StateReplaceDefault_insert::done(const gchar *str) throw (Error)
return &States::start;
}
+
+State *
+StateReplaceDefault_ignore::done(const gchar *str) throw (Error)
+{
+ BEGIN_EXEC(&States::start);
+
+ if (*str) {
+ QRegister *replace_reg = QRegisters::globals["-"];
+
+ replace_reg->undo_set_string();
+ replace_reg->set_string(str);
+ }
+
+ return &States::start;
+}