Introduction

Scheme-complete provides a single function, scheme-smart-complete,
which you can use for intelligent, context-sensitive completion for
any Scheme implementation.

The intelligent completion comes from the use of simple
Type inference. In many cases this can drastically prune the
list of possible completions. For example, given the text

(string-ref (n^

where the cursor is represented by ^, typing tab (or whatever you bind
the completion function to) would know that in the default R5RS
environment the only possible completion of a procedure returning a
string and beginning with "n" is number->string and would
complete that for you automatically.

Given

(let ((len (string-length str)))
(string-ref str (- ^

completing would fill in "len" as the only possible completion since a
number is required as an argument to - and all the standard
R5RS bindings are procedures and syntax.

Relying on this completion for known type procedures is a handy way to
avoid type errors, even before the compilation. In more general cases
it's just nice to have basic pruning, such as not completing syntax in
a non-operator position.

Currently completion inside strings does filename completion, though
this may be made for flexible in the future. For Chicken and Gauche,
completing after "(use " will complete on all currently installed
modules.

Installation

To use it just load this file and bind that function to a key in your
preferred mode: