Просто привыкаю к paredit в emacs на OS X — почему C-) не работает?

#macos #emacs #editor #lisp #paredit

#macos #emacs #редактор #lisp #paredit

Вопрос:

Недавно я настроил среду программирования Common Lisp в Mac OS X Leopard. Одним из модулей emacs, который я счел незаменимым, является paredit. Paredit вносит свой вклад, помогая мне легче обрабатывать мой код на Lisp, но я столкнулся с небольшой проблемой.

C-), привязанный к paredit-forward-slurp-sexp , не перенаправляет секспы, а вместо этого повторяет число 0 . Я использую Mac, чередуя iTerm и Terminal. Одна и та же проблема присутствует в обоих приложениях.

Я попробовал ту же комбинацию клавиш в версии GNU Emacs с графическим интерфейсом, и вот, это сработало. К сожалению, графическая версия Emacs не удовлетворяет моим потребностям; Я хотел бы продолжать использовать свою платформу на базе iTerm.

Итак, я спрашиваю тебя, stackoverflow: что мне нужно сделать, чтобы получить C-) combo для регистрации в iTerm?

Комментарии:

1. Почему? Почему вы хотите продолжать использовать свою платформу на базе iTerm?

2. @klang (1) Лучшая согласованность между сеансами SSH, (2) я могу использовать стандартный emacs с экрана, (3) Я нахожу гибридное окно / буфер в GUI emacs запутанным, (4) Я предпочитаю bash eshell и, наконец, (5) с темной темой, и особенно в полноэкранном режиме, emacs в iTerm выглядит более отточенным, чем графическое приложение с его неуклюжими полосами прокрутки и меню. Если я должен использовать графический интерфейс, я предпочитаю интерфейс TextMate GNU Emacs.

3. Вы можете ввести C-c C-) , чтобы убедиться, но поскольку вы получаете a 0 , очевидно, что эмуляторы вашего терминала (iTerm и Terminal) передают a 0 при нажатии Ctrl ) . Вам нужно сделать две вещи: убедить каждый iTerm и терминал отправлять escape-последовательность при нажатии Ctrl ) и объявить Emacs, что эта escape-последовательность соответствует Ctrl ) function-key-map или local-function-key-map ).

4. Вы можете подключить любую оболочку, которая вам нравится, в Windows я использую cygwin из emacs. Вы можете изменить тему на то, что вам нравится, и вы можете просто удалить меню полосы прокрутки в режиме luddite gist.github.com/539783 .. согласованность между сеансами SSH я не могу понять. Обычно я оставляю emacs включенным на несколько недель, время от времени прерывая сеансы ssh с моим vpn. Emacs повторно подключится, когда сможет, и я смогу продолжить работу с файлами. В режиме командной строки мне пришлось бы начинать все сначала. О, ну, я думаю, разные штрихи.

Ответ №1:

Как бы то ни было, на моем Mac C-<right> и C-<left> привязаны к Mission Control и перемещаются в правый и левый пробелы.

Сказав это, C-Shift-<right> и C-Shift-<left>, похоже, делают свое дело, и я могу приятно чавкать и блевать в emacs с paredit.

Ответ №2:

IIRC, комбинация модификаторов Control и Shift не может быть отправлена в Emacs в терминале. C-) требуется клавиша shift, поэтому она выходит за рамки. Я не уверен, что какая-либо настройка терминала изменит это.

Я полагаю, что по умолчанию paredit-forward-slurp-sexp также привязывается к C-<right> , что должно нормально работать в терминале, так что, возможно, вы можете натренировать свои пальцы использовать эту клавишу вместо.

Комментарии:

1. Настройка терминала определенно может изменить это (если терминал позволяет такую настройку). Emacs не является точкой блокировки. Если терминал можно убедить отправить отдельную escape-последовательность, все в порядке.

2. @Gilles: приятно это знать. Тем не менее, я предполагаю, что сложность заставить общедоступные терминалы обрабатывать ctrl shift исторически была фактором при выборе Emacs привязок клавиш.

3. Это было, но это было в основном в то время, когда аппаратные терминалы (часто не настраиваемые для отправки этих escape-последовательностей) были нормой. Другим следствием этого исторического факта является то, что не существует стандартизированной escape-последовательности, как это (в основном) для функциональных клавиш и клавиш курсора.

4. Некоторое время назад я написал сообщение о том, как устранить эти проблемы с обычными терминалами OS X (Terminal.app, iTerm и iTerm 2) offbytwo.com/2012/01/15/emacs-plus-paredit-under-terminal.html

Ответ №3:

Основываясь на блоге Космина, я заставил это работать в iTerm2.

  1. Откройте Настройки> Профили> Ключи. (Возможно, вы захотите скопировать профиль по умолчанию и изменить копию.)
  2. Нажмите сочетания клавиш под профилем:.
  3. Введите Ctrl ) (ctrl shift leftparen).
  4. Для действия выберите Отправить Escape-символ и
  5. поместите [1;5C в текстовое поле.

Ответ №4:

У меня есть подозрение, что ваши программы iTerm / Terminal на самом деле не могут отправлять C-), потому что в ASCII такого символа нет, и я почти уверен, что в VT100 для него нет последовательности.

Впрочем, вы можете убедиться в этом сами. Запустите emacs в эмуляторе вашего терминала. ТипC-). Затем введите C-h l («view-lossage»). Это покажет вам последние несколько сотен клавиш, которые Emacs видел, как вы вводили. Попробуйте то же самое после ввода неконтролируемого ), чтобы увидеть, отличаются ли они. Если нет, вам не повезло, если вы не можете настроить iTerm / Terminal для отправки их в Emacs различными способами.

Тем не менее, вы всегда можете привязать какой-нибудь другой ключ к paredit-forward-slurp-sexp .

Ответ №5:

Я столкнулся с такой же проблемой с альтернативной C-<right> привязкой paredit и обнаружил, что причиной моей проблемы был tmux — в основном tmux включал C- и просто передавал <right>.

Я нашел решение на https://unix.stackexchange.com/a/34484 , и это включало добавление

 set-window-option -g xterm-keys on
  

в мой ~/.tmux.conf.