1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2024-12-04 08:47:11 +00:00

Add support for column background colors in vtable

* doc/misc/vtable.texi (Making A Table): Document it.

* lisp/emacs-lisp/vtable.el (vtable): Add a column color element.
(make-vtable): Use it.
(vtable--insert-line): Insert the colors here.
This commit is contained in:
Lars Ingebrigtsen 2022-04-13 16:25:52 +02:00
parent e14e5dff2c
commit 29fae93d1c
2 changed files with 18 additions and 3 deletions

View File

@ -387,6 +387,12 @@ The face to be used. This defaults to @code{variable-pitch}. This
face doesn't override the faces in the data, or the faces supplied by
the getter and formatter functions.
@item :column-colors
If present, this should be a list of color names to be used as the
background color on the columns. If there are fewer colors here than
there are columns, the colors will be repeated. The most common use
case here is to have alternating background colors on the columns.
@item :actions
This uses the same syntax as @code{define-keymap}, but doesn't refer
to commands directly. Instead each key is bound to a command that

View File

@ -57,6 +57,7 @@
(separator-width :initarg :separator-width :accessor vtable-separator-width)
(sort-by :initarg :sort-by :accessor vtable-sort-by)
(ellipsis :initarg :ellipsis :accessor vtable-ellipsis)
(column-colors :initarg :column-colors :accessor vtable-column-colors)
(-cache :initform (make-hash-table :test #'equal)))
"A object to hold the data for a table.")
@ -83,7 +84,8 @@
(separator-width 1)
sort-by
(ellipsis t)
(insert t))
(insert t)
column-colors)
"Create and insert a vtable at point.
The vtable object is returned. If INSERT is nil, the table won't
be inserted."
@ -122,6 +124,7 @@ be inserted."
:keymap keymap
:separator-width separator-width
:sort-by sort-by
:column-colors column-colors
:ellipsis ellipsis)))
;; Compute missing column data.
(setf (vtable-columns table) (vtable--compute-columns table))
@ -377,7 +380,8 @@ This also updates the displayed table."
(defun vtable--insert-line (table line widths spacer
&optional ellipsis ellipsis-width)
(let ((start (point))
(columns (vtable-columns table)))
(columns (vtable-columns table))
(colors (vtable-column-colors table)))
(seq-do-indexed
(lambda (elem index)
(let ((value (nth 0 elem))
@ -438,7 +442,12 @@ This also updates the displayed table."
(propertize " " 'display
(list 'space
:width (list spacer)))))
(put-text-property start (point) 'vtable-column index))))
(put-text-property start (point) 'vtable-column index)
(when colors
(add-face-text-property
start (point)
(list :background
(elt colors (mod index (length colors)))))))))
(cdr line))
(insert "\n")
(put-text-property start (point) 'vtable-object (car line))))