]> git.eshelyaron.com Git - emacs.git/commitdiff
pp-fill: Fix missing indentation in some cases
authorStefan Monnier <monnier@iro.umontreal.ca>
Sat, 8 Jul 2023 19:10:23 +0000 (15:10 -0400)
committerStefan Monnier <monnier@iro.umontreal.ca>
Sat, 8 Jul 2023 19:10:23 +0000 (15:10 -0400)
* lisp/emacs-lisp/pp.el (pp-fill): Improve handling of char-tables.
(pp-buffer): Improve backward compatibility.

lisp/emacs-lisp/pp.el

index 625fc5f252d2ddd5a408270ffb2db4e1bdcfc0d9..550fab2f4b3cb9c76589da0c8a8cc9e2ea033e2d 100644 (file)
@@ -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))