2015-12-04 3 views
1

(windmove-default-keybindings 'meta) содержит команды для перемещения между окнами emacs (например, M-<up> для перемещения вверх по окну). Они отлично работают для меня, когда emacs -nw запускается в терминале, но в tmux они терпят неудачу.tmux вмешивается в команды emacs? (windmove-default-keybindings)

Отдельные команды работают, например winmove-up; и при запуске, они говорят мне:

Вы можете запустить команду WinMove вверх с M-<up>

Но сам M-<up>, я получаю:

ESC <up> неопределен

Такая же проблема с любым другим префиксным ключом (shift, control) ,

Это в tmux 1.9a/emacs 23.3.1 и tmux 2.0/emacs 24.5.1 под Ubuntu 12.04 и 14.04 соответственно. В первом случае я использую «gnome-terminal». Во втором ... Я нахожусь на сервере, а переменная окружения TERM - «xterm». Как только я начинаю tmux, он становится «screen-256color»; это потому, что я использовал set -g default-terminal

Идеи?

+0

Они даже не работают для меня в замазке. Какой терминал вы используете? – Random832

+0

gnome-terminal для моей домашней машины. Когда я подключаюсь к серверу, переменная среды TERM говорит «xterm», и когда я запускаю tmux, это «screen-256color». Я добавлю это выше. – Diagon

+0

Я добавил в свой ответ больше информации о добавлении новых типов терминалов 'screen-xtermkeys-256color' и' tmux-xtermkeys-256color'. – Random832

ответ

1

С помощью от @ Random832, ответ на this question и первый ответ на this one, наряду с некоторой полезной информацией о том, как Emacs обрабатывает функциональные клавиши в ответ на this question, есть два подхода:

Подход # 1: В вашем .tmux.conf используйте xterm-keys on, но и, если вы используете 256 цветов, а затем установите ваш default-terminal правильно:

set -g xterm-keys on 
set -g default-terminal "xterm-256color" 

Appro ach # 2: На терминале запустите cat, а затем введите M-<up> и т.д., чтобы найти выход. В моем случае это было: ^[[1;3A (и B & C & D). Затем, используйте этот код в файле .emacs:

(add-hook 'term-setup-hook 
    '(lambda() 
    (define-key function-key-map "\e[1;3A" [M-up]) 
    (define-key function-key-map "\e[1;3B" [M-down]) 
    (define-key function-key-map "\e[1;3C" [M-right]) 
    (define-key function-key-map "\e[1;3D" [M-left]))) 

Примечание, что этот второй подход также работает и для других ключей префиксов (Shift, Control) и что эта же проблема возникает в screen.

отметить также, что все, кажется, работает хорошо, за исключением в gnus статьи буфере резюме, где M-<up> и M-<dn> ведут себя как <up> и <dn> (хотя M-<rt> и M-<lft> работают нормально).

+0

Существуют разные причины не использовать xterm-256color. У меня будет обновление позже сегодня, чтобы предоставить пользовательскую запись terminfo. – Random832

+0

Спасибо! Я пробовал множество способов переназначить эти ключи (я использую экран и имею ту же проблему), и ваш подход №2 был единственным способом, с которым я пытался работать. Ты спас меня от жизни разочарования! – wvdschel

1

Emacs не всегда правильно переводит модификаторы на функциональные клавиши.

Прежде всего, проверьте, не имеет ли значение параметр tmux set -g xterm-keys on. (Это может потребовать, чтобы новая запись terminfo полностью работала, и если она вообще делает какие-либо изменения, даже сказать что-то, кроме ESC <up>, пожалуйста, скажите в комментарии)

Кроме того, без ключей xterm, попробуйте перевести ключевые слова с this answer :

(define-key input-decode-map "\e\eOA" (kbd "<M-up>")) 
(define-key input-decode-map "\e\eOB" (kbd "<M-down>")) 

xterm-keys решение имеет то преимущество, что, если он работает, он также будет работать на сдвиг и Ctrl.

Вместо изменения функциональной клавиши-карты, с XTERM клавиш на вас может установить новую запись Terminfo с соответствующими ключами:

# Note: tmux does translate Home and End (\EOH, \EOF) to \E[1~, \E[4~ 
# But leaves the modified versions (\E[1;?H etc) alone. 

