comparison lisp/ibuffer.el @ 45687:434d9f56eab8

(ibuffer-category-alist): Delete. (ibuffer-get-category): Delete. (ibuffer-compile-make-eliding-form): Use `font-lock-face' instead of categories. (ibuffer-compile-format): Don't treat `name' category specially. (ibuffer-column name): Use `font-lock-face'. (filename-and-process): Ditto. (ibuffer-buffer-name-category): Renamed to `ibuffer-buffer-name-face'. Don't use categories. (ibuffer-update-title-and-summary): Use `font-lock-face'. (ibuffer-insert-filter-group): Ditto. (ibuffer-mode): Don't set up categories.
author Colin Walters <walters@gnu.org>
date Sat, 08 Jun 2002 20:42:26 +0000
parents 8fd13e1863ed
children 650fdcae4092
comparison
equal deleted inserted replaced
45686:25d73d0e2b98 45687:434d9f56eab8
740 740
741 (define-key ibuffer-mode-groups-popup [kill-filter-group] 741 (define-key ibuffer-mode-groups-popup [kill-filter-group]
742 '(menu-item "Kill filter group" 742 '(menu-item "Kill filter group"
743 ibuffer-kill-line 743 ibuffer-kill-line
744 :enable (and (featurep 'ibuf-ext) ibuffer-filter-groups))) 744 :enable (and (featurep 'ibuf-ext) ibuffer-filter-groups)))
745 (define-key ibuffer-mode-groups-popup [yank-filter-group] 745 (define-key ibuffer-mode-groups-popup [yank-filter-group]
746 '(menu-item "Yank last killed filter group" 746 '(menu-item "Yank last killed filter group"
747 ibuffer-yank 747 ibuffer-yank
748 :enable (and (featurep 'ibuf-ext) ibuffer-filter-group-kill-ring))) 748 :enable (and (featurep 'ibuf-ext) ibuffer-filter-group-kill-ring)))
749 749
750 (defvar ibuffer-name-map nil) 750 (defvar ibuffer-name-map nil)
775 775
776 (defvar ibuffer-delete-window-on-quit nil 776 (defvar ibuffer-delete-window-on-quit nil
777 "Whether or not to delete the window upon exiting `ibuffer'.") 777 "Whether or not to delete the window upon exiting `ibuffer'.")
778 778
779 (defvar ibuffer-did-modification nil) 779 (defvar ibuffer-did-modification nil)
780 (defvar ibuffer-category-alist nil)
781 780
782 (defvar ibuffer-sorting-functions-alist nil 781 (defvar ibuffer-sorting-functions-alist nil
783 "An alist of functions which describe how to sort buffers. 782 "An alist of functions which describe how to sort buffers.
784 783
785 Note: You most likely do not want to modify this variable directly; 784 Note: You most likely do not want to modify this variable directly;
1349 max -1 1348 max -1
1350 align :left 1349 align :left
1351 elide nil)) 1350 elide nil))
1352 (list sym min max align elide))) 1351 (list sym min max align elide)))
1353 form)) 1352 form))
1354
1355 (defsubst ibuffer-get-category (name)
1356 (cdr (assq name ibuffer-category-alist)))
1357 1353
1358 (defun ibuffer-compile-make-eliding-form (strvar elide from-end-p) 1354 (defun ibuffer-compile-make-eliding-form (strvar elide from-end-p)
1359 (let ((ellipsis (propertize ibuffer-eliding-string 'category 1355 (let ((ellipsis (propertize ibuffer-eliding-string 'font-lock-face 'bold)))
1360 (ibuffer-get-category
1361 'ibuffer-category-eliding-string))))
1362 (if (or elide ibuffer-elide-long-columns) 1356 (if (or elide ibuffer-elide-long-columns)
1363 `(if (> strlen 5) 1357 `(if (> strlen 5)
1364 ,(if from-end-p 1358 ,(if from-end-p
1365 `(concat ,ellipsis 1359 `(concat ,ellipsis
1366 (substring ,strvar 1360 (substring ,strvar
1467 `(insert 1461 `(insert
1468 (let ((ret ,arg)) 1462 (let ((ret ,arg))
1469 (put ',sym 'ibuffer-column-summary 1463 (put ',sym 'ibuffer-column-summary
1470 (cons ret (get ',sym 'ibuffer-column-summary))) 1464 (cons ret (get ',sym 'ibuffer-column-summary)))
1471 ret))) 1465 ret)))
1472 ;; We handle the `name' column specially. 1466 (lambda (arg sym)
1473 (if (eq sym 'ibuffer-make-column-name) 1467 `(insert ,arg))))
1474 (lambda (arg sym)
1475 `(let ((pt (point)))
1476 (insert ,arg)
1477 (put-text-property pt (point)
1478 'category
1479 (ibuffer-buffer-name-category buffer mark))))
1480 (lambda (arg sym)
1481 `(insert ,arg)))))
1482 (mincompform `(< strlen ,(if (integerp min) 1468 (mincompform `(< strlen ,(if (integerp min)
1483 min 1469 min
1484 'min))) 1470 'min)))
1485 (maxcompform `(> strlen ,(if (integerp max) 1471 (maxcompform `(> strlen ,(if (integerp max)
1486 max 1472 max
1609 (define-ibuffer-column name (:inline t 1595 (define-ibuffer-column name (:inline t
1610 :props 1596 :props
1611 ('mouse-face 'highlight 'keymap ibuffer-name-map 1597 ('mouse-face 'highlight 'keymap ibuffer-name-map
1612 'ibuffer-name-column t 1598 'ibuffer-name-column t
1613 'help-echo "mouse-1: mark this buffer\nmouse-2: select this buffer\nmouse-3: operate on this buffer")) 1599 'help-echo "mouse-1: mark this buffer\nmouse-2: select this buffer\nmouse-3: operate on this buffer"))
1614 (buffer-name)) 1600 (propertize (buffer-name) 'font-lock-face (ibuffer-buffer-name-face buffer mark)))
1615 1601
1616 (define-ibuffer-column size (:inline t) 1602 (define-ibuffer-column size (:inline t)
1617 (format "%s" (buffer-size))) 1603 (format "%s" (buffer-size)))
1618 1604
1619 (define-ibuffer-column mode (:inline t 1605 (define-ibuffer-column mode (:inline t
1639 (define-ibuffer-column filename-and-process (:name "Filename/Process") 1625 (define-ibuffer-column filename-and-process (:name "Filename/Process")
1640 (let ((proc (get-buffer-process buffer)) 1626 (let ((proc (get-buffer-process buffer))
1641 (filename (ibuffer-make-column-filename buffer mark ibuffer-buf))) 1627 (filename (ibuffer-make-column-filename buffer mark ibuffer-buf)))
1642 (if proc 1628 (if proc
1643 (concat (propertize (format "(%s %s) " proc (process-status proc)) 1629 (concat (propertize (format "(%s %s) " proc (process-status proc))
1644 'category 1630 'font-lock-face 'italic)
1645 (with-current-buffer ibuffer-buf
1646 (ibuffer-get-category 'ibuffer-category-process)))
1647 filename) 1631 filename)
1648 filename))) 1632 filename)))
1649 1633
1650 (defun ibuffer-format-column (str width alignment) 1634 (defun ibuffer-format-column (str width alignment)
1651 (let ((left (make-string (/ width 2) ? )) 1635 (let ((left (make-string (/ width 2) ? ))
1653 (case alignment 1637 (case alignment
1654 (:right (concat left right str)) 1638 (:right (concat left right str))
1655 (:center (concat left str right)) 1639 (:center (concat left str right))
1656 (t (concat str left right))))) 1640 (t (concat str left right)))))
1657 1641
1658 (defun ibuffer-buffer-name-category (buf mark) 1642 (defun ibuffer-buffer-name-face (buf mark)
1659 (cond ((char-equal mark ibuffer-marked-char) 1643 (cond ((char-equal mark ibuffer-marked-char)
1660 (ibuffer-get-category 'ibuffer-category-marked)) 1644 ibuffer-marked-face)
1661 ((char-equal mark ibuffer-deletion-char) 1645 ((char-equal mark ibuffer-deletion-char)
1662 (ibuffer-get-category 'ibuffer-category-deleted)) 1646 ibuffer-deletion-face)
1663 (t 1647 (t
1664 (let ((level -1) 1648 (let ((level -1)
1665 (i 0)
1666 result) 1649 result)
1667 (dolist (e ibuffer-fontification-alist result) 1650 (dolist (e ibuffer-fontification-alist result)
1668 (when (and (> (car e) level) 1651 (when (and (> (car e) level)
1669 (with-current-buffer buf 1652 (with-current-buffer buf
1670 (eval (cadr e)))) 1653 (eval (nth 1 e))))
1671 (setq level (car e) 1654 (setq level (car e)
1672 result (car (nth i font-lock-category-alist)))) 1655 result (nth 2 e))))))))
1673 (incf i))))))
1674 1656
1675 (defun ibuffer-insert-buffer-line (buffer mark format) 1657 (defun ibuffer-insert-buffer-line (buffer mark format)
1676 "Insert a line describing BUFFER and MARK using FORMAT." 1658 "Insert a line describing BUFFER and MARK using FORMAT."
1677 (assert (eq major-mode 'ibuffer-mode)) 1659 (assert (eq major-mode 'ibuffer-mode))
1678 (let ((beg (point))) 1660 (let ((beg (point)))
1920 ?- 1902 ?-
1921 ? )) 1903 ? ))
1922 str))) 1904 str)))
1923 (insert "\n")) 1905 (insert "\n"))
1924 (point)) 1906 (point))
1925 `(ibuffer-title t category ,(ibuffer-get-category 'ibuffer-category-title))) 1907 `(ibuffer-title t font-lock-face ,ibuffer-title-face))
1926 ;; Now, insert the summary columns. 1908 ;; Now, insert the summary columns.
1927 (goto-char (point-max)) 1909 (goto-char (point-max))
1928 (if (get-text-property (1- (point-max)) 'ibuffer-summary) 1910 (if (get-text-property (1- (point-max)) 'ibuffer-summary)
1929 (delete-region (previous-single-property-change 1911 (delete-region (previous-single-property-change
1930 (point-max) 'ibuffer-summary) 1912 (point-max) 'ibuffer-summary)
2064 (progn 2046 (progn
2065 (insert "[ " display-name " ]") 2047 (insert "[ " display-name " ]")
2066 (point)) 2048 (point))
2067 `(ibuffer-filter-group-name 2049 `(ibuffer-filter-group-name
2068 ,name 2050 ,name
2069 category ,(ibuffer-get-category 'ibuffer-category-filter-group-name) 2051 font-lock-face ,ibuffer-filter-group-name-face
2070 keymap ,ibuffer-mode-filter-group-map 2052 keymap ,ibuffer-mode-filter-group-map
2071 mouse-face highlight 2053 mouse-face highlight
2072 help-echo ,(concat filter-string "mouse-1: toggle marks in this group\nmouse-2: hide/show this filtering group "))) 2054 help-echo ,(concat filter-string "mouse-1: toggle marks in this group\nmouse-2: hide/show this filtering group ")))
2073 (insert "\n") 2055 (insert "\n")
2074 (when bmarklist 2056 (when bmarklist
2394 (buffer-disable-undo) 2376 (buffer-disable-undo)
2395 (setq truncate-lines ibuffer-truncate-lines) 2377 (setq truncate-lines ibuffer-truncate-lines)
2396 ;; This makes things less ugly for Emacs 21 users with a non-nil 2378 ;; This makes things less ugly for Emacs 21 users with a non-nil
2397 ;; `show-trailing-whitespace'. 2379 ;; `show-trailing-whitespace'.
2398 (setq show-trailing-whitespace nil) 2380 (setq show-trailing-whitespace nil)
2399
2400 (set (make-local-variable 'font-lock-category-alist) nil)
2401 (set (make-local-variable 'ibuffer-category-alist) nil)
2402 (dolist (elt (list
2403 (cons (make-symbol "ibuffer-category-title")
2404 ibuffer-title-face)
2405 (cons (make-symbol "ibuffer-category-marked")
2406 ibuffer-marked-face)
2407 (cons (make-symbol "ibuffer-category-deleted")
2408 ibuffer-deletion-face)
2409 (cons (make-symbol "ibuffer-category-filter-group-name")
2410 ibuffer-filter-group-name-face)
2411 (cons (make-symbol "ibuffer-category-process")
2412 'italic)
2413 (cons (make-symbol "ibuffer-category-eliding-string")
2414 'bold)))
2415 (push (cons (intern (symbol-name (car elt))) (car elt)) ibuffer-category-alist)
2416 (push elt font-lock-category-alist))
2417 (let ((i (1- (length ibuffer-fontification-alist))))
2418 (while (>= i 0)
2419 (push (cons (make-symbol (format "ibuffer-category-%d" i))
2420 (nth 2 (nth i ibuffer-fontification-alist)))
2421 font-lock-category-alist)
2422 (decf i)))
2423 (set (make-local-variable 'revert-buffer-function) 2381 (set (make-local-variable 'revert-buffer-function)
2424 #'ibuffer-update) 2382 #'ibuffer-update)
2425 (set (make-local-variable 'ibuffer-sorting-mode) 2383 (set (make-local-variable 'ibuffer-sorting-mode)
2426 ibuffer-default-sorting-mode) 2384 ibuffer-default-sorting-mode)
2427 (set (make-local-variable 'ibuffer-sorting-reversep) 2385 (set (make-local-variable 'ibuffer-sorting-reversep)