Утилиты для индикации выбранного языка. Индикатор раскладки клавиатуры в виде цветного кубика на столе с помощью Arduino. Подготавливаем изображения флагов

Алексей Федорчук

Докопавшись хоть и не до идеального, но устраивающего меня переключателя раскладок клавиатуры, следовало озаботиться индикацией текущего её состояния: при использовании циклического переключателя без этого не прожить. Ибо только нециклические переключатели избавляют от необходимости думать о текущем состоянии ввода символов. А нециклического переключения iBus не умеет. И это далеко не всё, чего не умеет этот хвалёный гиперпрогрессивный iBus.

Как известно, в качестве индикаторов раскладки можно использовать led-индикаторы на клавиатуре. И эта возможность задействована по умолчанию и при выборе русского языка в оригинальном дистрибутиве, и в моей mini-редакции - в качестве индикатора русской раскладки используется ScrollLock. Изменить ситуацию (например, если такого индикатора на клавиатуре нет) можно через редактор Dconf. Для чего надо пройти по схеме org.gnome.desktop.inputsources:

И вписать нужное значение в строку xkb-options:

Или, если led-индикатор по каким-то причинам окажется не включённым, дописать одно из двух: "grp_led:scroll" или "grp_led:caps" .

Правда, на клавиатуре без led-индикаторов вообще (а именно таковы большинство ноутбучных) радости от этого будет мало: потребуется экранный индикатор раскладки. Который не помешает и при наличии led’ов.

И таких индикаторов есть - в виде штатного апплета среды Budgie. Для помещения этого апплета на управляющую панель следует отправиться в конфигуратор среды Raven, запускаемый пиктограммой в правом верхнем углу, затем с помощью «шестерёночной» пиктограммы вызвать собственно панель конфигуратора, перейти на вкладку Панель , нажать плюсик в строке Апплеты , после чего отыскать нужный:

После чего апплет со всплывающей подсказкой появится на управляющей панели:

Правда, вид он имеет весьма бледный (в прямом смысле слова), а, кроме того, выглядит маленьким и печальным. Так что я с трудом различаю его. Способа изменить его представление (например, на традиционные государственные флаги, отечественный и «вражий») на поверхности не валяется. По крайней мере, я об него не споткнулся…

Возникает естественное желание прикрутить к Budgie какой-либо из вне-десктопных индикаторов раскладки, типа xxkb или gxkb , с их богатыми наборами флагов. Увы - как следует из их имён, они рассчитаны на работу с xkb , и с iBus функционируют, мягко говоря, некорректно. В частности, по моему опыту, gxkb способен заблокировать клавиатуру вусмерть. После чего остаётся только жать кнопку Power на корпусе машины до посинения. Точнее, до её срабатывания в соответствие с ATX-стандартом.

Тема отображения текущей раскладки беспокоила хабрасообщество уже не раз . Я опробовал множество существующих решений, но по разным причинам они меня не устроили. Чтобы подобрать для себя наиболее удобный вариант отображения текущей раскладки, я написал небольшое приложение на C++, которое при нажатии на левый Shift отображает язык в системном курсоре редактирования текста. Менее 100 строк кода и около 4 килобайт в скомпилированном виде - на основе этого вы можете достаточно просто реализовать свой взгляд на то, как на самом деле должна выглядеть индикация текущей раскладки.

Как это сделано?

Поскольку ничего кроме WinAPI нам не нужно, программа компилируется без RTL в Visual Studio 2010. Таким образом мы получаем очень маленький объём исполняемого файла. Для отслеживания нажатия на Shift устанавливается клавиатурный хук без использования dll. Для изменения системного курсора редактирования текста используется функция SetSystemCursor - она позволяет заменить необходимый тип стандартного курсора сразу во всех приложениях. Таким образом мы избегаем необходимости тратить дополнительные ресурсы на отображение индикатора на экране - этим занимается сама система. По умолчанию курсор редактирования текста без тени и инвертирует цвет каждого пикселя под собой. Такое возможно только в двухцветных курсорах, поэтому чтобы сохранить это полезное свойство, мы должны сделать наш индикатор чёрно-белым.

Где можно скачать результат?

Исходный код можно увидеть в файле main.cpp (на bitbucket.org) или скачать в виде проекта langcursor-1.0-src.zip (5 кб). Внимание! Проект компилируется только в Release-версии (из-за отсутствия RTL).
Готовый исполняемый файл в архиве: langcursor-1.0-bin.zip (1 кб).

Что я могу изменить?

Если вы хотите добавить отображение других раскладок, достаточно добавить ресурс курсора с идентификатором раскладки в качестве имени (можно задать в файле resource.h, значение из последней колонки таблицы идентификаторов языков). Если вам не нравится маленькая чёрно-белая индикация языка, вы можете заменить курсоры на свои, например, с цветными флагами. Однако, при использовании цветных курсоров вы не сможете добиться инвертирования цветов под курсором и курсор начнёт отбрасывать тень (если её не выключить в настройках).
Более того, если вы знакомы с C/С++, вы можете полностью изменить код под себя! Пробуйте, экспериментируйте, делитесь вашими наработками! Все люди разные, что подходит одним - не факт, что подойдёт другим. Но вместе мы, надеюсь, сможем придумать наиболее удобное решение:)

Модифицированные версии

Постоянное отображение иконки языка без необходимости нажимать Shift

Пользователи, регулярно набирающие на компьютере даже небольшие объемы текста, замечают мелкие недостатки Windows, усложняющие ввод. Избавиться от них довольно просто с помощью нескольких программ, описанных ниже. Часть советов в этом материале окажутся полезны лишь тем, кто овладел слепым набором, но некоторые подсказки пригодятся абсолютно всем.

