[slime-devel] slime-symbol-name-at-point for "ERROR: with SYMBOLS."

Pascal J.Bourguignon pjb at informatimago.com
Thu Jul 1 03:19:24 UTC 2004


Here is a version of slime-symbol-name-at-point that's more
sophisticated than the one using thing-at-point.  If there's a
dot-double-quote after the symbol at point, then it removes the dot.

The Right Thing would be to match the symbol at point depending on the
expected symbols (known CLHS / current program symbols), and to try
several possibilities (to be able to handle case when the symbol-dot
does not end a string).


(defun slime-symbol-name-at-point ()
  "Return the name of the symbol at point, otherwise nil."
  (save-restriction
    ;; Don't be tricked into grabbing the REPL prompt.
    (when (and (eq major-mode 'slime-repl-mode)
               (>= (point) slime-repl-input-start-mark))
      (narrow-to-region slime-repl-input-start-mark (point-max)))
    (save-excursion
      (skip-syntax-forward "w_")
      (skip-syntax-backward "-") 
      (let ((string (let ((bounds (bounds-of-thing-at-point 'symbol)))
                      (when bounds 
                        (buffer-substring (car bounds)
                                          (progn
                                            (goto-char (1- (cdr bounds)))
                                            (if (looking-at "\\.\"")
                                              (1- (cdr bounds))
                                              (cdr bounds))))))))
        (and string
             ;; In Emacs20 (thing-at-point 'symbol) returns "" instead
             ;; of nil when called from an empty (or
             ;; narrowed-to-empty) buffer.
             (not (equal string ""))
             (substring-no-properties string))))))

-- 
__Pascal Bourguignon__                     http://www.informatimago.com/

There is no worse tyranny than to force a man to pay for what he does not
want merely because you think it would be good for him. -- Robert Heinlein




More information about the slime-devel mailing list