From 6c62ccc436d972a872616c187d460ed61c8bc0d2 Mon Sep 17 00:00:00 2001 From: Robin Haberkorn Date: Fri, 29 May 2015 17:30:47 +0200 Subject: 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. --- src/cmdline.cpp | 20 +++++++++++++++----- src/cmdline.h | 8 ++++++++ 2 files changed, 23 insertions(+), 5 deletions(-) (limited to 'src') 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) -- cgit v1.2.3