diff options
| author | Craig Jennings <c@cjennings.net> | 2025-10-22 12:27:05 -0500 |
|---|---|---|
| committer | Craig Jennings <c@cjennings.net> | 2025-10-22 12:27:05 -0500 |
| commit | c4e9232f297ffda4443477c589f29052178d2c87 (patch) | |
| tree | f4c50c999bf18a57e08c439ad244b23b006d0730 /modules/undead-buffers.el | |
| parent | 2a543ea6a0fd018a24008fba514a6967c3f62cfb (diff) | |
feat: undead-buffers: Add `cj/make-buffer-undead` function and tests
Introduce a new function `cj/make-buffer-undead` that appends a
buffer name to the `cj/undead-buffer-list`, preventing it from being
killed. This comes along with a suite of tests to check various
scenarios and edge cases for handling undead buffers.
Additionally, add tests for related functions:
`cj/kill-buffer-or-bury-alive`, `cj/kill-buffer-and-window`, and
others to ensure they correctly manage buffers, particularly with
undead-status considerations.
Refactor `undead-buffer-list` naming for consistency and clarity in
the module.
Diffstat (limited to 'modules/undead-buffers.el')
| -rw-r--r-- | modules/undead-buffers.el | 28 |
1 files changed, 19 insertions, 9 deletions
diff --git a/modules/undead-buffers.el b/modules/undead-buffers.el index a7584476..50c9bb9c 100644 --- a/modules/undead-buffers.el +++ b/modules/undead-buffers.el @@ -17,34 +17,43 @@ ;; ;;; Code: -(defvar cj/buffer-bury-alive-list - '("*dashboard*" "*scratch*" "*EMMS-Playlist*" "*Messages*" "*ert*" "*AI-Assistant*") +(defvar cj/undead-buffer-list + '("*scratch*" "*EMMS-Playlist*" "*Messages*" "*ert*" + "*AI-Assistant*") "Buffers to bury instead of killing.") +(defun cj/make-buffer-undead (name) + "Append NAME to `cj/undead-buffer-list' if not present. +Signal an error if NAME is not a non-empty string. Return the updated list." + (unless (and (stringp name) (> (length name) 0)) + (error "cj/bury-alive-add: NAME must be a non-empty string")) + (add-to-list 'cj/undead-buffer-list name t)) + (defun cj/kill-buffer-or-bury-alive (buffer) - "Kill BUFFER or bury it if it's in `cj/buffer-bury-alive-list'." + "Kill BUFFER or bury it if it's in `cj/undead-buffer-list'." (interactive "bBuffer to kill or bury: ") (with-current-buffer buffer (if current-prefix-arg (progn - (add-to-list 'cj/buffer-bury-alive-list (buffer-name)) + (add-to-list 'cj/undead-buffer-list (buffer-name)) (message "Added %s to bury-alive-list" (buffer-name))) - (if (member (buffer-name) cj/buffer-bury-alive-list) + (if (member (buffer-name) cj/undead-buffer-list) (bury-buffer) (kill-buffer))))) (keymap-global-set "<remap> <kill-buffer>" #'cj/kill-buffer-or-bury-alive) (defun cj/undead-buffer-p () - "Predicate for `save-some-buffers' that skips buffers in `cj/buffer-bury-alive-list'." + "Replacement for `save-some-buffers' skips undead-buffers. +Undead-buffers are buffers in `cj/undead-buffer-list'." (let* ((buf (current-buffer)) (name (buffer-name buf))) (and - (not (member name cj/buffer-bury-alive-list)) + (not (member name cj/undead-buffer-list)) (buffer-file-name buf) (buffer-modified-p buf)))) (defun cj/save-some-buffers (&optional arg) - "Save some buffers, omitting those in `cj/buffer-bury-alive-list'. + "Save some buffers, omitting those in `cj/undead-buffer-list'. ARG is passed to `save-some-buffers'." (interactive "P") (save-some-buffers arg #'cj/undead-buffer-p)) @@ -53,7 +62,8 @@ ARG is passed to `save-some-buffers'." "Delete window and kill or bury its buffer." (interactive) (let ((buf (current-buffer))) - (delete-window) + (unless (one-window-p) + (delete-window)) (cj/kill-buffer-or-bury-alive buf))) (keymap-global-set "M-C" #'cj/kill-buffer-and-window) |
