[slime-devel] `slime-space', `slime-show-arglist', `slime-echo-arglist' + STFU

MON KEY monkey at sandpframing.com
Tue Nov 9 19:22:30 UTC 2010


>> apportioning of permanent buffer-locals and as such Slime could be
>> making better use of permanent-locals as well :)
>
> You could also give slime-echo-arglist-function a buffer local value,
> right?
>

Currently there is this:

slime-space
 `-> slime-echo-arglist
     `--> slime-echo-arglist-function
          `---> slime-show-arglist

The proposed solution short circuits the nesting and
`slime-echo-arglist' is never seen which (I hope) may help avoid
slime-autodoc/eldoc loading/unloading/enabling/disabling issues...

My thinking was that making `slime-echo-arglist-function' the
buffer-local permanent-local was too coarse but maybe there is other
stuff happening swank side that i am missing?

But yeah, AFAICT making `slime-echo-arglist-function' buffer-local
would accomplish the same thing as long as it was _also_
permanent-local, e.g.:

(defvar slime-echo-arglist-function 'slime-show-arglist
  "Symbol naming a function. Used by `slime-echo-arglist' and `slime-space'.")

(make-variable-buffer-local 'slime-echo-arglist-function)
(put 'slime-echo-arglist-function 'permanent-local t)
(set-default 'slime-echo-arglist-function 'slime-show-arglist)

Assuming the corresponding getter/setter exist:

(defcustom *slime-echo-arglist-ignore-function* 'ignore
  "Symbol naming a function to use when `slime-echo-arglist' shouldn't.
The function will become the default buffer-local-value when
`slime-echo-arglist-toggle' is invoked to override default-value of
`slime-echo-arglist-function'.
The default value is `ignore', which effectively prevents `slime-space' from
verbosely echoing arglists to minibuffer."
  :type 'function
  :group 'slime-ui)

(defun slime-echo-arglist-toggle ()
  (interactive)
  (with-current-buffer (current-buffer)
    (apply slime-message-function
           (concat ;; :NOTE byte-compiler will optimize away this concat.
            "Toggled buffer-local-value `slime-echo-arglist-function'"
            "in buffer: %s, new value is `%S'")
           (list (buffer-name)
                 (if (eq (buffer-local-value
'slime-echo-arglist-function (current-buffer))
                         (default-value 'slime-echo-arglist-function))
                     (set (make-local-variable 'slime-echo-arglist-function)
                          *slime-echo-arglist-ignore-function*)
                   (set (make-local-variable 'slime-echo-arglist-function)
                        (default-value 'slime-echo-arglist-function)))))))

> Helmut
>

--
/s_P\
-------------- next part --------------
A non-text attachment was scrubbed...
Name: slime-echo-arglist-bl-pl.el
Type: application/octet-stream
Size: 1800 bytes
Desc: not available
URL: <https://mailman.common-lisp.net/pipermail/slime-devel/attachments/20101109/23ed401a/attachment.obj>


More information about the slime-devel mailing list