diff options
Diffstat (limited to 'lisp/composite.el')
-rw-r--r-- | lisp/composite.el | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/lisp/composite.el b/lisp/composite.el index 3106f726ed5..0d4912be747 100644 --- a/lisp/composite.el +++ b/lisp/composite.el @@ -436,26 +436,32 @@ See also the documentation of `auto-composition-mode'.") (put 'save-buffer-state 'lisp-indent-function 1) +(defsubst terminal-composition-base-character-p (ch) + (not (memq (get-char-code-property ch 'general-category) + '(Mn Mc Me Zs Zl Zp Cc Cf Cs)))) + (defun terminal-composition-function (from to font-object string) "General composition function used on terminal. Non-spacing characters are composed with the preceding spacing character. All non-spacing characters has this function in `terminal-composition-function-table'." - (let ((pos (1+ from))) + (let ((pos from)) (if string (progn (while (and (< pos to) (= (aref char-width-table (aref string pos)) 0)) (setq pos (1+ pos))) - (if (> from 0) + (if (and (> from 0) + (terminal-composition-base-character-p (aref string (1- from)))) (compose-string string (1- from) pos) (compose-string string from pos (concat " " (buffer-substring from pos))))) (while (and (< pos to) (= (aref char-width-table (char-after pos)) 0)) (setq pos (1+ pos))) - (if (> from (point-min)) - (compose-region (1- from) pos (buffer-substring from pos)) + (if (and (> from (point-min)) + (terminal-composition-base-character-p (char-after pos))) + (compose-region (1- from) pos) (compose-region from pos (concat " " (buffer-substring from pos))))) pos)) @@ -496,7 +502,8 @@ This function is the default value of `auto-composition-function' (which see)." (elt (aref table ch)) font-obj newpos) (when (and elt - (setq font-obj (font-at from window string))) + (or (not (display-graphic-p)) + (setq font-obj (font-at from window string)))) (if (functionp elt) (setq newpos (funcall elt from to font-obj string)) (while (and elt @@ -517,7 +524,8 @@ This function is the default value of `auto-composition-function' (which see)." (elt (aref table ch)) func pattern font-obj newpos) (when (and elt - (setq font-obj (font-at from window))) + (or (not (display-graphic-p)) + (setq font-obj (font-at from window)))) (if (functionp elt) (setq newpos (funcall elt from to font-obj nil)) (goto-char from) |