xterm+modkeys|xterm-style modifier keys, 
    kb2=\EOE, kent=\EOM, 
    kind=\E[1;2B, kri=\E[1;2A, 
    kf13=\E[1;2P, kf14=\E[1;2Q, kf15=\E[1;2R, kf16=\E[1;2S, 
    kf17=\E[15;2~, kf18=\E[17;2~, kf19=\E[18;2~, kf20=\E[19;2~, 
    kf21=\E[20;2~, kf22=\E[21;2~, kf23=\E[23;2~, kf24=\E[24;2~, 
    kf25=\E[1;5P, kf26=\E[1;5Q, kf27=\E[1;5R, kf28=\E[1;5S, 
    kf29=\E[15;5~, kf30=\E[17;5~, kf31=\E[18;5~, kf32=\E[19;5~, 
    kf33=\E[20;5~, kf34=\E[21;5~, kf35=\E[23;5~, kf36=\E[24;5~, 
    kf37=\E[1;6P, kf38=\E[1;6Q, kf39=\E[1;6R, kf40=\E[1;6S, 
    kf41=\E[15;6~, kf42=\E[17;6~, kf43=\E[18;6~, kf44=\E[19;6~, 
    kf45=\E[20;6~, kf46=\E[21;6~, kf47=\E[23;6~, kf48=\E[24;6~, 
    kf49=\E[1;3P, kf50=\E[1;3Q, kf51=\E[1;3R, kf52=\E[1;3S, 
    kf53=\E[15;3~, kf54=\E[17;3~, kf55=\E[18;3~, kf56=\E[19;3~, 
    kf57=\E[20;3~, kf58=\E[21;3~, kf59=\E[23;3~, kf60=\E[24;3~, 
    kf61=\E[1;4P, kf62=\E[1;4Q, kf63=\E[1;4R, 
    kDC=\E[3;2~, kDC3=\E[3;3~, kDC4=\E[3;4~, kDC5=\E[3;5~, kDC6=\E[3;6~, kDC7=\E[3;7~, 
    kDN=\E[1;2B, kDN3=\E[1;3B, kDN4=\E[1;4B, kDN5=\E[1;5B, kDN6=\E[1;6B, kDN7=\E[1;7B, 
    kEND=\E[1;2F, kEND3=\E[1;3F, kEND4=\E[1;4F, kEND5=\E[1;5F, kEND6=\E[1;6F, kEND7=\E[1;7F, 
    kHOM=\E[1;2H, kHOM3=\E[1;3H, kHOM4=\E[1;4H, kHOM5=\E[1;5H, kHOM6=\E[1;6H, kHOM7=\E[1;7H, 
    kIC=\E[2;2~, kIC3=\E[2;3~, kIC4=\E[2;4~, kIC5=\E[2;5~, kIC6=\E[2;6~, kIC7=\E[2;7~, 
    kLFT=\E[1;2D, kLFT3=\E[1;3D, kLFT4=\E[1;4D, kLFT5=\E[1;5D, kLFT6=\E[1;6D, kLFT7=\E[1;7D, 
    kNXT=\E[6;2~, kNXT3=\E[6;3~, kNXT4=\E[6;4~, kNXT5=\E[6;5~, kNXT6=\E[6;6~, kNXT7=\E[6;7~, 
    kPRV=\E[5;2~, kPRV3=\E[5;3~, kPRV4=\E[5;4~, kPRV5=\E[5;5~, kPRV6=\E[5;6~, kPRV7=\E[5;7~, 
    kRIT=\E[1;2C, kRIT3=\E[1;3C, kRIT4=\E[1;4C, kRIT5=\E[1;5C, kRIT6=\E[1;6C, kRIT7=\E[1;7C, 
    kUP=\E[1;2A, kUP3=\E[1;3A, kUP4=\E[1;4A, kUP5=\E[1;5A, kUP6=\E[1;6A, kUP7=\E[1;7A, 

screen-xtermkeys|screen with xterm-style modifier keys, 
    use=xterm+modkeys, use=screen, 

screen-xtermkeys-256color|screen with xterm keys and 256 colors, 
    use=xterm+modkeys, use=screen-256color, 

tmux-xtermkeys|tmux with xterm-style modifier keys, 
    use=xterm+modkeys, use=tmux, 

tmux-xtermkeys-256color|tmux with xterm keys and 256 colors, 
    use=xterm+modkeys, use=tmux-256color, 

Compile с tic -x tmux-xtermkeys.ti, а затем установите TERM в {tmux,screen}-xtermkeys{,-256color} по мере необходимости. Я включил экран по двум причинам: во-первых, emacs по умолчанию не распознает tmux в качестве 256-цветного терминала. Во-вторых, версия базы данных terminfo некоторых систем слишком старая, чтобы включать информацию tmux (удалите эти записи, чтобы получить файл для компиляции).

Лучше использовать запись в терминале terminfo, чем xterm, потому что tmux обычно рекомендует использовать экран, и его эмуляция намного ближе соответствует ему. В некоторых случаях вы можете заметить, что text meant to be in standout mode will be in italics - если это так, обновите данные terminfo.

Это будет работать и в других приложениях, которые поддерживают эти ключи (то есть большинство мест, в которых они работают сейчас в xterm).

+0

Спасибо за ваши предложения ... На обеих машинах 'set -g xterm-keys' меняет его так, что' M- 'выводит буквы« 3A »в буфер (но курсор не меняет местоположение и ничего появляется в области эха). 'M- ' выходы "3B", 'M- ' is "3C" и 'M- ' is "3D". Я собираюсь проверить ваше второе предложение. (Обратите внимание, что я редактировал мой вопрос, чтобы включить информацию о переменной среды TERM). – Diagon

+0

Random832 - Хорошо, я понимаю. Я буду следить, но до сих пор у меня нет проблем с 'set -g default-terminal" xterm-256color ", либо на моем домашнем компьютере, либо на сервере. В частности, у меня нет проблемы с тем, что текст в выделенном режиме выделен курсивом. Благодарим вас за подробный ответ. Я сообщу здесь, если/когда мне нужно проверить вашу запись в terminfo. (Дает мне кошмары давних битв с файлами termcap.) – Diagon

+0

О, хорошо. Согласно вашей последней ссылке, эта проблема должна быть исправлена ​​в tmux 2.1, поэтому использование xterm-256color может быть простым временным исправлением, даже если возникают некоторые незначительные проблемы. – Diagon

Смежные вопросы