OS X: Обработка клавиш Home, End, etc как в Windows

keybpard

Одно из главных разочарований при работе с маком для меня стало отличие в обработке клавиш Home, End и других при работе с текстом.

В OS X кнопки Home/End переносит курсор в начало/конец не строки а всего документа. Сочетания же клавиш ⌃ + ← (Ctrl + Left), вообще никак не обрабатывается.  У меня же осталась привычка после Windows, что данная комбинация должна переместить курсор на одно слово влево, а если комбинацию дополнить нажатием ⇧ (Shift), — так еще и выделить слово.

Итак, как же в Mac привычно работать с текстом:

Нужно переназначить нужные нам клавиши и их сочетания в файле DefaultKeyBinding.dict

Располагается он по пути /Users/<Имя пользователя>/Library/KeyBindings/DefaultKeyBinding.dict ну или в сокращенной записи ~/Library/KeyBindings/DefaultKeyBinding.dict

Скорее всего у вас по умолчанию не будет по этому пути ни самого файла, ни папки KeyBindings Так что их нужно создать.
Сделать это можно в Finder, но проще из консоли выполнить команду

В каждой строке мы переназначаем отдельную клавишу либо же их сочетания. Разберем для примера последнюю строку, как самую длинную.
«$^\UF72B» = «moveToEndOfDocumentAndModifySelection:»; /* Shift + Ctrl + End */
В левой части у нас $^\UF72B
\UF72B — код клавиши End
$ — означает что одновременно мы жмем кнопку Shift
^ — означает что одновременно мы жмем кнопку Control

В правой же части у нас moveToEndOfDocumentAndModifySelection, эта команда взята не с потолка. Т.к. мы пользуемся встроенными средствами системы, чтобы изменить реакцию на хот кеи, вполне логично было ожидать, что это имя метода, который делает то, что нам нужно.
Чтобы почитать его описание, или найти какие еще команды по манипуляции курсора и текста есть — советую почитать официальную документацию

Описание этой команды: «Implemented by subclasses to move the selection or insertion point to the end of the document, expanding or reducing the current selection.«, если по русски то мы перемещаем курсор с выделением текста от его текущей позиции до конца документа.

Здесь есть один нюанс, если какието сочетания клавиш не заработали — возможно они используются в системе, в моем случае Ctrl + Left/Right не двигали курсор на слово влево/вправо, порывшись в настройках я увидел, что эти шоткаты были назначены за Mission Control mission control

Я сменил шоткаты для Mission Control и все заработало

Остался последний нюанс, как же узнать коды клавиш, типа \UF72B
Лично я воспользовался бесплатной утилитой KeyCodes, которая при запуске логирует все нажатия клавиш и отображает их кода.
keyCodes

На картинке показано как я сначала нажал кнопку End, а затем сочетание кнопок Control + Shift + End

Таким образом под 1 код кнопки, но в программе он записан как 0xf72b, а в файле формат у нас \UF72B, так что не забываем заменять 0x на \U

2 и 3 показывают разницу между нажатием просто кнопки End и сочетания Control + Shift + End

Кстати, если активировать в программе чекбокс «Log key up…«, мы увидим не только финальный результат нажатия комбинации клавиш, но и каждое нажатие/отпускание кнопки, даже кнопок модификаторов таких как Shift или Control.

Данные изменения будут работать не во всех программах, т.к. некоторые программы сами переназначают клавиши. Зачастую в таких программах есть свои настройки для горячих клавиш. Но основная часть программ будет теперь работать так, как вы привыкли в Windows.

2 thoughts on “OS X: Обработка клавиш Home, End, etc как в Windows

  1. Роман

    Подключил клавиатуру Logitech, хочу завести мультимедиа- и прочие клавиши (zoom, calc, etc.).
    KeyCodes — не показывает коды этих клавиш.
    Есть ли альтернатива этой программе?

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *