all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
* [hannes@saeurebad.de: [PATCH] Extract last-sexp from eval-last-sexp-1]
@ 2007-08-20 15:16 Richard Stallman
  2007-08-20 15:56 ` Vinicius Jose Latorre
  0 siblings, 1 reply; 2+ messages in thread
From: Richard Stallman @ 2007-08-20 15:16 UTC (permalink / raw)
  To: emacs-devel

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

------- 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 <hannes@saeurebad.de>
To: emacs-devel@gnu.org
Mail-Followup-To: emacs-devel@gnu.org
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
+	  ;; vladimir@cs.ualberta.ca 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
- -			 ;; vladimir@cs.ualberta.ca 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
Emacs-devel@gnu.org
http://lists.gnu.org/mailman/listinfo/emacs-devel
- --Qxx1br4bt0+wmkIi--
------- End of forwarded message -------

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2007-08-20 15:56 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-08-20 15:16 [hannes@saeurebad.de: [PATCH] Extract last-sexp from eval-last-sexp-1] Richard Stallman
2007-08-20 15:56 ` Vinicius Jose Latorre

Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/emacs.git
	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.