emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: address@hidden: [PATCH] Extract last-sexp from eval-last-sexp-1]


From: Vinicius Jose Latorre
Subject: Re: address@hidden: [PATCH] Extract last-sexp from eval-last-sexp-1]
Date: Mon, 20 Aug 2007 12:56:18 -0300
User-agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.6) Gecko/20070802 SeaMonkey/1.1.4

Richard Stallman wrote:
Would someone please install this tiny change, but rename the new
function to `preceding-sexp'?


Done in trunk and Emacs 22 branch.


------- Start of forwarded message -------
X-Spam-Status: No, score=0.0 required=5.0 tests=UNPARSEABLE_RELAY autolearn=failed version=3.1.0
Date: Mon, 20 Aug 2007 00:08:06 +0200
From: Johannes Weiner <address@hidden>
To: address@hidden
Mail-Followup-To: address@hidden
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="Qxx1br4bt0+wmkIi"
Content-Disposition: inline
Subject: [PATCH] Extract last-sexp from eval-last-sexp-1


- --Qxx1br4bt0+wmkIi
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline

Hi Emacs-hackers,

here is a patch that extracts last-sexp from already existing code so that one
can use last-sexp for other purposes too.

Note: I ripped out the let-binding of `stap' in the original code because it
looked stale. Please correct me if I am wrong.

Thank you all!

        Hannes

- --Qxx1br4bt0+wmkIi
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: inline; filename="emacs-extract-last-sexp.patch"

diff -Naur emacs.orig/lisp/emacs-lisp/lisp-mode.el 
emacs/lisp/emacs-lisp/lisp-mode.el
- --- emacs.orig/lisp/emacs-lisp/lisp-mode.el   2007-08-20 00:00:43.000000000 
+0200
+++ emacs/lisp/emacs-lisp/lisp-mode.el  2007-08-20 00:00:58.000000000 +0200
@@ -538,63 +538,63 @@
              (= (car (read-from-string string)) char)
              string))))
+(defun last-sexp ()
+  "Return sexp before the point."
+  (let ((opoint (point))
+       ignore-quotes
+       expr)
+    (save-excursion
+      (with-syntax-table emacs-lisp-mode-syntax-table
+       ;; If this sexp appears to be enclosed in `...'
+       ;; then ignore the surrounding quotes.
+       (setq ignore-quotes
+             (or (eq (following-char) ?\')
+                 (eq (preceding-char) ?\')))
+       (forward-sexp -1)
+       ;; If we were after `?\e' (or similar case),
+       ;; use the whole thing, not just the `e'.
+       (when (eq (preceding-char) ?\\)
+         (forward-char -1)
+         (when (eq (preceding-char) ??)
+           (forward-char -1)))
+       
+       ;; Skip over `#N='s.
+       (when (eq (preceding-char) ?=)
+         (let (labeled-p)
+           (save-excursion
+             (skip-chars-backward "0-9#=")
+             (setq labeled-p (looking-at "\\(#[0-9]+=\\)+")))
+           (when labeled-p
+             (forward-sexp -1))))
+       
+       (save-restriction
+         ;; address@hidden 30-Jul-1997: skip ` in
+         ;; `variable' so that the value is returned, not the
+         ;; name
+         (if (and ignore-quotes
+                  (eq (following-char) ?`))
+             (forward-char))
+         (narrow-to-region (point-min) opoint)
+         (setq expr (read (current-buffer)))
+         ;; If it's an (interactive ...) form, it's more
+         ;; useful to show how an interactive call would
+         ;; use it.
+         (and (consp expr)
+              (eq (car expr) 'interactive)
+              (setq expr
+                    (list 'call-interactively
+                          (list 'quote
+                                (list 'lambda
+                                      '(&rest args)
+                                      expr
+                                      'args)))))
+         expr)))))
(defun eval-last-sexp-1 (eval-last-sexp-arg-internal)
   "Evaluate sexp before point; print value in minibuffer.
 With argument, print output into current buffer."
   (let ((standard-output (if eval-last-sexp-arg-internal (current-buffer) t)))
- -    (let ((value
- -        (eval (let ((stab (syntax-table))
- -                    (opoint (point))
- -                    ignore-quotes
- -                    expr)
- -                (save-excursion
- -                  (with-syntax-table emacs-lisp-mode-syntax-table
- -                    ;; If this sexp appears to be enclosed in `...'
- -                    ;; then ignore the surrounding quotes.
- -                    (setq ignore-quotes
- -                          (or (eq (following-char) ?\')
- -                              (eq (preceding-char) ?\')))
- -                    (forward-sexp -1)
- -                    ;; If we were after `?\e' (or similar case),
- -                    ;; use the whole thing, not just the `e'.
- -                    (when (eq (preceding-char) ?\\)
- -                      (forward-char -1)
- -                      (when (eq (preceding-char) ??)
- -                        (forward-char -1)))
- -
- -                    ;; Skip over `#N='s.
- -                    (when (eq (preceding-char) ?=)
- -                      (let (labeled-p)
- -                        (save-excursion
- -                          (skip-chars-backward "0-9#=")
- -                          (setq labeled-p (looking-at "\\(#[0-9]+=\\)+")))
- -                        (when labeled-p
- -                          (forward-sexp -1))))
- -
- -                    (save-restriction
- -                      ;; address@hidden 30-Jul-1997: skip ` in
- -                      ;; `variable' so that the value is returned, not the
- -                      ;; name
- -                      (if (and ignore-quotes
- -                               (eq (following-char) ?`))
- -                          (forward-char))
- -                      (narrow-to-region (point-min) opoint)
- -                      (setq expr (read (current-buffer)))
- -                      ;; If it's an (interactive ...) form, it's more
- -                      ;; useful to show how an interactive call would
- -                      ;; use it.
- -                      (and (consp expr)
- -                           (eq (car expr) 'interactive)
- -                           (setq expr
- -                                 (list 'call-interactively
- -                                       (list 'quote
- -                                             (list 'lambda
- -                                                   '(&rest args)
- -                                                   expr
- -                                                   'args)))))
- -                      expr)))))))
- -      (eval-last-sexp-print-value value))))
+    (eval-last-sexp-print-value (eval (last-sexp)))))
(defun eval-last-sexp-print-value (value)
   (let ((unabbreviated (let ((print-length nil) (print-level nil))

- --Qxx1br4bt0+wmkIi
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
Emacs-devel mailing list
address@hidden
http://lists.gnu.org/mailman/listinfo/emacs-devel
- --Qxx1br4bt0+wmkIi--
------- End of forwarded message ------





reply via email to

[Prev in Thread] Current Thread [Next in Thread]