summaryrefslogtreecommitdiff
path: root/lisp/emacs-lisp
diff options
context:
space:
mode:
authorLars Ingebrigtsen <larsi@gnus.org>2022-04-15 13:37:05 +0200
committerLars Ingebrigtsen <larsi@gnus.org>2022-04-15 13:37:13 +0200
commitc4768cda7f84a4368500685d1525fa93990e5aa0 (patch)
tree2d315d93f58616b6ceb624986278e7815fc35493 /lisp/emacs-lisp
parent09ac2c73eefa62416bcf825ed5ceff67c06115f8 (diff)
downloademacs-c4768cda7f84a4368500685d1525fa93990e5aa0.tar.gz
emacs-c4768cda7f84a4368500685d1525fa93990e5aa0.tar.bz2
emacs-c4768cda7f84a4368500685d1525fa93990e5aa0.zip
Make the sorting indicator prettier in vtable
* lisp/emacs-lisp/vtable.el (vtable--insert-header-line): Place the sorting indicator flush right in the heading.
Diffstat (limited to 'lisp/emacs-lisp')
-rw-r--r--lisp/emacs-lisp/vtable.el51
1 files changed, 37 insertions, 14 deletions
diff --git a/lisp/emacs-lisp/vtable.el b/lisp/emacs-lisp/vtable.el
index f2c20b6a806..ec7e4b4a6b9 100644
--- a/lisp/emacs-lisp/vtable.el
+++ b/lisp/emacs-lisp/vtable.el
@@ -635,20 +635,43 @@ This also updates the displayed table."
(indicator-width (string-pixel-width indicator))
(last (= index (1- (length (vtable-columns table)))))
displayed)
- (insert
- (setq displayed
- (concat
- (if (> (string-pixel-width name)
- (- (elt widths index) indicator-width))
- (vtable--limit-string
- name (- (elt widths index) indicator-width))
- name)
- indicator))
- (propertize " " 'display
- (list 'space :width
- (list (+ (- (elt widths index)
- (string-pixel-width displayed))
- (if last 0 spacer))))))
+ (setq displayed
+ (if (> (string-pixel-width name)
+ (- (elt widths index) indicator-width))
+ (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))
+ (if last 0 spacer))))
+ (if (or (not last)
+ (zerop indicator-width)
+ (< (seq-reduce #'+ widths 0) (window-width nil t)))
+ ;; Normal case.
+ (insert
+ displayed
+ (propertize " " 'display
+ (list 'space :width (list fill-width)))
+ indicator)
+ ;; 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
+ (buffer-substring (point-min) (point))))
+ (pre-fill
+ (- (window-width nil t)
+ pre-indicator
+ (string-pixel-width displayed))))
+ (insert
+ displayed
+ (propertize " " 'display
+ (list 'space :width (list pre-fill)))
+ indicator
+ (propertize " " 'display
+ (list 'space :width
+ (list (- fill-width pre-fill))))))))
(when (and divider (not last))
(insert (propertize divider 'keymap dmap)))
(put-text-property start (point) 'vtable-column index)))