Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Re: Auto-correct and newly-added commands



Bart Schaefer wrote:
On Nov 14,  4:31pm, Daniel Serodio (lists) wrote:
}
} It it possible to have zsh automatically run "rehash" after I reply no
} to an auto-correct prompt, so it "learns" this new command?

Hrm.  The direct answer is "no" but:

That would certainly seem logical.  Also it seems strange to load up
the command tables and check them for proper spellings when the word
that is being checked is not in the command position to begin with.
Hmm, maybe my explanation wasn't clear (or I don't understand your reply), but I only have problem with real commands (in the beginning of the line), not with their arguments. Or did you mention "words not in the command position" from reviewing the code and not my explanation?
What this patch does is reset the incremental path search in the event
the correction is rejected.  That allows whatever hashing options the
user has specified to kick in at the time the path is searched during
command execution, rather than having to test them all here.
This sounds like what I need, but when I tried to apply this patch, it failed (both on zsh 4.3.12 and on a fresh git clone).

Where should I apply this patch?

Thanks,
Daniel Serodio
Index: Src/utils.c
--- ../zsh-forge/current/Src/utils.c	2011-09-25 15:52:55.000000000 -0700
+++ Src/utils.c	2011-11-14 19:58:34.000000000 -0800
@@ -2498,16 +2498,18 @@
  	return;
      if (!(*s)[0] || !(*s)[1])
  	return;
-    if (shfunctab->getnode(shfunctab, *s) ||
-	builtintab->getnode(builtintab, *s) ||
-	cmdnamtab->getnode(cmdnamtab, *s) ||
-	aliastab->getnode(aliastab, *s)  ||
-	reswdtab->getnode(reswdtab, *s))
-	return;
-    else if (isset(HASHLISTALL)) {
-	cmdnamtab->filltable(cmdnamtab);
-	if (cmdnamtab->getnode(cmdnamtab, *s))
+    if (cmd) {
+	if (shfunctab->getnode(shfunctab, *s) ||
+	    builtintab->getnode(builtintab, *s) ||
+	    cmdnamtab->getnode(cmdnamtab, *s) ||
+	    aliastab->getnode(aliastab, *s)  ||
+	    reswdtab->getnode(reswdtab, *s))
  	    return;
+	else if (isset(HASHLISTALL)) {
+	    cmdnamtab->filltable(cmdnamtab);
+	    if (cmdnamtab->getnode(cmdnamtab, *s))
+		return;
+	}
      }
      t = *s;
      if (*t == Tilde || *t == Equals || *t == String)
@@ -2621,6 +2623,8 @@
  		fflush(shout);
  		zbeep();
  		x = getquery("nyae \t", 0);
+		if (cmd&&  x == 'n')
+		    pathchecked = path;
  	    } else
  		x = 'n';
  	} else




Messages sorted by: Reverse Date, Date, Thread, Author