From sboukarev at common-lisp.net Wed Feb 2 09:22:33 2011 From: sboukarev at common-lisp.net (CVS User sboukarev) Date: Wed, 02 Feb 2011 04:22:33 -0500 Subject: [slime-cvs] CVS slime Message-ID: Update of /project/slime/cvsroot/slime In directory cl-net:/tmp/cvs-serv3839 Modified Files: ChangeLog swank.lisp Log Message: * swank.lisp (eval-in-emacs): Export it. --- /project/slime/cvsroot/slime/ChangeLog 2011/01/28 19:19:30 1.2171 +++ /project/slime/cvsroot/slime/ChangeLog 2011/02/02 09:22:33 1.2172 @@ -1,3 +1,7 @@ +2011-02-02 Stas Boukarev + + * swank.lisp (eval-in-emacs): Export it. + 2011-01-28 Stas Boukarev * slime.el (slime-check-location-filename-sanity): Guard --- /project/slime/cvsroot/slime/swank.lisp 2011/01/26 07:17:51 1.735 +++ /project/slime/cvsroot/slime/swank.lisp 2011/02/02 09:22:33 1.736 @@ -64,7 +64,8 @@ #:default-directory #:set-default-directory #:quit-lisp - #:eval-for-emacs)) + #:eval-for-emacs + #:eval-in-emacs)) (in-package :swank) @@ -1818,7 +1819,8 @@ (princ-to-string form))))) (defun eval-in-emacs (form &optional nowait) - "Eval FORM in Emacs." + "Eval FORM in Emacs. +`slime-enable-evaluate-in-emacs' should be set to T on the Emacs side." (cond (nowait (send-to-emacs `(:eval-no-wait ,(process-form-for-emacs form)))) (t From sboukarev at common-lisp.net Wed Feb 2 10:13:07 2011 From: sboukarev at common-lisp.net (CVS User sboukarev) Date: Wed, 02 Feb 2011 05:13:07 -0500 Subject: [slime-cvs] CVS slime Message-ID: Update of /project/slime/cvsroot/slime In directory cl-net:/tmp/cvs-serv14498 Modified Files: ChangeLog slime.el swank.lisp Log Message: * slime.el (slime-eval-for-lisp): Return value as a string, because it can be unreadable, e.g. # * swank.lisp (eval-in-emacs): Prevent reader errors. --- /project/slime/cvsroot/slime/ChangeLog 2011/02/02 09:22:33 1.2172 +++ /project/slime/cvsroot/slime/ChangeLog 2011/02/02 10:13:07 1.2173 @@ -1,5 +1,11 @@ 2011-02-02 Stas Boukarev + * slime.el (slime-eval-for-lisp): Return value as a string, + because it can be unreadable, e.g. # + * swank.lisp (eval-in-emacs): Prevent reader errors. + +2011-02-02 Stas Boukarev + * swank.lisp (eval-in-emacs): Export it. 2011-01-28 Stas Boukarev --- /project/slime/cvsroot/slime/slime.el 2011/01/28 19:19:30 1.1353 +++ /project/slime/cvsroot/slime/slime.el 2011/02/02 10:13:07 1.1354 @@ -4014,7 +4014,9 @@ (slime-check-eval-in-emacs-enabled) (setq value (eval (read form-string))) (setq ok t)) - (let ((result (if ok `(:ok ,value) `(:abort)))) + (let ((result (if ok + `(:ok ,(prin1-to-string value)) + `(:abort)))) (slime-dispatch-event `(:emacs-return ,thread ,tag ,result) c))))) (defun slime-check-eval-in-emacs-enabled () --- /project/slime/cvsroot/slime/swank.lisp 2011/02/02 09:22:33 1.736 +++ /project/slime/cvsroot/slime/swank.lisp 2011/02/02 10:13:07 1.737 @@ -1819,7 +1819,7 @@ (princ-to-string form))))) (defun eval-in-emacs (form &optional nowait) - "Eval FORM in Emacs. + "Eval FORM in Emacs. `slime-enable-evaluate-in-emacs' should be set to T on the Emacs side." (cond (nowait (send-to-emacs `(:eval-no-wait ,(process-form-for-emacs form)))) @@ -1830,7 +1830,9 @@ ,(process-form-for-emacs form))) (let ((value (caddr (wait-for-event `(:emacs-return ,tag result))))) (destructure-case value - ((:ok value) value) + ((:ok value) + (handler-case (values (read-from-string value)) + (reader-error () value))) ((:abort) (abort)))))))) (defvar *swank-wire-protocol-version* nil From sboukarev at common-lisp.net Wed Feb 2 11:12:33 2011 From: sboukarev at common-lisp.net (CVS User sboukarev) Date: Wed, 02 Feb 2011 06:12:33 -0500 Subject: [slime-cvs] CVS slime Message-ID: Update of /project/slime/cvsroot/slime In directory cl-net:/tmp/cvs-serv32298 Modified Files: ChangeLog swank.lisp Log Message: * swank.lisp (eval-in-emacs): Return unreadable results from Emacs as an unreadable-object, not as a string. --- /project/slime/cvsroot/slime/ChangeLog 2011/02/02 10:13:07 1.2173 +++ /project/slime/cvsroot/slime/ChangeLog 2011/02/02 11:12:33 1.2174 @@ -1,5 +1,10 @@ 2011-02-02 Stas Boukarev + * swank.lisp (eval-in-emacs): Return unreadable results from Emacs + as an unreadable-object, not as a string. + +2011-02-02 Stas Boukarev + * slime.el (slime-eval-for-lisp): Return value as a string, because it can be unreadable, e.g. # * swank.lisp (eval-in-emacs): Prevent reader errors. --- /project/slime/cvsroot/slime/swank.lisp 2011/02/02 10:13:07 1.737 +++ /project/slime/cvsroot/slime/swank.lisp 2011/02/02 11:12:33 1.738 @@ -1818,6 +1818,14 @@ (number (let ((*print-base* 10)) (princ-to-string form))))) +(defstruct (unreadable-object + (:print-object + (lambda (object stream) + (print-unreadable-object (object stream :type t :identity t) + (princ (unreadable-object-string object) + stream))))) + string) + (defun eval-in-emacs (form &optional nowait) "Eval FORM in Emacs. `slime-enable-evaluate-in-emacs' should be set to T on the Emacs side." @@ -1832,7 +1840,7 @@ (destructure-case value ((:ok value) (handler-case (values (read-from-string value)) - (reader-error () value))) + (reader-error () (make-unreadable-object :string value)))) ((:abort) (abort)))))))) (defvar *swank-wire-protocol-version* nil From heller at common-lisp.net Fri Feb 4 14:26:36 2011 From: heller at common-lisp.net (CVS User heller) Date: Fri, 04 Feb 2011 09:26:36 -0500 Subject: [slime-cvs] CVS slime Message-ID: Update of /project/slime/cvsroot/slime In directory cl-net:/tmp/cvs-serv3602 Modified Files: ChangeLog slime.el swank.lisp Log Message: Don't double encode results for eval-in-emacs. * slime.el (slime-check-eval-in-emacs-result): New. (slime-eval-for-lisp): Use it. * swank.lisp (unreadable-object): Removed. --- /project/slime/cvsroot/slime/ChangeLog 2011/02/02 11:12:33 1.2174 +++ /project/slime/cvsroot/slime/ChangeLog 2011/02/04 14:26:36 1.2175 @@ -1,3 +1,11 @@ +2011-02-04 Helmut Eller + + Don't double encode results for eval-in-emacs. + + * slime.el (slime-check-eval-in-emacs-result): New. + (slime-eval-for-lisp): Use it. + * swank.lisp (unreadable-object): Removed. + 2011-02-02 Stas Boukarev * swank.lisp (eval-in-emacs): Return unreadable results from Emacs --- /project/slime/cvsroot/slime/slime.el 2011/02/02 10:13:07 1.1354 +++ /project/slime/cvsroot/slime/slime.el 2011/02/04 14:26:36 1.1355 @@ -4009,16 +4009,38 @@ (defun slime-eval-for-lisp (thread tag form-string) (let ((ok nil) (value nil) + (error nil) (c (slime-connection))) - (unwind-protect (progn - (slime-check-eval-in-emacs-enabled) - (setq value (eval (read form-string))) - (setq ok t)) - (let ((result (if ok - `(:ok ,(prin1-to-string value)) - `(:abort)))) + (unwind-protect + (condition-case err + (progn + (slime-check-eval-in-emacs-enabled) + (setq value (eval (read form-string))) + (slime-check-eval-in-emacs-result value) + (setq ok t)) + ((debug error) + (setq error err))) + (let ((result (cond (ok `(:ok ,value)) + (error `(:error ,(symbol-name (car error)) + . ,(mapcar #'prin1-to-string + (cdr error)))) + (t `(:abort))))) (slime-dispatch-event `(:emacs-return ,thread ,tag ,result) c))))) +(defun slime-check-eval-in-emacs-result (x) + "Raise an error if X can't be marshaled." + (or (stringp x) + (memq x '(nil t)) + (integerp x) + (keywordp x) + (and (consp x) + (let ((l x)) + (while (consp l) + (slime-check-eval-in-emacs-result (car x)) + (setq l (cdr l))) + (slime-check-eval-in-emacs-result l))) + (error "Non-serializable return value: %S" x))) + (defun slime-check-eval-in-emacs-enabled () "Raise an error if `slime-enable-evaluate-in-emacs' isn't true." (unless slime-enable-evaluate-in-emacs --- /project/slime/cvsroot/slime/swank.lisp 2011/02/02 11:12:33 1.738 +++ /project/slime/cvsroot/slime/swank.lisp 2011/02/04 14:26:36 1.739 @@ -1818,14 +1818,6 @@ (number (let ((*print-base* 10)) (princ-to-string form))))) -(defstruct (unreadable-object - (:print-object - (lambda (object stream) - (print-unreadable-object (object stream :type t :identity t) - (princ (unreadable-object-string object) - stream))))) - string) - (defun eval-in-emacs (form &optional nowait) "Eval FORM in Emacs. `slime-enable-evaluate-in-emacs' should be set to T on the Emacs side." @@ -1838,9 +1830,8 @@ ,(process-form-for-emacs form))) (let ((value (caddr (wait-for-event `(:emacs-return ,tag result))))) (destructure-case value - ((:ok value) - (handler-case (values (read-from-string value)) - (reader-error () (make-unreadable-object :string value)))) + ((:ok value) value) + ((:error kind . data) (error "~a: ~{~a~}" kind data)) ((:abort) (abort)))))))) (defvar *swank-wire-protocol-version* nil From heller at common-lisp.net Fri Feb 4 14:26:45 2011 From: heller at common-lisp.net (CVS User heller) Date: Fri, 04 Feb 2011 09:26:45 -0500 Subject: [slime-cvs] CVS slime Message-ID: Update of /project/slime/cvsroot/slime In directory cl-net:/tmp/cvs-serv3633 Modified Files: ChangeLog swank.lisp Log Message: Be careful with interning. * swank.lisp (find-definitions-for-emacs): Use parse-symbol. --- /project/slime/cvsroot/slime/ChangeLog 2011/02/04 14:26:36 1.2175 +++ /project/slime/cvsroot/slime/ChangeLog 2011/02/04 14:26:45 1.2176 @@ -1,5 +1,11 @@ 2011-02-04 Helmut Eller + Be careful with interning. + + * swank.lisp (find-definitions-for-emacs): Use parse-symbol. + +2011-02-04 Helmut Eller + Don't double encode results for eval-in-emacs. * slime.el (slime-check-eval-in-emacs-result): New. --- /project/slime/cvsroot/slime/swank.lisp 2011/02/04 14:26:36 1.739 +++ /project/slime/cvsroot/slime/swank.lisp 2011/02/04 14:26:45 1.740 @@ -2035,7 +2035,8 @@ (char-upcase char))))) -(defun find-symbol-with-status (symbol-name status &optional (package *package*)) +(defun find-symbol-with-status (symbol-name status + &optional (package *package*)) (multiple-value-bind (symbol flag) (find-symbol symbol-name package) (if (and flag (eq flag status)) (values symbol flag) @@ -3306,9 +3307,10 @@ (defslimefun find-definitions-for-emacs (name) "Return a list ((DSPEC LOCATION) ...) of definitions for NAME. DSPEC is a string and LOCATION a source location. NAME is a string." - (multiple-value-bind (sexp error) (ignore-errors (from-string name)) - (unless error - (mapcar #'xref>elisp (find-definitions sexp))))) + (multiple-value-bind (symbol found) (with-buffer-syntax () + (parse-symbol name)) + (when found + (mapcar #'xref>elisp (find-definitions symbol))))) ;;; Generic function so contribs can extend it. (defgeneric xref-doit (type thing) From sboukarev at common-lisp.net Tue Feb 8 18:18:40 2011 From: sboukarev at common-lisp.net (CVS User sboukarev) Date: Tue, 08 Feb 2011 13:18:40 -0500 Subject: [slime-cvs] CVS slime Message-ID: Update of /project/slime/cvsroot/slime In directory cl-net:/tmp/cvs-serv30507 Modified Files: ChangeLog slime.el Log Message: * slime.el (slime-choose-overlay- region): Don't use `list' instead of `values', GNU Emacs fakes multiple values with lists, but XEmacs uses real multiple values. --- /project/slime/cvsroot/slime/ChangeLog 2011/02/04 14:26:45 1.2176 +++ /project/slime/cvsroot/slime/ChangeLog 2011/02/08 18:18:40 1.2177 @@ -1,3 +1,10 @@ +2011-02-08 Stas Boukarev + + * slime.el (slime-choose-overlay-region): Don't use `list' instead + of `values', GNU Emacs fakes multiple values with lists, but + XEmacs uses real multiple values. + Reported by Raymond Toy. + 2011-02-04 Helmut Eller Be careful with interning. --- /project/slime/cvsroot/slime/slime.el 2011/02/04 14:26:36 1.1355 +++ /project/slime/cvsroot/slime/slime.el 2011/02/08 18:18:40 1.1356 @@ -3029,7 +3029,7 @@ ((eq (slime-note.severity note) :read-error) (slime-choose-overlay-for-read-error location)) ((equal pos '(:eof)) - (list (1- (point-max)) (point-max))) + (values (1- (point-max)) (point-max))) (t (slime-choose-overlay-for-sexp location)))))))) From sboukarev at common-lisp.net Sun Feb 13 05:30:46 2011 From: sboukarev at common-lisp.net (CVS User sboukarev) Date: Sun, 13 Feb 2011 00:30:46 -0500 Subject: [slime-cvs] CVS slime Message-ID: Update of /project/slime/cvsroot/slime In directory cl-net:/tmp/cvs-serv5635 Modified Files: ChangeLog slime.el Log Message: * slime.el (slime-inspector-operate-on-point): Don't save the point when inspecting a different object. --- /project/slime/cvsroot/slime/ChangeLog 2011/02/08 18:18:40 1.2177 +++ /project/slime/cvsroot/slime/ChangeLog 2011/02/13 05:30:45 1.2178 @@ -1,3 +1,8 @@ +2011-02-13 Stas Boukarev + + * slime.el (slime-inspector-operate-on-point): Don't save the + point when inspecting a different object. + 2011-02-08 Stas Boukarev * slime.el (slime-choose-overlay-region): Don't use `list' instead --- /project/slime/cvsroot/slime/slime.el 2011/02/08 18:18:40 1.1356 +++ /project/slime/cvsroot/slime/slime.el 2011/02/13 05:30:45 1.1357 @@ -6538,16 +6538,19 @@ (opener (lexical-let ((point (slime-inspector-position))) (lambda (parts) (when parts - (slime-open-inspector parts point)))))) + (slime-open-inspector parts point))))) + (new-opener (lambda (parts) + (when parts + (slime-open-inspector parts))))) (cond (part-number (slime-eval-async `(swank:inspect-nth-part ,part-number) - opener) + new-opener) (push (slime-inspector-position) slime-inspector-mark-stack)) (range-button (slime-inspector-fetch-more range-button)) (action-number (slime-eval-async `(swank::inspector-call-nth-action ,action-number) - opener)) + opener)) (t (error "No object at point"))))) (defun slime-inspector-operate-on-click (event) From sboukarev at common-lisp.net Sun Feb 13 05:46:21 2011 From: sboukarev at common-lisp.net (CVS User sboukarev) Date: Sun, 13 Feb 2011 00:46:21 -0500 Subject: [slime-cvs] CVS slime Message-ID: Update of /project/slime/cvsroot/slime In directory cl-net:/tmp/cvs-serv10825 Modified Files: ChangeLog slime.el Log Message: * slime.el (slime-inspector-operate-on-point): Don't save the point when inspecting a different object. (slime-inspector-operate-on-point): If there is no action property directly at the point, try looking at (1- (point)), many inspectable objects are presented the end of the line, so it's easier to navigate to them by C-e and still being able to activate it. --- /project/slime/cvsroot/slime/ChangeLog 2011/02/13 05:30:45 1.2178 +++ /project/slime/cvsroot/slime/ChangeLog 2011/02/13 05:46:21 1.2179 @@ -2,6 +2,11 @@ * slime.el (slime-inspector-operate-on-point): Don't save the point when inspecting a different object. + (slime-inspector-operate-on-point): If there is no action property + directly at the point, try looking at (1- (point)), many + inspectable objects are presented the end of the line, so it's + easier to navigate to them by C-e and still being able to activate + it. 2011-02-08 Stas Boukarev --- /project/slime/cvsroot/slime/slime.el 2011/02/13 05:30:45 1.1357 +++ /project/slime/cvsroot/slime/slime.el 2011/02/13 05:46:21 1.1358 @@ -6525,6 +6525,17 @@ (cons (line-number-at-pos) (current-column)))) +(defun slime-inspector-property-at-point () + (let ((properties '(slime-part-number slime-range-button + slime-action-number))) + (flet ((find-property (point) + (loop for property in properties + for value = (get-text-property point property) + when value + return (list property value)))) + (or (find-property (point)) + (find-property (1- (point))))))) + (defun slime-inspector-operate-on-point () "Invoke the command for the text at point. 1. If point is on a value then recursivly call the inspector on @@ -6532,26 +6543,26 @@ 2. If point is on an action then call that action. 3. If point is on a range-button fetch and insert the range." (interactive) - (let ((part-number (get-text-property (point) 'slime-part-number)) - (range-button (get-text-property (point) 'slime-range-button)) - (action-number (get-text-property (point) 'slime-action-number)) - (opener (lexical-let ((point (slime-inspector-position))) + (let ((opener (lexical-let ((point (slime-inspector-position))) (lambda (parts) (when parts (slime-open-inspector parts point))))) (new-opener (lambda (parts) (when parts (slime-open-inspector parts))))) - (cond (part-number - (slime-eval-async `(swank:inspect-nth-part ,part-number) - new-opener) + (destructuring-bind (property value) + (slime-inspector-property-at-point) + (case property + (slime-part-number + (slime-eval-async `(swank:inspect-nth-part ,value) + new-opener) (push (slime-inspector-position) slime-inspector-mark-stack)) - (range-button - (slime-inspector-fetch-more range-button)) - (action-number - (slime-eval-async `(swank::inspector-call-nth-action ,action-number) - opener)) - (t (error "No object at point"))))) + (slime-range-button + (slime-inspector-fetch-more value)) + (slime-action-number + (slime-eval-async `(swank::inspector-call-nth-action ,value) + opener)) + (t (error "No object at point")))))) (defun slime-inspector-operate-on-click (event) "Move to events' position and operate the part." From sboukarev at common-lisp.net Fri Feb 18 20:12:06 2011 From: sboukarev at common-lisp.net (CVS User sboukarev) Date: Fri, 18 Feb 2011 15:12:06 -0500 Subject: [slime-cvs] CVS slime Message-ID: Update of /project/slime/cvsroot/slime In directory cl-net:/tmp/cvs-serv25394 Modified Files: ChangeLog slime.el Log Message: * slime.el (slime-insert-threads): Make sure newlines have the same thread-id property as the rest of the line. This fixes confusion when point is at the end of a line. --- /project/slime/cvsroot/slime/ChangeLog 2011/02/13 05:46:21 1.2179 +++ /project/slime/cvsroot/slime/ChangeLog 2011/02/18 20:12:06 1.2180 @@ -1,3 +1,9 @@ +2011-02-18 Stas Boukarev + + * slime.el (slime-insert-threads): Make sure newlines have the + same thread-id property as the rest of the line. This fixes + confusion when point is at the end of a line. + 2011-02-13 Stas Boukarev * slime.el (slime-inspector-operate-on-point): Don't save the --- /project/slime/cvsroot/slime/slime.el 2011/02/13 05:46:21 1.1358 +++ /project/slime/cvsroot/slime/slime.el 2011/02/18 20:12:06 1.1359 @@ -6206,7 +6206,6 @@ (cons labels (cdr threads)))) (defun slime-insert-thread (thread longest-lines) - (unless (bolp) (insert "\n")) (loop for i from 0 for align in longest-lines for element in thread @@ -6234,7 +6233,8 @@ for thread in (cdr threads) do (slime-propertize-region `(thread-id ,index) - (slime-insert-thread thread longest-lines))))) + (slime-insert-thread thread longest-lines) + (insert "\n"))))) ;;;;; Major mode From sboukarev at common-lisp.net Fri Feb 18 20:38:41 2011 From: sboukarev at common-lisp.net (CVS User sboukarev) Date: Fri, 18 Feb 2011 15:38:41 -0500 Subject: [slime-cvs] CVS slime Message-ID: Update of /project/slime/cvsroot/slime In directory cl-net:/tmp/cvs-serv557 Modified Files: ChangeLog slime.el Log Message: * slime.el (slime-init-popup-buffer): Don't use multiple-value-setq on a list, XEmacs doesn't like it. --- /project/slime/cvsroot/slime/ChangeLog 2011/02/18 20:12:06 1.2180 +++ /project/slime/cvsroot/slime/ChangeLog 2011/02/18 20:38:41 1.2181 @@ -1,5 +1,10 @@ 2011-02-18 Stas Boukarev + * slime.el (slime-init-popup-buffer): Don't use + multiple-value-setq on a list, XEmacs doesn't like it. + +2011-02-18 Stas Boukarev + * slime.el (slime-insert-threads): Make sure newlines have the same thread-id property as the rest of the line. This fixes confusion when point is at the end of a line. --- /project/slime/cvsroot/slime/slime.el 2011/02/18 20:12:06 1.1359 +++ /project/slime/cvsroot/slime/slime.el 2011/02/18 20:38:41 1.1360 @@ -927,8 +927,8 @@ (defun slime-init-popup-buffer (buffer-vars) (slime-popup-buffer-mode 1) - (multiple-value-setq (slime-buffer-package slime-buffer-connection) - buffer-vars)) + (setf slime-buffer-package (car buffer-vars) + slime-buffer-connection (cadr buffer-vars))) (defun slime-display-popup-buffer (select) "Display the current buffer. From sboukarev at common-lisp.net Thu Feb 24 06:38:34 2011 From: sboukarev at common-lisp.net (CVS User sboukarev) Date: Thu, 24 Feb 2011 01:38:34 -0500 Subject: [slime-cvs] CVS slime Message-ID: Update of /project/slime/cvsroot/slime In directory cl-net:/tmp/cvs-serv10205 Modified Files: ChangeLog swank-allegro.lisp Log Message: * swank-allegro.lisp (find-topframe): Fix excl::int-newest-frame invocation for the latest alpha version of Allegro. Patch by G??bor Melis. --- /project/slime/cvsroot/slime/ChangeLog 2011/02/18 20:38:41 1.2181 +++ /project/slime/cvsroot/slime/ChangeLog 2011/02/24 06:38:34 1.2182 @@ -1,3 +1,9 @@ +2011-02-24 Stas Boukarev + + * swank-allegro.lisp (find-topframe): Fix excl::int-newest-frame + invocation for the latest alpha version of Allegro. + Patch by G?bor Melis. + 2011-02-18 Stas Boukarev * slime.el (slime-init-popup-buffer): Don't use --- /project/slime/cvsroot/slime/swank-allegro.lisp 2010/08/04 18:41:04 1.142 +++ /project/slime/cvsroot/slime/swank-allegro.lisp 2011/02/24 06:38:34 1.143 @@ -149,7 +149,7 @@ (defun find-topframe () (let ((magic-symbol (intern (symbol-name :swank-debugger-hook) (find-package :swank))) - (top-frame (excl::int-newest-frame))) + (top-frame (excl::int-newest-frame (excl::current-thread)))) (loop for frame = top-frame then (next-frame frame) for name = (debugger:frame-name frame) for i from 0