Understanding the auto_phrase Feature for User Phrases in RIME Wanxiang
The auto_phrase feature automatically records confirmed Chinese and English text into user dictionaries without manual "add-word" commands, leveraging the lua/auto_phrase.lua pipeline to build personalized vocabularies on-the-fly.
The auto_phrase feature is an automatic phrase creation mechanism implemented in the amzxyz/rime_wanxiang input method schema. It captures committed text at runtime and persists it to user-specific dictionaries, eliminating manual editing while adapting the input experience to individual typing patterns through two complementary pipelines.
How auto_phrase Works
The implementation distinguishes between Chinese and English input through separate validation logic in lua/auto_phrase.lua. Both pipelines trigger when you confirm a candidate (typically by pressing Space or Enter), but they differ in their conditions and storage targets.
Chinese auto_phrase Pipeline
When committing Chinese text, the feature activates only when three configuration switches and content validations pass simultaneously. According to the source in lua/auto_phrase.lua, the AP.commit_handler function checks:
add_user_dict/enable_auto_phraseis set totrueadd_user_dict/enable_user_dictis set totrue- The commit text contains only Chinese characters (validated via
AP.is_chinese_onlyusing Unicode range checks) - All segments have selected candidates carrying non-empty comments (auxiliary codes)
If these conditions pass, the handler collects auxiliary codes from the comment cache, assembles a custom_code string, and calls Memory:update_userdict to insert a DictEntry into the add_user_dict user dictionary.
English auto_phrase Pipeline
English auto_phrase operates under different constraints. The wanxiang_english user dictionary remains active regardless of the enable_user_dict setting. The trigger conditions in AP.commit_handler require:
- Raw input ending with a backslash (
\) - Commit text qualifying as an ASCII word (detected by
is_ascii_word)
When triggered, the system stores the commit text together with the code derived from the raw input (excluding trailing backslashes) into wanxiang_english. It also creates a lowercase variant to ensure case-insensitive matching.
Configuration and Setup
Enable the feature through your custom configuration file. The schema declares the switches in wanxiang.schema.yaml, but you typically activate them in custom/wanxiang.custom.yaml or custom/wanxiang_pro.custom.yaml:
add_user_dict/enable_user_dict: true
add_user_dict/enable_auto_phrase: true
The first switch activates the generic user dictionary infrastructure required for Chinese auto_phrase, while the second specifically enables the automatic phrase creation logic.
Core Implementation Details
The lua/auto_phrase.lua file contains three critical components that orchestrate the feature.
The Comment Cache Mechanism
During input processing, the AP.func iterator populates a comment_cache table mapping candidate text to auxiliary code comments. This cache is essential for Chinese auto_phrase because the comments supply the encoding information needed to construct the custom_code field:
-- Simplified illustration from lua/auto_phrase.lua
local comment_cache = {}
-- During iteration:
comment_cache[candidate.text] = candidate.comment
Commit Handler Logic
The AP.commit_handler serves as the central dispatcher registered in AP.init as both a commit and delete notifier. It validates the input context, determines which pipeline to execute, constructs the DictEntry object, and persists it via env.memory:update_userdict(entry, 1, "").
Helper functions support this logic:
AP.is_chinese_only(str): Validates that input contains only Chinese Unicode charactersis_ascii_word(str): Detects pure ASCII words for English validation
Practical Usage Examples
Adding Chinese Phrases
Type the phrase "万象方案" and select the candidate. If auxiliary codes appear in the comments (e.g., "wj", "xx", "fa"), pressing Space triggers the handler to build the code "wj xx fa ..." and write the entry 万象方案 1 wj xx fa ... into add_user_dict. Subsequent typing of the same phrase retrieves it directly from your user dictionary.
Adding English Words
Type hello\ (including the trailing backslash) and press Space. The system detects the backslash suffix and ASCII content, storing both hello and HELLO entries in wanxiang_english with the code hello. Future typing of "hello" will prioritize this user-defined entry.
Programmatic Entry Creation
While normally handled automatically, the underlying API usage follows this pattern from lua/auto_phrase.lua:
local Memory = require('librime').Memory
local env = {engine = rime_engine}
env.memory = Memory(rime_engine, rime_engine.schema, "add_user_dict")
local entry = DictEntry()
entry.text = "万象"
entry.weight = 1
entry.custom_code = "wx " -- Assembled from comment cache
env.memory:update_userdict(entry, 1, "")
Summary
- auto_phrase provides automatic user dictionary population without manual add-word commands in amzxyz/rime_wanxiang.
- Chinese pipeline requires
enable_auto_phrase,enable_user_dict, pure Chinese content, and auxiliary code comments to build entries inadd_user_dict. - English pipeline activates on trailing backslash (
\) input, storing ASCII words inwanxiang_englishwith case-insensitive variants. - Core logic resides in
lua/auto_phrase.lua, utilizingAP.commit_handler,comment_cache, andMemory:update_userdictfor persistence. - Configuration occurs via
add_user_dict/enable_auto_phraseandadd_user_dict/enable_user_dictin custom YAML files.
Frequently Asked Questions
How do I enable the auto_phrase feature?
Set add_user_dict/enable_user_dict: true and add_user_dict/enable_auto_phrase: true in your custom/wanxiang.custom.yaml file. Both switches must be active for Chinese auto_phrase to function, while English auto_phrase only requires the user dictionary infrastructure to be present.
Why isn't my Chinese phrase being saved to the user dictionary?
Verify that the commit text contains only Chinese characters (validated by AP.is_chinese_only), all segments have selected candidates with non-empty comments (auxiliary codes), and both configuration switches are enabled. The feature explicitly skips entries lacking auxiliary encoding information.
What is the difference between the Chinese and English auto_phrase pipelines?
The Chinese pipeline requires explicit enabling via enable_auto_phrase, validates Unicode Chinese content, and stores entries in add_user_dict using assembled auxiliary codes. The English pipeline triggers automatically on backslash-terminated input, requires ASCII word content, and persists to wanxiang_english regardless of the auto_phrase toggle.
Where are auto_phrase entries physically stored?
Chinese entries write to the add_user_dict user dictionary file, while English entries populate wanxiang_english. Both are standard RIME dictionary files that persist across sessions and can be backed up or version-controlled like other RIME configuration files.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →