Ноя 04 2008

Рефакторинг клавиатуры

Рубрика: Почти по темеDiestro @ 23:32

Недавно поймал себя на мысли что клавишей 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’осью работать не доводилось и подобным опытом для него я поделиться не могу.

Вообще очень интересная тема по поводу оптимизации своего рабочего пространства не только в рамках виртуального рабочего стола , но и реального :)

7 комментариев »

  1. Комментарий от Irina — 5 ноября 2008 @ 17:22

    спасибо

  2. Комментарий от MAX — 8 ноября 2008 @ 23:53

    Спасибо за статью, интересно было об этом узнать

  3. Комментарий от Constantiner — 21 ноября 2008 @ 0:15

    Вот ты и получил первых спаммеров в своем блоге :)

  4. Комментарий от ola — 31 января 2009 @ 22:08

    классная штука! у меня на ноутбуке объединены клавиши break и delete в одну и punto switcher не работает.. спасибо!

  5. Комментарий от Diestro — 31 января 2009 @ 22:18

    Вот ты и получил первых спаммеров в своем блоге :)

    Да вот черт их поймешь кто они. Пусь живут пока, хотя далеко не первые.

    классная штука! у меня на ноутбуке объединены клавиши break и delete в одну и punto switcher не работает.. спасибо!

    Пожалуйста :)

  6. Комментарий от Историк — 15 апреля 2009 @ 20:13

    А как часто вы пользуетесь клавишей ScrollLock ?

  7. Комментарий от Diestro — 15 апреля 2009 @ 21:26

    По ее прямому назначению – никогда

RSS лента комментариев к этой записи. TrackBack URL

Оставить комментарий

Comment Spam Protection by WP-SpamFree