]> code.delx.au - gnu-emacs/commitdiff
Ibuffer change marks
authorTino Calancha <tino.calancha@gmail.com>
Fri, 8 Jul 2016 01:55:22 +0000 (10:55 +0900)
committerTino Calancha <tino.calancha@gmail.com>
Fri, 8 Jul 2016 01:55:22 +0000 (10:55 +0900)
* lisp/ibuffer.el (ibuffer-change-marks): New command.
(ibuffer-mode-map): Bind it to '* c'.
(ibuffer-mode-groups-popup): Update menus.
(ibuffer-mode): Update mode doc.
; * etc/NEWS: Add entry for this new feature.

etc/NEWS
lisp/ibuffer.el

index deb18895555a494ed3ee7fe823e173cca9792fc0..f9fbe03e086c388bdb754a1935ab16fb1b49a364 100644 (file)
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -198,6 +198,9 @@ same as in modes where the character is not whitespace.
 
 ** Ibuffer
 
+---
+*** New command 'ibuffer-change-marks'; bound to '* c'.
+
 ---
 *** A new command 'ibuffer-mark-by-locked' to mark
 all locked buffers;  bound to '% L'.
index d67f95f84543c4d498b8274e85fbd289d76e6f77..4f266d909e458316e33322b77219aea548d4a943 100644 (file)
@@ -480,6 +480,7 @@ directory, like `default-directory'."
     (define-key map (kbd "DEL") 'ibuffer-unmark-backward)
     (define-key map (kbd "M-DEL") 'ibuffer-unmark-all)
     (define-key map (kbd "* *") 'ibuffer-unmark-all)
+    (define-key map (kbd "* c") 'ibuffer-change-marks)
     (define-key map (kbd "U") 'ibuffer-unmark-all-marks)
     (define-key map (kbd "* M") 'ibuffer-mark-by-mode)
     (define-key map (kbd "* m") 'ibuffer-mark-modified-buffers)
@@ -724,6 +725,9 @@ directory, like `default-directory'."
     (define-key-after map [menu-bar mark toggle-marks]
       '(menu-item "Toggle marks" ibuffer-toggle-marks
         :help "Unmark marked buffers, and mark unmarked buffers"))
+    (define-key-after map [menu-bar mark change-marks]
+      '(menu-item "Change marks" ibuffer-change-marks
+        :help "Change OLD mark for marked buffers with NEW"))
     (define-key-after map [menu-bar mark mark-forward]
       '(menu-item "Mark" ibuffer-mark-forward
         :help "Mark the buffer at point"))
@@ -1379,6 +1383,24 @@ group."
     (message "%s buffers marked" count))
   (ibuffer-redisplay t))
 
+(defun ibuffer-change-marks (&optional old new)
+  "Change all OLD marks to NEW marks.
+OLD and NEW are both characters used to mark buffers."
+  (interactive
+   (let* ((cursor-in-echo-area t)
+         (old (progn (message "Change (old mark): ") (read-char)))
+         (new (progn (message  "Change %c marks to (new mark): " old)
+                     (read-char))))
+     (list old new)))
+  (if (or (eq old ?\r) (eq new ?\r))
+      (ding)
+    (let ((count
+           (ibuffer-map-lines
+            (lambda (_buf mark)
+              (when (eq mark old)
+                (ibuffer-set-mark new) t)))))
+      (message "%s marks changed" count))))
+
 (defsubst ibuffer-get-region-and-prefix ()
   (let ((arg (prefix-numeric-value current-prefix-arg)))
     (if (use-region-p) (list (region-beginning) (region-end) arg)
@@ -2457,6 +2479,7 @@ Marking commands:
   `\\[ibuffer-mark-forward]' - Mark the buffer at point.
   `\\[ibuffer-toggle-marks]' - Unmark all currently marked buffers, and mark
           all unmarked buffers.
+  `\\[ibuffer-change-marks]' - Change the mark used on marked buffers.
   `\\[ibuffer-unmark-forward]' - Unmark the buffer at point.
   `\\[ibuffer-unmark-backward]' - Unmark the buffer at point, and move to the
           previous line.