bug-gnu-emacs
[Top][All Lists]
Advanced

[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:03:22 -0400

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





reply via email to

[Prev in Thread] Current Thread [Next in Thread]