diff options
author | Robin Haberkorn <robin.haberkorn@googlemail.com> | 2013-01-20 15:59:03 +0100 |
---|---|---|
committer | Robin Haberkorn <robin.haberkorn@googlemail.com> | 2013-01-20 16:03:52 +0100 |
commit | 70c6c430a2cd990cad899024c3bab0c8208328b1 (patch) | |
tree | 26a71fecaf6a29d0a67e562e11639f95da24b0ed /src/search.cpp | |
parent | 1e55387482bd501770aafc4230cbcad870d3abf3 (diff) | |
download | sciteco-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.cpp | 43 |
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; +} |