Mc command completion and empty entries in PATH

Andrew V. Samoilov sav at bcs.zp.ua
Mon Jun 25 14:55:39 UTC 2001


Hi!

As far as I know bash and csh use current_dir (".") if PATH is empty
or there are an empty entries. But mc now treats this one(s) as end 
condition of PATH processing in command_completion_function.

This patch changes this mc's behavior.

BTW, I want to know if pattern completion is a common behavior in
case statement for shells or this is true for Korn and Bourne shells
only ? If it's common some entries in mc's menu could be rewritten
without egrep.

With best wishes,
Andrew.

--- ChangeLog.orig	Mon Jun 25 16:43:55 2001
+++ ChangeLog	Mon Jun 25 17:49:38 2001
@@ -9,6 +9,10 @@
 	bash_builtins const, use concat_dir_and_file.
 	(fetch_hosts): Fix typo, style fixes.
 
+	* (command_completion_function): Don't end PATH processing if
+	there is an empty entry and use this as current directory.
+	Bash and csh work so.
+
 2001-06-23  Pavel Roskin  <proski at gnu.org>
 
 	* mem.h: Undefine bcopy(), bcmp() and bzero() before redefining
--- complete.c.orig	Mon Jun 25 17:42:53 2001
+++ complete.c	Mon Jun 25 17:44:20 2001
@@ -442,6 +442,7 @@
 static char *
 command_completion_function (char *text, int state)
 {
+    static char *path_end;
     static int isabsolute;
     static int phase;
     static int text_len;
@@ -471,17 +472,12 @@
 	    words = bash_reserved;
 	    phase = 0;
 	    text_len = strlen (text);
-	    p = getenv ("PATH");
-	    if (!p)
-	    	path = NULL;
-	    else {
-	    	path = g_malloc (strlen (p) + 2);
-	    	strcpy (path, p);
-	    	path [strlen (p) + 1] = 0;
-	    	p = strchr (path, PATH_ENV_SEP);
-	    	while (p){
-	    	    *p = 0;
-	    	    p = strchr (p + 1, PATH_ENV_SEP);
+	    path = getenv ("PATH");
+	    if (path){
+		p = path = g_strdup (path);
+		path_end = strchr (p, 0);
+		while ((p = strchr (p, PATH_ENV_SEP))){
+		    *p++ = 0;
 	    	}
 	    }
 	}
@@ -520,9 +516,9 @@
 	        if (!cur_word){
 		    char *expanded;
 		    
-	            if (!*cur_path)
+		    if (cur_path >= path_end)
 	            	break;
-		    expanded = tilde_expand (cur_path);
+		    expanded = tilde_expand (*cur_path ? cur_path : ".");
 		    if (!expanded){
 			g_free (path);
 			path = NULL;




More information about the mc-devel mailing list