diff options
author | John Paul Wallington <jpw@pobox.com> | 2003-07-05 11:24:00 +0000 |
---|---|---|
committer | John Paul Wallington <jpw@pobox.com> | 2003-07-05 11:24:00 +0000 |
commit | 34a4faa04b8ad2d969fabd543b62c6c244a7fa17 (patch) | |
tree | 7dacc891622082409a08d4f1ce519f75930ba74e /lisp/ibuffer.el | |
parent | 2bf1ab74960f65e3e77d60ce02115493e8cd9018 (diff) | |
download | emacs-34a4faa04b8ad2d969fabd543b62c6c244a7fa17.tar.gz |
(ibuffer-backward-line, ibuffer-forward-line)
(ibuffer-mark-interactive): Use `or' instead of `unless'.
(define-ibuffer-column name): Add summarizer.
(define-ibuffer-column size): Likewise.
(define-ibuffer-column filename): Likewise.
(define-ibuffer-column process): Likewise. Change BODY's output too.
(define-ibuffer-column filename-and-process): Likewise, likewise.
(ibuffer): Remove local vars `already-in' and `need-update'.
Diffstat (limited to 'lisp/ibuffer.el')
-rw-r--r-- | lisp/ibuffer.el | 111 |
1 files changed, 79 insertions, 32 deletions
diff --git a/lisp/ibuffer.el b/lisp/ibuffer.el index 2b996490fad..23bf4e55d68 100644 --- a/lisp/ibuffer.el +++ b/lisp/ibuffer.el @@ -757,11 +757,13 @@ directory, like `default-directory'." (define-key ibuffer-mode-groups-popup [kill-filter-group] '(menu-item "Kill filter group" ibuffer-kill-line - :enable (and (featurep 'ibuf-ext) ibuffer-filter-groups))) + :enable (and (featurep 'ibuf-ext) + ibuffer-filter-groups))) (define-key ibuffer-mode-groups-popup [yank-filter-group] '(menu-item "Yank last killed filter group" ibuffer-yank - :enable (and (featurep 'ibuf-ext) ibuffer-filter-group-kill-ring))) + :enable (and (featurep 'ibuf-ext) + ibuffer-filter-group-kill-ring))) (defvar ibuffer-name-map (let ((map (make-sparse-keymap))) @@ -904,15 +906,15 @@ width and the longest string in LIST." (defun ibuffer-backward-line (&optional arg skip-group-names) "Move backwards ARG lines, wrapping around the list if necessary." (interactive "P") - (unless arg - (setq arg 1)) + (or arg (setq arg 1)) (beginning-of-line) (while (> arg 0) (forward-line -1) (when (and ibuffer-movement-cycle (or (get-text-property (point) 'ibuffer-title) (and skip-group-names - (get-text-property (point) 'ibuffer-filter-group-name)))) + (get-text-property (point) + 'ibuffer-filter-group-name)))) (goto-char (point-max)) (beginning-of-line)) (ibuffer-skip-properties (append '(ibuffer-summary) @@ -928,8 +930,7 @@ width and the longest string in LIST." (defun ibuffer-forward-line (&optional arg skip-group-names) "Move forward ARG lines, wrapping around the list if necessary." (interactive "P") - (unless arg - (setq arg 1)) + (or arg (setq arg 1)) (beginning-of-line) (when (and ibuffer-movement-cycle (or (eobp) @@ -1266,8 +1267,7 @@ If point is on a group name, this function operates on that group." (defun ibuffer-mark-interactive (arg mark movement) (assert (eq major-mode 'ibuffer-mode)) - (unless arg - (setq arg 1)) + (or arg (setq arg 1)) (ibuffer-forward-line 0) (ibuffer-aif (get-text-property (point) 'ibuffer-filter-group-name) (progn @@ -1391,7 +1391,7 @@ If point is on a group name, this function operates on that group." (defun ibuffer-compile-make-format-form (strvar widthform alignment) (let* ((left `(make-string tmp2 ? )) - (right `(make-string (- tmp1 tmp2) ? ))) + (right `(make-string (- tmp1 tmp2) ? ))) `(progn (setq tmp1 ,widthform tmp2 (/ tmp1 2)) @@ -1602,7 +1602,7 @@ If point is on a group name, this function operates on that group." (define-ibuffer-column read-only (:name "R" :inline t) (if buffer-read-only - "%" + (string ibuffer-read-only-char) " ")) (define-ibuffer-column modified (:name "M" :inline t) @@ -1610,16 +1610,33 @@ If point is on a group name, this function operates on that group." (string ibuffer-modified-char) " ")) -(define-ibuffer-column name (:inline t - :props - ('mouse-face 'highlight 'keymap ibuffer-name-map - 'ibuffer-name-column t - 'help-echo '(if tooltip-mode - "mouse-1: mark this buffer\nmouse-2: select this buffer\nmouse-3: operate on this buffer" - "mouse-1: mark buffer mouse-2: select buffer mouse-3: operate"))) +(define-ibuffer-column name + (:inline t + :props + ('mouse-face 'highlight 'keymap ibuffer-name-map + 'ibuffer-name-column t + 'help-echo '(if tooltip-mode + "mouse-1: mark this buffer\nmouse-2: select this buffer\nmouse-3: operate on this buffer" + "mouse-1: mark buffer mouse-2: select buffer mouse-3: operate")) + :summarizer + (lambda (strings) + (let ((bufs (length strings))) + (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))) -(define-ibuffer-column size (:inline t) +(define-ibuffer-column size + (:inline t + :summarizer + (lambda (column-strings) + (let ((total 0)) + (dolist (string column-strings) + (setq total + ;; like, ewww ... + (+ (float (string-to-int string)) + total))) + (format "%.0f" total)))) (format "%s" (buffer-size))) (define-ibuffer-column mode (:inline t @@ -1629,12 +1646,24 @@ If point is on a group name, this function operates on that group." 'help-echo "mouse-2: filter by this mode")) (format "%s" mode-name)) -(define-ibuffer-column process () +(define-ibuffer-column process + (:summarizer + (lambda (strings) + (let ((total (length (delete "" strings)))) + (cond ((zerop total) "No processes") + ((= 1 total) "1 process") + (t (format "%d processes" total)))))) (ibuffer-aif (get-buffer-process buffer) (format "(%s %s)" it (process-status it)) - "none")) - -(define-ibuffer-column filename () + "")) + +(define-ibuffer-column filename + (:summarizer + (lambda (strings) + (let ((total (length (delete "" strings)))) + (cond ((zerop total) "No files") + ((= 1 total) "1 file") + (t (format "%d files" total)))))) (let ((directory-abbrev-alist ibuffer-directory-abbrev-alist)) (abbreviate-file-name (or buffer-file-name @@ -1642,13 +1671,34 @@ If point is on a group name, this function operates on that group." dired-directory) "")))) -(define-ibuffer-column filename-and-process (:name "Filename/Process") +(define-ibuffer-column filename-and-process + (:name "Filename/Process" + :summarizer + (lambda (strings) + (setq strings (delete "" strings)) + (let ((procs 0) + (files 0)) + (dolist (string strings) + (if (string-match "\\(\?:\\`(\[\[:ascii:\]\]\+)\\)" string) + (progn (setq procs (1+ procs)) + (if (< (match-end 0) (length string)) + (setq files (1+ files)))) + (setq files (1+ files)))) + (concat (cond ((zerop files) "No files") + ((= 1 files) "1 file") + (t (format "%d files" files))) + ", " + (cond ((zerop procs) "no processes") + ((= 1 procs) "1 process") + (t (format "%d processes" procs))))))) (let ((proc (get-buffer-process buffer)) (filename (ibuffer-make-column-filename buffer mark))) (if proc - (concat (propertize (format "(%s %s) " proc (process-status proc)) + (concat (propertize (format "(%s %s)" proc (process-status proc)) 'font-lock-face 'italic) - filename) + (if (> (length filename) 0) + (format " %s" filename) + "")) filename))) (defun ibuffer-format-column (str width alignment) @@ -2182,9 +2232,7 @@ locally in this buffer." (interactive "P") (when ibuffer-use-other-window (setq other-window-p t)) - (let* ((buf (get-buffer-create (or name "*Ibuffer*"))) - (already-in (eq (current-buffer) buf)) - (need-update nil)) + (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) (funcall (if noselect #'display-buffer #'switch-to-buffer) buf)) @@ -2193,9 +2241,8 @@ locally in this buffer." ;; We switch to the buffer's window in order to be able ;; to modify the value of point (select-window (get-buffer-window buf)) - (unless (eq major-mode 'ibuffer-mode) - (ibuffer-mode) - (setq need-update t)) + (or (eq major-mode 'ibuffer-mode) + (ibuffer-mode)) (setq ibuffer-delete-window-on-quit other-window-p) (when shrink (setq ibuffer-shrink-to-minimum-size shrink)) |