Comments 9
Зачем делать .exe, если можно воспользоваться скриптом на python/ruby/whatever, который так же будет дергать функции WinAPI но при этом у него на порядок меньше шансы получить вирус?
Насчёт проблемы фокуса и мелькания cmd.exe, соберите dll и вызывайте из vim с помощью libcall:
:help libcall
:help libcall
Спасибо за отличное решение, пользовался до этого ctrl+^ — не удобно.
Предлагаю несколько доработок:
plugin.vim
let s:dll_path = ''
if has('win32')
let s:dll_path = fnamemodify(expand(""), ":h"). "\\libdxlsw.dll"
elseif has('win64')
let s:dll_path = fnamemodify(expand(""), ":h"). "\\libdxlsw64.dll"
endif
fun! lib_kb_switch(mode)
let cur_layout = libcallnr(s:dll_path, 'dxGetLayout', 0)
if a:mode == 0
if cur_layout != 1033
call libcallnr(s:dll_path, 'dxSetLayout', 1033)
endif
let b:lib_kb_layout = cur_layout
elseif a:mode == 1
if exists('b:lib_kb_layout') && b:lib_kb_layout != cur_layout
call libcallnr(s:dll_path, 'dxSetLayout', b:lib_kb_layout)
endif
endif
endfun
if s:dll_path != ''
autocmd InsertEnter * call lib_kb_switch(1)
autocmd InsertLeave * call lib_kb_switch(0)
endif
1. можно оформить в виде плагина, использовать с pathogen, vundle;
2. корректно «не работает» для любой ОС кроме Win;
3. dll берется из папки скрипта;
Предлагаю несколько доработок:
plugin.vim
let s:dll_path = ''
if has('win32')
let s:dll_path = fnamemodify(expand(""), ":h"). "\\libdxlsw.dll"
elseif has('win64')
let s:dll_path = fnamemodify(expand(""), ":h"). "\\libdxlsw64.dll"
endif
fun! lib_kb_switch(mode)
let cur_layout = libcallnr(s:dll_path, 'dxGetLayout', 0)
if a:mode == 0
if cur_layout != 1033
call libcallnr(s:dll_path, 'dxSetLayout', 1033)
endif
let b:lib_kb_layout = cur_layout
elseif a:mode == 1
if exists('b:lib_kb_layout') && b:lib_kb_layout != cur_layout
call libcallnr(s:dll_path, 'dxSetLayout', b:lib_kb_layout)
endif
endif
endfun
if s:dll_path != ''
autocmd InsertEnter * call lib_kb_switch(1)
autocmd InsertLeave * call lib_kb_switch(0)
endif
1. можно оформить в виде плагина, использовать с pathogen, vundle;
2. корректно «не работает» для любой ОС кроме Win;
3. dll берется из папки скрипта;
1. Думаю, даже нужно будет
2,3. Вот именно, что для Linux и MacOS оно точно не работает. По хорошему, наверное, стоит собрать нормальный плагин, подключающийся через vundle одной строчкой и работающий хотя бы в самых распространённых системах. Найду время — займусь
2,3. Вот именно, что для Linux и MacOS оно точно не работает. По хорошему, наверное, стоит собрать нормальный плагин, подключающийся через vundle одной строчкой и работающий хотя бы в самых распространённых системах. Найду время — займусь
Так собирать ничего не надо, у тебя уже все готово.
Бери код с моими правками, выкладывай на гитхаб вместе с собраными dll и все готово.
Пункты 2,3 в моих правках реализованы.
vundle с гитхаба все подхватит сам.
Бери код с моими правками, выкладывай на гитхаб вместе с собраными dll и все готово.
Пункты 2,3 в моих правках реализованы.
vundle с гитхаба все подхватит сам.
Отписал в Тех-Детали — надеюсь запилим вместе крутой плагин. У меня с конфигами вимовскими не очень…
Sign up to leave a comment.
Vim в Windows и переключение раскладки клавиатуры