Ноя 04 2008
Рефакторинг клавиатуры
Недавно поймал себя на мысли что клавишей Caps Lock по ее прямому назначению я не пользуюсь никогда. Однако часто, зацепляя её случайно, приходится стирать набранный в верхнем регистре текст код. Казалось бы удобная кнопка, например для написания констант (как известно в соответствии с соглашениями они именуются ЗАГЛАВНЫМИ БУКВАМИ), но по мне она доставляет больше хлопот нежели каких-то удобств.
Возникла мысль заменить функционал клавиши Caps Lock на нечто другое, что-то более полезное, ведь расположение данной кнопки весьма удобное.
На всех моих компьютерах (домашнем и рабочем) установлен Punto Switcher. Очень полезная программа. Если кто не знаком — поясню.
Данная программа автоматически исправляет текст введенный в неправильной раскладке. Как часто вам приходилось в адресной строке браузера набирать “ццц”? Вот! А программа переключит сама и перепишет текст правильно. Правда я всегда отключаю автоматический режим переключения и исправляю неправильно введённый текст вручную. Последнее неправильно введённое слово можно исправить нажав кнопку Pause/Break. А если я с перепугу напечатал целое предложение не в той раскладке – тоже не проблема: необходимо выделить нужный текст и нажать Shift+Break. В результате – я никогда не ищу на экране значок раскладки, включённой в данный момент (разве что при наборе паролей), я всегда твёрдо уверен что без проблем смогу исправиться.
К чему я это? Я подумал, что функционал клавиши Break, которая располагается на клавиатуре крайне неудобно неплохо было бы поиметь на клавише Caps Lock. В принципе Punto Switcher, начиная с версии 3 позволяет переназначить все горячие клавиши, но как оказалось, после назначения переключения раскладки на кнопку Caps Lock по ее нажатии все равно происходит смена регистра и в итоге получается полная каша. Да и от функционала клавиши Caps Lock окончательно отказываться не хотелось. А вдруг пригодиться?
Возник резонный вопрос – возможно ли сделать переназначение функционала отдельных клавиш на другие или отключить их вовсе на уровне операционной системы (я про Windows XP)? Оказалось да. В реестре есть специальный ключик в котором можно перемешать всё и вся (я про кнопки), указывая скан-коды клавиш. Если, например, добавить следующее значение в реестр то клавиша Caps Lock будет отключена, а её обязанности возьмёт на себя Scroll Lock (вот уж действительно загадочная кнопка
).
1 2 3 4 5 6 7 8 9 10 | Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout] "Scancode Map"=hex:00,00,00,00,00,00,00,00,03,00,00,00,00,00,3a,00,3A,00,46,00,00,00,00,00 |_____________________| |_________| |_________| |_________| |_________| всегда 8 нулей Кол-во 4-х |Отключаем| |Переназ- | Всегда 4 байтных слов |Caps Lock| |начаем | нуля вместе с |Scroll на| последними нулями |Caps | |
Здесь 00 00 <— 3A 00 как раз отключает клавишу Caps Lock имеющую код 00 3A, а 3A 00 <— 46 00 заменяет клавишу Scroll Lock имеющую код 00 46 на Caps Lock. Стоит заметить что порядок последовательности байт при записи в ключ реестра — обратный.
Оперировать hex числами при составлении записи в реестре не совсем удобно. Помочь в этом может програмка SharpKeys где мы просто выбираем что на что нам нужно поменять или отключить, а она сама формирует запись в реестр. Все бы ничего да по закону Мёрфи оказалось что размер кода клавиши Break составляет 6 байт! И записать все 6 байт в реестровую запись нельзя. Видимо по этой же причине в Sharpkeys можно переопределить любые клавиши и их комбинации за исключением клавиши Break.
После взгляда на таблицу скан-кодов оказалось что первые 2 байта скан-кода клавиши Break (E1,1D) являются уникальными, поэтому я пошел на эксперимент и сделал изменения в файле реестра указав вместо 6-ти байт только первые 2 и о чудо! Работает (после перезагрузки, естественно)!
Вот он файл реестра, в результате применения которого клаиша Scroll Lock возьмёт на себя функции Caps Lock, а Caps Lock будет дублировать клавишу Break.
Кстати отменить все свои издевательства над клавиатурой можно просто очистив ключ:
1 2 3 4 5 | Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout] "Scancode Map"=- |
Что меня сподвигло на написание данного поста? Мне показалась что данная тема будет интересна не только в контексте моего конкретного примера. Ведь часто бывает так что на “урезаных” или ноутбучных клавиатурах расположение некоторых клавиш нестандартно или неудобно и клавиатурное пространство хотелось бы оптимизировать, что несомненно добавит пару драгоценных минут для кодинга или развлечений.
Возвращаясь к программе Punto Switcher хотелось бы отметить нововведение, появившееся в 3-й версии — автозамена. С помощью данной функции можно реализовать автоматическую замену определенной последовательности символов на заранее заготовленный текст.
Например я указал, что:
prf = private function;
puf = public function;
prv = private var;
puv = public var
и т.д.
Соответствено можно расширить список автозамен под свои потребности и вкусы: для геттеров сеттеров, метатегов и прочих часто используемых конструкций.
Главное приемущество данного метода — этим можно пользоваться где угодно: в любой IDE или в текстовом редакторе.
Жаль что данный пост расчитан только на владьцев windows.
А под Mac’осью работать не доводилось и подобным опытом для него я поделиться не могу.
Вообще очень интересная тема по поводу оптимизации своего рабочего пространства не только в рамках виртуального рабочего стола , но и реального

спасибо
Спасибо за статью, интересно было об этом узнать
Вот ты и получил первых спаммеров в своем блоге
классная штука! у меня на ноутбуке объединены клавиши break и delete в одну и punto switcher не работает.. спасибо!
Да вот черт их поймешь кто они. Пусь живут пока, хотя далеко не первые.
Пожалуйста
А как часто вы пользуетесь клавишей ScrollLock ?
По ее прямому назначению – никогда