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?
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 tmux
a 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 0
e 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-index
não resolveria seu problema.Um pedido para contarlinhas emchoose-tree
de 1 faria muito mais sentido.
Você pode definir suas próprias chaves especificando -K
parachoose-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-b
etc.
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.conf
Enter).
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 dummy
uma sessão automaticamente.
Basta adicionar ao seu .tmux.conf
arquivo 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 dummy
qualquer outro.