Fix bidi cursor motion when a line begins with a composed character.
src/xdisp.c (RECORD_MAX_MIN_POS): If the display element comes from a composition, take its buffer position from IT->cmp_it.charpos.
This commit is contained in:
parent
f086702702
commit
54a1215bcc
3 changed files with 38 additions and 10 deletions
|
@ -1119,13 +1119,27 @@ It also eliminates runs of equal strings."
|
|||
`(display (space :align-to ,column)))
|
||||
nil))))
|
||||
(if (not (consp str))
|
||||
(put-text-property (point) (progn (insert str) (point))
|
||||
(put-text-property (point)
|
||||
(progn
|
||||
(insert (bidi-string-mark-left-to-right
|
||||
str))
|
||||
(point))
|
||||
'mouse-face 'highlight)
|
||||
(put-text-property (point) (progn (insert (car str)) (point))
|
||||
(put-text-property (point)
|
||||
(progn
|
||||
(insert
|
||||
(bidi-string-mark-left-to-right
|
||||
(car str)))
|
||||
(point))
|
||||
'mouse-face 'highlight)
|
||||
(add-text-properties (point) (progn (insert (cadr str)) (point))
|
||||
(add-text-properties (point)
|
||||
(progn
|
||||
(insert
|
||||
(bidi-string-mark-left-to-right
|
||||
(cadr str)))
|
||||
(point))
|
||||
'(mouse-face nil
|
||||
face completions-annotations)))
|
||||
face completions-annotations)))
|
||||
(cond
|
||||
((eq completions-format 'vertical)
|
||||
;; Vertical format
|
||||
|
|
|
@ -1,3 +1,10 @@
|
|||
2011-08-19 Eli Zaretskii <eliz@gnu.org>
|
||||
|
||||
* xdisp.c (RECORD_MAX_MIN_POS): If the display element comes from
|
||||
a composition, take its buffer position from IT->cmp_it.charpos.
|
||||
Fixes cursor positioning at the beginning of a line that begins
|
||||
with a composed character.
|
||||
|
||||
2011-08-18 Eli Zaretskii <eliz@gnu.org>
|
||||
|
||||
* bidi.c (bidi_get_type): If bidi_type_table reports zero as the
|
||||
|
|
19
src/xdisp.c
19
src/xdisp.c
|
@ -18386,15 +18386,22 @@ display_line (struct it *it)
|
|||
#define RECORD_MAX_MIN_POS(IT) \
|
||||
do \
|
||||
{ \
|
||||
if (IT_CHARPOS (*(IT)) < min_pos) \
|
||||
int composition_p = (IT)->what == IT_COMPOSITION; \
|
||||
EMACS_INT current_pos = \
|
||||
composition_p ? (IT)->cmp_it.charpos \
|
||||
: IT_CHARPOS (*(IT)); \
|
||||
EMACS_INT current_bpos = \
|
||||
composition_p ? CHAR_TO_BYTE (current_pos) \
|
||||
: IT_BYTEPOS (*(IT)); \
|
||||
if (current_pos < min_pos) \
|
||||
{ \
|
||||
min_pos = IT_CHARPOS (*(IT)); \
|
||||
min_bpos = IT_BYTEPOS (*(IT)); \
|
||||
min_pos = current_pos; \
|
||||
min_bpos = current_bpos; \
|
||||
} \
|
||||
if (IT_CHARPOS (*(IT)) > max_pos) \
|
||||
if (current_pos > max_pos) \
|
||||
{ \
|
||||
max_pos = IT_CHARPOS (*(IT)); \
|
||||
max_bpos = IT_BYTEPOS (*(IT)); \
|
||||
max_pos = current_pos; \
|
||||
max_bpos = current_bpos; \
|
||||
} \
|
||||
} \
|
||||
while (0)
|
||||
|
|
Loading…
Add table
Reference in a new issue