У меня такая настройка:
# Number windows and panes starting at 1 so that we can jump to
# them easier.
set -g base-index 1
set -g pane-base-index 1
Но я бы хотел иметь то же самое для переключения сессий tmux. Когда я открываю список сессий tmux, он все равно начинается с 0. Можно ли начать отсчет сессий не с 0, а с 1?
решение1
Это невозможно, и это не будет возможно в будущем.отклоненный запрос функциидля session-base-index
, разработчики считают, что "Это просто бесполезная функция.."
решение2
Вы, по-видимому, имеете в видуиндекс группы сеансов, который генерируется и не используется для указания tmux
сеанса, к которому вы хотите присоединиться.
Он используется вшаблон дляlist-sessions
:
"#{?session_grouped, (group ,}" \
и создано вsession.c
(и всегда начинается с нуля):
/* Find session group index. */
u_int
session_group_index(struct session_group *sg)
{
struct session_group *sg2;
u_int i;
i = 0;
TAILQ_FOREACH(sg2, &session_groups, entry) {
if (sg == sg2)
return (i);
i++;
}
fatalx("session group not found");
}
но это значение используется только в форматированном выводе.
решение3
вкратце
Перейдите к разделу «Решение».
Анализ
Есть один большойнедоразумениездесь.
Вероятно, ваш снимок экрана был сделан после prefixs, который по умолчанию запускает следующую команду tmux:
choose-tree -Zs
(в оболочке вы можете запустить его с помощью tmux choose-tree -Zs
). Числа в скобках имеютничегоделать с идентификаторами сеансов или именами сеансов. Это просто "номера строк"в списке на данный момент. Например, список может выглядеть так:
(0) + foo: 2 windows (attached)
(1) + bar: 1 windows
но после раскрытия всех элементов это может выглядеть так:
(0) - foo: 2 windows (attached)
(1) ├─> - 0: [tmux]*Z
(2) │ ├─> 0: man
(3) │ ├─> 1: bash*
(4) │ └─> 2: bash
(5) └─> - 1: bash-
(6) ├─> 0: bash
(7) ├─> 2: bash
(8) ├─> 3: bash
(9) ├─> 4: bash
(M-a) ├─> 5: bash
(M-b) └─> 1: bash*
(M-c) - bar: 1 windows
(M-d) └─> 0: bash*
Так что эти "номера строк" не являются четными числами, это ключи, которые вы можете использовать. Обратите внимание, что в приведенном выше списке только 0
и M-c
( Alt+ c) соответствуют сеансам.То, как tmux подсчитывает сеансы, не имеет ничего общего с этими ключами, поэтомузапросили (и отклонили)session-base-index
не решит вашу проблему.Просьба подсчитатьлинии вchoose-tree
с 1 было бы гораздо больше смысла.
Вы можете определить свои собственные ключи, -K
указавchoose-tree
Например, сдвиг на единицу для бедняков реализуется следующим образом:
choose-tree -ZsK '#{e|+:1,#{line}}'
что дает вам это:
(1) + foo: 2 windows (attached)
(2) + bar: 1 windows
Но это прикрепит ключи только к девяти строкам. Мой пример после расширения выглядит так:
(1) - foo: 2 windows (attached)
(2) ├─> - 0: [tmux]*Z
(3) │ ├─> 0: man
(4) │ ├─> 1: bash*
(5) │ └─> 2: bash
(6) └─> - 1: bash-
(7) ├─> 0: bash
(8) ├─> 2: bash
(9) ├─> 3: bash
├─> 4: bash
├─> 5: bash
└─> 1: bash*
- bar: 1 windows
└─> 0: bash*
Где нет M-a
и M-b
т.п.
вкодЯ нашел это:
#define WINDOW_TREE_DEFAULT_KEY_FORMAT \ "#{?#{e|<:#{line},10}," \ "#{line}" \ "," \ "#{?#{e|<:#{line},36}," \ "M-#{a:#{e|+:97,#{e|-:#{line},10}}}" \ "," \ "" \ "}" \ "}"
Итак, я прихожу к выводу, что значение по умолчанию choose-tree -K
равно:
#{?#{e|<:#{line},10},#{line},#{?#{e|<:#{line},36},M-#{a:#{e|+:97,#{e|-:#{line},10}}},}}
Вы можете напрямую выполнить сдвиг на единицу, заменив каждое #{line}
на #{e|+:1,#{line}}
; или вы можете сократить количество вычислений, изменив жестко закодированные константы там, где это необходимо:
#{?#{e|<:#{line},9},#{e|+:1,#{line}},#{?#{e|<:#{line},35},M-#{a:#{e|+:97,#{e|-:#{line},9}}},}}
Решение
Команда tmux будет выглядеть так:
choose-tree -ZsK '#{?#{e|<:#{line},9},#{e|+:1,#{line}},#{?#{e|<:#{line},35},M-#{a:#{e|+:97,#{e|-:#{line},9}}},}}'
Вы можете проверить это в оболочке внутри tmux, вызвав tmux choose-tree …
. Если результат вас устраивает, то привяжите команду, prefixsдобавив следующую строку в ваш .tmux.conf
:
bind-key s choose-tree -ZsK '#{?#{e|<:#{line},9},#{e|+:1,#{line}},#{?#{e|<:#{line},35},M-#{a:#{e|+:97,#{e|-:#{line},9}}},}}'
Помните, что файл анализируется при запуске сервера tmux. Чтобы повлиять на уже работающий сервер, вам нужно передать команду tmux (например, tmux bind-key s …
в оболочке внутри tmux) или перезагрузить измененный файл ( prefix:source-file ~/.tmux.conf
Enter).
Пример результата
(1) + foo: 2 windows (attached)
(2) + bar: 1 windows
И после расширения:
(1) - foo: 2 windows (attached)
(2) ├─> - 0: [tmux]*Z
(3) │ ├─> 0: man
(4) │ ├─> 1: bash*
(5) │ └─> 2: bash
(6) └─> - 1: bash-
(7) ├─> 0: bash
(8) ├─> 2: bash
(9) ├─> 3: bash
(M-a) ├─> 4: bash
(M-b) ├─> 5: bash
(M-c) └─> 1: bash*
(M-d) - bar: 1 windows
(M-e) └─> 0: bash*
решение4
Как уже было сказано, изначально эта функция не поддерживается.
Самое простое решение — автоматическое создание dummy
сеанса.
Просто добавьте в свой .tmux.conf
файл следующую строку:
# Start a dummy session to make real sessions start from 1
new-session -d -s dummy
Затем, когда вы запустите tmux, он создаст сессию с именем "dummy" в фоновом режиме. Ваша первая вручную созданная сессия будет иметь номер 1.
Вы можете изменить имя dummy
на любое другое.