¿Cómo hacer que las sesiones de tmux cuenten desde 1 en lugar de 0?

¿Cómo hacer que las sesiones de tmux cuenten desde 1 en lugar de 0?

Tengo esta configuración:

# 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

Pero también me gustaría tener lo mismo para cambiar de sesión de tmux. Cuando abro la lista de sesiones de tmux, todavía comienza en 0. ¿Es posible no iniciar la sesión contando desde 0 sino desde 1?

lista de sesiones tmux

Respuesta1

No es posible y no será posible en el futuro. Haysolicitud de función rechazadaporque session-base-index, los desarrolladores creen que "Simplemente no es una característica útil.".

Respuesta2

Parece que te refieres aíndice de grupo de sesión, que se genera y no se utiliza para indicar tmuxa qué sesión le gustaría conectarse.

Se utiliza en elplantilla paralist-sessions:

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

y generado ensession.c(y siempre comienza en cero):

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

pero ese valor se utiliza sólo en la salida formateada.

Respuesta3

tl; dr

Vaya a la sección "Solución".


Análisis

hay uno grandemalentendidoaquí.

Su captura de pantalla probablemente se tomó después de prefixs, que de forma predeterminada ejecuta el siguiente comando tmux:

choose-tree -Zs

(en un shell puedes ejecutarlo tmux choose-tree -Zs). Los números entre paréntesis tienennadaque ver con ID de sesión o nombres de sesión. Son sólo "números de línea"en la lista en este momento. Por ejemplo, la lista puede verse así:

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

pero después de expandir todos los elementos puede verse así:

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

Entonces estos "números de línea" no son números pares, son claves que puedes usar. Nota en la lista anterior únicamente 0y M-c( Alt+ c) corresponden a sesiones.La forma en que tmux cuenta las sesiones no tiene nada que ver con estas claves, por lo que elsolicitado (y rechazado)session-base-indexno resolvería tu problema.Una petición para contarlíneas enchoose-treedesde 1 tendría mucho más sentido.

Puede definir sus propias claves -Kespecificandochoose-tree. Por ejemplo, el turno de uno para un hombre pobre se implementa mediante:

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

que te da esto:

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

Pero esto sólo adjuntará claves a hasta nueve líneas. Mi ejemplo después de la expansión se ve así:

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

Donde no los hay M-a, M-betc.

En elcódigoHe encontrado esto:

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

Entonces concluyo que el valor predeterminado choose-tree -Kes:

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

Puede cambiar directamente de uno reemplazando cada uno #{line}con #{e|+:1,#{line}}; o puede reducir la cantidad de cálculos cambiando las constantes codificadas cuando corresponda:

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

Solución

El comando tmux será:

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

Puedes probarlo en un shell dentro de tmux invocando tmux choose-tree …. Si el resultado es el que desea, vincule el comando prefixsagregando la siguiente línea a su .tmux.conf:

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

Tenga en cuenta que el archivo se analiza cuando se inicia un servidor tmux. Para afectar su servidor que ya está en ejecución, debe pasar el comando a tmux (por ejemplo, tmux bind-key s …en un shell dentro de tmux) o volver a cargar el archivo modificado ( prefix:source-file ~/.tmux.confEnter).


Resultado de ejemplo

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

Y después de ampliar:

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

Respuesta4

Como se dijo antes, esto no es compatible de forma nativa.

La solución más sencilla es crear dummyuna sesión automáticamente.

Simplemente agregue a su .tmux.confarchivo esta línea:

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

Luego, cuando inicie tmux, creará una sesión llamada "ficticia" en segundo plano. Su primera sesión creada manualmente tendrá el número 1.

Puedes cambiar el nombre por dummycualquier otro.

información relacionada