Simon Marlow wrote:
Judah Jacobson wrote:

The attached patch fixes bug #998 (tab completion of filenames in
subdirectories doesn't work in ghci).

  * Use command-dependent word break characters for tab completion in
ghci.  Fixes bug #998.

    M ./compiler/ghci/GhciMonad.hs -1 +1
    M ./compiler/ghci/InteractiveUI.hs -59 +83


I had originally looked at this problem last year and thought that it
would require additional readline functionality.  However, this patch
fixes the problem without using any more readline APIs than before.
(This is partly motivated by the possibility of using libedit on OS
X.)

I've tested this patch against HEAD, but it should work on the stable
branch as well.

Excellent, thanks.  I'll review and apply.

I've found one small problem: it doesn't seem to cope with absolute paths (those beginning with /) very well.

e.g. try

Prelude> :e /tmp<TAB>

for me it just adds a space after /tmp, rather than a slash. That is, unless the current directory has a "tmp" subdirectory... very strange.

After further investigation... I think this is something readline itself is doing. The completion code in GHCi appears to be doing the right thing, but readline appears to have some special code to handle filenames, e.g.

Prelude> :cd /
Prelude> et<TAB>

gives me

Prelude> etc/

even though GHCi isn't asking for filename completion here. In fact readline has to do something special, because when completing filenames it has to know whether the current word is a directory, to add the slash, and it's probably using the wrong word-break characters. So perhaps the only way to get this right is to really change readline's idea of the word-break characters?

Cheers,
        Simon

_______________________________________________
Cvs-ghc mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/cvs-ghc

Reply via email to