diff options
| author | Eli Zaretskii | 2015-01-08 16:04:46 +0200 |
|---|---|---|
| committer | Eli Zaretskii | 2015-01-08 16:04:46 +0200 |
| commit | 5fbd17e369ca30a47ab8a2eda0b2f2ea9b690bb4 (patch) | |
| tree | 253a55de82ec0ae74ed1d05004be77439da0231b /lisp | |
| parent | ad83cdacb6808377e2ef4f96e60ffb68dbf01cd9 (diff) | |
| download | emacs-5fbd17e369ca30a47ab8a2eda0b2f2ea9b690bb4.tar.gz emacs-5fbd17e369ca30a47ab8a2eda0b2f2ea9b690bb4.zip | |
Fix line-move-visual's following of column in R2L lines.
src/simple.el (line-move-visual): When converting X pixel coordinate
to temporary-goal-column, adjust the value for right-to-left
screen lines. This fixes vertical-motion, next/prev-line, etc.
src/dispnew.c (buffer_posn_from_coords): Fix the value of the column
returned for right-to-left screen lines. (Before the change on
2014-12-30, the incorrectly-computed X pixel coordinate concealed
this bug.)
Diffstat (limited to 'lisp')
| -rw-r--r-- | lisp/ChangeLog | 6 | ||||
| -rw-r--r-- | lisp/simple.el | 12 |
2 files changed, 16 insertions, 2 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 56a1c39317a..4077e351ba8 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog | |||
| @@ -1,3 +1,9 @@ | |||
| 1 | 2015-01-08 Eli Zaretskii <eliz@gnu.org> | ||
| 2 | |||
| 3 | * simple.el (line-move-visual): When converting X pixel coordinate | ||
| 4 | to temporary-goal-column, adjust the value for right-to-left | ||
| 5 | screen lines. This fixes vertical-motion, next/prev-line, etc. | ||
| 6 | |||
| 1 | 2015-01-08 Glenn Morris <rgm@gnu.org> | 7 | 2015-01-08 Glenn Morris <rgm@gnu.org> |
| 2 | 8 | ||
| 3 | * files.el (file-tree-walk): Remove; of unknown authorship. (Bug#19325) | 9 | * files.el (file-tree-walk): Remove; of unknown authorship. (Bug#19325) |
diff --git a/lisp/simple.el b/lisp/simple.el index e15291a345b..25293edf88f 100644 --- a/lisp/simple.el +++ b/lisp/simple.el | |||
| @@ -5604,14 +5604,22 @@ If NOERROR, don't signal an error if we can't move that many lines." | |||
| 5604 | (> (cdr temporary-goal-column) 0)) | 5604 | (> (cdr temporary-goal-column) 0)) |
| 5605 | (setq target-hscroll (cdr temporary-goal-column))) | 5605 | (setq target-hscroll (cdr temporary-goal-column))) |
| 5606 | ;; Otherwise, we should reset `temporary-goal-column'. | 5606 | ;; Otherwise, we should reset `temporary-goal-column'. |
| 5607 | (let ((posn (posn-at-point))) | 5607 | (let ((posn (posn-at-point)) |
| 5608 | x-pos) | ||
| 5608 | (cond | 5609 | (cond |
| 5609 | ;; Handle the `overflow-newline-into-fringe' case: | 5610 | ;; Handle the `overflow-newline-into-fringe' case: |
| 5610 | ((eq (nth 1 posn) 'right-fringe) | 5611 | ((eq (nth 1 posn) 'right-fringe) |
| 5611 | (setq temporary-goal-column (cons (- (window-width) 1) hscroll))) | 5612 | (setq temporary-goal-column (cons (- (window-width) 1) hscroll))) |
| 5612 | ((car (posn-x-y posn)) | 5613 | ((car (posn-x-y posn)) |
| 5614 | (setq x-pos (car (posn-x-y posn))) | ||
| 5615 | ;; In R2L lines, the X pixel coordinate is measured from the | ||
| 5616 | ;; left edge of the window, but columns are still counted | ||
| 5617 | ;; from the logical-order beginning of the line, i.e. from | ||
| 5618 | ;; the right edge in this case. We need to adjust for that. | ||
| 5619 | (if (eq (current-bidi-paragraph-direction) 'right-to-left) | ||
| 5620 | (setq x-pos (- (window-body-width nil t) 1 x-pos))) | ||
| 5613 | (setq temporary-goal-column | 5621 | (setq temporary-goal-column |
| 5614 | (cons (/ (float (car (posn-x-y posn))) | 5622 | (cons (/ (float x-pos) |
| 5615 | (frame-char-width)) | 5623 | (frame-char-width)) |
| 5616 | hscroll)))))) | 5624 | hscroll)))))) |
| 5617 | (if target-hscroll | 5625 | (if target-hscroll |