Author: jilles
Date: Tue Jun 15 22:23:21 2010
New Revision: 209224
URL: http://svn.freebsd.org/changeset/base/209224

Log:
  libedit: Reduce surprising behaviour with filename completion some more:
  * Quote '*', '?' and '['. While it may be more useful to expand them to
    matching pathnames, this at least matches with the completion we do.
  * '@' is a regular character for filenames. Some other shells do
    @<hostname> completion but we do not.
  * Prefix names starting with '-' and '+' with './' so they are not seen as
    options.

Modified:
  head/lib/libedit/filecomplete.c

Modified: head/lib/libedit/filecomplete.c
==============================================================================
--- head/lib/libedit/filecomplete.c     Tue Jun 15 22:16:02 2010        
(r209223)
+++ head/lib/libedit/filecomplete.c     Tue Jun 15 22:23:21 2010        
(r209224)
@@ -50,10 +50,10 @@ __FBSDID("$FreeBSD$");
 #include "histedit.h"
 #include "filecomplete.h"
 
-static char break_chars[] = { ' ', '\t', '\n', '"', '\\', '\'', '`', '@',
-    '$', '>', '<', '=', ';', '|', '&', '{', '(', '\0' };
+static char break_chars[] = { ' ', '\t', '\n', '"', '\\', '\'', '`',
+    '>', '<', '=', ';', '|', '&', '{', '(', '\0' };
 /* Tilde is deliberately omitted here, we treat it specially. */
-static char extra_quote_chars[] = { ')', '}', '\0' };
+static char extra_quote_chars[] = { ')', '}', '*', '?', '[', '$', '\0' };
 
 
 /********************************/
@@ -595,6 +595,8 @@ sh_quote(const char *str)
        int extra_len = 0;
        char *quoted_str, *dst;
 
+       if (*str == '-' || *str == '+')
+               extra_len += 2;
        for (src = str; *src != '\0'; src++)
                if (strchr(break_chars, *src) ||
                    strchr(extra_quote_chars, *src))
@@ -606,6 +608,8 @@ sh_quote(const char *str)
                return NULL;
 
        dst = quoted_str;
+       if (*str == '-' || *str == '+')
+               *dst++ = '.', *dst++ = '/';
        for (src = str; *src != '\0'; src++) {
                if (strchr(break_chars, *src) ||
                    strchr(extra_quote_chars, *src))
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to