Совсем одного дня не вышло, вчера уехал смотреть на китайские фейерверки, но “проект выходного дня и еще половины выходного дня” звучит не очень красиво, так что округлю в нижнюю сторону.
Идею подбросил бывший коллега, которому после переезда на Macbook не хватало в настройках Mac OS X возможности навесить индивидуальные комбинации клавиш на включение каждого из языков ввода, как в X Window. Caps Lock – английский, Control – русский, Control + Shift – украинский. Поверхностный поиск в гугле ничего не нашел, а работы там по моим прикидкам было совсем немного поэтому решил взяться и сделать.
В результате получился MLSwitcher. Как ни странно, больше всего времени ушло на то, чтобы разобраться как “более правильно” сделать динамическую генерацию таблицы с виджетами. Не уверен, что сделано более правильно, но работает и ладно. Для ускорения разработки решил пожертвовать красивостями и функциональностью: при изменении списка языков ввода приложение нужно перезапускать, вместо shortcut recorder’а используется таблица чекбоксов, использовать можно только клавиши-модификаторы: Shift, Control, Alt/Option, Command. Даже не бета, а proof of concept прототип.
Внутренности OS X не делают различия между правый-левый Shift/Control/etc… Caps Lock не используется из-за того, что не нашел как отключить его програмно для всей системы. Перехватить не проблема, но игнорировать его нельзя – буквы набираются заглавные. Правда, саму кнопку в настройках можно отмапить в любой другой модификатор.
В константах Carbon/Cocoa Caps Lock, кстати, называется Alpha Shift. Самэц :)