# HG changeset patch # User Kenichi Handa # Date 1214453769 0 # Node ID 66839d3799feaff169640ecb67f34a68e94996be # Parent c0227e195a0e72b0eb03df37760a262c55ff81c0 (terminal-composition-base-character-p): New funciton. (terminal-composition-function): Use terminal-composition-base-character-p. Include the base character in the composition. (auto-compose-chars): Don't check font-object for terminal display. diff -r c0227e195a0e -r 66839d3799fe lisp/composite.el --- a/lisp/composite.el Thu Jun 26 03:43:18 2008 +0000 +++ b/lisp/composite.el Thu Jun 26 04:16:09 2008 +0000 @@ -436,26 +436,32 @@ (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 @@ (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 @@ (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)