Como fazer as sessões do tmux contarem de 1 em vez de 0?

Como fazer as sessões do tmux contarem de 1 em vez de 0?

Eu tenho esta configuração:

# 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

Mas eu também gostaria de ter o mesmo para alternar sessões do tmux. Quando abro a lista de sessões do tmux, ela ainda começa em 0. É possível não iniciar a contagem de sessões a partir de 0, mas sim de 1?

lista de sessões tmux

Responder1

Não é possível e não será possível no futuro. Hásolicitação de recurso recusadapara session-base-index, os desenvolvedores acreditam que "Simplesmente não é um recurso útil."

Responder2

Você parece estar se referindo aoíndice do grupo de sessão, que é gerado e não usado para informar tmuxa qual sessão você gostaria de anexar.

É usado nomodelo paralist-sessions:

"#{?session_grouped, (group ,}" \

e gerado emsession.c(e sempre começa em zero):

/* 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");
}

mas esse valor é usado apenas na saída formatada.

Responder3

dr.

Vá para a seção "Solução".


Análise

Há um grandemal-entendidoaqui.

Sua captura de tela provavelmente foi tirada depois do prefixs, que por padrão executa o seguinte comando tmux:

choose-tree -Zs

(em um shell você pode executá-lo tmux choose-tree -Zs). Os números entre parênteses têmnadaa ver com IDs de sessão ou nomes de sessão. Eles são apenas "números de linha"na lista no momento. Por exemplo, a lista pode ser assim:

(0) + foo: 2 windows (attached)
(1) + bar: 1 windows

mas depois de expandir todos os itens pode ficar assim:

(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*

Portanto, esses "números de linha" não são números pares, são chaves que você pode usar. Observe apenas na lista acima 0e M-c( Alt+ c) correspondem a sessões.A maneira como o tmux conta as sessões não tem nada a ver com essas chaves, então osolicitado (e recusado)session-base-indexnão resolveria seu problema.Um pedido para contarlinhas emchoose-treede 1 faria muito mais sentido.

Você pode definir suas próprias chaves especificando -Kparachoose-tree. Por exemplo, o turno por um de um homem pobre é implementado por:

choose-tree -ZsK '#{e|+:1,#{line}}'

o que lhe dá isso:

(1) + foo: 2 windows (attached)
(2) + bar: 1 windows

Mas isso anexará chaves apenas a nove linhas. Meu exemplo após a expansão fica assim:

(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*

Onde não há M-a, M-betc.

NocódigoEu encontrei isso:

#define WINDOW_TREE_DEFAULT_KEY_FORMAT \
  "#{?#{e|<:#{line},10}," \
      "#{line}" \
  "," \
      "#{?#{e|<:#{line},36}," \
              "M-#{a:#{e|+:97,#{e|-:#{line},10}}}" \
      "," \
              "" \
      "}" \
  "}"

Então concluo que o valor padrão para choose-tree -Ké:

#{?#{e|<:#{line},10},#{line},#{?#{e|<:#{line},36},M-#{a:#{e|+:97,#{e|-:#{line},10}}},}}

Você pode mudar diretamente um, substituindo cada um #{line}por #{e|+:1,#{line}}; ou você pode reduzir o número de cálculos alterando as constantes codificadas quando apropriado:

#{?#{e|<:#{line},9},#{e|+:1,#{line}},#{?#{e|<:#{line},35},M-#{a:#{e|+:97,#{e|-:#{line},9}}},}}

Solução

O comando tmux será:

choose-tree -ZsK '#{?#{e|<:#{line},9},#{e|+:1,#{line}},#{?#{e|<:#{line},35},M-#{a:#{e|+:97,#{e|-:#{line},9}}},}}'

Você pode testá-lo em um shell dentro do tmux invocando tmux choose-tree …. Se o resultado for o que você deseja, vincule o comando prefixsadicionando a seguinte linha ao seu .tmux.conf:

bind-key s choose-tree -ZsK '#{?#{e|<:#{line},9},#{e|+:1,#{line}},#{?#{e|<:#{line},35},M-#{a:#{e|+:97,#{e|-:#{line},9}}},}}'

Lembre-se de que o arquivo é analisado quando um servidor tmux é iniciado. Para afetar seu servidor já em execução você precisa passar o comando para o tmux (por exemplo, tmux bind-key s …em um shell dentro do tmux) ou recarregar o arquivo alterado ( prefix:source-file ~/.tmux.confEnter).


Resultado de exemplo

(1) + foo: 2 windows (attached)
(2) + bar: 1 windows

E depois de expandir:

(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*

Responder4

Como dito antes, isso não tem suporte nativo.

A solução mais fácil é criar dummyuma sessão automaticamente.

Basta adicionar ao seu .tmux.confarquivo esta linha:

# Start a dummy session to make real sessions start from 1
new-session -d -s dummy

Então, quando você iniciar o tmux, ele criará uma sessão chamada “dummy” em segundo plano. Sua primeira sessão criada manualmente será numerada 1.

Você pode alterar o nome de dummyqualquer outro.

informação relacionada