У меня есть следующая строка в init.el
:
(global-set-key [(control \;)] 'comment-region)
Это работает очень хорошо в окне GUI, но если emacs
вызывается с -nw
параметром, то C-;не комментирует регион, только вставляет ;
символ. M-x comment-region RETработает отлично однако.
Я попытался следовать этому ответу на похожую проблему, но C-q C-;возвращается просто, ;
и я, очевидно, не хочу связываться голым ;
.
Как добиться желаемого эффекта?
key-bindings
terminal
WeSenseASoulInSearchOfAnswers
источник
источник
C-;
комбо, а затем использовать,M-x view-lossage
чтобы увидеть, если это даже добраться до Emacs.gnome-terminal
иM-x view-lossage
возвращаю:ESC [ > 1 ; 2 8 0 2 ; 0 c ; ESC x v i e w - l o s s a g e RET
C-;
скорее, чемc ;
(или, по крайней мере, я понялC-;
).Ответы:
Во-первых, более общая проблема: эмуляторы терминала часто ограничены в управляющих и управляющих последовательностях, которые они могут отправлять. Итак: может случиться так, что терминал проглотит ваши специальные символы, прежде чем они достигнут Emacs. В качестве общей диагностики вы можете нажать
C-h l
(илиM-x view-lossage
), чтобы увидеть, превращаются ли ваши комбинации клавиш в Emacs.Для более подробного обсуждения этой проблемы просмотрите этот поток переполнения стека и ссылки в нем.
Подводя итоги в комментариях, ваша конкретная проблема предполагает, что проблема заключается не в Emacs, а в терминале. Когда вы пытались,
C-;
а потомM-x view-lossage
, вы получилиblah blah blah c ; ESC v i e w - l o s s a g e RET
. Это похоже на проблему терминала: если бы комбинация клавиш доходила до Emacs, этаc ;
часть была бы похожаC-;
.источник
В Shift + Up не распознается Emacs в терминале. Я объясняю, как терминалы переводят большинство функциональных клавиш в escape-последовательности, потому что интерфейс между приложениями и терминалами передает символы (или, скорее, байты), а не ключи. Только несколько комбинаций модификатор + символ имеют свой собственный характер:
@[\]^_
превращаются в байты 0–31 ( управляющие символы ASCII ).Так что насчет других комбинаций, таких как Ctrl+ ;или Ctrl+ Shift+ letter? Поскольку соответствующего символа нет, терминал должен либо повторно использовать символ, либо отправить escape-последовательность. Многие терминалы игнорируют модификаторы, когда нет соответствующего символа, поэтому вы в конечном итоге Ctrl+ ;отправка
;
, Ctrl+ Shift+ letterэквивалент Ctrl+ letterи т. Д.Поставщики терминалов долгое время занимались этим простым делом. Не было никакого стандарта для escape-последовательностей, который был самосохраняющимся - поставщики терминалов не реализуют его, приложения не поддерживают его, пользователи не ожидают этого. Некоторые эмуляторы терминала могут быть сконфигурированы для отправки произвольных escape-последовательностей, так что если вы можете, вы можете настроить их и объявить escape-последовательности в Emacs (подробнее об этом позже).
В последнее время ситуация меняется, потому что было два предложения стандартизировать escape-последовательности. Одним из них является libtermkey от LeoNerd с синтаксисом . Другой - xterm Томаса Дики с синтаксисом . Текущие версии xterm (≥216) могут быть настроены для любого синтаксиса путем установки ресурса; функция должна быть активирована путем установки ненулевого значения.
ESC [ codepoint ; modifier u
ESC [ 2 7 ; modifier ; codepoint ~
formatOtherKeys
modifyOtherKeys
Если ваш эмулятор терминала не поддерживает эти синтаксисы, но может быть настроен, выберите либо.
Начиная с Emacs 24.4, Emacs автоматически включает эту
modifyOtherKeys
функцию, когда обнаруживает, что терминал имеет версию xterm ≥216. Обнаружение Emacs escape-последовательностей для кодирования ключей работает через переменнуюlocal-function-key-map
. Начиная с Emacs 24.4, поддерживаются не все escape-последовательности. Вы можете использовать следующий код в вашем файле инициализации, чтобы завершить работу.Если
TERM
переменная окружения не установленаxterm
или такой вариант, какxterm-256color
, Emacs не будет активировать эти последовательности. Если в Emacs уже есть поддержка вашего значенияTERM
, вы можете добавить поддержку, определив функцию, аналогичную приведенной выше, которая будет выполняться после загрузки файла Lisp, именем которого является значениеTERM
. Если в Emacs такой поддержки нет, вы можете добавить ее, создав подкаталог, который вызывается где-term
то в вашемload-path
файле, и создав файл Lisp с именемterm/$TERM.el
где$TERM
это значениеTERM
, определяя вызываемую функциюterminal-init-$TERM
.Когда я пишу, кажется, что немногие терминальные эмуляторы, кроме xterm, приняли эти escape-последовательности. В OSX вы можете настроить iTerm2 , выбирая escape-последовательность для каждой комбинации клавиш, одну за другой.
источник
M-C-%
быть признаннымESC 5
modifyOtherKeys
функция не активна. Обратите внимание, что он поддерживается только в достаточно последних версиях xterm и активируется только автоматически, начиная с Emacs 24.4. Я не знаю, поставляется ли OSX с последними версиями. Если это не так, и это не работает для вас, я предлагаю вам задать новый вопрос. Укажите версии, которые вы используете.В ответе Жиля говорилось: у
On OSX, you can configure iTerm2 by selecting an escape sequence for each key combination, one by one.
меня возникли небольшие проблемы, поэтому здесь подробное объяснение на случай, если вы похожи на меня, запутались.Если при запуске Emacs в терминале (например, Terminal.app по умолчанию для Mac)
C-x C-;
не запускаетсяcomment-line
, и вам нужна эта функциональность, вам необходимо переключиться на iTerm2 (Terminal.app не имеет возможности) и создать сопоставление клавиш. под профилями ... ключи, как следует:Это достигается нажатием на
+
кнопку, которая вызывает небольшое окно под названием «Сочетание клавиш»; это окно изначально имеет два поля; верхняя часть имеет значение «Click to Set», а нижняя имеет значение «Ignore». Нажмите верхнюю кнопку и введитеC-;
. Это устанавливает комбинацию клавиш, которая будет запускать действие и код. Щелкните по нижнему полю «Действие», найдите и нажмите «Отправить последовательность побега», которая находится чуть ниже половины пути. После того, как вы нажмете на это, появится третье поле, которое называется «Esc +». Внутри этого поля введите:59
Десятичный ASCII - код запятой, в и5
является кодомCtrl
. Затем нажмите «ОК», чтобы закончить. Правильная комбинация клавиш для последовательности клавиш теперь будет включена в настройки iTerm2. Когда вы запустите Emacs в iTerm, вы получите доступ кC-x C-;
функциональности.источник