From: Chong Yidong <cyd@stupidchicken.com>
To: "Johan Bockgård" <bojohan@gnu.org>
Cc: 3494@emacsbugs.donarmstrong.com, Kees Bakker <kees@altium.nl>,
Teemu Likonen <tlikonen@iki.fi>
Subject: bug#3494: 23.0.94; line-move-visual: temporary goal column confused by hscrolling
Date: Sat, 11 Jul 2009 12:03:22 -0400 [thread overview]
Message-ID: <87y6qvxl4l.fsf@stupidchicken.com> (raw)
Does the following patch fix the problem?
diff -c /home/cyd/emacs/lisp/simple.el.\~1.988.\~ /home/cyd/emacs/lisp/simple.el
*** emacs/lisp/simple.el.~1.988.~ 2009-06-21 00:37:46.000000000 -0400
--- emacs/lisp/simple.el 2009-07-11 11:58:55.000000000 -0400
***************
*** 3956,3966 ****
(defvar temporary-goal-column 0
"Current goal column for vertical motion.
It is the column where point was at the start of the current run
! of vertical motion commands. It is a floating point number when
! moving by visual lines via `line-move-visual'; this is the
! x-position, in pixels, divided by the default column width. When
! the `track-eol' feature is doing its job, the value is
! `most-positive-fixnum'.")
(defcustom line-move-ignore-invisible t
"Non-nil means \\[next-line] and \\[previous-line] ignore invisible lines.
--- 3956,3967 ----
(defvar temporary-goal-column 0
"Current goal column for vertical motion.
It is the column where point was at the start of the current run
! of vertical motion commands. When moving by visual lines via
! `line-move-visual', it is a cons cell (COL . HSCROLL), where COL
! is the x-position, in pixels, divided by the default column
! width, and HSCROLL is the number of columns by which window is
! scrolled from left margin. When the `track-eol' feature is doing
! its job, the value is `most-positive-fixnum'.")
(defcustom line-move-ignore-invisible t
"Non-nil means \\[next-line] and \\[previous-line] ignore invisible lines.
***************
*** 4061,4075 ****
x)
;; Reset temporary-goal-column, unless the previous command was a
;; line-motion command or we were called from some other command.
! (unless (and (floatp temporary-goal-column)
! (memq last-command `(next-line previous-line ,this-command)))
(cond ((eq (nth 1 posn) 'right-fringe) ; overflow-newline-into-fringe
! (setq temporary-goal-column (- (window-width) 1)))
((setq x (car (posn-x-y posn)))
! (setq temporary-goal-column (/ (float x) (frame-char-width))))))
;; Move using `vertical-motion'.
(or (and (= (vertical-motion
! (cons (or goal-column (truncate temporary-goal-column)) arg))
arg)
(or (>= arg 0)
(/= (point) opoint)
--- 4062,4084 ----
x)
;; Reset temporary-goal-column, unless the previous command was a
;; line-motion command or we were called from some other command.
! (if (and (consp temporary-goal-column)
! (memq last-command `(next-line previous-line ,this-command)))
! ;; Check window-hscroll
! (if (/= (window-hscroll) (cdr temporary-goal-column))
! (set-window-hscroll nil (cdr temporary-goal-column)))
(cond ((eq (nth 1 posn) 'right-fringe) ; overflow-newline-into-fringe
! (setq temporary-goal-column
! (cons (- (window-width) 1) (window-hscroll))))
((setq x (car (posn-x-y posn)))
! (setq temporary-goal-column
! (cons (/ (float x) (frame-char-width)) (window-hscroll))))))
;; Move using `vertical-motion'.
(or (and (= (vertical-motion
! (cons (or goal-column
! (if (consp temporary-goal-column)
! (truncate (car temporary-goal-column))
! temporary-goal-column)) arg))
arg)
(or (>= arg 0)
(/= (point) opoint)
***************
*** 4091,4098 ****
(let ((inhibit-point-motion-hooks t)
(opoint (point))
(orig-arg arg))
! (if (floatp temporary-goal-column)
! (setq temporary-goal-column (truncate temporary-goal-column)))
(unwind-protect
(progn
(if (not (memq last-command '(next-line previous-line)))
--- 4100,4108 ----
(let ((inhibit-point-motion-hooks t)
(opoint (point))
(orig-arg arg))
! (if (consp temporary-goal-column)
! (setq temporary-goal-column (+ (car temporary-goal-column)
! (cdr temporary-goal-column))))
(unwind-protect
(progn
(if (not (memq last-command '(next-line previous-line)))
Diff finished. Sat Jul 11 11:58:57 2009
next reply other threads:[~2009-07-11 16:03 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-07-11 16:03 Chong Yidong [this message]
[not found] <mailman.2302.1247329057.2239.bug-gnu-emacs@gnu.org>
2009-07-11 16:44 ` bug#3494: 23.0.94; line-move-visual: temporary goal column confused by hscrolling Teemu Likonen
2009-07-11 17:25 ` Chong Yidong
2009-07-11 18:02 ` Teemu Likonen
2009-07-11 22:59 ` Chong Yidong
2009-07-12 7:05 ` Teemu Likonen
2009-07-12 16:04 ` Chong Yidong
2009-07-12 16:38 ` Lennart Borgman
-- strict thread matches above, loose matches on Subject: below --
2009-07-11 16:31 Chong Yidong
2009-07-11 16:56 ` Teemu Likonen
2009-07-11 17:23 ` Chong Yidong
2009-06-08 1:17 Johan =?UTF-8?Q?Bockg=C3=A5rd
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=87y6qvxl4l.fsf@stupidchicken.com \
--to=cyd@stupidchicken.com \
--cc=3494@emacsbugs.donarmstrong.com \
--cc=bojohan@gnu.org \
--cc=kees@altium.nl \
--cc=tlikonen@iki.fi \
/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.