Терминал OS X: мета-ключ + функциональность alt одновременно - PullRequest
36 голосов
/ 01 февраля 2009

Есть ли способ использовать alt / option ключ в качестве метаключа, но при этом иметь возможность использовать его для создания некоторых символов, которые в нем нуждаются?

Например, в моей локальной раскладке клавиатуры:

  • @ - это alt + 2
  • \ - это alt + shift + 7
  • | is alt + 7
  • и т.д.

Итак, если я установлю alt как мета-ключ, я больше не смогу создавать эти символы. С другой стороны, с помощью «нажмите клавишу esc, отпустите клавишу esc, нажмите клавишу», чтобы сделать последовательность мета-клавиш, из-за которых мои руки болят.

Любые пользователи Emacs с международными клавиатурами, которые решили эту проблему, пожалуйста, дайте любые советы, которые у вас могут быть! :)

Редактировать:

Похоже, что я могу установить alt в качестве мета-ключа и затем добавить такие настройки в inputrc: "\e2": "@" Это работает в оболочке bash, но все равно не будет работать с Emacs, так что ничего хорошего.

Ответы [ 16 ]

24 голосов
/ 03 августа 2010

Я использую шведскую клавиатуру в Mac OS X и использую следующую настройку для Emacs.app:

Сначала у меня установлена ​​ KeyRemap4MacBook , и у меня настроена замена левой клавиши Option на Command.

Тогда у меня в .emacs есть следующее:

