diff options
author | Philippe Vaucher <philippe.vaucher@gmail.com> | 2019-03-02 20:03:41 +0100 |
---|---|---|
committer | Eli Zaretskii <eliz@gnu.org> | 2019-03-15 11:08:01 +0200 |
commit | 18fb250d6748bd31672a9d2bdd5dff99ac7f7743 (patch) | |
tree | 34178feabb3e6c19fdf3d5358f6a3d6ba6969b5f | |
parent | c72c2b04c2ed1688c9903cd87e7925b74a307541 (diff) | |
download | emacs-18fb250d6748bd31672a9d2bdd5dff99ac7f7743.tar.gz |
Customize tabulated-list sort indicators
This allows the user to customize the sorting indicators displayed
near the current column.
* lisp/emacs-lisp/tabulated-list.el (tabulated-list): New group.
(tabulated-list-gui-sort-indicator-asc)
(tabulated-list-gui-sort-indicator-desc)
(tabulated-list-tty-sort-indicator-asc)
(tabulated-list-tty-sort-indicator-desc): New defcustomd.
(tabulated-list-glyphless-char-display): Remove.
(tabulated-list-make-glyphless-char-display-table): New function.
* doc/lispref/modes.texi (Tabulated List Mode): Add documentation
for new options.
* etc/NEWS: Mention the new options.
-rw-r--r-- | doc/lispref/modes.texi | 23 | ||||
-rw-r--r-- | etc/NEWS | 13 | ||||
-rw-r--r-- | lisp/emacs-lisp/tabulated-list.el | 65 |
3 files changed, 91 insertions, 10 deletions
diff --git a/doc/lispref/modes.texi b/doc/lispref/modes.texi index 3f6bee9821d..1afbc5a5cee 100644 --- a/doc/lispref/modes.texi +++ b/doc/lispref/modes.texi @@ -1015,6 +1015,29 @@ list-processes}). The listing command should create or switch to a buffer, turn on the derived mode, specify the tabulated data, and finally call @code{tabulated-list-print} to populate the buffer. +@defopt tabulated-list-gui-sort-indicator-asc +This variable specifies the character to be used on GUI frames as an +indication that the column is sorted in the ascending order. + +Whenever you change the sort direction in Tabulated List buffers, this +indicator toggles between ascending (``asc'') and descending (``desc''). +@end defopt + +@defopt tabulated-list-gui-sort-indicator-desc +Like @code{tabulated-list-gui-sort-indicator-asc}, but used when the +column is sorted in the descending order. +@end defopt + +@defopt tabulated-list-tty-sort-indicator-asc +Like @code{tabulated-list-gui-sort-indicator-asc}, but used for +text-mode frames. +@end defopt + +@defopt tabulated-list-tty-sort-indicator-desc +Like @code{tabulated-list-tty-sort-indicator-asc}, but used when the +column is sorted in the descending order. +@end defopt + @defvar tabulated-list-format This buffer-local variable specifies the format of the Tabulated List data. Its value should be a vector. Each element of the vector @@ -923,7 +923,7 @@ been instrumented by Edebug. the XTerm window title. This feature is experimental and is disabled by default. -** grep +** Grep +++ *** rgrep, lgrep and zrgrep now hide part of the command line @@ -1194,6 +1194,17 @@ the 128...255 range, as expected. This allows to create and parent immediately a minibuffer-only child frame when making a frame. +** Tabulated List mode + ++++ +** New user options for tabulated list sort indicators. +You can now customize which sorting indicator character to display +near the current column in Tabulated Lists (see variables +'tabulated-list-gui-sort-indicator-asc', +'tabulated-list-gui-sort-indicator-desc', +'tabulated-list-tty-sort-indicator-asc', and +'tabulated-list-tty-sort-indicator-desc'). + * New Modes and Packages in Emacs 27.1 diff --git a/lisp/emacs-lisp/tabulated-list.el b/lisp/emacs-lisp/tabulated-list.el index 12d0151d67f..b23ce21027b 100644 --- a/lisp/emacs-lisp/tabulated-list.el +++ b/lisp/emacs-lisp/tabulated-list.el @@ -36,6 +36,43 @@ ;;; Code: +(defgroup tabulated-list nil + "Tabulated-list customization group." + :group 'convenience + :group 'display) + +(defcustom tabulated-list-gui-sort-indicator-asc ?▼ + "Indicator for columns sorted in ascending order, for GUI frames. +See `tabulated-list-tty-sort-indicator-asc' for the indicator used on +text-mode frames." + :group 'tabulated-list + :type 'character + :version "27.1") + +(defcustom tabulated-list-gui-sort-indicator-desc ?▲ + "Indicator for columns sorted in descending order, for GUI frames. +See `tabulated-list-tty-sort-indicator-desc' for the indicator used on +text-mode frames." + :group 'tabulated-list + :type 'character + :version "27.1") + +(defcustom tabulated-list-tty-sort-indicator-asc ?v + "Indicator for columns sorted in ascending order, for text-mode frames. +See `tabulated-list-gui-sort-indicator-asc' for the indicator used on GUI +frames." + :group 'tabulated-list + :type 'character + :version "27.1") + +(defcustom tabulated-list-tty-sort-indicator-desc ?^ + "Indicator for columns sorted in ascending order, for text-mode frames. +See `tabulated-list-gui-sort-indicator-asc' for the indicator used on GUI +frames." + :group 'tabulated-list + :type 'character + :version "27.1") + ;; The reason `tabulated-list-format' and other variables are ;; permanent-local is to make it convenient to switch to a different ;; major mode, switch back, and have the original Tabulated List data @@ -174,14 +211,20 @@ If ADVANCE is non-nil, move forward by one line afterwards." map) "Local keymap for `tabulated-list-mode' sort buttons.") -(defvar tabulated-list-glyphless-char-display +(defun tabulated-list-make-glyphless-char-display-table () + "Make the `glyphless-char-display' table used for text-mode frames. +This table is used for displaying the sorting indicators, see +variables `tabulated-list-tty-sort-indicator-asc' and +`tabulated-list-tty-sort-indicator-desc' for more information." (let ((table (make-char-table 'glyphless-char-display nil))) (set-char-table-parent table glyphless-char-display) - ;; Some text terminals can't display the Unicode arrows; be safe. - (aset table 9650 (cons nil "^")) - (aset table 9660 (cons nil "v")) - table) - "The `glyphless-char-display' table in Tabulated List buffers.") + (aset table + tabulated-list-gui-sort-indicator-desc + (cons nil (char-to-string tabulated-list-tty-sort-indicator-desc))) + (aset table + tabulated-list-gui-sort-indicator-asc + (cons nil (char-to-string tabulated-list-tty-sort-indicator-asc))) + table)) (defvar tabulated-list--header-string nil "Holds the header if `tabulated-list-use-header-line' is nil. @@ -231,8 +274,11 @@ Populated by `tabulated-list-init-header'.") (concat label (cond ((> (+ 2 (length label)) width) "") - ((cdr tabulated-list-sort-key) " ▲") - (t " ▼"))) + ((cdr tabulated-list-sort-key) + (format " %c" + tabulated-list-gui-sort-indicator-desc)) + (t (format " %c" + tabulated-list-gui-sort-indicator-asc)))) 'face 'bold 'tabulated-list-column-name label button-props)) @@ -655,7 +701,8 @@ as the ewoc pretty-printer." (setq-local truncate-lines t) (setq-local buffer-undo-list t) (setq-local revert-buffer-function #'tabulated-list-revert) - (setq-local glyphless-char-display tabulated-list-glyphless-char-display) + (setq-local glyphless-char-display + (tabulated-list-make-glyphless-char-display-table)) ;; Avoid messing up the entries' display just because the first ;; column of the first entry happens to begin with a R2L letter. (setq bidi-paragraph-direction 'left-to-right) |