Skip to content

Commit 0de3250

Browse files
authored
新增用 RET 輸入目前候選、S-RET 輸入 preedit 的功能 (#220)
有些方案空白鍵不是提交,最大的例子大概是注音方案。注音方案的空白鍵是一 聲,需要用 RET 來提交輸入內容,但目前 RET 只會提交 raw input。 這個 PR 新增了一個選項,rime-return-insert-raw,non-nil 時讓 RET 輸入 raw input,否則輸入預覽內容(亦即目前選取的候選詞)。預設為 t,保留原 先的動作方式。 有測試過即使 rime-show-preedit 是 inline 也還是會輸入目前選取的候選詞。 另外,這個 PR 也新增用 Shift + RET 來輸入 preedit 的功能。注音方案下的 用途是輸入尚未轉換成漢字的注音("1 q a S-RET" -> "ㄅ ㄆ ㄇ"),但其他 方案下應該也有用。
1 parent 03e91ab commit 0de3250

File tree

1 file changed

+43
-6
lines changed

1 file changed

+43
-6
lines changed

rime.el

Lines changed: 43 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -276,6 +276,13 @@ nil, don't display."
276276
:options '(t inline nil)
277277
:group 'rime)
278278

279+
(defcustom rime-return-insert-raw t
280+
"Whether hitting return commits the raw input.
281+
282+
If nil, hitting return commits the selected candicate instead."
283+
:type 'boolean
284+
:group 'rime)
285+
279286
(defcustom rime-posframe-fixed-position nil
280287
"Use a fixed position for posframe candidate."
281288
:type :boolean
@@ -777,12 +784,16 @@ By default the input-method will not handle DEL, so we need this command."
777784
"Commit the raw input."
778785
(interactive)
779786
(when (rime--rime-lib-module-ready-p)
780-
(when-let ((input (rime-lib-get-input)))
781-
(rime--clear-overlay)
782-
(insert input)
783-
(rime-lib-clear-composition)
784-
(rime--redisplay))
785-
(rime--refresh-mode-state)))
787+
(if rime-return-insert-raw
788+
(rime--commit
789+
(rime-lib-get-input))
790+
(rime--commit-preview))))
791+
792+
(defun rime--shift-return ()
793+
"Commit the preedit."
794+
(interactive)
795+
(when (rime--rime-lib-module-ready-p)
796+
(rime--commit-preedit)))
786797

787798
(defun rime--ascii-mode-p ()
788799
"If ascii-mode is enabled."
@@ -910,6 +921,30 @@ By default the input-method will not handle DEL, so we need this command."
910921
(string-match-p "self-insert" (symbol-name this-command)))
911922
(rime--clear-state)))
912923

924+
(defun rime--commit (value)
925+
"Insert VALUE, then clear state."
926+
(when (and value (rime--rime-lib-module-ready-p))
927+
(rime--clear-overlay)
928+
(insert value)
929+
(rime-lib-clear-composition)
930+
(rime--redisplay)
931+
(rime--refresh-mode-state)))
932+
933+
(defun rime--commit-preview ()
934+
"Commit the currently previewed text."
935+
(when (rime--rime-lib-module-ready-p)
936+
(rime--commit
937+
(-some->> (rime-lib-get-context)
938+
(alist-get 'commit-text-preview)))))
939+
940+
(defun rime--commit-preedit ()
941+
"Commit the currently previewed text."
942+
(when (rime--rime-lib-module-ready-p)
943+
(rime--commit
944+
(-some->> (rime-lib-get-context)
945+
(alist-get 'composition)
946+
(alist-get 'preedit)))))
947+
913948
(defun rime-commit1 ()
914949
"Commit the 1st item if exists."
915950
(interactive)
@@ -1051,6 +1086,8 @@ Argument NAME ignored."
10511086
(define-key keymap (kbd "<backspace>") 'rime--backspace)
10521087
(define-key keymap (kbd "<return>") 'rime--return)
10531088
(define-key keymap (kbd "RET") 'rime--return)
1089+
(define-key keymap (kbd "S-<return>") 'rime--shift-return)
1090+
(define-key keymap (kbd "S-RET") 'rime--shift-return)
10541091
(define-key keymap (kbd "<escape>") 'rime--escape)
10551092
keymap)
10561093
"Keymap during composition.")

0 commit comments

Comments
 (0)