unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: Eli Zaretskii <eliz@gnu.org>
To: Alex <agrambot@gmail.com>
Cc: emacs-devel@gnu.org
Subject: Re: Native line numbers, final testing
Date: Mon, 03 Jul 2017 18:24:01 +0300	[thread overview]
Message-ID: <83wp7po86m.fsf@gnu.org> (raw)
In-Reply-To: <874luuyuqy.fsf@lylat> (message from Alex on Sun, 02 Jul 2017 23:06:29 -0600)

> From: Alex <agrambot@gmail.com>
> Cc: emacs-devel@gnu.org
> Date: Sun, 02 Jul 2017 23:06:29 -0600
> 
> > I think I fixed that now.
> 
> The issue is a bit harder to encounter now, but it appears to still be
> present. In xdisp.c:
> 
> M-g c 2970 RET
> C-u 16 C-n
> 
> Then hit C-n a few times to reach line 87. The cursor will now be on
> column 26 instead of column 27.
> 
> You can also test this by holding C-n or C-p and noticing the goal
> column changing. This also affects C-v and M-v with
> scroll-preserve-screen-position set to 'always.

No, that's an entirely different issue, and arguably not a bug at all.
In line-move-visual mode, C-n/C-p (and vertical-motion they call under
the hood) keep the horizontal screen coordinate as much as they
possibly can, and this is what happens here.

