Mail Archives: cygwin/2010/11/02/16:51:26
X-Recipient: | archive-cygwin AT delorie DOT com
|
X-SWARE-Spam-Status: | No, hits=-1.4 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,RCVD_IN_DNSWL_NONE,T_TO_NO_BRKTS_FREEMAIL
|
X-Spam-Check-By: | sourceware.org
|
Message-Id: | <20101102205019.050395100@gmail.com>
|
User-Agent: | quilt/0.48-1
|
Date: | Tue, 02 Nov 2010 13:48:59 -0700
|
From: | dan DOT colascione AT gmail DOT com
|
To: | cygwin AT cygwin DOT com
|
Subject: | [patch 4/8] Add option completion_strip_exe for short names
|
References: | <20101102204855 DOT 153395100 AT gmail DOT com>
|
X-IsSubscribed: | yes
|
Mailing-List: | contact cygwin-help AT cygwin DOT com; run by ezmlm
|
List-Id: | <cygwin.cygwin.com>
|
List-Subscribe: | <mailto:cygwin-subscribe AT cygwin DOT com>
|
List-Archive: | <http://sourceware.org/ml/cygwin/>
|
List-Post: | <mailto:cygwin AT cygwin DOT com>
|
List-Help: | <mailto:cygwin-help AT cygwin DOT com>, <http://sourceware.org/ml/#faqs>
|
Sender: | cygwin-owner AT cygwin DOT com
|
Mail-Followup-To: | cygwin AT cygwin DOT com
|
Delivered-To: | mailing list cygwin AT cygwin DOT com
|
Index: bash-3.2/bashline.c
===================================================================
--- bash-3.2.orig/bashline.c
+++ bash-3.2/bashline.c
@@ -220,6 +220,13 @@ int no_empty_command_completion;
are the only possible matches, even if FIGNORE says to. */
int force_fignore = 1;
+#if __CYGWIN__
+/* When completion_strip_exe is true and completion generates a
+ "foo.exe" file, check whether a short "foo" pseudo-hardlink to this
+ file exists, and if so, use it instead. */
+int completion_strip_exe = 1;
+#endif /* __CYGWIN__ */
+
static char *bash_completer_word_break_characters = " \t\n\"'@><=;|&(:";
static char *bash_nohostname_word_break_characters = " \t\n\"'><=;|&(:";
/* )) */
@@ -1540,6 +1547,30 @@ command_word_completion_function (hint_t
if (match && (searching_path ? executable_file (val) : executable_or_directory (val)))
#endif
{
+
+#if __CYGWIN__
+ if (completion_strip_exe)
+ {
+ /* val is the full name of the file we're examining;
+ temp is its basename */
+ int val_len = strlen(val);
+
+ if (val_len > 4 && strcasecmp(&val[val_len - 4], ".exe") == 0)
+ {
+ char* candidate = xmalloc(val_len - 4 + 1);
+ memcpy(candidate, val, val_len - 4);
+ candidate[val_len - 4] = '\0';
+
+ if (same_file (val, candidate, NULL, NULL))
+ {
+ temp[strlen(temp) - 4] = '\0';
+ }
+
+ free (candidate);
+ }
+ }
+#endif /* __CYGWIN__ */
+
free (val);
val = ""; /* So it won't be NULL. */
return (temp);
Index: bash-3.2/builtins/set.def
===================================================================
--- bash-3.2.orig/builtins/set.def
+++ bash-3.2/builtins/set.def
@@ -59,6 +59,7 @@ extern int no_line_editing;
#endif /* READLINE */
#if __CYGWIN__
extern int igncr;
+extern int completion_strip_exe;
static int set_minus_o_option_maybe (int, const char *, int);
# define INTERACTIVE_ONLY ,1
#else /* ! __CYGWIN__ */
@@ -96,6 +97,9 @@ $SHORT_DOC set [--abefhkmnptuvxBCHP] [-o
#endif
#if __CYGWIN__
igncr on cygwin, ignore \r in line endings
+ completion_strip_exe
+ on cygwin, prefer short executable names
+ when available
#endif
ignoreeof the shell will not exit upon reading EOF
interactive-comments
@@ -212,6 +216,7 @@ struct {
#endif
#if __CYGWIN__
{ "igncr", '\0', &igncr, NULL, (setopt_get_func_t *)NULL },
+ { "completion_strip_exe", '\0', &completion_strip_exe, (setopt_get_func_t *)NULL },
#endif
{ "ignoreeof", '\0', &ignoreeof, set_ignoreeof, (setopt_get_func_t *)NULL },
{ "interactive-comments", '\0', &interactive_comments, (setopt_set_func_t *)NULL, (setopt_get_func_t *)NULL },
Index: bash-3.2/builtins/shopt.def
===================================================================
--- bash-3.2.orig/builtins/shopt.def
+++ bash-3.2/builtins/shopt.def
@@ -71,6 +71,7 @@ extern int gnu_error_format;
#if __CYGWIN__
extern int igncr;
+extern int completion_strip_exe;
#endif
#if defined (EXTENDED_GLOB)
@@ -155,6 +156,7 @@ static struct {
{ "huponexit", &hup_on_exit, (shopt_set_func_t *)NULL },
#if __CYGWIN__
{ "igncr", &igncr, (shopt_set_func_t *)NULL },
+ { "completion_strip_exe", &completion_strip_exe, (shopt_set_func_t *)NULL },
#endif
{ "interactive_comments", &interactive_comments, set_shellopts_after_change },
#if defined (HISTORY)
--
Problem reports: http://cygwin.com/problems.html
FAQ: http://cygwin.com/faq/
Documentation: http://cygwin.com/docs.html
Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple
- Raw text -