[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
master 1b7c9ecc8f5: pp-fill: Fix missing indentation in some cases
|
From: |
Stefan Monnier |
|
Subject: |
master 1b7c9ecc8f5: pp-fill: Fix missing indentation in some cases |
|
Date: |
Sat, 8 Jul 2023 15:10:31 -0400 (EDT) |
branch: master
commit 1b7c9ecc8f55675207d0b38ea4007de3aede9941
Author: Stefan Monnier <monnier@iro.umontreal.ca>
Commit: Stefan Monnier <monnier@iro.umontreal.ca>
pp-fill: Fix missing indentation in some cases
* lisp/emacs-lisp/pp.el (pp-fill): Improve handling of char-tables.
(pp-buffer): Improve backward compatibility.
---
lisp/emacs-lisp/pp.el | 15 ++++++++++++---
1 file changed, 12 insertions(+), 3 deletions(-)
diff --git a/lisp/emacs-lisp/pp.el b/lisp/emacs-lisp/pp.el
index 625fc5f252d..550fab2f4b3 100644
--- a/lisp/emacs-lisp/pp.el
+++ b/lisp/emacs-lisp/pp.el
@@ -177,8 +177,9 @@ it inserts and pretty-prints that arg at point."
(< (point) end))
(let ((beg (point))
;; Whether we're in front of an element with paired delimiters.
- ;; Can be something funky like #'(lambda ..) or ,'#s(...).
- (paired (when (looking-at "['`,#]*[[:alpha:]]*\\([({[\"]\\)")
+ ;; Can be something funky like #'(lambda ..) or ,'#s(...)
+ ;; Or also #^[..].
+ (paired (when (looking-at "['`,#]*[[:alpha:]^]*\\([({[\"]\\)")
(match-beginning 1))))
;; Go to the end of the sexp.
(goto-char (or (scan-sexps (or paired (point)) 1) end))
@@ -238,7 +239,15 @@ it inserts and pretty-prints that arg at point."
(defun pp-buffer ()
"Prettify the current buffer with printed representation of a Lisp object."
(interactive)
- (funcall pp-default-function (point-min) (point-max))
+ ;; The old code used `indent-sexp' which mostly works "anywhere",
+ ;; so let's make sure we also work right in buffers that aren't
+ ;; setup specifically for Lisp.
+ (if (and (eq (syntax-table) emacs-lisp-mode-syntax-table)
+ (eq indent-line-function #'lisp-indent-line))
+ (funcall pp-default-function (point-min) (point-max))
+ (with-syntax-table emacs-lisp-mode-syntax-table
+ (let ((indent-line-function #'lisp-indent-line))
+ (funcall pp-default-function (point-min) (point-max)))))
;; Preserve old behavior of (usually) finishing with a newline and
;; with point at BOB.
(goto-char (point-max))
| [Prev in Thread] |
Current Thread |
[Next in Thread] |
- master 1b7c9ecc8f5: pp-fill: Fix missing indentation in some cases,
Stefan Monnier <=