summaryrefslogtreecommitdiff
path: root/lisp/ibuf-ext.el
diff options
context:
space:
mode:
authorJohn Paul Wallington <jpw@pobox.com>2004-06-02 22:07:42 +0000
committerJohn Paul Wallington <jpw@pobox.com>2004-06-02 22:07:42 +0000
commit0bdd7ae4f9b0b27373b58865b9d0a747f7758071 (patch)
tree264e8266b48dfce75a7828b5bba8c41e7f645d56 /lisp/ibuf-ext.el
parent86d373e6b2e271fd2a5c98cee8a9710c23c5fda8 (diff)
downloademacs-0bdd7ae4f9b0b27373b58865b9d0a747f7758071.tar.gz
2004-06-02 Romain Francoise <romain@orebokech.com>
* ibuf-ext.el (ibuffer-jump-to-buffer): Add support for filter groups: if the user asks for a hidden buffer, open the corresponding filter group to expose it. * ibuffer.el (ibuffer-mode-map): Add key binding `M-g' to `ibuffer-jump-to-buffer'. (ibuffer-jump-offer-only-visible-buffers): New user option.
Diffstat (limited to 'lisp/ibuf-ext.el')
-rw-r--r--lisp/ibuf-ext.el69
1 files changed, 56 insertions, 13 deletions
diff --git a/lisp/ibuf-ext.el b/lisp/ibuf-ext.el
index 9492d5565f6..96678d2bc9a 100644
--- a/lisp/ibuf-ext.el
+++ b/lisp/ibuf-ext.el
@@ -1,6 +1,6 @@
;;; ibuf-ext.el --- extensions for ibuffer
-;; Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc.
+;; Copyright (C) 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
;; Author: Colin Walters <walters@verbum.org>
;; Maintainer: John Paul Wallington <jpw@gnu.org>
@@ -1224,19 +1224,62 @@ to move by. The default is `ibuffer-marked-char'."
;;;###autoload
(defun ibuffer-jump-to-buffer (name)
- "Move point to the buffer whose name is NAME."
+ "Move point to the buffer whose name is NAME.
+
+If called interactively, prompt for a buffer name and go to the
+corresponding line in the Ibuffer buffer. If said buffer is in a
+hidden group filter, open it.
+
+If `ibuffer-jump-offer-only-visible-buffers' is non-nil, only offer
+visible buffers in the completion list. Calling the command with
+a prefix argument reverses the meaning of that variable."
(interactive (list nil))
- (let ((table (mapcar #'(lambda (x)
- (cons (buffer-name (car x))
- (caddr x)))
- (ibuffer-current-state-list t))))
- (when (null table)
- (error "No buffers!"))
- (when (interactive-p)
- (setq name (completing-read "Jump to buffer: " table nil t)))
- (ibuffer-aif (assoc name table)
- (goto-char (cdr it))
- (error "No buffer with name %s" name))))
+ (let ((only-visible ibuffer-jump-offer-only-visible-buffers))
+ (when current-prefix-arg
+ (setq only-visible (not only-visible)))
+ (if only-visible
+ (let ((table (mapcar #'(lambda (x)
+ (buffer-name (car x)))
+ (ibuffer-current-state-list))))
+ (when (null table)
+ (error "No buffers!"))
+ (when (interactive-p)
+ (setq name (completing-read "Jump to buffer: "
+ table nil t))))
+ (when (interactive-p)
+ (setq name (read-buffer "Jump to buffer: " nil t))))
+ (when (not (string= "" name))
+ (let (buf-point)
+ ;; Blindly search for our buffer: it is very likely that it is
+ ;; not in a hidden filter group.
+ (ibuffer-map-lines #'(lambda (buf marks)
+ (when (string= (buffer-name buf) name)
+ (setq buf-point (point))
+ nil))
+ t nil)
+ (when (and
+ (null buf-point)
+ (not (null ibuffer-hidden-filter-groups)))
+ ;; We did not find our buffer. It must be in a hidden filter
+ ;; group, so go through all hidden filter groups to find it.
+ (catch 'found
+ (dolist (group ibuffer-hidden-filter-groups)
+ (ibuffer-jump-to-filter-group group)
+ (ibuffer-toggle-filter-group)
+ (ibuffer-map-lines #'(lambda (buf marks)
+ (when (string= (buffer-name buf) name)
+ (setq buf-point (point))
+ nil))
+ t group)
+ (if buf-point
+ (throw 'found nil)
+ (ibuffer-toggle-filter-group)))))
+ (if (null buf-point)
+ ;; Still not found even though we expanded all hidden filter
+ ;; groups: that must be because it's hidden by predicate:
+ ;; we won't bother trying to display it.
+ (error "No buffer with name %s" name)
+ (goto-char buf-point))))))
;;;###autoload
(defun ibuffer-diff-with-file ()