all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Juri Linkov <juri@linkov.net>
To: Eli Zaretskii <eliz@gnu.org>
Cc: 22544@debbugs.gnu.org
Subject: bug#22544: 25.0.90; Long history items cause surprising positioning of cursor in minibuffer
Date: Fri, 05 Feb 2016 02:42:12 +0200	[thread overview]
Message-ID: <87fux82bp7.fsf@mail.linkov.net> (raw)
In-Reply-To: <831t8sxwvs.fsf@gnu.org> (Eli Zaretskii's message of "Thu, 04 Feb 2016 18:28:55 +0200")

>> > Still as expected.  Press <UP> once more, resulting in:
>> >
>> >   Output message to mail file (default FOO): ~/foo/ba!r/very/long/file/name/that/overflows/minibuffer/window/line/when/displayed
>> >
>> > This is somewhat unexpected, because the column of the cursor looks
>> > random -- it is neither the same as in previous display, nor related
>> > to anything else I can think of.
>>
>> Sorry, I don't understand: it's unexpected that the cursor jumps
>> to the previous visual line (this is because of line-move-visual),
>> or an invalid column position on the previous visual line?
>
> The latter.

It was a bug caused by an old value of temporary-goal-column
not re-calculated in previous-line when previous-line fails
by bumping against the top of the minibuffer (and going to the previous
history element with an invalidated value of temporary-goal-column).
It can be fixed by this patch:

diff --git a/lisp/simple.el b/lisp/simple.el
index 72e87a4..079eb93 100644
--- a/lisp/simple.el
+++ b/lisp/simple.el
@@ -2041,6 +2041,7 @@ next-line-or-history-element
        ;; the end of the line when it fails to go to the next line.
        (goto-char old-point)
        (next-history-element arg)
+       (setq temporary-goal-column 0)
        ;; Restore the original goal column on the last line
        ;; of possibly multi-line input.
        (goto-char (point-max))
@@ -2071,6 +2072,7 @@ previous-line-or-history-element
        ;; the beginning of the line when it fails to go to the previous line.
        (goto-char old-point)
        (previous-history-element arg)
+       (setq temporary-goal-column 0)
        ;; Restore the original goal column on the first line
        ;; of possibly multi-line input.
        (goto-char (minibuffer-prompt-end))

>> > Now press <UP> one more time, and observe this result:
>> >
>> >   Output message to mail file (default FOO): ~/shorte!r/file/name
>> >
>> > This is even less expected -- why isn't the cursor at the end of the
>> > file name, even though it is short enough to display entirely on a
>> > single screen line?
>>
>> This is because it keeps the last column before navigating
>> to the previous history element.  The last column was near
>> the beginning of the top visual line.
>
> But if a long line is not in history, then the cursor is not
> positioned on the same column, it is positioned at the end of the
> history item.  So this behavior is inconsistent, and depends on
> whether long items are or aren't in the history.

There are a few other possibilities for alternative behavior:

1. Put the cursor at the end of the top visual line, not logical line.
   Drawback: the cursor will be in the middle of the logical line.

2. Go to the previous history element when the cursor is anywhere
   on any of the several visual lines of the top logical line,
   not just the top visual line.
   Drawback: can't move the cursor to the top visual line to edit text in it.

3. When moving the cursor from one visual line to another visual line of
   the logical line, keep the cursor at the end of the visual line.
   The problem is that this behavior should be implemented in previous-line.

4. Set temporary-goal-column like in the patch above, but instead of 0,
   set it to the column of the end of the top visual line, so <UP>
   will put the cursor at the end of the top visual line in your test case.





  reply	other threads:[~2016-02-05  0:42 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-02-03 16:32 bug#22544: 25.0.90; Long history items cause surprising positioning of cursor in minibuffer Eli Zaretskii
2016-02-04  0:49 ` Juri Linkov
2016-02-04 16:28   ` Eli Zaretskii
2016-02-05  0:42     ` Juri Linkov [this message]
2016-02-05  9:53       ` Eli Zaretskii
2016-02-06  0:52         ` Juri Linkov
2016-02-06  7:45           ` Eli Zaretskii
2016-02-07  0:49             ` Juri Linkov
2016-02-07 19:29               ` Eli Zaretskii
2016-02-08  0:40                 ` Juri Linkov
2016-02-08 18:23                   ` Eli Zaretskii
2016-02-10  0:32                     ` Juri Linkov

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

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87fux82bp7.fsf@mail.linkov.net \
    --to=juri@linkov.net \
    --cc=22544@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 external index

	https://git.savannah.gnu.org/cgit/emacs.git
	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.