Как сделать так, чтобы сеансы tmux считались с 1 вместо 0?

Как сделать так, чтобы сеансы tmux считались с 1 вместо 0?

У меня такая настройка:

# 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?

список сеансов tmux

решение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.confEnter).


Пример результата

(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на любое другое.

Связанный контент