fish: Don't eat words when completing case-insensitive paths (RHBZ#582993).

This commit is contained in:
Richard Jones
2010-05-25 13:54:11 +01:00
parent 53c3b9d2b0
commit 21bd2db7cf
3 changed files with 37 additions and 1 deletions

View File

@@ -230,7 +230,20 @@ complete_dest_paths_generator (const char *text, int state)
word = &words[index];
index++;
if (STRCASEEQLEN (word->name, text, len)) {
/* Whether we should match case insensitively here or not is
* determined by the value of the completion-ignore-case readline
* variable. Default to case insensitive. (See: RHBZ#582993).
*/
char *cic_var = rl_variable_value ("completion-ignore-case");
int cic = 1;
if (cic_var && STREQ (cic_var, "off"))
cic = 0;
int matches =
cic ? STRCASEEQLEN (word->name, text, len)
: STREQLEN (word->name, text, len);
if (matches) {
if (word->is_dir)
rl_completion_append_character = '/';

View File

@@ -1417,6 +1417,13 @@ initialize_readline (void)
rl_readline_name = "guestfish";
rl_attempted_completion_function = do_completion;
/* Note that .inputrc (or /etc/inputrc) is not read until the first
* call the readline(), which happens later. Therefore, these
* provide default values which can be overridden by the user if
* they wish.
*/
(void) rl_variable_bind ("completion-ignore-case", "on");
#endif
}

View File

@@ -904,6 +904,22 @@ To write rules which only apply to guestfish, use:
...
$endif
Variables that you can set in inputrc that change the behaviour
of guestfish in useful ways include:
=over 4
=item completion-ignore-case (default: on)
By default, guestfish will ignore case when tab-completing
paths on the disk. Use:
set completion-ignore-case off
to make guestfish case sensitive.
=back
=item test1.img
=item test2.img (etc)