Commit 18fb250d authored by Philippe Vaucher's avatar Philippe Vaucher Committed by Eli Zaretskii

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.
parent c72c2b04
Pipeline #1000 passed with stage
in 50 minutes and 53 seconds
......@@ -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
......
......@@ -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)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment