Here's a different version, which uses just the one argument, but allows it to be a list (FILENAME LINE [COLUMN]). Though it was pointed out that this disallows the editing of (setf foo) as a function (probably, unless you do more special-casing on the CAR of the list being a string/symbol/whatever)
Index: ChangeLog =================================================================== RCS file: /project/slime/cvsroot/slime/ChangeLog,v retrieving revision 1.316 diff -u -r1.316 ChangeLog --- ChangeLog 29 Mar 2004 17:08:17 -0000 1.316 +++ ChangeLog 29 Mar 2004 22:34:26 -0000 @@ -1,3 +1,11 @@ +2004-03-29 Lawrence Mitchell wence@gmx.li + + * swank.lisp (ed-in-emacs): New allowed form for argument. + + * slime.el (slime-ed): Deal with list form of argument. For a + list (FILENAME LINE [COLUMN]), visit the correct line and column + number. + 2004-03-29 Helmut Eller e9626484@stud3.tuwien.ac.at
* swank-source-path-parser.lisp (cmucl-style-get-macro-character):
Index: slime.el =================================================================== RCS file: /project/slime/cvsroot/slime/slime.el,v retrieving revision 1.248 diff -u -r1.248 slime.el --- slime.el 29 Mar 2004 00:59:13 -0000 1.248 +++ slime.el 29 Mar 2004 22:30:47 -0000 @@ -3638,7 +3638,14 @@ "*When non-nil, `slime-ed' will create and reuse a dedicated frame.")
(defun slime-ed (what) - "Edit WHAT, either a filename (string) or function name (symbol), or nil. + "Edit WHAT. + +WHAT can be: + A filename (string), + A list (FILENAME LINE [COLUMN]), + A function name (symbol), + nil. + This for use in the implementation of COMMON-LISP:ED." ;; Without `save-excursion' very strange things happen if you call ;; (swank:ed-in-emacs X) from the REPL. -luke (18/Jan/2004) @@ -3649,6 +3656,16 @@ (select-frame slime-ed-frame)) (cond ((stringp what) (find-file (slime-from-lisp-filename what))) + ((listp what) + (find-file (first what)) + (goto-line (second what)) + ;; Find the correct column, without going past the end of + ;; the line. + (let ((col (third what))) + (while (and col + (< (point) (point-at-eol)) + (/= (decf col) -1)) + (forward-char 1)))) ((and what (symbolp what)) (slime-edit-definition (symbol-name what))) (t nil)))) ; nothing in particular
Index: swank.lisp =================================================================== RCS file: /project/slime/cvsroot/slime/swank.lisp,v retrieving revision 1.155 diff -u -r1.155 swank.lisp --- swank.lisp 27 Mar 2004 21:14:52 -0000 1.155 +++ swank.lisp 29 Mar 2004 22:33:05 -0000 @@ -1135,7 +1135,14 @@
(defslimefun ed-in-emacs (&optional what) "Edit WHAT in Emacs. -WHAT can be a filename (pathname or string) or function name (symbol)." + +WHAT can be: + A filename (string), + A list (FILENAME LINE [COLUMN]), + A function name (symbol), + nil." + (if (and (listp what) (pathnamep (first what))) + (setf (car what) (canonicalize-filename (car what)))) (send-oob-to-emacs `(:ed ,(if (pathnamep what) (canonicalize-filename what) what))))
[...]