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

Re: tcsh's autocorrect functionality wanted



"Bart Schaefer" <schaefer@xxxxxxxxxxxxxxxxxxxxxxx> on Thu, 14 Nov 1996  0:23 writes:
> On Nov 11,  9:24pm, Matthew Braun wrote:
> }      autocorrect (+)
> }              If set, the spell-word  editor  command  is  invoked
> }              automatically before each completion attempt.
> 
> That would be pretty trivial to add, I think, except for the bugs in
> spell-word described below.

Trivial for someone who already knows the code.  Any maintainers out
there listening?  Please add this.  Thanks!

> The way you do that sort of thing is like this:
> 
> 	# bindkey '\es' spell-word	# already the default
> 	bindkey '\C-x\C-i' expand-or-complete-prefix
> 	bindkey -s '\t' '\es\C-x\C-i'

That's cool, thanks!

> However, spell-word isn't clever.  It doesn't deal properly with a path
> beginning with a tilde (~) -- I consider this to be a bug, because this
> IS handled by `setopt correctall` -- and it does not know how to fix up
> the path prefix when the suffix is "too far" from the correct spelling.
> 
> Finally, spell-word ignores `setopt completeinword` and always behaves
> as if `setopt awaystoend`, so the cursor ends up in what may be a very
> wrong place after spelling is completed.

Zsh masters, can these things related to spell-word be put on the TODO
list?  If there is such a list that is, as I don't see one in the
distribution tree.

It would be nice if the autocorrect that uses the spell-word stuff would
cover spell checking each part of the path for filenames, so it would
cover this example (assumes there are no other files that start with
pas* in the /etc directory):

zsh$ cat /ect/pas<tab>
expands to:
zsh$ cat /etc/passwd

> So for now you can try the binding above; or you can look at "multicomp"
> in the Functions/ directory of the zsh distribution, write yourself a
> little program that does spell checking, and replace `reply=(${~reply})'
> in that function with `reply=( $(spellcheck ${~reply}) )'.  For a basis
> of the spell-checking program, you can cannibalize Src/utils.c for the
> functions spname(), mindist(), and spdist().

This seems like it would be slow, and given the number of times I hit
"tab" any slowness would likely be very annoying!  ;-)

Bart, mind giving me some examples of how completeinword and awaystoend
work?  I tried setting these and hitting tab in a few instances, but it
didn't seem to change the behavior.  I can see where it would be nice if
COMPLETE_IN_WORD worked for spell-word, but I don't see it actually
affecting anything right now.

Thanks,

Matthew.



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