(setq mac-option-modifier 'none)
(setq mac-command-modifier 'meta)

Это заставляет Emacs рассматривать команду как Meta и игнорировать Option. Поскольку левая клавиша Alt / Option переназначается в команду, это делает ее работоспособной мета, в то время как правая клавиша Alt / Option по-прежнему работает для ввода специальных символов, таких как @ [] и {}.

Ярлыки Mac для приложений, такие как Cmd + C и Cmd + V, больше не работают, но глобальные ярлыки, такие как Cmd + space для Spotlight и Cmd + Tab для переключения приложений, работают.

Обновление: Если вы используете iTerm2 в качестве терминала, он поддерживает отображение только левой клавиши Alt / Option на мета, что означает, что вы все равно можете использовать правую клавишу AltGr / Option для ввода специальных символов. Это также означает, что вы можете использовать meta как обычно внутри Emacs, работающего в терминале iTerm2.

15 голосов
/ 20 февраля 2011

У меня есть шведская клавиатура на моем Mac, и я использую Aquamacs. Добавление двух строк (авторство относится к Иоакиму Хорсману)

(setq mac-option-modifier 'none)
(setq mac-command-modifier 'meta)

в .emacs (и перезапуск Aquamacs) сделали трюк для меня.

12 голосов
/ 09 сентября 2011

с iTerm2 вы можете сопоставить левый ключ опции с ESC / meta и оставить отображение правой клавиши опции на «нормальный». Таким образом, вы можете использовать правильный ключ для ввода акцентов и т. Д.

iTerm2 preferences

10 голосов
/ 13 февраля 2009

Подумайте об использовании полнофункционального Emacs для Mac OS X. Я использую Carbon Emacs, но я верю, что другие (скажем, Aqua Emacs или X11 Emacs) справятся.

Если вы настаиваете на использовании Emacs в терминале, вы можете использовать префикс C-x 8 в качестве ключа композиции. Попробуйте C-x 8 C-h, чтобы получить список возможностей.

См. http://www.emacswiki.org/emacs/EmacsForMacOS

5 голосов
/ 02 сентября 2011

Это старый пост, но добавление альтернатив для роботов. Я позаимствовал пару файлов у Aquamacs ( emulate-mac-keyboard-mode.el, aquamacs-tools.el ), которые решают проблему (у меня итальянская клавиатура Pro):

(defun aq-binding (any)
 nil)
(load  "~/.emacs.d/emulate-mac-keyboard-mode.el") ;;  'noerror

это обеспечивает:

  • несколько второстепенных режимов ( emulate-mac-italian-keyboard-mode, эмулировать-макинтош-франко-клавиатура режим, Режим Mulate-Mac-Swiss-German-Keyboard, и т. д.)
  • меню для игры со всеми опциями, предоставляемыми Aquamacs

Протестировано с Emacs-23.3-universal-10.6.6 и, кажется, работает нормально для меня.

Спасибо Aquamacs за это, как насчет продвижения вверх по течению, если это еще не сделано.

5 голосов
/ 08 апреля 2010

Проверьте cmd-key-happy. Это маленькое приложение творило чудеса для меня. Он позволяет использовать команду в качестве мета, с исключениями, которые вы можете настроить.

Информация об авторе следующая:

Эта программа позволяет менять местами клавиши команд и alt (или опцию) в любом приложении, но в частности Terminal.app.

http://github.com/aim-stuff/cmd-key-happy

5 голосов
/ 01 февраля 2009

Два обходных пути, которые я использую:

  • Я использую xterm под X11.app. X11.app использует командную клавишу как мета.
  • Когда я запускаю emacs в Terminal.app, я просто использую метод ввода rfc1345, который позволяет мне вводить все виды сумасшедших символов, отличных от ascii, без необходимости использовать клавишу опции.
4 голосов
/ 14 февраля 2011

Специальная раскладка клавиатуры с опцией deadkey

Мое решение этой проблемы - специальная раскладка клавиатуры, которую я написал, U.S. заказ . Он предоставляет опцию deadkey , которая создает опционные комбинации без необходимости использования физической клавиши-модификатора ⌥ Option . Например, символ ⟨ç⟩ создается следующим образом на обычной раскладке клавиатуры США:

  • Хит ⌥ Опция + c .

США. настраиваемая раскладка клавиатуры добавляет второй способ создания ⟩ç⟩:

  • Нажмите ⇧ Shift + § (опция deadkey), затем отпустите ее, затем нажмите c .

Это работает даже в Terminal.app, когда Использовать опцию в качестве мета-ключа .

Обратите внимание, что пользовательская раскладка клавиатуры в США делает две дополнительные вещи:

  1. Преобразует простой § в ⎄ Составной ключ (так что вы также можете создать ⟨ç⟩, нажав § , затем , , затем c ).
  2. Он заменяет отображение CapsLock на (значительно расширенное) U.S. Расширенная раскладка клавиатуры.

Переопределить опцию deadkey на правую клавишу модификатора опции

Если у вас есть физическая клавиатура ANSI, то вам не хватает клавиши § . В этом случае я рекомендую назначить клавишу § какой-либо другой клавише, например, правой клавише-модификатору ⌥ Option . Установите KeyRemap4MacBook , откройте ~/Library/Application\ Support/KeyRemap4MacBook/private.xml и вставьте следующий код:

<?xml version="1.0"?>
<root>
<item>
  <name>Send ISO Section for right Option</name>
  <identifier>private.send_iso_section_for_right_option</identifier>
  <autogen>--KeyToKey-- KeyCode::OPTION_R, KeyCode::UK_SECTION</autogen>
</item>
<item>
  <name>Send Shift+ISO Section for Shift+right Option (keep normal right Option without Shift)</name>
  <identifier>private.send_shift_iso_section_for_shift_right_option</identifier>
  <autogen>--KeyToKey-- KeyCode::OPTION_R, ModifierFlag::SHIFT_R, KeyCode::UK_SECTION, ModifierFlag::SHIFT_L</autogen>
  <autogen>--KeyToKey-- KeyCode::OPTION_R, ModifierFlag::SHIFT_L, KeyCode::UK_SECTION, ModifierFlag::SHIFT_L</autogen>
</item>
</root>

Затем откройте панель настроек KeyRemap4MacBook, нажмите ReloadXML и выберите «Отправить раздел ISO для правильной опции». Теперь ваш ключ ⌥ Right Option переназначен на § , тогда как U.S. Пользовательская раскладка клавиатуры активна, нажав ⇧ Shift + ⌥ Правая опция даст вам состояние мертвой клавиши опции (нажатие ⌥ Правая опция без дополнительных модификаторов дать вам состояние мертвой клавиши, эквивалентное модификатору опции.

Если вы хотите сохранить ⌥ Правая опция , когда ⇧ Shift не нажата (вместо клавиши ⎄ Compose ), затем выберите «Отправить Shift + ISO» Раздел для параметра Shift + вправо (оставьте нормальный параметр Option без Shift) »на панели настроек KeyRemap4MacBook (вместо« Отправить раздел ISO для правильного параметра »). Таким образом, только ⇧ Shift + ⌥ Right Option создаст «мертвую клавишу» опции, в то время как обычный ⌥ Right Option продолжит работать в качестве модификатора опции. Вы даже можете продолжать использовать ⌥ Right Option + ⇧ Shift комбинации модификаторов (например, ⌥ Right Option + ⇧ Shift + c → ⟨Ç⟩) до тех пор, пока вы не нажмете ⇧ Shift сначала.

3 голосов
/ 02 июня 2012

Стоит задуматься над предположением, лежащим в основе вопроса. Я хочу сказать, что настоящая проблема заключается в создании символов, которые в настоящее время, кажется, нуждаются в ключе опции. Эта проблема может быть решена без одновременного достижения «мета-ключа + alt-функциональности».

Позвольте мне объяснить: у меня похожая проблема. На моей британской клавиатуре shift-3 отображается на знак фунта, £, что означает, что мне обычно нужно нажать на option-3, чтобы получить очень полезную # - реальную проблему в Терминале, где я использую option в качестве мета. Тем не менее, я считаю, что большинство из вышеперечисленных решений немного чрезмерно. Я не хочу переходить на другую версию Emacs (например, Aquamacs), переключаться на другое приложение терминала (например, iTerm или xterm) или устанавливать приложение переназначения ключей (например, KeyRemap4MacBook) - все ради одного символа! Возможно, это подойдет некоторым людям, но я подумал, что стоит указать, что если проблема состоит только из одного символа, ее можно решить с помощью текстового файла из девяти символов.

Что касается моей личной версии этой проблемы, я считаю, что самое простое решение - создать файл с именем .inputrc в моем домашнем каталоге, состоящий из одной строки:

"§": "#"

Это повторно отображает (для меня, совершенно бесполезно) §, который можно найти слева от 1 на текущей клавиатуре Mac, с (почти обязательным) #. Это подходит мне даже лучше, чем установка по умолчанию, потому что теперь я могу получить # одним нажатием клавиши. Если бы были какие-то другие символы, которые мне нужно было бы переназначить, было бы просто добавить дополнительную строку для каждого из них.

В любом случае, это связано с тем, как получить отсутствующий символ в оболочке, но если вы также хотите это в Emacs (что вы не сказали, но, вероятно, так и есть), то вы можете добавить что-то подобное в ваш .emacs file (где 35 - ASCII для символа, который мне нужен, т. е. #):

(global-set-key (kbd "§") 'insert-hash)
(defun insert-hash ()
  (interactive)
  (insert 35))

Это может быть не очень удачное решение, если бы были десятки символов, к которым я обычно хотел получить доступ с помощью клавиши опции, но их нет.

Надеюсь, это кому-нибудь поможет. Как обычный хакер по выходным, я обычно не смею публиковать ответ на вопрос о переполнении стека ...

3 голосов
/ 28 мая 2009

В приведенных выше ответах упоминаются способы ввода не-ascii, но здесь проблема не в этом. Метод C-x 8 позволяет вам вводить несколько не-ascii, но проблема в том, что вам нужен ключ опции на Mac, чтобы просто ввести (ascii) символ `| ' (вертикальная черта)!

Так как же тогда ввести такие вещи, как M- | (команда region to shell) при запуске emacs в ssh под Terminal.app? Нет другого способа, кроме как использовать клавишу escape, так как | это опция-7 и Terminal.app по какой-то глупой причине не позволит вам использовать Cmc в качестве мета: - (

(Если кто-нибудь знает о хаке (возможно, SIMBL?), Который на самом деле позволяет Terminal.app использовать Cmd в качестве мета, я был бы очень благодарен ...)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...