delorie.com/archives/browse.cgi   search  
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 -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019