Closed vbauerster closed 9 years ago
@wbauer, вы можете выбрать этот layout в терминале? К примеру, что в вашей системе вернут команды:
issw 'com.apple.keyboardlayout.Programmer Dvorak'
issw 'com.apple.keyboardlayout.Programmer Dvorak.keylayout.ProgrammerDvorak'
?
Дело в том, что вся эта история с раскладками клавиатуры не такая простая. Программа пытается эмулировать простейшую модель, на которую рассчитывает vim-xkbswitch. В OS X, есть понятие метода ввода и это совсем не раскладка. Как пример, вот, что может получаться:
$ ./Debug/issw -l
com.apple.keylayout.US
com.apple.keylayout.Russian
com.apple.CharacterPaletteIM
com.apple.KeyboardViewer
com.apple.PressAndHold
com.apple.50onPaletteIM
$ ./Debug/issw
com.apple.keylayout.US
$ ./Debug/issw com.apple.KeyboardViewer
com.apple.keylayout.US # <-- выбрали 'com.apple.KeyboardViewer' но показывается экранная клавиатура, а текущая раскладка не меняется
Теоретически это не должно мешать плагину xkbswitch правильно работать, тем более, что как вы говорите, в GUI-версии всё работает корректно. Скорее больше похоже на проблему квотинга (т.к. в ID метода ввода присутствует пробел, кстати, ни в одной родной раскладке на MacOS X я пробелов в ID не обнаружил).
Попробуйте выбрать вашу раскладку с консоли как описано выше. Это может помочь понять в чём именно проблема.
@wbauer, судя по всему проблема в устройстве MacVim. Дальше теория, точно проверю в выходные когда время появится. Чтобы работало MacOS X API для получения текущего метода ввода, программа должна гонять стандартный цикл GUI приложения и получать оповещение от системы о сменах раскладки, иначе API (TISCopyCurrentKeyboardInputSource
) возвращает инициализированное при старте приложения значение.
При работе в GUI-режиме, MacVim этот цикл запускает. При работе в консольном режиме, похоже, что нет... Поэтому возвращается всё время один и тот-же метод ввода.
Это объясняет всё, что происходит:
Так же, вот немного на StackOverflow: http://stackoverflow.com/questions/26024400/osx-cocoa-input-source-detect-change
@wbauer, проверьте пожалуйста версию 0.3, проблема должна исправиться.
I will close the task because the problem should be fixed now and no further responses occur.
Отвечаю на вопрос от 17 мая:
~/tmp/input-source-switcher/build master
❯ ./issw 'com.apple.keyboardlayout.Programmer Dvorak'
Error: Cant find input source with id=com.apple.keyboardlayout.Programmer Dvorak
Usage: issw [-hlV] [
~/tmp/input-source-switcher/build master ❯ ./issw 'com.apple.keyboardlayout.Programmer Dvorak.keylayout.ProgrammerDvorak' com.apple.keyboardlayout.Programmer Dvorak.keylayout.ProgrammerDvorak
Подтверждаю с версией 0.3, работает и с консольной версией MacVim
@wbauer
Подтверждаю с версией 0.3, работает и с консольной версией MacVim
Спасибо! Значит баг действительно состоял в особенностях работы API выбора источников ввода от Apple.
И из предидущего комментария следует, что выбор работает, раскладка Programmer Dvorak
выбирается по id=com.apple.keyboardlayout.Programmer Dvorak.keylayout.ProgrammerDvorak
Большое спасибо за то, что потратили время на описание ошибки и проверку!
Собрал по инструкции под Mac OS 10.10.3 Пользуюсь раскладкой Programmer Dvorak При текущей раскладке pd выдает следующий id: ❯ issw com.apple.keyboardlayout.Programmer Dvorak.keylayout.ProgrammerDvorak
При листинге: ❯ issw -l com.apple.keylayout.RussianWin com.apple.CharacterPaletteIM com.apple.KeyboardViewer com.apple.PressAndHold com.apple.keylayout.US com.apple.keyboardlayout.Programmer Dvorak
Как видно id для раскладки pd отличаются. Подозреваю, что из-за этого не переключается раскладка в терминальной версии vim с установленным плагином Vim-xkbswitch С графическим MacVim все работает