Closed ghost355 closed 9 years ago
Вероятно, можно. Я, к сожалению, достаточно мало знаком с Emacs, поэтому тут могу помочь только поддержкой со стороны самого input-source-switcher
.
Если возможно писать нативные расширения для Emacs. Можно просто использовать C++ api InputSourceController. Пример использования для утилиты issw: main.cpp
Если Emacs умеет загрузить динамическую библиотеку и вызвать функцию из неё.
Сейчас libInputSourceSwitcher.dylib
содержит две функции которые может вызвать любое приложение на C и плагин vim-xkbswitch
через libcall() в vim.
const char* Xkb_Switch_getXkbLayout(const char* /* unused */);
const char* Xkb_Switch_setXkbLayout(const char* newgrp);
Если для этого варианта чего-то не хватает, с удовольствием реализую нужный интерфейс.
Если Emacs может только вызывать внешние программы, то можно воспользоваться утилитой-примером из дистрибутива issw
.
issw # вернуть текущий метод ввода
issw ${input-method-name} # сменить метод ввода
вот скорее всего вариант 3 там есть хуки входа и выхода из состояния, например, тот же insert mode. сейчас изучаю ELisp, чтобы понять как правильно сделать
как то так
(setq lang_source "com.apple.keylayout.US")
(add-hook 'evil-insert-state-entry-hook
(lambda ()
(shell-command (concat "issw " lang_source))))
(add-hook 'evil-insert-state-exit-hook
(lambda ()
(setq lang_source (shell-command-to-string "issw"))
(shell-command "issw com.apple.keylayout.US")))
плюс нужно ввести переменную для сохранения установленного режима в insert mode для того, чтобы при возврате восстанавливался язык текущего ввода Я проверил, все работает отлично - входит включает русский, выходит из вставки включает английский. Осталось описать все оставшиеся режимы вставки
Интересно, эту штуку можно прикрутить к Emacs, точнее к Spacemacs? В Emacs есть Evil, который организует поддержку vim способа навигации по тексту и всего остального. Вот мне что ответили в ветке Spacemacs