aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorRobin Haberkorn <robin.haberkorn@googlemail.com>2015-05-29 17:30:47 +0200
committerRobin Haberkorn <robin.haberkorn@googlemail.com>2015-05-29 17:30:47 +0200
commit6c62ccc436d972a872616c187d460ed61c8bc0d2 (patch)
treee7a5aca9263790283a90c975baec13daf96a7e39 /src
parentb65eee089f048e04217009e5dbe70aef3f463230 (diff)
downloadsciteco-6c62ccc436d972a872616c187d460ed61c8bc0d2.tar.gz
Modified ^W in string (and file name) arguments: ensure that we always rub out beyond empty arguments
* it was annoying not to be able to rub out anything with ^W if the current string argument was empty. * Now, the special file name and string argument handling for ^W is effective only if the current argument is non-empty, else we fall back to the rub-out-command behaviour. * So now, if you press ^W in a string argument, it is rubbed out until empty and on the next ^W press, the entire command will be rubbed out.
Diffstat (limited to 'src')
-rw-r--r--src/cmdline.cpp20
-rw-r--r--src/cmdline.h8
2 files changed, 23 insertions, 5 deletions
diff --git a/src/cmdline.cpp b/src/cmdline.cpp
index a398b27..b85850a 100644
--- a/src/cmdline.cpp
+++ b/src/cmdline.cpp
@@ -301,7 +301,7 @@ Cmdline::process_edit_cmd(gchar key)
if (States::is_file() && rubout_len &&
G_IS_DIR_SEPARATOR(str[len]))
insert();
- } else {
+ } else if (strings[0] && *strings[0]) {
/* rubout directory separator */
if (strings[0] && *strings[0] &&
G_IS_DIR_SEPARATOR(str[len-1]))
@@ -311,6 +311,12 @@ Cmdline::process_edit_cmd(gchar key)
while (strings[0] && *strings[0] &&
!G_IS_DIR_SEPARATOR(str[len-1]))
rubout();
+ } else {
+ /*
+ * Rub out entire command instead of
+ * rubbing out nothing.
+ */
+ rubout_command();
}
} else if (States::is_string()) {
gchar wchars[interface.ssm(SCI_GETWORDCHARS)];
@@ -326,7 +332,7 @@ Cmdline::process_edit_cmd(gchar key)
while (States::is_string() && rubout_len &&
!strchr(wchars, str[len]))
insert();
- } else {
+ } else if (strings[0] && *strings[0]) {
/* rubout non-word chars */
while (strings[0] && *strings[0] &&
!strchr(wchars, str[len-1]))
@@ -336,6 +342,12 @@ Cmdline::process_edit_cmd(gchar key)
while (strings[0] && *strings[0] &&
strchr(wchars, str[len-1]))
rubout();
+ } else {
+ /*
+ * Rub out entire command instead of
+ * rubbing out nothing.
+ */
+ rubout_command();
}
} else if (modifier_enabled) {
/* reinsert command */
@@ -344,9 +356,7 @@ Cmdline::process_edit_cmd(gchar key)
while (States::current != &States::start && rubout_len);
} else {
/* rubout command */
- do
- rubout();
- while (States::current != &States::start);
+ rubout_command();
}
break;
diff --git a/src/cmdline.h b/src/cmdline.h
index 11384c1..40a794a 100644
--- a/src/cmdline.h
+++ b/src/cmdline.h
@@ -79,6 +79,14 @@ private:
}
}
+ inline void
+ rubout_command(void)
+ {
+ do
+ rubout();
+ while (States::current != &States::start);
+ }
+
void insert(const gchar *src = NULL);
inline void
insert(gchar key)