@@ -276,6 +276,13 @@ nil, don't display."
276
276
:options '(t inline nil )
277
277
:group 'rime )
278
278
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
+
279
286
(defcustom rime-posframe-fixed-position nil
280
287
" Use a fixed position for posframe candidate."
281
288
:type :boolean
@@ -777,12 +784,16 @@ By default the input-method will not handle DEL, so we need this command."
777
784
" Commit the raw input."
778
785
(interactive )
779
786
(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)))
786
797
787
798
(defun rime--ascii-mode-p ()
788
799
" If ascii-mode is enabled."
@@ -910,6 +921,30 @@ By default the input-method will not handle DEL, so we need this command."
910
921
(string-match-p " self-insert" (symbol-name this-command)))
911
922
(rime--clear-state)))
912
923
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
+
913
948
(defun rime-commit1 ()
914
949
" Commit the 1st item if exists."
915
950
(interactive )
@@ -1051,6 +1086,8 @@ Argument NAME ignored."
1051
1086
(define-key keymap (kbd " <backspace>" ) 'rime--backspace )
1052
1087
(define-key keymap (kbd " <return>" ) 'rime--return )
1053
1088
(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 )
1054
1091
(define-key keymap (kbd " <escape>" ) 'rime--escape )
1055
1092
keymap)
1056
1093
" Keymap during composition." )
0 commit comments