Hi REPLeffect,

This is interesting stuff, please let the ml know what you get to.

Now, this is already under the hood in Gambit so one way of getting this would be just to dig it out.

Also, I would guess that the way it's implemented there is CPU-inexpensive, so it'd be a good place to learn from. Just hunt around in _repl.scm or alike for any handling of the tab character?

Mikael

2012/10/7 REPLeffect <repleffect@gmail.com>
On Sat, Oct 6, 2012 at 10:21 PM, REPLeffect <repleffect@gmail.com> wrote:
> What would it take to expose a procedure in the interpreter for
> completing symbols in the symbol table.  What I mean is, I'd like a
> scheme procedure I could call with a string representing either a full
> or a partial symbol, and the procedure would give me back a list of
> the possible completions for currently defined symbols.
>
> Essentially I want a procedure that does what the tab completion in
> the interpreter's REPL does.
>
> I'm using the partially-implemented swank backend that James Long was
> working on a while back, and I found these procedures that Marc posted
> to the list back in March of '09:
>
>  (define (symbol-table->list st)
>
>     (define (symbol-chain s syms)
>       (let loop ((s s) (syms syms))
>         (if (symbol? s)
>             (loop (##vector-ref s 2) (cons s syms))
>             syms)))
>
>     (let loop ((lst (vector->list st)) (syms '()))
>       (if (pair? lst)
>           (loop (cdr lst) (symbol-chain (car lst) syms))
>           (reverse syms))))
>
>  (define (interned-symbols)
>     (symbol-table->list (##symbol-table)))
>
>  (pp (length (interned-symbols)))
>
> (that was from this post:
> https://mercure.iro.umontreal.ca/pipermail/gambit-list/2009-March/003308.html
> )
>
> >From that I cobbled together a very inefficient hash-table-based tab
> completion (especially inefficient because of duplicating the entire
> symbol table in a hash table, one key per symbol).  I realize this is
> a complete kludge and wastes tremendous amounts of memory.  I'd like
> to do it right and just query the symbol table itself, since the data
> is obviously already there.
>
> I found the complete_word(), lineeditor_word_completion(), and
> visit_symbol() functions in os_tty.c, and I'm sure that the solution
> is to write a similar set of C functions to act as a scheme interface
> to do what I want.  However, I suspect I don't understand the code
> well enough at this point to do that correctly.
>
> I'd be willing to give it a shot if I thought I had a sufficient
> quantity of tips on how to get it done (I started to say 'pointers' on
> how to get it done, but I suspected that would only lead to a long
> string of programmer jokes that might derail this thread :-D ).
>
> It seems to me that this would be a good thing to have available for
> any application that might embed Gambit and/or communicate with a
> process running the Gambit interpreter.  I don't think the
> applicability would be in any way limited to slime/swank (though,
> admittedly, that is my primary motivation for having it).
>
> REPLeffect
> _______________________________________________
> Gambit-list mailing list
> Gambit-list@iro.umontreal.ca
> https://webmail.iro.umontreal.ca/mailman/listinfo/gambit-list

Sorry about that, no subject on the previous email.  I thought Gmail
warned you before sending without a subject, but it didn't warn me
this time.

REPLeffect
_______________________________________________
Gambit-list mailing list
Gambit-list@iro.umontreal.ca
https://webmail.iro.umontreal.ca/mailman/listinfo/gambit-list