mirror of
https://github.com/lilydjwg/fcitx.vim.git
synced 2025-12-27 02:24:57 +08:00
Also support fcitx5-remote to toggle IME state (#27)
* Also support fcitx5-remote to toggle IME state * Fix types and wording
This commit is contained in:
parent
4042bbb29c
commit
5c7b8e5833
2 changed files with 78 additions and 15 deletions
28
README.md
28
README.md
|
|
@ -2,12 +2,24 @@ Keep and restore fcitx state for each buffer separately when leaving/re-entering
|
|||
|
||||
D-Bus only works with the same user so this won't work with `sudo vim`. See the `fcitx5-server` branch for an experimental implementation that supports `sudo vim`.
|
||||
|
||||
Requires:
|
||||
By default, it use python3 and D-Bus to toggle IME state.
|
||||
If you set `g:fcitx5_remote` to the executable path of `fcitx5-remote` **BEFORE** loading the plugin, it will use `fcitx5-remote` instead of python and D-Bus. In this case, python3 support is optional.
|
||||
|
||||
Usually `fcitx5-remote` mode is way faster since Python script need quite some time for the initial load if you don't use any other plugins that load Python.
|
||||
|
||||
Base requirements:
|
||||
|
||||
* fcitx 5
|
||||
|
||||
Requirements for Python mode (`g:fcitx5_remote` is not set):
|
||||
|
||||
* Vim with Python 3 compiled in
|
||||
* The python-dbus package
|
||||
|
||||
Requirements for `fcitx5-remote` mode (`g:fcitx5_remote` is set):
|
||||
|
||||
* fcitx5-remote
|
||||
|
||||
Links:
|
||||
|
||||
* [git repo](https://github.com/lilydjwg/fcitx.vim)
|
||||
|
|
@ -21,12 +33,24 @@ Warning:
|
|||
|
||||
D-Bus 只在同一用户时有效,所以使用 `sudo vim` 时本代码就失效了。在 `fcitx5-server` 分支有一个实验性的版本支持 `sudo vim` 的用法。
|
||||
|
||||
要求:
|
||||
本插件默认会使用 Python 3 并通过 D-Bus 来切换输入法状态。
|
||||
但如果你在加载插件**之前**设置了 `g:fcitx5_remote` 为你已安装的 `fcitx5-remote` 可执行文件的路径,那么本插件会使用它来切换输入法状态;此模式下本插件并不需要 Python 。
|
||||
|
||||
如果你没有其他使用 Python 的 Vim 插件,本插件的 Python 模式初始化可能会显著拖慢启动时间;而 `fcitx5-remote` 模式则没有这个问题。
|
||||
|
||||
基本要求:
|
||||
|
||||
* fcitx 5
|
||||
|
||||
使用 Python 模式的要求(未设置 `g:fcitx5_remote`):
|
||||
|
||||
* 带有 Python 3 支持的 Vim
|
||||
* python-dbus 包
|
||||
|
||||
使用 `fcitx5-remote` 模式的要求(需设置 `g:fcitx5_remote`):
|
||||
|
||||
* fcitx5-remote
|
||||
|
||||
链接:
|
||||
|
||||
* [git 仓库](https://github.com/lilydjwg/fcitx.vim)
|
||||
|
|
|
|||
|
|
@ -5,27 +5,66 @@ scriptencoding utf-8
|
|||
" URL: https://www.vim.org/scripts/script.php?script_id=3764
|
||||
" ---------------------------------------------------------------------
|
||||
" Load Once:
|
||||
if &cp || exists("g:loaded_fcitx") || !exists('$DISPLAY') || !has('python3')
|
||||
if &cp || exists("g:loaded_fcitx") || !exists('$DISPLAY')
|
||||
finish
|
||||
endif
|
||||
let s:keepcpo = &cpo
|
||||
set cpo&vim
|
||||
let g:loaded_fcitx = 1
|
||||
|
||||
try " abort on fail
|
||||
exe 'py3file' expand('<sfile>:r') . '.py'
|
||||
if py3eval('fcitx_loaded')
|
||||
if exists('##InsertLeavePre')
|
||||
au InsertLeavePre * py3 fcitx2en()
|
||||
else
|
||||
au InsertLeave * py3 fcitx2en()
|
||||
" If g:fcitx5_remote is set (to the path to `fcitx5-remove`), use it to toggle IME state.
|
||||
if exists("g:fcitx5_remote")
|
||||
function Fcitx2en()
|
||||
let inputstatus = trim(system(g:fcitx5_remote))
|
||||
if inputstatus == '2'
|
||||
let b:inputtoggle = 1
|
||||
call system(g:fcitx5_remote . ' -c')
|
||||
endif
|
||||
au InsertEnter * py3 fcitx2zh()
|
||||
au CmdlineEnter [/\?] py3 fcitx2zh()
|
||||
au CmdlineLeave [/\?] py3 fcitx2en()
|
||||
endfunction
|
||||
function Fcitx2zh()
|
||||
try
|
||||
if b:inputtoggle == 1
|
||||
call system(g:fcitx5_remote . ' -o')
|
||||
let b:inputtoggle = 0
|
||||
endif
|
||||
catch /inputtoggle/
|
||||
let b:inputtoggle = 0
|
||||
endtry
|
||||
endfunction
|
||||
|
||||
let g:loaded_fcitx = 1
|
||||
|
||||
" Otherwise, if python3 is available, use python and dbus to toggle IME state.
|
||||
elseif has('python3')
|
||||
try " abort on fail
|
||||
exe 'py3file' expand('<sfile>:r') . '.py'
|
||||
if py3eval('fcitx_loaded')
|
||||
function Fcitx2en()
|
||||
py3 fcitx2en()
|
||||
endfunction
|
||||
function Fcitx2zh()
|
||||
py3 fcitx2zh()
|
||||
endfunction
|
||||
|
||||
let g:loaded_fcitx = 1
|
||||
endif
|
||||
endtry
|
||||
endif
|
||||
|
||||
" Register autocmd if successfully loaded.
|
||||
if exists("g:loaded_fcitx")
|
||||
if exists('##InsertLeavePre')
|
||||
au InsertLeavePre * call Fcitx2en()
|
||||
else
|
||||
au InsertLeave * call Fcitx2en()
|
||||
endif
|
||||
endtry
|
||||
au InsertEnter * call Fcitx2zh()
|
||||
au CmdlineEnter [/\?] call Fcitx2zh()
|
||||
au CmdlineLeave [/\?] call Fcitx2en()
|
||||
endif
|
||||
|
||||
" ---------------------------------------------------------------------
|
||||
" Restoration And Modelines:
|
||||
let &cpo=s:keepcpo
|
||||
unlet s:keepcpo
|
||||
|
||||
" vim: sw=2 :
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue