fix(format): prefix arg inhibiting format-on-save (part 2)

Experimenting with a new approach to this issue, in an effort to avoid
advice on such low level commands ({basic-,}save-buffer). I don't like
that we're still stacking new behavior on top of their pre-existing
prefix arg behavior (manipulating backup-on-save functionality), but
maybe it's not useful enough to worry about?

Fix: #8420
Amend: f0c8290ae2
This commit is contained in:
Henrik Lissner
2025-08-10 16:40:06 +02:00
parent 0ed0072ff2
commit 9a38ee2428
3 changed files with 25 additions and 7 deletions

View File

@@ -417,7 +417,7 @@
:desc "Previous buffer" "p" #'previous-buffer
:desc "Revert buffer" "r" #'revert-buffer
:desc "Rename buffer" "R" #'rename-buffer
:desc "Save buffer" "s" #'basic-save-buffer
:desc "Save buffer" "s" #'save-buffer
:desc "Save all buffers" "S" #'evil-write-all
:desc "Save buffer as root" "u" #'doom/sudo-save-buffer
:desc "Pop up scratch buffer" "x" #'doom/open-scratch-buffer
@@ -514,7 +514,7 @@
:desc "Browse private config" "P" #'doom/open-private-config
:desc "Recent files" "r" #'recentf-open-files
:desc "Rename/move file" "R" #'doom/move-this-file
:desc "Save file" "s" #'save-buffer
:desc "Save file" "s" #'basic-save-buffer
:desc "Save file as..." "S" #'write-file
:desc "Sudo find file" "u" #'doom/sudo-find-file
:desc "Sudo this file" "U" #'doom/sudo-this-file

View File

@@ -1,5 +1,10 @@
;;; editor/format/autoload.el -*- lexical-binding: t; -*-
;; HACK: `apheleia-mode' doesn't define a keymap. By defining one before the
;; minor mode is loaded, `define-minor-mode' will automatically register it as
;; apheleia-mode's keymap.
;;;###autoload (defvar apheleia-mode-map (make-sparse-keymap))
(defun +format--current-indentation ()
(save-excursion
(goto-char (point-min))
@@ -95,4 +100,18 @@ may not always work. Keep your undo keybind handy!"
#'+format/region
#'+format/buffer)))
;;;###autoload
(defun +format/save-buffer-no-reformat ()
"`save-buffer', but don't trigger `apheleia's save-on-format behavior."
(interactive)
(let (apheleia-mode)
(basic-save-buffer)))
;;;###autoload
(defun +format/save-buffer (arg)
"`save-buffer', but the prefix ARG also inhibits format-on-save behavior."
(interactive "P")
(let ((apheleia-mode (and apheleia-mode (memq arg '(nil 1)))))
(call-interactively #'save-buffer)))
;;; format.el ends here

View File

@@ -45,11 +45,10 @@ This is controlled by `+format-on-save-disabled-modes'."
(set-debug-variable! 'apheleia-log-only-errors nil)
(set-debug-variable! 'apheleia-log-debug-info t 2)
(defadvice! +format--inhibit-reformat-on-prefix-arg-a (orig-fn &optional arg)
"Make it so \\[save-buffer] with prefix arg inhibits reformatting."
:around #'basic-save-buffer
(let ((apheleia-inhibit (or apheleia-inhibit current-prefix-arg)))
(funcall orig-fn)))
;; UX: Use prefix-arg on `save-buffer' or `basic-save-buffer' to inhibit
;; format-on-save behavior.
(define-key apheleia-mode-map [remap basic-save-buffer] #'+format/save-buffer-no-reformat)
(define-key apheleia-mode-map [remap save-buffer] #'+format/save-buffer)
;; HACK: Apheleia suppresses notifications that the current buffer has
;; changed, so plugins that listen for them need to be manually informed: