Индикатор раскладки клавиатуры. Работаем быстрее! Софт для клавиатуры. Как это сделано

Каждый пользователь компьютера ежедневно сталкивается с проблемой ошибочного ввода: вы начинаете набирать некоторый текст на клавиатуре (при этом смотрите на клавиатуру, а не на экран), и уже набрав несколько слов понимаете, что набирали не в том языке ввода (эти вечные "Ghbdtn! Rfr ltkf&"). Приходится удалять плоды своих напрасных стараний, переключать язык и начинать все с чистого листа. Особенно неприятно, когда такое случается при наборе пароля. Если Вам тоже это надоело - прошу под кат.

Многие порекомендуют для борьбы с этой проблемой воспользоваться программами, которые автоматически переключают язык ввода, анализируя набираемый текст (Punto Switcher и т.п.). Однако те же многие согласятся, что такие программы несовершенны и часто непредсказуемы в своем поведении, что только повышает степень неоднозначности для пользователя и наносит больше вреда чем пользы.
Конечно, очень полезно в этом отношении было бы выработать привычку всегда смотреть на индикатор языка ввода на языковой панели прежде чем начинать набирать текст. Да вот только это довольно неудобно, особенно если приходится работать с полноэкранными приложениями, с несколькими мониторами... И вообще, часто переводить взгляд от поля ввода к индикатору как-то не комфортно. Более того, случается, что это самый индикатор по каким-то причинам может отображать недостоверную информацию либо вообще исчезать с экрана (согласитесь, случается такое). В таком случае остается только проверять язык ввода эмпирически.
Невольно напрашивается мысль о том, что традиционное средство, призванное обеспечить информированность пользователя о активном в текущий момент языке ввода и, следовательно, корректность ввода, совершенно неэффективно. Разумным решением было бы переместить злосчастный индикатор из угла экрана, куда так лень перевести взгляд, к текстовому курсору, куда взгляд пользователя направлен изначально. И увы - это самое решение разработчиками операционных систем пока не реализовано (а возможно и не будет). К счастью, существует ряд программ, которые могут помочь в той или иной степени устранить это упущение.

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

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

Aml Maple — это индикатор раскладки клавиатуры для Windows. Программа показывает раскладку в текстовом и «мышином» курсоре, изменяя цвет и добавляя аббревиатуру языка или флажок соответствующей страны. Этот индикатор всегда у Вас перед глазами, и нет нужды бросать «косяки» в угол экрана, чтобы узнать раскладку.

Например, мигающий текстовый курсор красного цвета для английского языка — | , и синего цвета для русского — | . «Элементарно, Ватсон»: изменили текущий язык - тут же изменился и цвет курсора в точке ввода текста. Цвет индикатора, размер курсора можно настроить на свой вкус. Как это работает, можно взглянуть на этом видео (на примере Блокнота Windows) . А работает это в любых приложениях.

Aml Maple исправляет неправильно набранный текст , когда Вы забыли переключить раскладку. Например, "ghbdtn" вместо "привет" — т.е. поменять английский текст на русский, наоборот русский на английский, или и вовсе на любой другой язык.

Выделяете неверный текст, нажимаете горячую клавишу — получаете иправленный текст. По умолчанию используется клавиша Ctrl+Alt+Q . Но в настройках можно назначить какие угодно клавиши. Во избежание случайных срабатываний можно использовать быстрое двойное нажатие. Если текст не выделен, то Aml Maple исправляет последнее набранное слово.

В отличие от EveryLang, Aml Maple распрекрасно работает и с Windowx XP 32x, и с Windows 2000.

Aml Maple имеет многоязычный пользовательский интерфейс и справочную систему. В дистрибутив уже включены русский, украинский, английский, немецкий, греческий, казахский, сербский, польский, турецкий, иврит и корейский языки пользовательского интерфейса. В мышином и текстовом индикаторе «Мапля» поддерживает более двух десятков языков.

Скачать (переносная и установкой)



Версия с программой установки и удаления.

Релиз от 11 Февраль, 2019 10:02.
Переносная версия. Распакуйте все файлы из ZIP-архива в любую папку и запустите файл AmlMaple.exe.
Рекомендации : при установке новой версии Aml Maple настоятельно рекомендуем ставить в ту же в папку, поверх старой версии. В этом случае новая версия автоматически подхватит настройки работы и ваши регистрационные данные .

Программа установки умеет корректно завершать работающую предыдущую версию. Но иногда может потребоваться завершить работу и некоторых соседних, «капризных» приложений… К примеру, Google Chrome любит блокировать некоторые компоненты «Мапли» даже после завершения ее работы.

Как известно, люди делятся на две категории: на тех, кто переключает раскладку с помощью Ctrl+Shift и тех, кто использует Alt+Shift. А еще есть счастливчики, кому это не нужно – те, у кого только одна раскладка (как правило, английская). Остальные завидуют им и мучаются с двумя, а то и с тремя раскладками: английский, русский, украинский (белорусский, казахский и т.д.).


Проблема в том, что, переключая язык, приходится постоянно смотреть на эту маленькую иконку языка. Есть и другие варианты:

  • Использовать отдельные комбинации на разные языки (Ctrl+1(2.3)) – программисты, которые работают в разных IDE, согласятся, что это не вариант, так как такие комбинации часто же заняты и перекрываются, а использовать другие в IDE непривычно. Нюанс еще в том, что раскладка в операционной системе – это на самом деле раскладка на текущую программу, а не на все (не удивлюсь, если не все это замечали). Т.е, если сейчас активен Word c английской раскладкой, то, переключившись в браузер, там может быть другая раскладка. И приходится или смотреть на иконку снова или же повторно вбивать, например, Ctrl+1, даже если язык не менялся.
  • Использовать программы типа Punto switcher, которые пытаются автоматически исправлять раскладку – не всегда это получается правильно и часто еще больше усложняет набор.
  • Использовать программы, которые переключают темы Windows – не каждому понравятся разноцветные панель задач или окна.

Идея

А давайте сделаем на основе Arduino кубик с LED подсветкой, который будет стоять на столе и менять свой цвет в зависимости от раскладки. Каждый язык – разный цвет. Например, английский – зеленый, русский – красный, украинский – синий. Это позволит видеть язык текущего приложения периферийным зрением.



Сразу говорю, это не сложно сделать даже не электронщикам.

Аппаратная часть

  • Arduino Micro – плюс платы в том, что есть micro-USB, что позволяет соединить его популярным кабелем с ПК. Можно использовать любую компактную плату с micro-USB.
  • RGB-светодиод. Можно использовать вместо него и 3 разноцветных светодиода.
  • 3 резистора 220 ом.
  • “кубик”.

В качестве “кубика” можно использовать что угодно. Я купил часы-будильник с Aliexpress.com в виде кубика. Вот так выглядит сам куб:



Понравились размеры, цена и дополнительное использование в виде датчика температуры (сами часы в кубике не точные, потому бесполезные). На том же Aliexpress.com можно найти и другие варианты:

  • пирамида-часы;
  • просто кубик с подсветкой.

Учитывая сегодняшние возможности, можно и на 3D принтере что-то напечатать. Да и просто использовать рамку с фото.

Пишем код

Тут все просто, читаем в цикле COM-порт. При чтении значения 1 – включаем зеленый светодиод, остальные гасим. При получении 2 - включаем красный светодиод, остальные гасим. При получении 3 - включаем синий светодиод, остальные гасим.


int inByte = 0; int LED_R = 5;//красный пин int LED_G = 6;//зеленый пин int LED_B = 9;//синий пин int RV = 255; // яркость int GV = 255;// яркость int BV = 255;// яркость void setup() { Serial.begin(9600); pinMode(LED_R, OUTPUT); pinMode(LED_G, OUTPUT); pinMode(LED_B, OUTPUT); } void loop() { if (Serial.available() > 0) { delay(100); inByte = Serial.read(); if (inByte == "2") { // RU analogWrite(LED_R, RV); analogWrite(LED_G, 0); analogWrite(LED_B, 0); } else if (inByte == "1") { // EN analogWrite(LED_R, 0); analogWrite(LED_G, GV); analogWrite(LED_B, 0); } else if (inByte == "3") { //UA analogWrite(LED_R, 0); analogWrite(LED_G, 0); analogWrite(LED_B, BV); } } }

Паяем

Еще проще. Общий пин соединяем с землей (GND). Остальные через резистор 220 Ом с соответствующими пинами, как показано на рисунке.



Устанавливаем в куб, предварительно вырезав отверстие под разъем.


Программная часть

Тут немного сложней. При изменении языка нужно посылать на COM-порт соответствующее значение (1 или 2 или 3).


Для не программистов ниже есть ссылка на программу под Windows, которая это делает. Единственное, в программе нужно указать COM-порт, к которому подключена Arduino. Это не сложно узнать в диспетчере устройств. Программа после запуска сворачивается в трей, но ее нужно добавить в автозапуск при старте Windows.



Программа написана на Delphi, на данный момент не имеет:

  • Функции автоматического поиска порта. Это легко сделать, Arduino при старте будет посылать некий код, программа будет перебирать порты и остановиться в случае его прочтения.
  • Выбора языков. Программа работает только с русским, английским и украинским. Можно сделать возможность указывать по кодам любой язык.
  • Автозапуска программы.

Результат


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



Если пост понравится, доработаю программу, добавив описанный выше недостающий функционал.

Теги: Добавить метки

Тема отображения текущей раскладки беспокоила хабрасообщество уже не раз . Я опробовал множество существующих решений, но по разным причинам они меня не устроили. Чтобы подобрать для себя наиболее удобный вариант отображения текущей раскладки, я написал небольшое приложение на 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

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

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