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

Support inserting images in tabulated-list-mode columns

* lisp/emacs-lisp/tabulated-list.el (tabulated-list-print-col):
Support using an image descriptor to insert an image in a column.
(tabulated-list-entries):
* doc/lispref/modes.texi (Tabulated List Mode): Update documentation
to reflect above change.
This commit is contained in:
Stefan Kangas 2021-11-02 17:33:35 +01:00
parent 093234f845
commit 2612488c36
3 changed files with 39 additions and 15 deletions

View file

@ -1150,10 +1150,11 @@ re-sorting entries. Comparison is done with @code{equal}.
@item @item
@var{contents} is a vector with the same number of elements as @var{contents} is a vector with the same number of elements as
@code{tabulated-list-format}. Each vector element is either a string, @code{tabulated-list-format}. Each vector element is either a string,
which is inserted into the buffer as-is, or a list @code{(@var{label} which is inserted into the buffer as-is, an image descriptor, which is
. @var{properties})}, which means to insert a text button by calling used to insert an image (@pxref{Image Descriptors}), or a list
@code{insert-text-button} with @var{label} and @var{properties} as @code{(@var{label} . @var{properties})}, which means to insert a text
arguments (@pxref{Making Buttons}). button by calling @code{insert-text-button} with @var{label} and
@var{properties} as arguments (@pxref{Making Buttons}).
There should be no newlines in any of these strings. There should be no newlines in any of these strings.
@end itemize @end itemize

View file

@ -406,6 +406,14 @@ This holds the value of the previous call to 'set-locale-environment'.
This macro can be used to change the locale temporarily while This macro can be used to change the locale temporarily while
executing code. executing code.
** Tabulated List Mode
+++
*** A column can now be set to an image descriptor.
The `tabulated-list-entries' variable now supports using an image
descriptor, which means to insert an image in that column instead of
text. See the documentation string of that variable for details.
+++ +++
** 'define-key' now understands a new strict 'kbd' representation for keys. ** 'define-key' now understands a new strict 'kbd' representation for keys.
The '(define-key map ["C-c M-f"] #'some-command)' syntax is now The '(define-key map ["C-c M-f"] #'some-command)' syntax is now

View file

@ -115,16 +115,25 @@ where:
This should be either a function, or a list. This should be either a function, or a list.
If a list, each element has the form (ID [DESC1 ... DESCN]), If a list, each element has the form (ID [DESC1 ... DESCN]),
where: where:
- ID is nil, or a Lisp object uniquely identifying this entry, - ID is nil, or a Lisp object uniquely identifying this entry,
which is used to keep the cursor on the \"same\" entry when which is used to keep the cursor on the \"same\" entry when
rearranging the list. Comparison is done with `equal'. rearranging the list. Comparison is done with `equal'.
- Each DESC is a column descriptor, one for each column - Each DESC is a column descriptor, one for each column
specified in `tabulated-list-format'. A descriptor is either specified in `tabulated-list-format'. The descriptor DESC is
a string, which is printed as-is, or a list (LABEL . PROPS), one of:
which means to use `insert-text-button' to insert a text
button with label LABEL and button properties PROPS. - A string, which is printed as-is, and must not contain any
The string, or button label, must not contain any newline. newlines.
- An image descriptor (a list), which is used to insert an
image (see Info node `(elisp) Image Descriptors').
- A list (LABEL . PROPS), which means to use
`insert-text-button' to insert a text button with label
LABEL and button properties PROPS. LABEL must not contain
any newlines.
If `tabulated-list-entries' is a function, it is called with no If `tabulated-list-entries' is a function, it is called with no
arguments and must return a list of the above form.") arguments and must return a list of the above form.")
@ -547,7 +556,9 @@ Return the column number after insertion."
(props (nthcdr 3 format)) (props (nthcdr 3 format))
(pad-right (or (plist-get props :pad-right) 1)) (pad-right (or (plist-get props :pad-right) 1))
(right-align (plist-get props :right-align)) (right-align (plist-get props :right-align))
(label (if (stringp col-desc) col-desc (car col-desc))) (label (cond ((stringp col-desc) col-desc)
((eq (car col-desc) 'image) " ")
(t (car col-desc))))
(label-width (string-width label)) (label-width (string-width label))
(help-echo (concat (car format) ": " label)) (help-echo (concat (car format) ": " label))
(opoint (point)) (opoint (point))
@ -571,11 +582,15 @@ Return the column number after insertion."
'display `(space :align-to ,(+ x shift)))) 'display `(space :align-to ,(+ x shift))))
(setq width (- width shift)) (setq width (- width shift))
(setq x (+ x shift)))) (setq x (+ x shift))))
(if (stringp col-desc) (cond ((stringp col-desc)
(insert (if (get-text-property 0 'help-echo label) (insert (if (get-text-property 0 'help-echo label)
label label
(propertize label 'help-echo help-echo))) (propertize label 'help-echo help-echo))))
(apply 'insert-text-button label (cdr col-desc))) ((eq (car col-desc) 'image)
(insert (propertize " "
'display col-desc
'help-echo help-echo)))
((apply 'insert-text-button label (cdr col-desc))))
(let ((next-x (+ x pad-right width))) (let ((next-x (+ x pad-right width)))
;; No need to append any spaces if this is the last column. ;; No need to append any spaces if this is the last column.
(when not-last-col (when not-last-col