You can see the same "bug" with this simple recipe:

  emacs -Q
  M-: (add-text-properties 72 73 '(line-prefix "12345")) RET
  C-u 10 M-g c
  C-=
  C-n
  C-=

The last command will say "column=4" although you started with
column=9.

Maybe with C-n/C-p people will expect what you expected in the case of
line numbers (but I'd like to hear more opinions before I'm convinced
to change the code to do that), but you will have a much harder time
convincing me to make a change in how scroll-preserve-screen-position
behaves in this case.

> > And note that displaying the numbers in the margin would not have
> > solved the issue, since the width of the margins would still be
> > estimated by the same heuristics.
> 
> So there's no reliable way to get the x-coordinate of the end of the
> left margin/fringe?

Of course there is: call posn-at-point and its ilk.

The problem is to know that x coordinate _before_ the margins actually
change their width.  That is the problem to be solved in this case.

> Why don't these issues affect nlinum, since it sets
> the width dynamically?

Because nlinum and similar modes change the width of the margin
_after_ C-n already moved point.  So C-n does its thing with the
margin still at its old width, and doesn't need to deal with the width
changing under its feet.

> On this note, I'd like to again ask for dynamic growing of the width,
> but not shrinking. That should also help towards avoiding this problem
> in growing buffers.
> 
> I've edited and attached my previous proof of concept, but it uses
> Fmake_local_variable, which doesn't look like it's used a lot in the C
> side of Emacs. Is there a better way to make buffer local internal
> variables?

I don't think this should be done in C.  I can provide a function to
obtain the current width of the line-number display, and then a Lisp
program, called from some suitable hook, could notice when the value
becomes larger, and set display-line-number-width to that same value.
Would that be satisfactory?

P.S. Btw, I think these are all minor issues that shouldn't prevent
landing the feature on master.



  reply	other threads:[~2017-07-03 15:24 UTC|newest]

Thread overview: 90+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-06-30 14:49 Native line numbers, final testing Eli Zaretskii
2017-06-30 17:51 ` Alex
2017-06-30 18:20   ` Eli Zaretskii
2017-06-30 19:06     ` Alex
2017-06-30 19:55       ` Eli Zaretskii
2017-06-30 21:15         ` Alex
2017-07-01  8:00           ` Eli Zaretskii
2017-07-01 21:00             ` Alex
2017-07-02  2:40               ` Eli Zaretskii
2017-07-02  5:16                 ` Alex
2017-07-02 15:10                   ` Eli Zaretskii
2017-07-02 16:47                     ` Stefan Monnier
2017-07-02 16:51                       ` Eli Zaretskii
2017-07-02 17:38                         ` Stefan Monnier
2017-07-02 19:27                           ` Eli Zaretskii
2017-07-03  5:06                     ` Alex
2017-07-03 15:24                       ` Eli Zaretskii [this message]
2017-07-04 19:36                         ` Alex
2017-07-05 17:39                           ` Eli Zaretskii
2017-07-07  2:46                             ` Alex
2017-07-07  6:19                               ` Eli Zaretskii
2017-07-07  9:24                                 ` Eli Zaretskii
2017-07-08 20:51                                   ` Alex
2017-07-09 20:16                                     ` James Cloos
2017-07-09 21:45                                       ` Yuri Khan
2017-07-10  2:33                                         ` Eli Zaretskii
2017-07-10  7:09                                           ` Yuri Khan
2017-07-10 17:02                                             ` Eli Zaretskii
2017-07-10  2:31                                       ` Eli Zaretskii
2017-07-10  5:35                                         ` James Cloos
2017-07-10 17:00                                           ` Eli Zaretskii
2017-07-10 18:15                                             ` Filipe Silva
2017-07-10 18:18                                               ` Eli Zaretskii
2017-07-10 18:23                                                 ` Filipe Silva
2017-07-10 18:32                                             ` James Cloos
2017-07-11 20:58                                             ` Alex
2017-07-11 21:18                                               ` Filipe Silva
2017-07-11 21:20                                                 ` Filipe Silva
2017-07-11 21:37                                                   ` Alex
2017-07-12  2:35                                               ` Eli Zaretskii
2017-07-12  2:53                                                 ` Alex
2017-07-12 14:21                                                   ` Eli Zaretskii
2017-07-12 17:22                                                     ` Alex
2017-07-12 17:25                                                       ` Alex
2017-07-12 18:38                                                       ` Eli Zaretskii
2017-07-12 20:03                                                         ` Alex
2017-07-13  2:38                                                           ` Eli Zaretskii
2017-07-13  4:11                                                             ` Alex
2017-07-13 15:56                                                               ` Eli Zaretskii
2017-07-26  3:50                                                                 ` Alex
2017-07-26 14:42                                                                   ` Eli Zaretskii
2017-07-29  6:12                                                                     ` Alex
2017-07-29  7:01                                                                       ` Eli Zaretskii
2017-07-07  9:47                                 ` Eli Zaretskii
2017-07-07  9:49                                   ` Eli Zaretskii
2017-07-07 11:14                                     ` Filipe Silva
2017-07-07 12:21                                       ` Eli Zaretskii
2017-07-07 12:29                                   ` Eli Zaretskii
     [not found]                                     ` <CAEwkUWN8GkCyOiF4jEgKuZwJHhvMgJi9yVnvggRvu+Yddfp4qQ@mail.gmail.com>
2017-07-07 12:56                                       ` Filipe Silva
2017-07-01  1:59 ` Filipe Silva
2017-07-02 19:27 ` James Nguyen
2017-07-03  2:33   ` Eli Zaretskii
2017-07-03  3:22     ` James Nguyen
2017-07-03 15:58       ` Eli Zaretskii
2017-07-03 17:04         ` James Nguyen
2017-07-04 10:57           ` Filipe Silva
2017-07-04 11:00             ` Filipe Silva
2017-07-04 13:51               ` Kaushal Modi
2017-07-04 14:30               ` Eli Zaretskii
2017-07-04 14:32             ` Eli Zaretskii
2017-07-04 14:48               ` Filipe Silva
2017-07-04 14:50                 ` Filipe Silva
2017-07-04 15:44                   ` Eli Zaretskii
2017-07-04 16:22                     ` Filipe Silva
2017-07-04 16:34                       ` Filipe Silva
2017-07-04 16:35                       ` Richard Copley
2017-07-04 16:44                         ` Eli Zaretskii
2017-07-04 17:13                           ` Richard Copley
2017-07-04 17:35                             ` Filipe Silva
2017-07-04 17:48                               ` Eli Zaretskii
2017-07-04 17:52                               ` Stefan Monnier
2017-07-10 18:22                                 ` Filipe Silva
2017-07-10 20:28                                   ` Stefan Monnier
2017-07-04 17:47                             ` Eli Zaretskii
2017-07-04 17:50                           ` Alex
2017-07-04 18:24                             ` Eli Zaretskii
2017-07-04 18:37                               ` Richard Copley
2017-07-04 18:43                                 ` Eli Zaretskii
2017-07-05 20:24 ` Andy Moreton
2017-07-06 17:24   ` Eli Zaretskii

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=83wp7po86m.fsf@gnu.org \
    --to=eliz@gnu.org \
    --cc=agrambot@gmail.com \
    --cc=emacs-devel@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).