Niedawno zacząłem używać tmux (wcześniej byłem użytkownikiem ekranu) i uwielbiam to, z wyjątkiem jednego małego problemu. Używam emacsa w mojej sesji tmux i jestem przyzwyczajony do używania klawiszy Shift-strzałek do poruszania się między oknami emacsa (nie oknami tmux). Podczas działania w tmux wiązania wydają się całkowicie przestać działać (to tak, jakby w ogóle nie rejestrowały się w emacs). Jeśli wyjdę z tmux i po prostu uruchomię emacsa w mojej powłoce, działają one dobrze.
Używam iTerm2, ssh'd do Linux-a, tam uruchamiam tmux / emacs. Mam powiązania klawiszy Shift ze strzałką skonfigurowane w następujący sposób w moich plikach .emacs:
(global-set-key "\M-[1;2A" 'windmove-up)
(global-set-key "\M-[1;2B" 'windmove-down)
(global-set-key "\M-[1;2C" 'windmove-right)
(global-set-key "\M-[1;2D" 'windmove-left)
Kiedy nie działam w tmux, mogę potwierdzić, że są to właściwe sekwencje znaków dla kombinacji klawiszy ze strzałką Shift, wykonując Cq w emacsie, a następnie naciskając sekwencję klawiszy. W tmuxie nawet to nie działa, ponieważ wydaje się, że nie widzi żadnych danych wejściowych po naciśnięciu klawisza Shift (tylko siedzi po znaku zachęty Cq).
Patrząc na powiązania klawiszy dla tmux, nie sądzę, aby cokolwiek było związane z klawiszami Shift-strzałkami, a nawet gdyby tak było, rejestrowałyby się tylko po wprowadzeniu prefiksu (co w moim przypadku jest powiązane z Co).
Masz pomysł, jak sprawić, by klawisze Shift-strzałka działały ponownie w tmux?
Odpowiedzi:
Najpierw upewnij się, że TERM jest poprawny w każdej lokalizacji:
xterm
- coś (np.xterm-256color
) w lokalnej powłoce działającej w oknie iTerm2xterm
- coś wewnątrz powłoki po SSHing do systemu LinuxPowinno to być takie samo, jak to, czego używasz lokalnie w iTerm2 , ponieważ SSH powinien przekazywać go do strony zdalnej (i, co ważne, strona zdalna nie powinna ślepo zastępować wartość w pliku inicjalizacji powłoki).
screen
- coś (np.screen-256color
) wewnątrz powłoki działającej pod tmux w systemie LinuxPowinieneś zawsze używać
screen
TERM-opartego na tmuxie w tmuxie .Posiadanie
xterm
TERM bezpośrednio poza tmux pozwoli tmux rozpoznać zmodyfikowane klawisze strzałek, ale nie przepuści ich, chyba że masz równieżxterm-keys
włączoną opcję okna. Umieść to w swoim~/.tmux.conf
systemie Linux:Sekwencje przesuniętych klawiszy powinny teraz przejść do Emacsa , działającego w tmuxie , przez połączenie SSH, w oknie iTerm2 .
źródło
export XTERM=xterm-256color
(Piszę to, ponieważ nie wiedziałem, co oznacza „twój TERM” w odpowiedzi, szukałem komentarza wyjaśniającego, że ... nie było żadnego, a teraz jest taki.)Najpierw musisz włączyć
xterm-keys
w konfiguracji tmux. Więc włóż następujące~/.tmux.conf
Ale to złamie inne kluczowe kombinacje. Aby je naprawić, włóż następujące elementy do swojego
~/.emacs
lub~/.emacs.d/init.el
konfiguracjiMam też swoje rozwiązanie na wiki archlinux
źródło
FAQ tmux zawierał następujący wpis :
Otworzyłem problem Tmux nr 1349, aby poprosić o przywrócenie wpisu FAQ.
źródło
Zasadniczo takie problemy występują z powodu niedopasowania między tym, co wysyła emulator terminala, a tym, czego oczekuje aplikacja kliencka.
Różne emulatory terminali mają różny stopień dostosowania, dlatego konieczne jest zapoznanie się z dostrajaniem emulacji danego.
Aplikacje klienckie zależą od wartości,
$TERM
która służy do wyszukiwania możliwości terminalu (emulatora) w bazie danychterminfo
(lubtermcap
).W twoim przypadku twoje powiązania emacsa używają w ten sposób jawnych sekwencji,
$TERM
a terminfo nie ma znaczenia: oczekiwany jest konkretny emulator terminala - jak już się zorientowałeś -xterm
kompatybilny.źródło