Improves cmake-before-save-hook

Do not erase wrongly formatted buffer
Keeps the current region
Writes nice message to buffer
This commit is contained in:
2023-10-13 12:08:44 +02:00
parent 0cf9d0d134
commit b33cf55170

65
.emacs
View File

@@ -447,25 +447,68 @@
) )
:config :config
(setq cmake-tab-width 4) (setq cmake-tab-width 4)
(defun atu/create-or-erase-buffer (buffer-name)
""
(let ((existing-buffer (get-buffer buffer-name)))
(when existing-buffer
(with-current-buffer existing-buffer
(erase-buffer)))
(get-buffer-create buffer-name))
)
(defun atu/cmake-format-buffer () (defun atu/cmake-format-buffer ()
"Formats the current buffer using cmake-format" "Formats the current buffer using cmake-format"
(interactive) (interactive)
(shell-command-on-region (let ((error-buffer (atu/create-or-erase-buffer "*cmake-format:stderr*")))
;; region to execute on (setq-local atu/after-save-message nil)
(if (eq 0 (call-process-region
;;region
(point-min) (point-min)
(point-max) (point-max)
;; command "cmake-format"
"cmake-format -" nil ;do not delete buffer
;; replace ;; discard stdout copy stderr to buffer
t error-buffer
;; name of the error bufer nil ;dont-redisplay buffer
"* cmake-format Error Buffer *" "-"
;; ))
t)) (let ((current-point (point)))
(call-process-region
(point-min) (point-max)
"cmake-format"
t t t; replace current buffer and redisplay it
"-"
)
(goto-char (+ (point-min) current-point))
nil
)
(message
"cmake-format: could not format %s see buffer %s for details"
(buffer-name) error-buffer)
(current-message)
)
)
)
(defun atu/cmake-before-save-hook ()
""
(setq-local atu/after-save-message (atu/cmake-format-buffer))
)
(defun atu/cmake-after-save-hook ()
""
(when atu/after-save-message
(message atu/after-save-message)
)
)
:hook :hook
(cmake-mode . lsp-deferred) (cmake-mode . lsp-deferred)
(cmake-mode . (lambda () (add-hook 'before-save-hook 'atu/cmake-format-buffer nil 'local))) (cmake-mode . (lambda ()
(add-hook 'before-save-hook 'atu/cmake-before-save-hook nil 'local)
(add-hook 'after-save-hook 'atu/cmake-after-save-hook nil 'local))
)
) )
(use-package cc-mode (use-package cc-mode