unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
* bug#37179: 27.0.50; tabulated-list-mode creates obsolete empty line on the end
@ 2019-08-25  9:20 Jean Louis
  2020-10-18 23:56 ` Stefan Kangas
  0 siblings, 1 reply; 6+ messages in thread
From: Jean Louis @ 2019-08-25  9:20 UTC (permalink / raw)
  To: 37179



Here is sample demonstration:

(define-derived-mode my-mode tabulated-list-mode "My Mode" "My mode"
  (setq tabulated-list-format [("ID" 5 t . (:right-align t))
                               ("Hyperlink" 30 t)
                               ("Type" 10 t)])
  (setq tabulated-list-padding 1)
  (setq tabulated-list-sort-key (cons "ID" nil))
  (tabulated-list-init-header))

(defun my-set-list (&optional parent)
  (interactive)
  (let ((buffer "*Hyperspace*"))
    (pop-to-buffer buffer nil)
    (read-only-mode 0)
    (erase-buffer)
    (read-only-mode 1)        
    (my-mode)
    (hl-line-mode)
    (setq tabulated-list-entries (list
				  (list "1" ["1" "Link 1" "Type"])
				  (list "2" ["2" "Link 2" "Type"])))
    (tabulated-list-print t)))

When it is defined the M-x my-set-list allows me to go after the last
line. Yet that is not logical, and empty line shall not be displayed, as
it does not exist in the tabulated-list-entries variable.

Video demonstration 1MB:
https://gnu.support/images/2019/08/2019-08-25/2019-08-25-11:15:46.ogv



In GNU Emacs 27.0.50 (build 3, x86_64-pc-linux-gnu, X toolkit, Xaw3d scroll bars)
 of 2019-08-04 built on protected.rcdrun.com
Repository revision: 01661f33c11654d1fe5fe1013332db2500b7f449
Repository branch: master
Windowing system distributor 'The X.Org Foundation', version 11.0.11906000
System Description: Hyperbola GNU/Linux-libre

Recent messages:
For information about GNU Emacs and the GNU system, type C-h C-a.

Configured using:
 'configure --prefix=/package/text/emacs-2019-08-04 --with-modules
 --without-gpm --with-x-toolkit=lucid'

Configured features:
XAW3D XPM JPEG TIFF GIF PNG RSVG SOUND DBUS GSETTINGS GLIB NOTIFY
INOTIFY ACL GNUTLS LIBXML2 FREETYPE HARFBUZZ M17N_FLT LIBOTF XFT ZLIB
TOOLKIT_SCROLL_BARS LUCID X11 XDBE XIM MODULES THREADS JSON PDUMPER
LCMS2 GMP

Important settings:
  value of $LC_ALL: de_DE.UTF-8
  value of $LANG: de_DE.UTF-8
  locale-coding-system: utf-8-unix

Major mode: Lisp Interaction

Minor modes in effect:
  tooltip-mode: t
  global-eldoc-mode: t
  eldoc-mode: t
  electric-indent-mode: t
  mouse-wheel-mode: t
  tool-bar-mode: t
  menu-bar-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  blink-cursor-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t
  line-number-mode: t
  transient-mark-mode: t

Load-path shadows:
None found.

Features:
(shadow sort hashcash mail-extr emacsbug message rmc puny dired
dired-loaddefs format-spec rfc822 mml easymenu mml-sec password-cache
epa derived epg epg-config gnus-util rmail rmail-loaddefs
text-property-search time-date subr-x seq byte-opt gv bytecomp
byte-compile cconv mm-decode mm-bodies mm-encode mail-parse rfc2231
mailabbrev gmm-utils mailheader cl-loaddefs cl-lib sendmail rfc2047
rfc2045 ietf-drums mm-util mail-prsvr mail-utils tooltip eldoc electric
uniquify ediff-hook vc-hooks lisp-float-type mwheel term/x-win x-win
term/common-win x-dnd tool-bar dnd fontset image regexp-opt fringe
tabulated-list replace newcomment text-mode elisp-mode lisp-mode
prog-mode register page menu-bar rfn-eshadow isearch timer select
scroll-bar mouse jit-lock font-lock syntax facemenu font-core
term/tty-colors frame cl-generic cham georgian utf-8-lang misc-lang
vietnamese tibetan thai tai-viet lao korean japanese eucjp-ms cp51932
hebrew greek romanian slovak czech european ethiopic indian cyrillic
chinese composite charscript charprop case-table epa-hook jka-cmpr-hook
help simple abbrev obarray minibuffer cl-preloaded nadvice loaddefs
button faces cus-face macroexp files text-properties overlay sha1 md5
base64 format env code-pages mule custom widget hashtable-print-readable
backquote threads dbusbind inotify lcms2 dynamic-setting
system-font-setting font-render-setting x-toolkit x multi-tty
make-network-process emacs)

Memory information:
((conses 16 45501 4860)
 (symbols 48 6060 1)
 (strings 32 16251 1822)
 (string-bytes 1 520282)
 (vectors 16 9853)
 (vector-slots 8 127249 7718)
 (floats 8 22 16)
 (intervals 56 242 0)
 (buffers 992 12))

-- 
Thanks,
Jean Louis





^ permalink raw reply	[flat|nested] 6+ messages in thread

* bug#37179: 27.0.50; tabulated-list-mode creates obsolete empty line on the end
  2019-08-25  9:20 bug#37179: 27.0.50; tabulated-list-mode creates obsolete empty line on the end Jean Louis
@ 2020-10-18 23:56 ` Stefan Kangas
  2020-10-19  6:41   ` Jean Louis
  2020-10-19  8:54   ` Lars Ingebrigtsen
  0 siblings, 2 replies; 6+ messages in thread
