Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
correction hook
- X-seq: zsh-workers 16597
- From: Clint Adams <clint@xxxxxxx>
- To: zsh-workers@xxxxxxxxxx
- Subject: correction hook
- Date: Mon, 11 Feb 2002 03:08:23 -0500
- Mailing-list: contact zsh-workers-help@xxxxxxxxxx; run by ezmlm
Someone complained to me that when he mistyped "make" as "mak", zsh
would spell-correct it to "mawk" instead of "make". I had asked him for
a proposed algorithm to solve this, but he had none.
The thought then occurred to me that a hook function might be a bit more
flexible. With the following patch, one can now do something like
correctword() {
[[ "$1" == mak ]] && CORRECT_GUESS=make
}
or potentially something more sophisticated that couldn't be
accomplished as effectively as by alias mak=make.
I'll refrain from committing the patch. Does anyone have a better way
of solving this problem?
Index: Src/utils.c
===================================================================
RCS file: /cvsroot/zsh/zsh/Src/utils.c,v
retrieving revision 1.39
diff -u -r1.39 utils.c
--- Src/utils.c 6 Jan 2002 01:07:23 -0000 1.39
+++ Src/utils.c 11 Feb 2002 07:54:28 -0000
@@ -1536,6 +1536,7 @@
char ic = '\0';
int ne;
int preflen = 0;
+ Eprog prog;
if ((histdone & HISTFLAG_NOEXEC) || **s == '-' || **s == '%')
return;
@@ -1632,6 +1633,27 @@
guess = *s;
*guess = *best = ztokens[ic - Pound];
}
+
+ if ((prog = getshfunc("correctword")) != &dummy_eprog) {
+
+ char *correct_guess;
+ int osc = sfcontext;
+ LinkList args = NULL;
+
+ args = newlinklist();
+ addlinknode(args, "correctword");
+ addlinknode(args, dupstring(guess));
+ addlinknode(args, dupstring(best));
+
+ sfcontext = SFC_HOOK;
+ doshfunc("correctword", prog, args, 0, 1);
+ sfcontext = osc;
+
+ correct_guess = ztrdup(getsparam("CORRECT_GUESS"));
+ if (correct_guess)
+ best = correct_guess;
+ }
+
if (ask) {
if (noquery(0)) {
x = 'n';
Messages sorted by:
Reverse Date,
Date,
Thread,
Author