[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#3494: 23.0.94; line-move-visual: temporary goal column confused by h
From: |
Chong Yidong |
Subject: |
bug#3494: 23.0.94; line-move-visual: temporary goal column confused by hscrolling |
Date: |
Sat, 11 Jul 2009 12:31:39 -0400 |
Please test this patch instead of the one I previously sent (I'll
install it on the trunk as well, for additional testing).
*** emacs/lisp/simple.el.~1.988.~ 2009-06-21 00:37:46.000000000 -0400
--- emacs/lisp/simple.el 2009-07-11 12:30:05.000000000 -0400
***************
*** 3956,3965 ****
(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
--- 3956,3969 ----
(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
***************
*** 4059,4075 ****
(let ((posn (posn-at-point))
(opoint (point))
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)
--- 4063,4095 ----
(let ((posn (posn-at-point))
(opoint (point))
x)
! ;; Check if the previous command was a line-motion command or we
! ;; were called from some other command.
! (cond ((and (consp temporary-goal-column)
! (memq last-command `(next-line previous-line ,this-command)))
! ;; If so, there's no need to reset `temporary-goal-column',
! ;; unless the window hscroll has changed.
! (when (/= (window-hscroll) (cdr temporary-goal-column))
! (set-window-hscroll nil 0)
! (setq temporary-goal-column
! (cons (+ (car temporary-goal-column)
! (cdr temporary-goal-column)) 0))))
! ;; Otherwise, we should reset `temporary-goal-column'.
! ;; Handle the `overflow-newline-into-fringe' case:
! ((eq (nth 1 posn) 'right-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)))
--- 4111,4119 ----
(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)))
- bug#3494: 23.0.94; line-move-visual: temporary goal column confused by hscrolling, Chong Yidong, 2009/07/11
- bug#3494: 23.0.94; line-move-visual: temporary goal column confused by hscrolling,
Chong Yidong <=
- bug#3494: 23.0.94; line-move-visual: temporary goal column confused by hscrolling, Teemu Likonen, 2009/07/11
- bug#3494: 23.0.94; line-move-visual: temporary goal column confused by hscrolling, Chong Yidong, 2009/07/11
- bug#3494: 23.0.94; line-move-visual: temporary goal column confused by hscrolling, Teemu Likonen, 2009/07/11
- bug#3494: 23.0.94; line-move-visual: temporary goal column confused by hscrolling, Chong Yidong, 2009/07/11
- bug#3494: 23.0.94; line-move-visual: temporary goal column confused by hscrolling, Teemu Likonen, 2009/07/12
- bug#3494: 23.0.94; line-move-visual: temporary goal column confused by hscrolling, Chong Yidong, 2009/07/12
- bug#3494: 23.0.94; line-move-visual: temporary goal column confused by hscrolling, Lennart Borgman, 2009/07/12