(require 'dired))
(require 'font-core)
+(require 'seq)
(require 'ibuffer-loaddefs)
;; These come from ibuf-ext.el, which can not be require'd at compile time
(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 "U") 'ibuffer-unmark-all-marks)
(define-key map (kbd "* M") 'ibuffer-mark-by-mode)
(define-key map (kbd "* m") 'ibuffer-mark-modified-buffers)
(define-key map (kbd "* u") 'ibuffer-mark-unsaved-buffers)
(define-key map (kbd "% n") 'ibuffer-mark-by-name-regexp)
(define-key map (kbd "% m") 'ibuffer-mark-by-mode-regexp)
(define-key map (kbd "% f") 'ibuffer-mark-by-file-name-regexp)
+ (define-key map (kbd "% c") 'ibuffer-mark-by-content-regexp)
+ (define-key map (kbd "% g") 'ibuffer-mark-by-content-regexp)
(define-key map (kbd "C-t") 'ibuffer-visit-tags-table)
(define-key map (kbd "R") 'ibuffer-do-rename-uniquely)
(define-key map (kbd "S") 'ibuffer-do-save)
(define-key map (kbd "T") 'ibuffer-do-toggle-read-only)
- (define-key map (kbd "U") 'ibuffer-do-replace-regexp)
+ (define-key map (kbd "r") 'ibuffer-do-replace-regexp)
(define-key map (kbd "V") 'ibuffer-do-revert)
(define-key map (kbd "W") 'ibuffer-do-view-and-eval)
(define-key map (kbd "X") 'ibuffer-do-shell-command-pipe)
(define-key-after map [menu-bar view dashes2]
'("--"))
- (define-key-after map [menu-bar view diff-with-file]
- '(menu-item "Diff with file" ibuffer-diff-with-file
- :help "View the differences between this buffer and its file"))
(define-key-after map [menu-bar view auto-mode]
'(menu-item "Auto Mode" ibuffer-auto-mode
:button (:toggle . ibuffer-auto-mode)
:help "Attempt to automatically update the Ibuffer buffer"))
- (define-key-after map [menu-bar view customize]
- '(menu-item "Customize Ibuffer" ibuffer-customize
- :help "Use Custom to customize Ibuffer"))
(define-key-after map [menu-bar mark]
(cons "Mark" (make-sparse-keymap "Mark")))
:help "Mark buffers which have not been viewed recently"))
(define-key-after map [menu-bar mark unmark-all]
'(menu-item "Unmark All" ibuffer-unmark-all))
+ (define-key-after map [menu-bar mark unmark-all-marks]
+ '(menu-item "Unmark All buffers" ibuffer-unmark-all-marks))
(define-key-after map [menu-bar mark dashes]
'("--"))
'(menu-item "Mark by file name (regexp)..."
ibuffer-mark-by-file-name-regexp
:help "Mark buffers whose file name matches a regexp"))
+ (define-key-after map [menu-bar mark ibuffer-mark-by-content-regexp]
+ '(menu-item "Mark by content (regexp)..."
+ ibuffer-mark-by-content-regexp
+ :help "Mark buffers whose content matches a regexp"))
map))
(define-key-after operate-map [do-view-and-eval]
'(menu-item "Eval (viewing buffer)..." ibuffer-do-view-and-eval
:help "Evaluate a Lisp form in each marked buffer while viewing it"))
+ (define-key-after operate-map [diff-with-file]
+ '(menu-item "Diff with file" ibuffer-diff-with-file
+ :help "View the differences between this buffer and its file"))
operate-map))
(popup-menu ibuffer-mode-groups-popup))
(let ((inhibit-read-only t))
(ibuffer-save-marks
- ;; hm. we could probably do this in a better fashion
- (ibuffer-unmark-all ?\r)
+ (ibuffer-unmark-all-marks)
(save-excursion
(goto-char eventpt)
(ibuffer-set-mark ibuffer-marked-char))
t)))))
(ibuffer-redisplay t))
+(defun ibuffer-unmark-all-marks ()
+ "Remove all marks from all marked buffers in Ibuffer."
+ (interactive)
+ ;; hm. we could probably do this in a better fashion
+ (ibuffer-unmark-all ?\r))
+
(defun ibuffer-toggle-marks (&optional group)
"Toggle which buffers are marked.
In other words, unmarked buffers become marked, and marked buffers
(cond ((zerop bufs) "No buffers")
((= 1 bufs) "1 buffer")
(t (format "%s buffers" bufs))))))
- (propertize (buffer-name) 'font-lock-face (ibuffer-buffer-name-face buffer mark)))
+ (let ((string (propertize (buffer-name)
+ 'font-lock-face
+ (ibuffer-buffer-name-face buffer mark))))
+ (if (not (seq-position string ?\n))
+ string
+ (replace-regexp-in-string
+ "\n" (propertize "^J" 'font-lock-face 'escape-glyph) string))))
(define-ibuffer-column size
(:inline t
(setq other-window-p t))
(let ((buf (get-buffer-create (or name "*Ibuffer*"))))
(if other-window-p
- (funcall (if noselect (lambda (buf) (display-buffer buf t)) #'pop-to-buffer) buf)
+ (or (and noselect (display-buffer buf t))
+ (pop-to-buffer buf t))
(funcall (if noselect #'display-buffer #'switch-to-buffer) buf))
(with-current-buffer buf
(save-selected-window
`\\[ibuffer-unmark-forward]' - Unmark the buffer at point.
`\\[ibuffer-unmark-backward]' - Unmark the buffer at point, and move to the
previous line.
- `\\[ibuffer-unmark-all]' - Unmark all marked buffers.
+ `\\[ibuffer-unmark-all]' - Unmark buffers marked with MARK.
+ `\\[ibuffer-unmark-all-marks]' - Unmark all marked buffers.
`\\[ibuffer-mark-by-mode]' - Mark buffers by major mode.
`\\[ibuffer-mark-unsaved-buffers]' - Mark all \"unsaved\" buffers.
This means that the buffer is modified, and has an associated file.
`\\[ibuffer-mark-by-name-regexp]' - Mark buffers by their name, using a regexp.
`\\[ibuffer-mark-by-mode-regexp]' - Mark buffers by their major mode, using a regexp.
`\\[ibuffer-mark-by-file-name-regexp]' - Mark buffers by their filename, using a regexp.
+ `\\[ibuffer-mark-by-content-regexp]' - Mark buffers by their content, using a regexp.
Filtering commands: