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 = '/';
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
}
...
$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
+
=back
=head1 SEE ALSO