diff --git a/data/squirrel.yaml b/data/squirrel.yaml index b684b47ca..493f83310 100644 --- a/data/squirrel.yaml +++ b/data/squirrel.yaml @@ -400,6 +400,9 @@ app_options: com.apple.Terminal: ascii_mode: true no_inline: true + org.alacritty: + # Work around https://github.com/rime/squirrel/issues/741 + force_marked_text_for_direct_commit: true com.googlecode.iterm2: ascii_mode: true no_inline: true diff --git a/package/add_data_files b/package/add_data_files index e78a290e7..6b8356f10 100755 --- a/package/add_data_files +++ b/package/add_data_files @@ -124,11 +124,11 @@ add_lib() { } data_files=( - $(ls data/plum/* | xargs basename) + $(for file in data/plum/*; do basename "$file"; done) ) lib_files=( - $(ls lib/rime-plugins/* | xargs basename) + $(for file in lib/rime-plugins/*; do basename "$file"; done) ) for file in "${data_files[@]}" diff --git a/sources/SquirrelInputController.swift b/sources/SquirrelInputController.swift index a8e078f0c..ed2aef244 100644 --- a/sources/SquirrelInputController.swift +++ b/sources/SquirrelInputController.swift @@ -561,6 +561,23 @@ private extension SquirrelInputController { func commit(string: String) { guard let client = client else { return } + + let forceMarkedText = + session != 0 && + rimeAPI.get_option(session, "force_marked_text_for_direct_commit") + + // Direct commits such as full-width punctuation do not necessarily have an + // active marked-text phase. Some NSTextInputClient implementations require + // one before accepting insertText. + if forceMarkedText && preedit.isEmpty && !string.isEmpty { + let markedText = NSMutableAttributedString(string: string) + client.setMarkedText( + markedText, + selectionRange: NSRange(location: markedText.length, length: 0), + replacementRange: .empty + ) + } + client.insertText(string, replacementRange: .empty) preedit = "" hidePalettes()