emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

emacs-30 04c44405bf6: Fix alignment and documentation of vtable.el


From: Eli Zaretskii
Subject: emacs-30 04c44405bf6: Fix alignment and documentation of vtable.el
Date: Sat, 7 Sep 2024 04:28:03 -0400 (EDT)

branch: emacs-30
commit 04c44405bf604380c575fa2a4d9611af0f3bc0d9
Author: Eli Zaretskii <eliz@gnu.org>
Commit: Eli Zaretskii <eliz@gnu.org>

    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.
---
 doc/misc/vtable.texi      | 19 +++++++++++++------
 lisp/emacs-lisp/vtable.el | 28 ++++++++++++++--------------
 2 files changed, 27 insertions(+), 20 deletions(-)

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")



reply via email to

[Prev in Thread] Current Thread [Next in Thread]