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:
69
.emacs
69
.emacs
@@ -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)
|
||||||
(point-min)
|
(if (eq 0 (call-process-region
|
||||||
(point-max)
|
;;region
|
||||||
;; command
|
(point-min)
|
||||||
"cmake-format -"
|
(point-max)
|
||||||
;; replace
|
"cmake-format"
|
||||||
t
|
nil ;do not delete buffer
|
||||||
;; name of the error bufer
|
;; discard stdout copy stderr to buffer
|
||||||
"* cmake-format Error Buffer *"
|
error-buffer
|
||||||
;;
|
nil ;dont-redisplay 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
|
||||||
|
|||||||
Reference in New Issue
Block a user