Проект выходного дня: MLSwitcher 13

Совсем одного дня не вышло, вчера уехал смотреть на китайские фейерверки, но “проект выходного дня и еще половины выходного дня” звучит не очень красиво, так что округлю в нижнюю сторону.

Идею подбросил бывший коллега, которому после переезда на 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. Самэц :)

Трудности перевода 0

Написал небольшую шпаргалку по локализации небольших проектов на ObjC/Cocoa.

Мой первый плагин для Safari 3

Документацией и гуглом можно достичь большего, чем просто документацией.

Ура! Три дня упорного труда – и мой первый плагин (а по совместительству и первое приложение на Cocoa) – готово! Прошу любить и жаловать: LanguageSwitcher. Leopard only, i386 only, если не работает – звонить 03. (Дальше картинка на 100Кб)
Read more »