1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2025-12-06 06:20:55 -08:00

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.
This commit is contained in:
Philippe Vaucher 2019-03-02 20:03:41 +01:00 committed by Eli Zaretskii
parent c72c2b04c2
commit 18fb250d67
3 changed files with 91 additions and 10 deletions

View file

@ -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)