Как заставить xterm отправлять ключ Alt в emacs как Meta?

9

Я вижу, что этот вопрос задавался несколько раз . Решения, приведенные там, похоже, не относятся к моей установке. Вот моя история:

Я использую Ubuntu 12.0.04 LTS с xmonad (не поверх gnome) и использую xterm для своей работы. Я бы предпочел использовать xterm, а не другой терминал или собственное окно emacs. При использовании emacs -nw я вижу, что Alt не распознается. Используя xev, я подтвердил, что Alt действительно генерируется. Кроме того, если я использую rxvt, я вижу, что Alt распознается emacs -nw. Я использую злой режим (как давний пользователь vim и новичок в emacs), и я действительно предпочел бы, чтобы мой escape-ключ не восстанавливался как alt (это было решение, приведенное в другом потоке). Что мне делать? (Если это помогает, Alt-x в окне xterm без запуска emacs генерирует «ø» или, если я запускаю emacs -nw -Q).

Рахул
источник
Если я не ошибаюсь, вместо этого Alt читается как M.
Брайам
Я не понял, ты имеешь в виду М, а не Мета, верно? Почему ты это сказал?
Рахул
Emacs Meta key. Ты не можешь нажать Mx?
Брайам
О, это моя проблема. Я ожидал, что Alt-x сгенерирует Mx (как это происходит в графическом режиме), но он не делает этого на xterm для меня. Вместо этого он генерирует (ø)
рахул

Ответы:

13

Как видно из Arch Wiki , вам нужно заставить Xterm отправить правильный экранированный ключ в программу:

Если вы используете Altклавишу для сочетаний клавиш, она понадобится вам в вашем файле ресурсов:

XTerm*metaSendsEscape: true

Итак, просто сделайте:

echo 'XTerm*metaSendsEscape: true' >> ~/.Xresources

И перезапустите сеанс Xterm.

Braiam
источник
Спасибо, что сработало. Итак, если Alt отправляет escape сейчас, как xterm обрабатывает Escape? (Побег работает тоже, я прошу моего понимания.)
Рахул
@rahul Я не сказал «Esc» бежать, но избежал нажатия клавиши «^ M»
Braiam
4
вместо того, чтобы возобновить сеанс, вы также можете запуститьxrdb -merge ~/.Xresources
Кристиан Фриц
2

Если обновление ~ / .Xresources не работает для вас, сделайте, как сказано в документации, и обновите его в ~/.Xdefaults

http://frequal.com/linux/XTermMetaSendsEscape.html

Адам
источник
Это работало для меня на голом X-сервере, например startx /usr/bin/xterm, где ~/.Xresourcesигнорировалось.
Руслан
1

Есть интересная альтернатива управлению вашими .Xdefaults/ .Xresourcesфайлами, предоставляя строку ресурса непосредственно в качестве xtermопции командной строки:

xterm -xrm 'xterm*VT100.metaSendsEscape: true'

Это удобно, например, если у вас в x-terminal-emulatorлюбом случае есть свой псевдоним .

ВОГ
источник