Emacsify OSX повсюду: слово-вперед (⌥ + F) и слово-назад (⌥ + B) вместо «специальных символов»?

8

Да, OSX уже поддерживает + и + для перемещения курсора назад и вперед, но досягаемость для клавиш со стрелками раздражает. Итак, почему бы не иметь + Bи + Fсделать это? Я имею в виду, что ни разу (намеренно) я не писал интегральный знак ∫ с + B(кроме этого).

Короче говоря, я бы предпочел поведение, подобное Emacs (не только, скажем, ^+ Fдля пересылки символов) во всей OSX.


Связанный вопрос: прекратить использование опции клавиатуры Mac в качестве модификатора символа

Blaz
источник

Ответы:

7

DefaultKeyBinding.dict

Создайте ~/Library/KeyBindings/и сохраните список свойств следующим образом ~/Library/KeyBindings/DefaultKeyBinding.dict:

{
  "^ " = setMark:;
  "^/" = undo:;
  "^l" = selectParagraph:;
  "^u" = deleteToBeginningOfParagraph:;
  "^w" = deleteToMark:;
  "^x" = {
    "^x" = swapWithMark:;
    "^m" = selectToMark:;
  };
  "^V" = pageDownAndModifySelection:;
  "~@" = selectWord:;
  "~b" = moveWordBackward:;
  "~c" = (capitalizeWord:, moveForward:, moveForward:);
  "~d" = deleteWordForward:;
  "~f" = moveWordForward:;
  "~l" = (lowercaseWord:, moveForward:, moveForward:);
  "~r" = centerSelectionInVisibleArea:;
  "~u" = (uppercaseWord:, moveForward:, moveForward:);
  "~v" = pageUp:;
  "~w" = (deleteToMark:, setMark:, yank:, swapWithMark:);
  "~B" = moveWordForwardAndModifySelection:;
  "~F" = moveWordForwardAndModifySelection:;
  "~V" = pageUpAndModifySelection:;
}

DefaultKeyBinding.dictне работает в некоторых приложениях, таких как Xcode или Firefox. Методы, использующие список уничтожений, удаляют форматирование из форматированного текста. Комбинации клавиш, которые вводят состояния мертвых клавиш (например, option-u в раскладке клавиатуры США), не могут быть переназначены.

Смотрите также http://www.hcs.harvard.edu/~jrus/site/KeyBindings/Emacs%20Opt%20Bindings.dict . transposeWords:не работает в большинстве приложений. openDocument:и saveDocument:не работают в приложениях, которые используют автосохранение, и performClose:не работают везде.

См. Http://www.hcs.harvard.edu/~jrus/site/cocoa-text.html или http://osxnotes.net/keybindings.html для получения дополнительной информации.

KeyRemap4MacBook

Один из вариантов - включить настройки в предопределенной группе режимов Emacs :

Другой вариант - сохранить такой файл как ~/Library/Application Support/KeyRemap4MacBook/private.xml:

