diff options
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; +} |