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

69
.emacs
View File

@@ -447,25 +447,68 @@
)
:config
(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 ()
"Formats the current buffer using cmake-format"
(interactive)
(shell-command-on-region
;; region to execute on
(point-min)
(point-max)
;; command
"cmake-format -"
;; replace
t
;; name of the error bufer
"* cmake-format Error Buffer *"
;;
t))
(let ((error-buffer (atu/create-or-erase-buffer "*cmake-format:stderr*")))
(setq-local atu/after-save-message nil)
(if (eq 0 (call-process-region
;;region
(point-min)
(point-max)
"cmake-format"
nil ;do not delete buffer
;; discard stdout copy stderr to buffer
error-buffer
nil ;dont-redisplay buffer
"-"
))
(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
(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