summaryrefslogtreecommitdiff
path: root/lisp/buff-menu.el
diff options
context:
space:
mode:
authorTino Calancha <tino.calancha@gmail.com>2016-11-22 15:23:50 +0900
committerTino Calancha <tino.calancha@gmail.com>2016-11-22 15:23:50 +0900
commit27b754cb4432ece3efe3fc9d8e52a869ae061b7f (patch)
treea0b2c5c7a1747c07c41187723b629280a9e6f05c /lisp/buff-menu.el
parent3c194dafe080c45528063a20075f8cd53a3760b3 (diff)
downloademacs-27b754cb4432ece3efe3fc9d8e52a869ae061b7f.tar.gz
buff-menu: Add command to unmark all buffers
Bind 'U' in buff-menu, bs and electric-buff-menu to commands to unmark all buffers (Bug#24880). * lisp/emacs-lisp/tabulated-list.el (tabulated-list-header-overlay-p): New predicate; return non-nil if tabulated-list has a fake header. * lisp/buff-menu.el (Buffer-menu-unmark-all-buffers): New command; remove all flags that use a particular mark from all the lines. Bind it to 'M-DEL'. (Buffer-menu-unmark-all): New command; remove all flags from all the lines. Bind it to 'U'. (Buffer-menu-marker-char, Buffer-menu-del-char): New variables. (Buffer-menu-delete, Buffer-menu-mark): Use them. (Buffer-menu-mode-map): Update menus. (Buffer-menu-mode): Update mode doc. * lisp/bs.el (bs-unmark-all, bs-unmark-previous): New commands. (bs-mode-map): Bind them to 'U' and '<backspace>' respectively. (bs-mode): Update mode doc. * lisp/ebuff-menu.el (electric-buffer-menu-mode-map): Bind Buffer-menu-unmark-all to 'U' and Buffer-menu-unmark-all-buffers to 'M-DEL'. (bs--down, bs-down, bs--up, bs-up, bs-unmark-current, bs-mark-current): Use point instead of cursor in doc string. (electric-buffer-list): Update mode doc. * doc/emacs/buffers.texi (Several Buffers): Mention Buffer-menu-unmark-all and Buffer-menu-unmark-all-buffers. ; * etc/NEWS: Add an entry per each new feature.
Diffstat (limited to 'lisp/buff-menu.el')
-rw-r--r--lisp/buff-menu.el44
1 files changed, 41 insertions, 3 deletions
diff --git a/lisp/buff-menu.el b/lisp/buff-menu.el
index 47426285c80..f34c814feab 100644
--- a/lisp/buff-menu.el
+++ b/lisp/buff-menu.el
@@ -37,6 +37,12 @@
:group 'tools
:group 'convenience)
+(defvar Buffer-menu-marker-char ?>
+ "The mark character for marked buffers.")
+
+(defvar Buffer-menu-del-char ?D
+ "Character used to flag buffers for deletion.")
+
(defcustom Buffer-menu-use-header-line t
"If non-nil, use the header line to display Buffer Menu column titles."
:type 'boolean
@@ -121,6 +127,8 @@ commands.")
(define-key map "\177" 'Buffer-menu-backup-unmark)
(define-key map "~" 'Buffer-menu-not-modified)
(define-key map "u" 'Buffer-menu-unmark)
+ (define-key map "\M-\177" 'Buffer-menu-unmark-all-buffers)
+ (define-key map "U" 'Buffer-menu-unmark-all)
(define-key map "m" 'Buffer-menu-mark)
(define-key map "t" 'Buffer-menu-visit-tags-table)
(define-key map "%" 'Buffer-menu-toggle-read-only)
@@ -197,6 +205,12 @@ commands.")
(bindings--define-key menu-map [umk]
'(menu-item "Unmark" Buffer-menu-unmark
:help "Cancel all requested operations on buffer on this line and move down"))
+ (bindings--define-key menu-map [umkab]
+ '(menu-item "Remove marks..." Buffer-menu-unmark-all-buffers
+ :help "Cancel a requested operation on all buffers"))
+ (bindings--define-key menu-map [umka]
+ '(menu-item "Unmark all" Buffer-menu-unmark-all
+ :help "Cancel all requested operations on buffers"))
(bindings--define-key menu-map [mk]
'(menu-item "Mark" Buffer-menu-mark
:help "Mark buffer on this line for being displayed by v command"))
@@ -239,6 +253,8 @@ In Buffer Menu mode, the following commands are defined:
\\[Buffer-menu-execute] Delete or save marked buffers.
\\[Buffer-menu-unmark] Remove all marks from current line.
With prefix argument, also move up one line.
+\\[Buffer-menu-unmark-all-buffers] Remove a particular mark from all lines.
+\\[Buffer-menu-unmark-all] Remove all marks from all lines.
\\[Buffer-menu-backup-unmark] Back up a line and remove marks.
\\[Buffer-menu-toggle-read-only] Toggle read-only status of buffer on this line.
\\[revert-buffer] Update the list of buffers.
@@ -346,7 +362,7 @@ is nil or omitted, and signal an error otherwise."
"Mark the Buffer menu entry at point for later display.
It will be displayed by the \\<Buffer-menu-mode-map>\\[Buffer-menu-select] command."
(interactive)
- (tabulated-list-set-col 0 ">" t)
+ (tabulated-list-set-col 0 (char-to-string Buffer-menu-marker-char) t)
(forward-line))
(defun Buffer-menu-unmark (&optional backup)
@@ -356,6 +372,28 @@ Optional prefix arg means move up."
(Buffer-menu--unmark)
(forward-line (if backup -1 1)))
+(defun Buffer-menu-unmark-all-buffers (mark)
+ "Cancel a requested operation on all buffers.
+MARK is the character to flag the operation on the buffers.
+When called interactively prompt for MARK; RET remove all marks."
+ (interactive "cRemove marks (RET means all):")
+ (save-excursion
+ (goto-char (point-min))
+ (when (tabulated-list-header-overlay-p)
+ (forward-line))
+ (while (not (eobp))
+ (let ((xmarks (list (aref (tabulated-list-get-entry) 0)
+ (aref (tabulated-list-get-entry) 2))))
+ (when (or (char-equal mark ?\r)
+ (member (char-to-string mark) xmarks))
+ (Buffer-menu--unmark)))
+ (forward-line))))
+
+(defun Buffer-menu-unmark-all ()
+ "Cancel all requested operations on buffers."
+ (interactive)
+ (Buffer-menu-unmark-all-buffers ?\r))
+
(defun Buffer-menu-backup-unmark ()
"Move up and cancel all requested operations on buffer on line above."
(interactive)
@@ -382,12 +420,12 @@ buffers to delete; a negative ARG means to delete backwards."
(setq arg 1))
(while (> arg 0)
(when (Buffer-menu-buffer)
- (tabulated-list-set-col 0 "D" t))
+ (tabulated-list-set-col 0 (char-to-string Buffer-menu-del-char) t))
(forward-line 1)
(setq arg (1- arg)))
(while (< arg 0)
(when (Buffer-menu-buffer)
- (tabulated-list-set-col 0 "D" t))
+ (tabulated-list-set-col 0 (char-to-string Buffer-menu-del-char) t))
(forward-line -1)
(setq arg (1+ arg))))