3

Я пытаюсь настроить tmux так, чтобы

  • Ctrl-стрелки используются для выбора панели
  • Shift-Arrows используются для изменения размера панели
  • Alt-стрелки (слева, справа) используются для выбора окна

... все работают правильно, кроме Shift-Up и Shift-Down. (Загадочно, Shift-Left и Shift-Right работают, как и ожидалось.)

Это запускает tmux 2.0 внутри xfce4-терминала (хотя я также видел эту проблему в Ubuntu, используя программу терминала Ubuntu по умолчанию).

Есть что-то, что я не правильно делаю? Вот все содержимое моего файла .tmux.conf:

# split <h>orizontal and <v>ertical
bind-key h split-window -v
bind-key v split-window -h

# Use Ctrl-arrow keys without prefix key to switch panes
bind -n C-Up    select-pane -U
bind -n C-Down  select-pane -D
bind -n C-Left  select-pane -L
bind -n C-Right select-pane -R

# Use Shift-arrow keys without prefix key to resize panes
bind -n S-Up    resize-pane -U
bind -n S-Down  resize-pane -D
bind -n S-Left  resize-pane -L
bind -n S-Right resize-pane -R

# Use Alt-arrow keys without prefix key to switch windows
bind -n M-Left  previous-window
bind -n M-Right next-window

# No delay for escape key press
set -sg escape-time 0

# Reload tmux config
bind-key r source-file ~/.config/.tmux.conf \; display-message "Configuration reloaded"

1 ответ1

3

Маловероятно, что проблема связана с некоторым различием в режиме приложения по сравнению с обычным режимом, поскольку xterm отправляет одинаковую последовательность символов для сдвинутых и несмещенных клавиш курсора.

Одним из ключей к этой проблеме является то, что различные элементы ctrl - это расширенные возможности xterm . tmux использует несколько таблиц:

  • один перечисляет специальные ключи, которые вряд ли можно найти в терминальной записи
  • другие перечисляют возможности терминала, которые могут быть получены из обычной записи базы данных терминала.

Для последнего важны эти строки из таблицы tmux :

    { TTYC_KDN2, TTYCODE_STRING, "kDN" },
    { TTYC_KDN3, TTYCODE_STRING, "kDN3" },
    { TTYC_KDN4, TTYCODE_STRING, "kDN4" },
    { TTYC_KDN5, TTYCODE_STRING, "kDN5" },
    { TTYC_KDN6, TTYCODE_STRING, "kDN6" },
    { TTYC_KDN7, TTYCODE_STRING, "kDN7" },
    { TTYC_KEND, TTYCODE_STRING, "kend" },

    { TTYC_KLFT2, TTYCODE_STRING, "kLFT" },
    { TTYC_KLFT3, TTYCODE_STRING, "kLFT3" },
    { TTYC_KLFT4, TTYCODE_STRING, "kLFT4" },
    { TTYC_KLFT5, TTYCODE_STRING, "kLFT5" },
    { TTYC_KLFT6, TTYCODE_STRING, "kLFT6" },
    { TTYC_KLFT7, TTYCODE_STRING, "kLFT7" },

    { TTYC_KRIT2, TTYCODE_STRING, "kRIT" },
    { TTYC_KRIT3, TTYCODE_STRING, "kRIT3" },
    { TTYC_KRIT4, TTYCODE_STRING, "kRIT4" },
    { TTYC_KRIT5, TTYCODE_STRING, "kRIT5" },
    { TTYC_KRIT6, TTYCODE_STRING, "kRIT6" },
    { TTYC_KRIT7, TTYCODE_STRING, "kRIT7" },
    { TTYC_KUP2, TTYCODE_STRING, "kUP" },
    { TTYC_KUP3, TTYCODE_STRING, "kUP3" },
    { TTYC_KUP4, TTYCODE_STRING, "kUP4" },
    { TTYC_KUP5, TTYCODE_STRING, "kUP5" },
    { TTYC_KUP6, TTYCODE_STRING, "kUP6" },
    { TTYC_KUP7, TTYCODE_STRING, "kUP7" },

    { TTYC_RI, TTYCODE_STRING, "ri" },

Большинство этих строк (в tty-term.c) являются расширениями xterm . Строки для сдвинутых клавиш курсора могут быть предоставлены "kUP" , "kDN" , "kLFT" , "kRGT" а также "kri" и "kind" .

Последние два проблематичны:

  • tmux имеет запись в таблице для "ri" (строка отправляется на терминал) , но ни один для "kri" и "kind" (ваш вверх / вниз курсора клавиши)
  • Поскольку (n) wgetch curses будет видеть только первую возможность с заданным значением в списке строк, база данных ncurses определяет только одну возможность.
  • kUP и kDN - это расширения, а не стандартные возможности, поэтому ncurses определяет "kri" и "kind" , которые являются стандартными.

Проблема не в вашей конфигурации, а в простой ошибке в tmux которую можно устранить, добавив записи в эту таблицу. Нечто подобное (непроверенное) является способом продолжения:

    { TTYC_KUP2, TTYCODE_STRING, "kri" },
    { TTYC_KDN2, TTYCODE_STRING, "kind" },

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .