diff options
author | Yuuki Harano <masm+github@masm11.me> | 2019-11-13 23:36:27 +0900 |
---|---|---|
committer | Jeff Walsh <fejfighter@gmail.com> | 2020-11-22 14:46:56 +1100 |
commit | 232c129fe4ccc091c6b403a4d72b51d3d9687e23 (patch) | |
tree | 0c5e90932a6c61e5d4b9608193ff855e9a5e8063 /lisp | |
parent | 9e56fa9853f5d0114b90d69ff43885a80ca8f5bd (diff) | |
download | emacs-232c129fe4ccc091c6b403a4d72b51d3d9687e23.tar.gz emacs-232c129fe4ccc091c6b403a4d72b51d3d9687e23.tar.bz2 emacs-232c129fe4ccc091c6b403a4d72b51d3d9687e23.zip |
implement pre-edit input method
* src/termhooks.h (enum event_kind): new pgtk value
* src/pgtkterm.h (struct pgtk_display_info):
* src/pgtkterm.c (x_free_frame_resources, pgtk_delete_terminal)
(pgtk_enqueue_string, pgtk_enqueue_preedit, key_press_event)
(focus_in_event, focus_out_event, pgtk_term_init): call pgtkim
* src/pgtkim.c: new file
(im_context_commit_cb, im_context_retrieve_surrounding_cb)
(make_color_string, im_context_preedit_changed_cb)
(im_context_preedit_end_cb, im_context_preedit_start_cb)
(pgtk_im_focus_in, pgtk_im_focus_out, pgtk_im_filter_keypress)
(pgtk_im_finish, Fpgtk_use_im_context, syms_of_pgtkim):
* src/pgtkfns.c (check_pgtk_display_info):
* src/keyboard.c (kbd_buffer_get_event, make_lispy_event)
(keys_of_keyboard):
* src/emacs.c (main): add syms_of_pgtkim
* lisp/term/pgtk-win.el (pgtk-preedit-text): new defun
* configure.ac (XWIDGETS_OBJ): add pgtkim.o
input method 対応
preedit を overlay で表示するようにした。
preedit 表示後すぐに反映されなかったのを修正
この機能を ON/OFF できるようにした。
default off.
確定と同時に次の preedit が始まった場合に表示位置がおかしかったのを修正。
sample.
preedit をテキストで渡すようにした
Diffstat (limited to 'lisp')
-rw-r--r-- | lisp/term/pgtk-win.el | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/lisp/term/pgtk-win.el b/lisp/term/pgtk-win.el index 1cf526b7587..2205ad662b3 100644 --- a/lisp/term/pgtk-win.el +++ b/lisp/term/pgtk-win.el @@ -368,6 +368,39 @@ See the documentation of `create-fontset-from-fontset-spec' for the format.") &context (window-system pgtk)) (pgtk-get-selection-internal selection-symbol target-type)) + +(defvar pgtk-preedit-overlay nil) + +(defun pgtk-preedit-text (e) + (interactive "e") + (when pgtk-preedit-overlay + (delete-overlay pgtk-preedit-overlay)) + (setq pgtk-preedit-overlay nil) + + (let ((ovstr "") + (idx 0) + atts ov str color face-name) + (dolist (part (nth 1 e)) + (setq str (car part)) + (setq face-name (intern (format "pgtk-im-%d" idx))) + (eval + `(defface ,face-name nil "face of input method preedit")) + (setq atts nil) + (when (setq color (cdr-safe (assq 'fg (cdr part)))) + (setq atts (append atts `(:foreground ,color)))) + (when (setq color (cdr-safe (assq 'bg (cdr part)))) + (setq atts (append atts `(:background ,color)))) + (when (setq color (cdr-safe (assq 'ul (cdr part)))) + (setq atts (append atts `(:underline ,color)))) + (face-spec-set face-name `((t . ,atts))) + (add-text-properties 0 (length str) `(face ,face-name) str) + (setq ovstr (concat ovstr str)) + (setq idx (1+ idx))) + + (setq ov (make-overlay (point) (point))) + (overlay-put ov 'before-string ovstr) + (setq pgtk-preedit-overlay ov))) + (provide 'pgtk-win) (provide 'term/pgtk-win) |