From: Stefan Kangas @ 2020-10-18 23:56 UTC (permalink / raw)
  To: Jean Louis; +Cc: 37179

[-- Attachment #1: Type: text/plain, Size: 2087 bytes --]

Jean Louis <bugs@gnu.support> writes:

> Here is sample demonstration:
>
> (define-derived-mode my-mode tabulated-list-mode "My Mode" "My mode"
>   (setq tabulated-list-format [("ID" 5 t . (:right-align t))
>                                ("Hyperlink" 30 t)
>                                ("Type" 10 t)])
>   (setq tabulated-list-padding 1)
>   (setq tabulated-list-sort-key (cons "ID" nil))
>   (tabulated-list-init-header))
>
> (defun my-set-list (&optional parent)
>   (interactive)
>   (let ((buffer "*Hyperspace*"))
>     (pop-to-buffer buffer nil)
>     (read-only-mode 0)
>     (erase-buffer)
>     (read-only-mode 1)
>     (my-mode)
>     (hl-line-mode)
>     (setq tabulated-list-entries (list
> 				  (list "1" ["1" "Link 1" "Type"])
> 				  (list "2" ["2" "Link 2" "Type"])))
>     (tabulated-list-print t)))
>
> When it is defined the M-x my-set-list allows me to go after the last
> line. Yet that is not logical, and empty line shall not be displayed, as
> it does not exist in the tabulated-list-entries variable.
>
> Video demonstration 1MB:
> https://gnu.support/images/2019/08/2019-08-25/2019-08-25-11:15:46.ogv

I tend to agree; there doesn't seem to be any point to go to a line
after the last entry.

But this issue is not unique to tabulated-list-mode, and in fact crops
up in all kinds of places in Emacs.  IME, the usual solution is to just
leave the final newline, and maybe there are good reasons for that.  See
Dired for example, or Gnus.

As an experiment, I came up with the attached patch that removes the
final newline in `tabulated-list-mode'.  As expected, it is not without
issues: `end-of-buffer' leaves point at the end of last line.  If that
line is very long, we can end up scrolled far to the right, which is
rather unsettling.  Another thing that may or may not be problematic (I
didn't test it) is if we have commands that operate on regions of lines.

So I'm not exactly sure what to do here.  Perhaps we should just leave
it alone...  Or maybe there is some smart solution just waiting to be
discovered.

Does anyone else have any comments?

[-- Attachment #2: 37179.diff --]
[-- Type: text/x-diff, Size: 625 bytes --]

diff --git a/lisp/emacs-lisp/tabulated-list.el b/lisp/emacs-lisp/tabulated-list.el
index 2f7899ec51..7079eaad03 100644
--- a/lisp/emacs-lisp/tabulated-list.el
+++ b/lisp/emacs-lisp/tabulated-list.el
@@ -480,6 +480,11 @@ tabulated-list-print
               (forward-line 1)
               (delete-region old (point))))))
       (setq entries (cdr entries)))
