]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix alignment and documentation of vtable.el
authorEli Zaretskii <eliz@gnu.org>
Sat, 7 Sep 2024 08:27:03 +0000 (11:27 +0300)
committerEshel Yaron <me@eshelyaron.com>
Sun, 8 Sep 2024 11:24:20 +0000 (13:24 +0200)
* 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)

doc/misc/vtable.texi
lisp/emacs-lisp/vtable.el

index 2e0adfb235a2c8fce6bc7a3ee4d93180f618cf6f..795d7fad037fe6b715dd52afa50d816960a3b762 100644 (file)
@@ -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
index cb7ea39731465bb9ad4ee77af465da81ed90f46c..d58c6894c16cabc7ed41ec2cf5e411fe247c5f6a 100644 (file)
@@ -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")