Skip to content

Instantly share code, notes, and snippets.

@mozbugbox
Created June 10, 2017 15:15
Show Gist options
  • Save mozbugbox/dc76216a859fb0c0395fa8bb59972e0c to your computer and use it in GitHub Desktop.
Save mozbugbox/dc76216a859fb0c0395fa8bb59972e0c to your computer and use it in GitHub Desktop.
Switch ibus to English on Escape key for Vim
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Auto switching IBus engine to Engish when leaving insert mode
" Maintainer: mozbugbox <mozbugbox@yahoo.com.au>
" License: GPL version 3 or later
"
" Options:
" let g:ibus_eng_engine = 'xkb:us::eng'
" let g:ibus_reset_insert = 1
"
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
if exists("g:loaded_ibusjump")
finish
endif
let g:loaded_ibusjump = 1
" Use `ibus list-engine` to find a proper English engine name
let g:ibus_eng_engine = get(g:, "ibus_eng_engine", 'xkb:us::eng')
" Reset to saved input engine when entering insert mode
let g:ibus_reset_insert = get(g:, "ibus_reset_insert", 1)
" Set ibus input method to English engine
function! s:SetIBusEng()
if $DISPLAY == '' | return | endif
" Fetch current ibus engine
silent let l:engine_name = system('/usr/bin/ibus engine')
let b:ibus_engine_name = split(l:engine_name, "\n")[0]
if b:ibus_engine_name != g:ibus_eng_engine
silent execute '!/usr/bin/ibus engine ' . g:ibus_eng_engine
endif
endfunction
" Reset ibus input method to saved engine if any
function! s:SetIBusBack()
if $DISPLAY == '' | return | endif
if !g:ibus_reset_insert || get(b:, "ibus_engine_name") == g:ibus_eng_engine
return
endif
silent execute '!/usr/bin/ibus engine ' . b:ibus_engine_name
endfunction
" Connect to insert mode change events
augroup ibus
autocmd!
autocmd InsertLeave * :call s:SetIBusEng()
autocmd InsertEnter * :call s:SetIBusBack()
augroup END
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment