README file from
GithubEngnese
Engnese is an Obsidian desktop plugin for English-first pinyin completion.
It allows users to keep typing English letters in the editor while treating the current token as pinyin in the background. When a candidate is accepted, the already inserted English token is replaced in place with Chinese text.
What It Does
- Keeps the normal English typing flow and avoids inline preedit.
- Reads local Rime
.dict.yamldictionaries, includingimport_tables. - Falls back to the longest valid prefix when a full pinyin stream has no direct match.
- Supports configurable candidate shortcuts and paging.
- Supports optional double-space to accept the first candidate.
- Avoids triggering inside fenced code blocks, inline code, and math contexts.
Examples
woaini->我爱你ni+ double-space ->你chunfengyichui-> select春风, then continue withyichui
If a full-token match does not exist, Engnese uses the longest available prefix and leaves the remaining suffix in the editor so the next completion cycle can continue from there.
Requirements
- Obsidian desktop
- A local Rime dictionary file
- Node.js and npm if building from source
The plugin is desktop-only because it reads dictionaries from the local filesystem.
Install From Source
git clone https://github.com/xXxGeorge/obsidian-engnese.git
cd obsidian-engnese
npm install
npm run build
Copy the build output into:
<vault>/.obsidian/plugins/engnese/
Required files:
manifest.jsonmain.jsstyles.css
Then enable Engnese in Obsidian Community Plugins.
Development
Run the watcher:
npm run dev
Build a production bundle:
npm run build
The plugin ID is engnese, so the target plugin directory should also be named engnese.
Dictionary Path
Default path:
~/Library/Rime/rime_ice.dict.yaml
If path expansion causes issues, use an absolute path such as:
/Users/<user>/Library/Rime/rime_ice.dict.yaml
Settings
General
Enable plugin: turn Engnese on or offRime dictionary path: main dictionary entry fileRebuild dictionary index: re-parse the configured dictionary and refresh the in-memory index
Candidate behavior
Double Space selects first candidateDouble Space timeoutKeep space after Double Space selection
Selection shortcuts
Selection keys: candidate 1Select candidate 2Select candidate 3Select candidate 4Select candidate 5Previous pageNext page
Default shortcuts:
Tab: candidate 1Ctrl-;: candidate 2Ctrl-': candidate 3Ctrl-/: candidate 4Ctrl-[: candidate 5Ctrl-,: previous pageCtrl-.: next page
In some environments, Ctrl-[ is interpreted as Escape. If that happens, remap Select candidate 5 in plugin settings.
Context guards
Disable in code blocksDisable in inline codeDisable in math
Limitations
- The dictionary index is currently kept in memory only and is rebuilt on demand.
- Candidate ranking is dictionary-weight based with a few simple heuristics; there is no adaptive learning yet.
- The plugin currently targets desktop usage only.
Troubleshooting
- Dictionary load error: verify the configured path and try an absolute path.
- Dictionary changed but results did not update: click
Rebuild dictionary index. Ctrl-[behaves likeEscape: remap candidate 5 to another shortcut.- Double-space keeps a trailing space unexpectedly: disable
Keep space after Double Space selection.
License
This project is licensed under MIT. See LICENSE.