[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/bufferlo 79eba76029 06/37: Include buried buffers
From: |
ELPA Syncer |
Subject: |
[elpa] externals/bufferlo 79eba76029 06/37: Include buried buffers |
Date: |
Sun, 5 Nov 2023 09:57:31 -0500 (EST) |
branch: externals/bufferlo
commit 79eba76029b8d4729d2bd31fe61ab0f4a5e1ea71
Author: Florian Rommel <mail@florommel.de>
Commit: Florian Rommel <mail@florommel.de>
Include buried buffers
---
bufferlo.el | 74 ++++++++++++++++++++++++++++++++++++++++++++++++-------------
1 file changed, 58 insertions(+), 16 deletions(-)
diff --git a/bufferlo.el b/bufferlo.el
index 0d291f542f..f63e5dcdde 100644
--- a/bufferlo.el
+++ b/bufferlo.el
@@ -101,6 +101,12 @@ in order to take effect."
:group 'bufferlo
:type 'boolean)
+(defcustom bufferlo-include-buried-buffers t
+ "Include buried buffers in the local list (`bufferlo-buffer-list').
+Use `bufferlo-bury' to remove and bury a buffer if this is set to `t'."
+ :group 'bufferlo
+ :type 'boolean)
+
(defcustom bufferlo-include-buffer-filters nil
"Buffers that should always get included in a new tab or frame.
This is a list of regular expressions that match buffer names.
@@ -167,7 +173,7 @@ This is a list of regular expressions that match buffer
names."
(defun bufferlo-local-buffer-p (buffer)
"Return whether BUFFER is in the list of local buffers."
- (memq buffer (frame-parameter nil 'buffer-list)))
+ (memq buffer (bufferlo--current-buffers nil)))
(defun bufferlo--set-buffer-predicate (frame)
"Set the buffer predicate of FRAME to `bufferlo-local-buffer-p'."
@@ -190,7 +196,7 @@ This is a list of regular expressions that match buffer
names."
(append '("a^") bufferlo-include-buffer-filters)))
(exclude (bufferlo--merge-regexp-list
(append '("a^") bufferlo-exclude-buffer-filters)))
- (buffers (frame-parameter frame 'buffer-list))
+ (buffers (bufferlo--current-buffers frame))
(buffers (seq-filter (lambda (b)
(not (string-match-p exclude (buffer-name b))))
buffers))
@@ -198,6 +204,8 @@ This is a list of regular expressions that match buffer
names."
(string-match-p include (buffer-name b)))
(buffer-list frame)))
(buffers (delete-dups (append buffers incl-buffers))))
+ ;; FIXME: Currently all the included buffers are put into the 'buffer-list,
+ ;; even if they were in the 'buried-buffer-list before.
(set-frame-parameter frame 'buffer-list buffers)))
(defun bufferlo--tab-include-exclude-buffers (ignore)
@@ -205,10 +213,22 @@ This is a list of regular expressions that match buffer
names."
(ignore ignore)
(bufferlo--include-exclude-buffers nil))
+(defun bufferlo--current-buffers (frame)
+ "Get the buffers of the current tab in frame"
+ (if bufferlo-include-buried-buffers
+ (append
+ (frame-parameter frame 'buffer-list)
+ (frame-parameter frame 'buried-buffer-list))
+ (frame-parameter frame 'buffer-list)))
+
(defun bufferlo--get-tab-buffers (tab)
"Extract buffers from the given tab structure"
(or
- (cdr (assq 'wc-bl tab))
+ (if bufferlo-include-buried-buffers
+ (append
+ (cdr (assq 'wc-bl tab))
+ (cdr (assq 'wc-bbl tab)))
+ (cdr (assq 'wc-bl tab)))
;; fallback to bufferlo-buffer-list, managed by bufferlo--window-state-*
(mapcar 'get-buffer
(car (cdr (assq 'bufferlo-buffer-list (assq 'ws tab)))))))
@@ -222,9 +242,9 @@ a tab index in the given frame."
(if tabnum
(let ((tab (nth tabnum (frame-parameter frame 'tabs))))
(if (eq 'current-tab (car tab))
- (frame-parameter frame 'buffer-list)
+ (bufferlo--current-buffers frame)
(bufferlo--get-tab-buffers tab)))
- (frame-parameter frame 'buffer-list))))
+ (bufferlo--current-buffers frame))))
(seq-filter #'buffer-live-p list)))
(defun bufferlo--window-state-get (oldfn &optional window writable)
@@ -238,7 +258,7 @@ Ignore buffers that are not able to be persisted in the
desktop file."
(desktop-save-buffer-p (buffer-file-name b)
(buffer-name b)
(with-current-buffer b major-mode)))
- (frame-parameter (window-frame window) 'buffer-list)))
+ (bufferlo--current-buffers (window-frame window))))
(names (mapcar #'buffer-name buffers)))
(if names (append ws (list (list 'bufferlo-buffer-list names))) ws))
ws)))
@@ -247,9 +267,12 @@ Ignore buffers that are not able to be persisted in the
desktop file."
"Restore the frame's buffer-list from the window state."
(ignore ignore)
(when bufferlo--desktop-advice-active
+ ;; FIXME: Currently there is no distinction between buffers and
+ ;; buried buffers for dektop.el.
(when-let (bl (car (cdr (assq 'bufferlo-buffer-list state))))
(set-frame-parameter (window-frame window) 'buffer-list
- (mapcar #'get-buffer bl)))))
+ (mapcar #'get-buffer bl))
+ (set-frame-parameter (window-frame window) 'buried-buffer-list nil))))
(defun bufferlo--activate (oldfn &rest args)
"Activate the advice for bufferlo--window-state-{get,put}."
@@ -264,7 +287,8 @@ If FRAME is nil, use the current frame."
(list (if frame
(with-selected-frame frame
(current-buffer))
- (current-buffer)))))
+ (current-buffer))))
+ (set-frame-parameter frame 'buried-buffer-list nil))
(defun bufferlo-remove (buffer)
"Remove BUFFER from the frame/tab's buffer list."
@@ -274,14 +298,32 @@ If FRAME is nil, use the current frame."
(bufferlo-buffer-list))))
(read-buffer "Remove buffer: " nil t
(lambda (b) (member (car b) lbs))))))
- (delete (get-buffer buffer) (frame-parameter nil 'buffer-list)))
+ (let ((bl (frame-parameter nil 'buffer-list))
+ (bbl (frame-parameter nil 'buried-buffer-list))
+ (buffer (get-buffer buffer)))
+ (set-frame-parameter nil 'buffer-list (delq buffer bl))
+ (set-frame-parameter nil 'buried-buffer-list (delq buffer bbl))
+ ;; Adapted from bury-buffer:
+ (cond
+ ((or (not (eq buffer (window-buffer)))
+ ;; Don't try to delete the minibuffer window, undedicate it
+ ;; or switch to a previous buffer in it.
+ (window-minibuffer-p)))
+ ((window--delete nil t))
+ (t
+ ;; Switch to another buffer in window.
+ (set-window-dedicated-p nil nil)
+ (switch-to-prev-buffer nil 'bury)))
+ nil))
(defun bufferlo-bury (&optional buffer-or-name)
- "Bury and remove the buffer specified by BUFFER-OR-NAME from the local list."
+ "Bury and remove the buffer specified by BUFFER-OR-NAME from the local list.
+If `bufferlo-include-buried-buffers' is set to `nil' then this has the same
+effect as a simple `bury-buffer'."
(interactive)
- (let ((buffer (or buffer-or-name (current-buffer))))
- (delete (get-buffer buffer) (frame-parameter nil 'buffer-list))
- (bury-buffer buffer-or-name)))
+ (let ((buffer (window-normalize-buffer buffer-or-name)))
+ (bury-buffer-internal buffer)
+ (bufferlo-remove buffer)))
(defun bufferlo--get-captured-buffers (&optional exclude-frame)
"Get all buffers that are in a local list of at least one frame or tab.
@@ -298,7 +340,7 @@ If EXCLUDE-FRAME is a frame, exclude the local buffer list
of this frame."
(mapcar
(lambda (f)
(unless (eq f exclude-frame)
- (frame-parameter f 'buffer-list)))
+ (bufferlo--current-buffers f)))
(frame-list))))))
(seq-uniq
(funcall flatten
@@ -316,7 +358,7 @@ If EXCLUDE-FRAME is a frame, exclude the local buffer list
of this frame."
"Get all buffers that are exclusive for this frame and tab.
If frame is nil, use the current frame."
(let ((other-bufs (bufferlo--get-captured-buffers (or frame
(selected-frame))))
- (this-bufs (frame-parameter frame 'buffer-list)))
+ (this-bufs (bufferlo--current-buffers frame)))
(seq-filter (lambda (b)
(not (memq b other-bufs)))
this-bufs)))
@@ -332,7 +374,7 @@ If FRAME is nil, use the current frame."
(let ((exclude (bufferlo--merge-regexp-list
(append '("a^") bufferlo-kill-buffers-exclude-filters)))
(kill-list (if killall
- (frame-parameter frame 'buffer-list)
+ (bufferlo--current-buffers frame)
(bufferlo--get-exclusive-buffers frame))))
(dolist (buffer kill-list)
(unless (string-match-p exclude (buffer-name buffer))
- [elpa] externals/bufferlo 914c381e9f 16/37: Fix buffer matching, (continued)
- [elpa] externals/bufferlo 914c381e9f 16/37: Fix buffer matching, ELPA Syncer, 2023/11/05
- [elpa] externals/bufferlo 46557c7f54 04/37: Minor changes, ELPA Syncer, 2023/11/05
- [elpa] externals/bufferlo c000ff8398 09/37: Add bufferlo-non-local-buffer-p, ELPA Syncer, 2023/11/05
- [elpa] externals/bufferlo 23cbe682c4 15/37: More parameters, ELPA Syncer, 2023/11/05
- [elpa] externals/bufferlo fbec2df3bd 28/37: Fix undelete-frame, ELPA Syncer, 2023/11/05
- [elpa] externals/bufferlo 598e20cf3b 31/37: Fix tab duplication on emacs < 29, ELPA Syncer, 2023/11/05
- [elpa] externals/bufferlo 6f3b79369f 02/37: Add README, ELPA Syncer, 2023/11/05
- [elpa] externals/bufferlo 83586af819 07/37: Fix empty buffer list, ELPA Syncer, 2023/11/05
- [elpa] externals/bufferlo d74f2c1ece 21/37: Add bufferlo-remove-non-exclusive-buffers, ELPA Syncer, 2023/11/05
- [elpa] externals/bufferlo 2fc945a81b 10/37: Update README, ELPA Syncer, 2023/11/05
- [elpa] externals/bufferlo 79eba76029 06/37: Include buried buffers,
ELPA Syncer <=
- [elpa] externals/bufferlo ecae697601 18/37: Fix local ibuffer buffer name, ELPA Syncer, 2023/11/05
- [elpa] externals/bufferlo 2bcbde24be 29/37: Update documentation, ELPA Syncer, 2023/11/05
- [elpa] externals/bufferlo 6d27fbd704 37/37: Add COPYING to elpaignore, ELPA Syncer, 2023/11/05
- [elpa] externals/bufferlo 1c16e19694 25/37: Fix frame predicate to include hidden buffers, ELPA Syncer, 2023/11/05
- [elpa] externals/bufferlo 795ef9e937 13/37: Fix README, ELPA Syncer, 2023/11/05
- [elpa] externals/bufferlo 1660b52975 24/37: Cleanup documentation, ELPA Syncer, 2023/11/05
- [elpa] externals/bufferlo 93154c1bc1 05/37: Add interactive auxiliary functions, ELPA Syncer, 2023/11/05
- [elpa] externals/bufferlo ef806d7155 19/37: Fix bug when switching to a tab with empty local buffer list, ELPA Syncer, 2023/11/05
- [elpa] externals/bufferlo a777218a3c 34/37: Stylistic improvements, ELPA Syncer, 2023/11/05
- [elpa] externals/bufferlo 521339ae25 20/37: Fix window-state-put, ELPA Syncer, 2023/11/05