feat(emacs): Kill Comint buffers after exiting

This commit is contained in:
Madeleine Sydney
2025-02-21 21:14:41 -07:00
parent cda749c536
commit 8e5322e049

View File

@@ -94,20 +94,27 @@
(scroll-bar-mode -1)
(tool-bar-mode -1))
(defun syd-init-kill-comint-on-exit ()
(defun syd-comint--kill-buffer-sentinel (process output)
(defun syd-init-kill-process-buffer-on-exit ()
(defun syd-comint--kill-buffer-sentinel (process _output)
"Process sentinel to auto kill associated buffer once PROCESS dies."
(unless (process-live-p process)
(kill-buffer (process-buffer process))))
;; Note that `process-exit-status' returns zero when the process has not yet
;; died.
(unless (and process (zerop (process-exit-status process)))
(let ((buffer (process-buffer process)))
(with-current-buffer buffer
(goto-char (point-max))
(insert (format "\n[Process exited with exit status %d]"
(process-exit-status process))))
(kill-buffer (process-buffer process)))))
(defun syd-comint--add-kill-on-exit-sentinel ()
"Replace current process sentinel with a new sentinel composed of the
current one and `syd-comint--kill-buffer-sentinel'."
(let* ((process (get-buffer-process (current-buffer)))
(og-sentinel (process-sentinel process))
(original-sentinel (process-sentinel process))
(sentinel-list
(-remove #'null
(list og-sentinel #'syd-comint--kill-buffer-sentinel)))
(list original-sentinel #'syd-comint--kill-buffer-sentinel)))
(combined-sentinel
(lambda (process line)
(--each sentinel-list
@@ -143,8 +150,6 @@ for example when calling `shell'.")
:background unspecified
:weight bold))))
(syd-init-kill-comint-on-exit)
(general-def
:keymaps 'comint-mode-map
:states '(normal insert)
@@ -163,6 +168,7 @@ for example when calling `shell'.")
(set-popup-rule! "*Messages*"
:ttl nil
:quit t)
(syd-init-kill-process-buffer-on-exit)
;; Required for :quit t to do anything.
(evil-set-initial-state 'messages-buffer-mode 'motion)
(evil-set-initial-state 'debugger-mode 'normal)