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:
65
.emacs
65
.emacs
@@ -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
|
||||
(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)
|
||||
;; command
|
||||
"cmake-format -"
|
||||
;; replace
|
||||
t
|
||||
;; name of the error bufer
|
||||
"* cmake-format Error Buffer *"
|
||||
;;
|
||||
t))
|
||||
"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
|
||||
|
||||
Reference in New Issue
Block a user