From: Eli Zaretskii Date: Sat, 7 Sep 2024 08:27:03 +0000 (+0300) Subject: Fix alignment and documentation of vtable.el X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=4994d6332361798a1cd45e5088bfb94b56d8fab6;p=emacs.git Fix alignment and documentation of vtable.el * lisp/emacs-lisp/vtable.el (vtable--insert-header-line): Ensure proper alignment between the columns in header-line and in the body of the table. (Bug#73032) * doc/misc/vtable.texi (Making A Table): Document the defaults of the various keyword parameters. (cherry picked from commit 04c44405bf604380c575fa2a4d9611af0f3bc0d9) --- diff --git a/doc/misc/vtable.texi b/doc/misc/vtable.texi index 2e0adfb235a..795d7fad037 100644 --- a/doc/misc/vtable.texi +++ b/doc/misc/vtable.texi @@ -337,7 +337,9 @@ width (in pixels), and @var{table} is the table. @end defun @item align -Should be either @code{right} or @code{left}. +Should be either @code{right} or @code{left}. If not specified, +numerical values will be flushed to the right, and all other values will +be flushed to the left. @end table @item :getter @@ -426,14 +428,19 @@ current line, they can use the @code{vtable-current-object} function (@pxref{Interface Functions}) to determine what that object is. @item :separator-width -The width of the blank space between columns. +The width of the blank space between columns. If not specified, it +defaults to 1. @item :divider-width @itemx :divider -You can have a divider inserted between the columns. This can either -be specified by using @code{:divider}, which should be a string to be -displayed between the columns, or @code{:divider-width}, which -specifies the width of the space to be used as the divider. +You can have a divider inserted between the columns. This can either be +specified by using @code{:divider}, which should be a string to be +displayed between the columns, or @code{:divider-width}, which specifies +the width of the space to be used as the divider, in units of characters +of the face used to display the table. If not specified, +@code{:divider} defaults to @code{nil}, but specifying +@code{:divider-width} effectively sets the divider to a whitespace +string of that width. @item :sort-by This should be a list of tuples, and specifies how the table is to be diff --git a/lisp/emacs-lisp/vtable.el b/lisp/emacs-lisp/vtable.el index cb7ea397314..d58c6894c16 100644 --- a/lisp/emacs-lisp/vtable.el +++ b/lisp/emacs-lisp/vtable.el @@ -722,15 +722,17 @@ This also updates the displayed table." (vtable--limit-string name (- (elt widths index) indicator-width)) name)) - (let ((fill-width - (+ (- (elt widths index) - (string-pixel-width displayed) - indicator-width - (vtable-separator-width table) - ;; We want the indicator to not be quite flush - ;; right. - (/ (vtable--char-width table) 2.0)) - (if last 0 spacer)))) + (let* ((indicator-lead-width + ;; We want the indicator to not be quite flush right. + (/ (vtable--char-width table) 2.0)) + (indicator-pad-width (- (vtable--char-width table) + indicator-lead-width)) + (fill-width + (+ (- (elt widths index) + (string-pixel-width displayed) + indicator-width + indicator-lead-width) + (if last 0 spacer)))) (if (or (not last) (zerop indicator-width) (< (seq-reduce #'+ widths 0) (window-width nil t))) @@ -739,7 +741,9 @@ This also updates the displayed table." displayed (propertize " " 'display (list 'space :width (list fill-width))) - indicator) + indicator + (propertize " " 'display + (list 'space :width (list indicator-pad-width)))) ;; This is the final column, and we have a sorting ;; indicator, and the table is too wide for the window. (let* ((pre-indicator (string-pixel-width @@ -758,10 +762,6 @@ This also updates the displayed table." (list (- fill-width pre-fill)))))))) (when (and divider (not last)) (insert (propertize divider 'keymap dmap))) - (insert (propertize - " " 'display - (list 'space :width (list - (/ (vtable--char-width table) 2.0))))) (put-text-property start (point) 'vtable-column index))) (vtable-columns table)) (insert "\n")