aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/search.cpp43
-rw-r--r--src/search.h18
2 files changed, 57 insertions, 4 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;
+}
diff --git a/src/search.h b/src/search.h
index 096e419..4506d7c 100644
--- a/src/search.h
+++ b/src/search.h
@@ -91,6 +91,11 @@ private:
void initial(void) throw (Error) {}
};
+class StateReplace_ignore : public StateExpectString {
+private:
+ State *done(const gchar *str) throw (Error);
+};
+
class StateReplaceDefault : public StateSearchDelete {
public:
StateReplaceDefault() : StateSearchDelete(false) {}
@@ -105,15 +110,24 @@ private:
State *done(const gchar *str) throw (Error);
};
+class StateReplaceDefault_ignore : public StateExpectString {
+private:
+ State *done(const gchar *str) throw (Error);
+};
+
namespace States {
extern StateSearch search;
extern StateSearchAll searchall;
extern StateSearchKill searchkill;
- extern StateSearchDelete searchdelete;
+ extern StateSearchDelete searchdelete;
+
extern StateReplace replace;
extern StateReplace_insert replace_insert;
+ extern StateReplace_ignore replace_ignore;
+
extern StateReplaceDefault replacedefault;
- extern StateReplaceDefault_insert replacedefault_insert;
+ extern StateReplaceDefault_insert replacedefault_insert;
+ extern StateReplaceDefault_ignore replacedefault_ignore;
}
#endif