fish: Don't eat words when completing case-insensitive paths (RHBZ#582993).
authorRichard Jones <rjones@redhat.com>
Tue, 25 May 2010 12:54:11 +0000 (13:54 +0100)
committerRichard Jones <rjones@redhat.com>
Tue, 25 May 2010 12:59:44 +0000 (13:59 +0100)
fish/destpaths.c
fish/fish.c
fish/guestfish.pod

index 403fe7f..5ed93ec 100644 (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 = '/';
 
index cbbbf97..557a6ac 100644 (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
 }
 
index 803f35a..5737c46 100644 (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)