vovkasm / input-source-switcher

Command line input source switcher for Mac.
MIT License
139 stars 11 forks source link

issue with Progrommer Dvorak layout #2

Closed vbauerster closed 9 years ago

vbauerster commented 9 years ago

Собрал по инструкции под 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 все работает

vovkasm commented 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 не обнаружил).

Попробуйте выбрать вашу раскладку с консоли как описано выше. Это может помочь понять в чём именно проблема.

vovkasm commented 9 years ago

@wbauer, судя по всему проблема в устройстве MacVim. Дальше теория, точно проверю в выходные когда время появится. Чтобы работало MacOS X API для получения текущего метода ввода, программа должна гонять стандартный цикл GUI приложения и получать оповещение от системы о сменах раскладки, иначе API (TISCopyCurrentKeyboardInputSource) возвращает инициализированное при старте приложения значение. При работе в GUI-режиме, MacVim этот цикл запускает. При работе в консольном режиме, похоже, что нет... Поэтому возвращается всё время один и тот-же метод ввода. Это объясняет всё, что происходит:

Так же, вот немного на StackOverflow: http://stackoverflow.com/questions/26024400/osx-cocoa-input-source-detect-change

vovkasm commented 9 years ago

@wbauer, проверьте пожалуйста версию 0.3, проблема должна исправиться.

vovkasm commented 9 years ago

I will close the task because the problem should be fixed now and no further responses occur.

vbauerster commented 9 years ago

Отвечаю на вопрос от 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

vbauerster commented 9 years ago

Подтверждаю с версией 0.3, работает и с консольной версией MacVim

vovkasm commented 9 years ago

@wbauer

Подтверждаю с версией 0.3, работает и с консольной версией MacVim

Спасибо! Значит баг действительно состоял в особенностях работы API выбора источников ввода от Apple.

И из предидущего комментария следует, что выбор работает, раскладка Programmer Dvorak выбирается по id=com.apple.keyboardlayout.Programmer Dvorak.keylayout.ProgrammerDvorak

Большое спасибо за то, что потратили время на описание ошибки и проверку!