aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--doc/sciteco.7.template4
-rw-r--r--src/cmdline.cpp20
-rw-r--r--src/cmdline.h8
3 files changed, 25 insertions, 7 deletions
diff --git a/doc/sciteco.7.template b/doc/sciteco.7.template
index 06db3b2..4fccd33 100644
--- a/doc/sciteco.7.template
+++ b/doc/sciteco.7.template
@@ -346,7 +346,7 @@ T}
T{
Rub out word/command
T};23;^W;T{
-File name arguments
+Non-empty file name arguments
.br
(modifier \fIdisabled\fP)
T};T{
@@ -355,7 +355,7 @@ last filename component up to but not inluding
the preceding directory separator.
T}
\^;\^;\^;T{
-String arguments
+Non-empty string arguments
.br
(modifier \fIdisabled\fP)
T};T{
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)