Полезные утилиты

Начнем с самых простых вещей – переключения раскладки. По умолчанию в Windows она назначена на комбинацию Alt+Shift или Ctrl+Shift. В последних версиях ОС пользователь может выбрать и «’» (апостроф), который на большинстве клавиатур находится прямо под кнопкой Esc. Однако это блокирует доступ к клавише «ё», расположенной там же. Расширить возможности Windows позволит утилита Punto Switcher .

С ее помощью переключение раскладки присваивается кнопкам Ctrl, Shift, Caps Lock. Именно на последней и рекомендуем остановиться: Caps Lock удобно нажимать мизинцем левой руки, и в тексте со смешанными языками такое переключение будет происходить гораздо быстрее, чем посредством комбинации клавиш, для которой понадобится поднимать всю руку.

Раз уж речь зашла о Punto Switcher, то остановимся и на других ее достоинствах. Программа автоматически исправляет типичные опечатки, возникающие при наборе, например две заглавные буквы в начале предложения. Автоматически корректируется и текст, набранный на неправильной раскладке (например, слово «пщщпду» будет исправлено на google). С помощью горячих клавиш утилита может отменять конвертацию раскладки или применять ее к любому выделенному фрагменту текста. У Punto Switcher есть собственный индикатор языка в системном трее, а еще она умеет отображать текущую раскладку в виде флага страны, что гораздо удобнее аббревиатур EN или RU.

Близким аналогом Punto Switcher является Arum Switcher . Программа также имеет индикатор в системном трее, исправляет различные типы опечаток, регистр текста и назначает абсолютно любую клавишу или их комбинацию на переключение раскладки.

Если пользователям нужна только функция конвертации раскладок (перевода уже набранных слов по типу «пщщпду»→google), то в этом случае выручит более простая утилита LangOver , которая после выделения текста и нажатия F10 (клавишу можно менять) конвертирует символы.

Language Indicator тоже выполняет лишь малую часть того, что умеют Punto Switcher и Arum Switcher, а именно отображает флаг страны указанного языка. При этом у программы все же есть одна дополнительная функция. Во время перемещения мышки по экрану утилита будет показывать выбранную раскладку в каждом конкретном приложении, над которым сейчас находится курсор. Программы, подобные Language Indicator, могут пригодиться тем, у кого по каким-то причинам из системного трея исчез стандартный индикатор языка и его невозможно вернуть назад (а это достаточно распространенная проблема).

Индикатор раскладки

Нередко, введя несколько первых букв слова, пользователь замечает, что у него выбрана неправильная раскладка. Избежать таких проблем, а также не смотреть постоянно на индикатор, находящийся в углу экрана, помогут программы, отображающие текущий язык непосредственно возле текстового курсора.

Утилита Flean имеет настройки прозрачности и позиции индикатора на экране (возле текстового курсора или в поле для ввода). По умолчанию она показывает языки в виде флагов, но можно загрузить и любую другую иконку в формате BMP.

Если пользователю нужны более продвинутые возможности, следует обратить внимание на Aml Maple , у которой есть ряд преимуществ. Во-первых, программа отображает язык ввода возле текстового курсора только до начала набора (во Flean флаг виден постоянно, что может отвлекать от печати). Во-вторых, перемещение курсора происходит плавно (Flean применяет неоптимальный алгоритм прорисовки, из-за чего текстовый курсор с флагом перемещается по мере набора текста немного дерганно). Помимо флага, индикатором раскладки может служить и сам цвет текстового курсора. По умолчанию для английского языка он розовый, для русского – синий. Все параметры меняются, а чтобы не запоминать каждый цвет, справа от курсора можно дополнительно выводить флаг.

Утилита Curlyt также предназначена для отображения индикатора языка в том месте, где пользователь набирает текст. Как и в других случаях, есть настройки прозрачности, размера и положения иконки. Следует отметить, что с опциями по умолчанию Curlyt менее других программ отвлекает от набора текста.

Апплет панели Gnome, который отображает текущую раскладку клавиатуры, в качестве индикатора использует надписи вида США или Рус. Я расскажу, как сделать так, чтобы в качестве индикатора отображался флаг выбранной страны.

Добавляем индикатор раскладки клавиатуры

Если у вас на панели Gnome отсутствует индикатор раскладки, добавьте его. Об этом можно почитать в заметке Добавление элементов на панель и на рабочий стол Gnome в Ubuntu .

Подготавливаем изображения флагов

Для начала нужно найти рисунки (иконки) с нужными вам флагами. Файлы должны иметь названия ru.png для русской раскладки и us.png для английской. Я подготовил два рисунка флагов для России и США, которые вы можете использовать.

Поместите файлы с рисунками флагов в директорию ~/.icons/flags . Значок тильда ~ означает вашу домашнюю директорию. Например, /home/pingvinus/.icons/flags . Или же вы можете поместить эти файлы в директорию /usr/share/pixmaps , тогда у всех пользователей в системе будут использоваться иконки флагов для индикации раскладки.

Изменяем конфигурацию

Теперь нужно запустить утилиту gconf-editor (редактор конфигурации Gnome). Для этого можно нажать Alt+F2 , ввести в открышемся окне gconf-editor и нажать кнопку Запустить. В левой части окна выбрать путь desktop->gnome->peripherals->keyboard->indicator . В правой части окна поставить галочку напротив пункта showFlags .

Заключение

Теперь, чтобы изменения вступили в силу, выйдите и снова войдите в систему (возможно придется перезагрузить компьютер). Если все было сделано правильно, тогда в качестве индикаторов раскладки клавиатуры будут использоваться ваши изображения флагов.