<?xml version="1.0"?>
<root>
  <appdef>
    <appname>EMACSMODEIGNORE</appname>
    <equal>com.gnu.Emacs</equal>
    <equal>com.apple.Terminal</equal>
    <equal>com.googlecode.iterm2</equal>
    <equal>com.vmware.fusion</equal>
    <prefix>com.vmware.proxyApp.</prefix>
  </appdef>
  <item>
    <name>emacs</name>
    <identifier>private.emacs</identifier>
    <not>EMACSMODEIGNORE</not>
    <autogen>__KeyToKey__ KeyCode::P, VK_CONTROL | ModifierFlag::NONE, KeyCode::CURSOR_UP</autogen>
    <autogen>__KeyToKey__ KeyCode::N, VK_CONTROL | ModifierFlag::NONE, KeyCode::CURSOR_DOWN</autogen>
    <autogen>__KeyToKey__ KeyCode::B, VK_CONTROL | ModifierFlag::NONE, KeyCode::CURSOR_LEFT</autogen>
    <autogen>__KeyToKey__ KeyCode::F, VK_CONTROL | ModifierFlag::NONE, KeyCode::CURSOR_RIGHT</autogen>
    <autogen>__KeyToKey__ KeyCode::P, VK_CONTROL | VK_SHIFT | ModifierFlag::NONE, KeyCode::CURSOR_UP, VK_SHIFT</autogen>
    <autogen>__KeyToKey__ KeyCode::N, VK_CONTROL | VK_SHIFT | ModifierFlag::NONE, KeyCode::CURSOR_DOWN, VK_SHIFT</autogen>
    <autogen>__KeyToKey__ KeyCode::B, VK_CONTROL | VK_SHIFT | ModifierFlag::NONE, KeyCode::CURSOR_LEFT, VK_SHIFT</autogen>
    <autogen>__KeyToKey__ KeyCode::F, VK_CONTROL | VK_SHIFT | ModifierFlag::NONE, KeyCode::CURSOR_RIGHT, VK_SHIFT</autogen>
    <autogen>__KeyToKey__ KeyCode::B, VK_OPTION | ModifierFlag::NONE, KeyCode::CURSOR_LEFT, VK_OPTION</autogen>
    <autogen>__KeyToKey__ KeyCode::F, VK_OPTION | ModifierFlag::NONE, KeyCode::CURSOR_RIGHT, VK_OPTION</autogen>
    <autogen>__KeyToKey__ KeyCode::B, VK_OPTION | VK_SHIFT | ModifierFlag::NONE, KeyCode::CURSOR_LEFT, VK_OPTION | VK_SHIFT</autogen>
    <autogen>__KeyToKey__ KeyCode::F, VK_OPTION | VK_SHIFT | ModifierFlag::NONE, KeyCode::CURSOR_RIGHT, VK_OPTION | VK_SHIFT</autogen>
    <autogen>__KeyToKey__ KeyCode::D, VK_OPTION | ModifierFlag::NONE, KeyCode::FORWARD_DELETE, VK_OPTION</autogen>
    <autogen>__KeyToKey__ KeyCode::V, VK_OPTION | ModifierFlag::NONE, KeyCode::PAGEUP</autogen>
    <autogen>__KeyToKey__ KeyCode::V, VK_OPTION | VK_SHIFT | ModifierFlag::NONE, KeyCode::PAGEUP, VK_SHIFT</autogen>
    <autogen>__KeyToKey__ KeyCode::V, VK_CONTROL | VK_SHIFT | ModifierFlag::NONE, KeyCode::PAGEDOWN, VK_SHIFT</autogen>
    <autogen>__KeyToKey__ KeyCode::U, VK_CONTROL | ModifierFlag::NONE, KeyCode::DELETE, VK_COMMAND</autogen>
  </item>
</root>

Затем откройте приложение KeyRemap4MacBook, нажмите кнопку ReloadXML и включите настройку.

Измените коды клавиш, если вы используете раскладку клавиатуры, например, Dvorak или Colemak.

См. Https://pqrs.org/macosx/keyremap4macbook/xml.html.en или http://osxnotes.net/keyremap4macbook.html для получения дополнительной информации.

LRI
источник
Удивительно. Изменение относительно низкого уровня поведения, и все же так просто. Прыжок ближе к раю ОС. Надеюсь, есть даже лучший, 100% рабочий раствор, в противном случае это ответ.
Blaz
Как вы говорите, это работает не во всех приложениях. Xcode, например, не сдвинется с места .dict(но это можно «решить» с помощью пользовательской привязки клавиш, скажем, ⌘ + B и ⌘ + F). Тем не менее, очень мощно иметь Emacs-подобное поведение (почти) во всей ОС.
Blaz
KeyRemap4MacBook имеет группу режимов emacs, которая изменяется, например, с «F» на «→», но не тогда, когда терминал или Emacs находятся впереди. Вы можете настроить его, создавая private.xml на его основе. Я думаю, что реальное решение состоит в том, чтобы просто получить клавиатуру с клавишами со стрелками и клавишами-модификаторами в лучших положениях.
Lri
1
@courteous Режим emacs в KeyRemap4MacBook делает это. Это невозможно в файле раскладки клавиатуры или с DefaultKeyBinding.dict.
Lri
1
@courteous Я тоже добавил это к ответу. У меня есть "~w" = selectWord:;в моем DefaultKeyBinding.dict .
Lri