Problem z powiązaniem klucza Tmux

8

Przeszedłem z używania ekranu do korzystania z tmux. Mam konfigurację tmux, która używa sekwencji Ctrl+ ascreena, zamiast domyślnej Ctrl+ tmuxa b.

Jednak jednym z problemów, które znalazłem, jest to, że jeśli nacisnę ctrl-a, a następnie naciśniesz p dla poprzedniego ekranu lub n dla następnego ekranu, bez zwolnienia klawisza ctrl, tmux ignoruje sekwencję klawiszy. Jeśli naciśniesz Ctrl+ a, zwolnię Ctrl, a następnie naciśnij nlub p, to działa dobrze.

Masz jakieś przemyślenia na temat tego, co może być nie tak? Moja konfiguracja wygląda następująco:

# $Id: t-williams.conf,v 1.1 2009/11/02 18:59:28 nicm Exp $
#
# ~/.tmux.conf - tmux terminal multiplexer config
# Thayer Williams (http://cinderwick.ca)
# "Feel free to do whatever you like with it."

# set prefix key to ctrl+a
unbind C-b
set -g prefix C-a

# send the prefix to client inside window (ala nested sessions)
bind-key a send-prefix

# toggle last window like screen
bind-key C-a last-window

# confirm before killing a window or the server
bind-key k confirm kill-window
bind-key K confirm kill-server

# toggle statusbar
bind-key b set-option status

# ctrl+left/right cycles thru windows
bind-key -n C-right next
bind-key -n C-left prev

# open a man page in new window
bind / command-prompt "split-window 'exec man %%'"

# switch split window keys
unbind %
bind | split-window -h
bind - split-window -v

# quick view of processes
bind '~' split-window "exec htop"

# scrollback buffer n lines
set -g history-limit 10000

# listen for activity on all windows
#set -g bell-action any
setw -g monitor-activity off
set -g visual-activity off

# on-screen time for display-panes in ms
set -g display-panes-time 2000

# start window indexing at one instead of zero
set -g base-index 1

# enable wm window titles
set -g set-titles on

# Automatically set window title
setw -g automatic-rename

# statusbar --------------------------------------------------------------

set -g display-time 2000

# default statusbar colors
set -g status-fg white
set -g status-bg cyan
set -g status-attr default

# default window title colors
set-window-option -g window-status-fg black
set-window-option -g window-status-bg cyan
set-window-option -g window-status-attr default

# active window title colors
set-window-option -g window-status-current-fg white
set-window-option -g window-status-current-bg black
set-window-option -g window-status-current-attr bright

# command/message line colors
set -g message-fg blue
set -g message-bg white
set -g message-attr dim

# center align the window list
set -g status-justify centre

# show some useful 
set -g status-left "[#[fg=black]#H#(uptime | cut -d ',' -f 3- | sed -e 's/ load average: //' | sed -e 's/  / /g')#[default]]"
set -g status-left-length 50
set -g status-right "[#[fg=black]%a %Y-%m-%d %H:%M#[default]]"
set -g status-right-length 50

set -g default-terminal "screen"
Morgan Blackthorne
źródło

Odpowiedzi:

7

Znalazłem rozwiązanie, które naśladuje oryginalne zachowanie pod ekranem (włączając tylko odpowiednie części konfiguracji, ponieważ reszta to tylko dekoracja okna):

# set prefix key to ctrl+a until I have time to adapt
unbind C-b
set -g prefix C-a

# send the prefix to client inside window (ala nested sessions)
bind-key a send-prefix

# toggle last window like screen
bind-key C-a last-window

# navigate through windows like screen
bind-key C-a-n next
bind-key C-a-p prev

Rozwiązanie stanowiło bezpośrednie połączenie sekwencji klawiszy. Nie zdawałem sobie sprawy, że tak naprawdę można to zrobić, ale działa idealnie i nadal mogę zachować opcję wysyłania prefiksu (co mnie martwiło, było częścią problemu).

Morgan Blackthorne
źródło
Myślę, że możesz oznaczyć swoją odpowiedź jako rozwiązanie, które pomogłoby innym ludziom.
gitaarik
Kiedy już użyję domyślnych skrótów klawiszowych, moje zmieniają się nieco: bind-key C-ni bind-key C-p. pozwala mi ciągle naciskać Ctrl.
SergioAraujo
2

Tmux uważa, że ​​każde naciśnięcie klawisza wykonywane, gdy klawisz Ctrl jest wciśnięty, ma postać litery C. Możesz po prostu dodać bind C-p previ bind C-n nextuzyskać ten sam efekt.

Alex L.
źródło
Dzięki, Alex, że postawiłem mnie na właściwej drodze. Nie chciałem jednak robić ctrl-p i ctrl-n; Nadal administruję niektórymi maszynami, które nie mają tmuxa i od czasu do czasu używam screena, więc szukałem czegoś, co nieco gołąbkuje nieco bardziej niż pierwotne zachowanie ekranu. Ale twój komentarz nakłonił mnie do tego, co mogę zrobić, aby to naprawić.
Morgan Blackthorne,