The package slime-c-p-c
provides a different symbol completion
algorithm, which performs completion “in parallel” over the
hyphen-delimited sub-words of a symbol name.
1
Formally this means that “a-b-c
” can complete to any symbol
matching the regular expression “^a.*-b.*-c.*
” (where “dot”
matches anything but a hyphen). Examples give a more intuitive
feeling:
m-v-b
completes to multiple-value-bind
.
w-open
is ambiguous: it completes to either
with-open-file
or with-open-stream
. The symbol is
expanded to the longest common completion (with-open-
) and the
point is placed at the first point of ambiguity, which in this case is
the end.
w--stream
completes to with-open-stream
.
The variable slime-c-p-c-unambiguous-prefix-p
specifies where
point should be placed after completion. E.g. the possible
completions for f-o
are finish-output
and
force-output
. By the default point is moved after the
f
, because that is the unambiguous prefix. If
slime-c-p-c-unambiguous-prefix-p
is nil, point moves to
the end of the inserted text, after the o
in this case.
In addition, slime-c-p-c
provides completion for character names
(mostly useful for Unicode-aware implementations):
CL-USER> #\Sp<TAB>
Here SLIME will usually complete the character to #\Space
, but
in a Unicode-aware implementation, this might provide the following completions:
Space Space Sparkle Spherical_Angle Spherical_Angle_Opening_Left Spherical_Angle_Opening_Up
The package slime-c-p-c
also provides context-sensitive completion for keywords.
Example:
CL-USER> (find 1 '(1 2 3) :s<TAB>
Here SLIME will complete :start
, rather than suggesting all
ever-interned keywords starting with :s
.
make-instance
,
defmethod
, and many other functions. Examples:
(subseq "abc" <C-c C-s> --inserts--> start [end]) (find 17 <C-c C-s> --inserts--> sequence :from-end from-end :test test :test-not test-not :start start :end end :key key) (find 17 '(17 18 19) :test #'= <C-c C-s> --inserts--> :from-end from-end :test-not test-not :start start :end end :key key) (defclass foo () ((bar :initarg :bar))) (defmethod print-object <C-c C-s> --inserts--> (object stream) body...) (defmethod initialize-instance :after ((object foo) &key blub)) (make-instance 'foo <C-c C-s> --inserts--> :bar bar :blub blub initargs...)
[1] This style of completion is modelled on completer.el by Chris McConnell. That package is bundled with ILISP.