+    ;; Remove empty last line.
+    (save-excursion
+      (let ((inhibit-read-only t))
+        (goto-char (point-max))
+        (delete-char -1)))
     (set-buffer-modified-p nil)
     ;; If REMEMBER-POS was specified, move to the "old" location.
     (if saved-pt

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* bug#37179: 27.0.50; tabulated-list-mode creates obsolete empty line on the end
  2020-10-18 23:56 ` Stefan Kangas
@ 2020-10-19  6:41   ` Jean Louis
  2020-10-19  8:57     ` Stefan Kangas
  2020-10-19 16:05     ` Drew Adams
  2020-10-19  8:54   ` Lars Ingebrigtsen
  1 sibling, 2 replies; 6+ messages in thread
From: Jean Louis @ 2020-10-19  6:41 UTC (permalink / raw)
  To: Stefan Kangas; +Cc: 37179

I have tried that, and I like previous behavior so much more, as in
tabulated mode, the cursor then escapes on the end of line, which is
really not intended so.

In my opinion it is better to leave it as it is, and that I improve
my personal program that stops reacting on the end of line.

Jean

* Stefan Kangas <stefan@marxist.se> [2020-10-19 02:56]:
> Jean Louis <bugs@gnu.support> writes:
> 
> > Here is sample demonstration:
> >
> > (define-derived-mode my-mode tabulated-list-mode "My Mode" "My mode"
> >   (setq tabulated-list-format [("ID" 5 t . (:right-align t))
> >                                ("Hyperlink" 30 t)
> >                                ("Type" 10 t)])
> >   (setq tabulated-list-padding 1)
> >   (setq tabulated-list-sort-key (cons "ID" nil))
> >   (tabulated-list-init-header))
> >
> > (defun my-set-list (&optional parent)
> >   (interactive)
> >   (let ((buffer "*Hyperspace*"))
> >     (pop-to-buffer buffer nil)
> >     (read-only-mode 0)
> >     (erase-buffer)
> >     (read-only-mode 1)
> >     (my-mode)
> >     (hl-line-mode)
> >     (setq tabulated-list-entries (list
> > 				  (list "1" ["1" "Link 1" "Type"])
> > 				  (list "2" ["2" "Link 2" "Type"])))
> >     (tabulated-list-print t)))
> >
> > When it is defined the M-x my-set-list allows me to go after the last
> > line. Yet that is not logical, and empty line shall not be displayed, as
> > it does not exist in the tabulated-list-entries variable.
> >
> > Video demonstration 1MB:
> > https://gnu.support/images/2019/08/2019-08-25/2019-08-25-11:15:46.ogv
> 
> I tend to agree; there doesn't seem to be any point to go to a line
> after the last entry.
> 
> But this issue is not unique to tabulated-list-mode, and in fact crops
> up in all kinds of places in Emacs.  IME, the usual solution is to just
> leave the final newline, and maybe there are good reasons for that.  See
> Dired for example, or Gnus.
> 
> As an experiment, I came up with the attached patch that removes the
> final newline in `tabulated-list-mode'.  As expected, it is not without
> issues: `end-of-buffer' leaves point at the end of last line.  If that
> line is very long, we can end up scrolled far to the right, which is
> rather unsettling.  Another thing that may or may not be problematic (I
> didn't test it) is if we have commands that operate on regions of lines.
> 
> So I'm not exactly sure what to do here.  Perhaps we should just leave
> it alone...  Or maybe there is some smart solution just waiting to be
> discovered.
> 
> Does anyone else have any comments?

> diff --git a/lisp/emacs-lisp/tabulated-list.el b/lisp/emacs-lisp/tabulated-list.el
> index 2f7899ec51..7079eaad03 100644
> --- a/lisp/emacs-lisp/tabulated-list.el
> +++ b/lisp/emacs-lisp/tabulated-list.el
> @@ -480,6 +480,11 @@ tabulated-list-print
>                (forward-line 1)
>                (delete-region old (point))))))
>        (setq entries (cdr entries)))
> +    ;; Remove empty last line.
> +    (save-excursion
> +      (let ((inhibit-read-only t))
> +        (goto-char (point-max))
> +        (delete-char -1)))
>      (set-buffer-modified-p nil)
>      ;; If REMEMBER-POS was specified, move to the "old" location.
>      (if saved-pt






^ permalink raw reply	[flat|nested] 6+ messages in thread

* bug#37179: 27.0.50; tabulated-list-mode creates obsolete empty line on the end
  2020-10-18 23:56 ` Stefan Kangas
  2020-10-19  6:41   ` Jean Louis
@ 2020-10-19  8:54   ` Lars Ingebrigtsen
  1 sibling, 0 replies; 6+ messages in thread
From: Lars Ingebrigtsen @ 2020-10-19  8:54 UTC (permalink / raw)
  To: Stefan Kangas; +Cc: 37179, Jean Louis

Stefan Kangas <stefan@marxist.se> writes:

> I tend to agree; there doesn't seem to be any point to go to a line
> after the last entry.

As you point, in general we do allow going to the last line in most
special modes, even if most of the special commands make no sense the.
It's nice and unsurprising, and you can do things like `M-w' there.

So I don't think tabulated-list-mode should do anything special here,
because it'd be annoying.

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no





^ permalink raw reply	[flat|nested] 6+ messages in thread

* bug#37179: 27.0.50; tabulated-list-mode creates obsolete empty line on the end
  2020-10-19  6:41   ` Jean Louis
@ 2020-10-19  8:57     ` Stefan Kangas
  2020-10-19 16:05     ` Drew Adams
  1 sibling, 0 replies; 6+ messages in thread
From: Stefan Kangas @ 2020-10-19  8:57 UTC (permalink / raw)
  To: Jean Louis; +Cc: 37179

tags 37179 + notabug wontfix
close 37179
thanks

Jean Louis <bugs@gnu.support> writes:

> I have tried that, and I like previous behavior so much more, as in
> tabulated mode, the cursor then escapes on the end of line, which is
> really not intended so.
>
> In my opinion it is better to leave it as it is, and that I improve
> my personal program that stops reacting on the end of line.

Jean told me in private that this should probably be closed, and I
concur, so I'm closing this bug report now.





^ permalink raw reply	[flat|nested] 6+ messages in thread

* bug#37179: 27.0.50; tabulated-list-mode creates obsolete empty line on the end
  2020-10-19  6:41   ` Jean Louis
  2020-10-19  8:57     ` Stefan Kangas
@ 2020-10-19 16:05     ` Drew Adams
  1 sibling, 0 replies; 6+ messages in thread
From: Drew Adams @ 2020-10-19 16:05 UTC (permalink / raw)
  To: Jean Louis, Stefan Kangas; +Cc: 37179

> I have tried that, and I like previous behavior so much more, as in
> tabulated mode, the cursor then escapes on the end of line, which is
> really not intended so.

FWIW, I filed a related enhancement request, bug #44078.

`tabulated-list-mode' should not be dictating final
newline behavior, IMO.  It should be tamed to become
useful/usable in just part(s) of a buffer.





^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2020-10-19 16:05 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2019-08-25  9:20 bug#37179: 27.0.50; tabulated-list-mode creates obsolete empty line on the end Jean Louis
2020-10-18 23:56 ` Stefan Kangas
2020-10-19  6:41   ` Jean Louis
2020-10-19  8:57     ` Stefan Kangas
2020-10-19 16:05     ` Drew Adams
2020-10-19  8:54   ` Lars Ingebrigtsen

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