Блокировать привязки, которые не работают в режиме терминала в emacs?

Некоторые привязки клавиатуры emacs, которые работают в режиме графического интерфейса, не будут работать в режиме терминала , потому что только терминал умеет отправлять управляющие коды ASCII. Есть ли способ заставить emacs жаловаться, когда я привязываю ключ к управляющему коду, отличному от ASCII, чтобы я перестал делать это случайно? Я лишь изредка запускаю emacs в терминале, и обычно только удаленно, и обычно только потому, что что-то сломано, а это значит, что я обнаруживаю эту отстойность в самый неподходящий момент.

У меня также был опыт удаленного взаимодействия, особенно с одной ОС на другую (например, Solaris -> Linux), где даже клавиши-модификаторы переназначались (меняются местами esc ‹-> ctrl или правый alt работает, а левый - нет). Есть ли способ определить, когда это происходит, и соответствующим образом поменять местами привязки клавиатуры?

По сути: отстой, что каждый раз, когда я использую emacs удаленно в терминале, я получаю непоследовательный опыт работы с графическим интерфейсом, как я могу изменить использование emacs, чтобы предотвратить это.


person Joseph Garvin    schedule 17.10.2012    source источник


Ответы (1)


Я не знаю, как это сделать: с одной стороны, неверно, что терминалы могут отправлять только управляющие коды ASCII, потому что они могут кодировать практически все что угодно через escape-последовательности (например, xterm отправляет специальные escape-последовательности, скажем, для , CM-up, который затем распознает Emacs). Таким образом, набор событий, которые терминал может отправлять в Emacs (и которые Emacs затем может распознать), зависит от терминала.

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

person Stefan    schedule 17.10.2012
comment
Знаете ли вы, есть ли способ выяснить, что поддерживается, а что нет, когда я вхожу в систему удаленно и запускаю emacs в терминале? Когда я удаленно использую C- /, например, не работает (это считается эквивалентным C-_), но я не знаю, как обнаружить это заранее, кроме как методом проб и ошибок всех моих ярлыков, и если бы был способ Чтобы найти полный список ярлыков, которые мне нужно переназначить, я мог бы хотя бы исправить это для моей настройки удаленной работы. - person Joseph Garvin; 18.10.2012
comment
Чтобы узнать, что работает, а что нет, вам нужно выяснить, какой эмулятор терминала вы используете, а затем посмотреть его документацию, настройки и / или исходный код. Вы можете знать, что C-/ рискованно, если M-: "\C-/" RET сообщит вам, что это недействительная строка, т.е. это не управляющий ключ ASCII. - person Stefan; 18.10.2012
comment
А, я надеюсь обнаружить некоторую комбинацию магии emacs lisp + termcap, которая сможет это понять. Могу попробовать прокатить свой, но это займет некоторое время, так как я знаю jack о termcap в настоящее время. - person Joseph Garvin; 18.10.2012
comment
Если вы посмотрите на input-decode-map, вы увидите, что правила отображают escape-последовательности обратно в их реальное значение. Он построен Emacs на основе информации termcap, поэтому он даст вам знать, что работает (в дополнение к элементам управления ASCII и Meta + ASCII, которые должны работать везде). - person Stefan; 18.10.2012