* [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
* Re: [hannes@saeurebad.de: [PATCH] Extract last-sexp from eval-last-sexp-1]
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
0 siblings, 0 replies; 2+ messages in thread
From: Vinicius Jose Latorre @ 2007-08-20 15:56 UTC (permalink / raw)
To: rms; +Cc: emacs-devel
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 <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.