X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/dc711054e2d0fdba8da7fb0c5d3ce7260a8df714..a9cbf38768922939f9df665a8b544f9dd10728f5:/lisp/ibuf-ext.el diff --git a/lisp/ibuf-ext.el b/lisp/ibuf-ext.el index 5d24964362..e6fc1d67b8 100644 --- a/lisp/ibuf-ext.el +++ b/lisp/ibuf-ext.el @@ -1,6 +1,7 @@ ;;; ibuf-ext.el --- extensions for ibuffer -;; Copyright (C) 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc. +;; Copyright (C) 2000, 2001, 2002, 2003, 2004, +;; 2005 Free Software Foundation, Inc. ;; Author: Colin Walters ;; Maintainer: John Paul Wallington @@ -21,8 +22,8 @@ ;; You should have received a copy of the GNU General Public License ;; along with this program ; see the file COPYING. If not, write to -;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -;; Boston, MA 02111-1307, USA. +;; the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +;; Boston, MA 02110-1301, USA. ;;; Commentary: @@ -221,8 +222,7 @@ Currently, this only applies to `ibuffer-saved-filters' and (ibuffer-buf-matches-predicates buf ibuffer-always-show-predicates))))) (defun ibuffer-auto-update-changed () - (when ibuffer-auto-buffers-changed - (setq ibuffer-auto-buffers-changed nil) + (when (frame-or-buffer-changed-p 'ibuffer-auto-buffers-changed) (mapcar #'(lambda (buf) (ignore-errors (with-current-buffer buf @@ -242,10 +242,7 @@ With numeric ARG, enable auto-update if and only if ARG is positive." (if arg (plusp arg) (not ibuffer-auto-mode))) - (defadvice get-buffer-create (after ibuffer-notify-create activate) - (setq ibuffer-auto-buffers-changed t)) - (defadvice kill-buffer (after ibuffer-notify-kill activate) - (setq ibuffer-auto-buffers-changed t)) + (frame-or-buffer-changed-p 'ibuffer-auto-buffers-changed) (add-hook 'post-command-hook 'ibuffer-auto-update-changed) (ibuffer-update-mode-name)) @@ -645,16 +642,16 @@ The group will be added to `ibuffer-filter-group-kill-ring'." (ibuffer-update nil t)) ;;;###autoload -(defun ibuffer-kill-line (&optional arg) +(defun ibuffer-kill-line (&optional arg interactive-p) "Kill the filter group at point. See also `ibuffer-kill-filter-group'." - (interactive "P") + (interactive "P\np") (ibuffer-aif (save-excursion (ibuffer-forward-line 0) (get-text-property (point) 'ibuffer-filter-group-name)) (progn (ibuffer-kill-filter-group it)) - (funcall (if (interactive-p) #'call-interactively #'funcall) + (funcall (if interactive-p #'call-interactively #'funcall) #'kill-line arg))) (defun ibuffer-insert-filter-group-before (newgroup group) @@ -753,7 +750,10 @@ of replacing the current filters." "Disable all filters currently in effect in this buffer." (interactive) (setq ibuffer-filtering-qualifiers nil) - (ibuffer-update nil t)) + (let ((buf (ibuffer-current-buffer))) + (ibuffer-update nil t) + (when buf + (ibuffer-jump-to-buffer (buffer-name buf))))) ;;;###autoload (defun ibuffer-pop-filter () @@ -762,7 +762,10 @@ of replacing the current filters." (when (null ibuffer-filtering-qualifiers) (error "No filters in effect")) (pop ibuffer-filtering-qualifiers) - (ibuffer-update nil t)) + (let ((buf (ibuffer-current-buffer))) + (ibuffer-update nil t) + (when buf + (ibuffer-jump-to-buffer (buffer-name buf))))) (defun ibuffer-push-filter (qualifier) "Add QUALIFIER to `ibuffer-filtering-qualifiers'." @@ -1018,7 +1021,9 @@ currently used by buffers." (ibuffer-awhen (with-current-buffer buf (or buffer-file-name (and (boundp 'dired-directory) - dired-directory + (if (stringp dired-directory) + dired-directory + (car dired-directory)) (expand-file-name dired-directory)))) (string-match qualifier it))) @@ -1237,53 +1242,51 @@ 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 ((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)))))) + (interactive (list + (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!")) + (completing-read "Jump to buffer: " + table nil t)) + (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 ()