From: Stephen Berman <stephen.berman@gmx.net>
To: Eli Zaretskii <eliz@gnu.org>
Cc: 44068@debbugs.gnu.org
Subject: bug#44068: 28.0.50; Faulty uses of tabulated-list-format
Date: Tue, 20 Oct 2020 18:09:56 +0200 [thread overview]
Message-ID: <87h7qori97.fsf@gmx.net> (raw)
In-Reply-To: <87y2k2yqqb.fsf@gmx.net> (Stephen Berman's message of "Mon, 19 Oct 2020 21:12:44 +0200")
[-- Attachment #1: Type: text/plain, Size: 2696 bytes --]
On Mon, 19 Oct 2020 21:12:44 +0200 Stephen Berman <stephen.berman@gmx.net> wrote:
> On Mon, 19 Oct 2020 21:43:57 +0300 Eli Zaretskii <eliz@gnu.org> wrote:
>
>>> From: Stephen Berman <stephen.berman@gmx.net>
>>> Cc: 44068@debbugs.gnu.org
>>> Date: Mon, 19 Oct 2020 20:20:16 +0200
>>>
>>> > Instead of manually fine-tuning each column's width, wouldn't it be
>>> > better to use the string-trim capabilities that replace excess
>>> > characters with an ellipsis?
>>>
>>> I'm not sure I understand your suggestion. If you mean to truncate the
>>> column label in the header line when displaying the sort indicator,
>>> e.g. change "Status" to "Sta… ▼", I'm dubious it's worth the effort,
>>> since most of the problematic cases in the Emacs sources are with the
>>> final column, where there's always enough space, but due to the
>>> misleading description in tabulated-list-format's doc string, many modes
>>> have made it unnecessarily narrow, preventing the display of the sort
>>> indicator. So to avoid the final column being labelled e.g. either
>>> "File" or "Fi… ▼" instead of "File ▼", it is necessary to change the
>>> width manually anyway. In other words, the truncation proposal would be
>>> an addition to manual fine-tuning (for non-final columns), not a
>>> substitute for it. Or did you mean something else?
>>
>> Yes, I meant it as an addition, which will make this issue much more
>> future proof. Documentation update is definitely fine (and should
>> probably go to emacs-27, not to master, right?), and adjusting the
>> column widths to eliminate the ellipsis is also okay. I just don't
>> want us to end with these two and nothing else.
>
> Ok. I can try, but anyone should feel free to beat me to it.
I was wrong that adjusting column widths in tabulated-list-format is
necessary: with the attached patch, when a non-final column whose label
is at least 3 characters long is selected, the label will get truncated
and a sort indicator added; but the final column label will never get
truncated and always get a sort indicator when selected. The question
remains whether the truncated display in current (non-adjusted) uses of
tabulated-list-mode is acceptable: if so, the patch below is all that's
needed, if not, then the adjustments in my first patch can be made as
well. Those interested should try the patch with list-buffers,
list-bookmarks, list-packages, list-processes, list-dynamic-libraries,
org-lint and flymake-diagnostics-buffer-mode to see how the display
looks. Depending on the decision about that, the doc string of
tabulated-list-format should be reworked accordingly.
Steve Berman
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: tabulated-list-init-header patch --]
[-- Type: text/x-patch, Size: 2883 bytes --]
diff --git a/lisp/emacs-lisp/tabulated-list.el b/lisp/emacs-lisp/tabulated-list.el
index b13f609f88..aff7f985b9 100644
--- a/lisp/emacs-lisp/tabulated-list.el
+++ b/lisp/emacs-lisp/tabulated-list.el
@@ -269,15 +269,18 @@ tabulated-list-init-header
;; FIXME: Should share code with tabulated-list-print-col!
(let ((x (max tabulated-list-padding 0))
(button-props `(help-echo "Click to sort by column"
- mouse-face header-line-highlight
- keymap ,tabulated-list-sort-button-map))
+ mouse-face header-line-highlight
+ keymap ,tabulated-list-sort-button-map))
+ (len (length tabulated-list-format))
(cols nil))
(if display-line-numbers
(setq x (+ x (tabulated-list-line-number-width))))
(push (propertize " " 'display `(space :align-to ,x)) cols)
- (dotimes (n (length tabulated-list-format))
+ (dotimes (n len)
(let* ((col (aref tabulated-list-format n))
+ (not-last-col (< n (1- len)))
(label (nth 0 col))
+ (pname label)
(width (nth 1 col))
(props (nthcdr 3 col))
(pad-right (or (plist-get props :pad-right) 1))
@@ -287,24 +290,27 @@ tabulated-list-init-header
(cond
;; An unsortable column
((not (nth 2 col))
- (propertize label 'tabulated-list-column-name label))
+ (propertize label 'tabulated-list-column-name pname))
;; The selected sort column
((equal (car col) (car tabulated-list-sort-key))
- (apply 'propertize
- (concat label
- (cond
- ((> (+ 2 (length label)) width) "")
- ((cdr tabulated-list-sort-key)
- (format " %c"
- tabulated-list-gui-sort-indicator-desc))
- (t (format " %c"
- tabulated-list-gui-sort-indicator-asc))))
- 'face 'bold
- 'tabulated-list-column-name label
- button-props))
+ (let* ((l (length label)))
+ (when (and (>= l 3) (> (+ 2 l) width) not-last-col)
+ (setq label (truncate-string-to-width label (- l 2) nil nil t)))
+ (apply 'propertize
+ (concat label
+ (cond
+ ((and (< l 3) not-last-col) "")
+ ((cdr tabulated-list-sort-key)
+ (format " %c"
+ tabulated-list-gui-sort-indicator-desc))
+ (t (format " %c"
+ tabulated-list-gui-sort-indicator-asc))))
+ 'face 'bold
+ 'tabulated-list-column-name pname
+ button-props)))
;; Unselected sortable column.
(t (apply 'propertize label
- 'tabulated-list-column-name label
+ 'tabulated-list-column-name pname
button-props)))
cols)
(when right-align
next prev parent reply other threads:[~2020-10-20 16:09 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-10-18 20:00 bug#44068: 28.0.50; Faulty uses of tabulated-list-format Stephen Berman
2020-10-18 21:33 ` Drew Adams
2020-10-18 22:01 ` Stefan Kangas
2020-10-18 22:15 ` Drew Adams
2020-10-18 22:18 ` Stephen Berman
2020-10-18 22:01 ` Stefan Kangas
2020-10-18 22:17 ` Stephen Berman
2020-10-18 22:35 ` Stephen Berman
2020-10-18 23:13 ` Stefan Kangas
2020-10-19 9:04 ` Stephen Berman
2020-10-19 13:52 ` Eli Zaretskii
2020-10-19 18:20 ` Stephen Berman
2020-10-19 18:43 ` Eli Zaretskii
2020-10-19 19:12 ` Stephen Berman
2020-10-20 16:09 ` Stephen Berman [this message]
2020-10-29 16:58 ` Stefan Kangas
2020-10-29 22:48 ` Stephen Berman
2020-10-30 1:06 ` Stefan Kangas
2020-10-30 21:44 ` Stephen Berman
2020-10-30 23:51 ` Stefan Kangas
2020-11-01 23:07 ` Stephen Berman
2020-11-02 17:12 ` Eli Zaretskii
2020-11-02 22:37 ` Stephen Berman
2020-11-03 3:27 ` Eli Zaretskii
2020-11-03 23:12 ` Stephen Berman
2020-11-04 15:09 ` Eli Zaretskii
2020-11-04 22:55 ` Stephen Berman
2020-11-04 12:02 ` Stefan Kangas
2020-11-04 22:53 ` Stephen Berman
2020-11-12 16:38 ` Stefan Kangas
2020-11-12 22:51 ` Stephen Berman
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.gnu.org/software/emacs/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87h7qori97.fsf@gmx.net \
--to=stephen.berman@gmx.net \
--cc=44068@debbugs.gnu.org \
--cc=eliz@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).