Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 15 Jun 2010 22:23:21 +0000 (UTC)
From:      Jilles Tjoelker <jilles@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r209224 - head/lib/libedit
Message-ID:  <201006152223.o5FMNLTf011075@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
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))



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201006152223.o5FMNLTf011075>