Wie kann man Tmux-Sitzungen ab 1 statt ab 0 zählen lassen?

Wie kann man Tmux-Sitzungen ab 1 statt ab 0 zählen lassen?

Ich habe diese Einstellung:

# 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

Das Gleiche hätte ich aber auch gerne für den Wechsel zwischen Tmux-Sitzungen. Wenn ich die Tmux-Sitzungsliste öffne, beginnt sie immer noch bei 0. Ist es möglich, die Sitzungszählung nicht bei 0, sondern bei 1 zu starten?

tmux-Sitzungsliste

Antwort1

Das ist nicht möglich und wird auch in Zukunft nicht möglich sein. Es gibtabgelehnte Funktionsanforderungdenn session-base-index, Entwickler glauben, dass "Es ist einfach keine hilfreiche Funktion."

Antwort2

Sie scheinen sich auf dieSitzungsgruppenindex, das generiert wird und nicht dazu verwendet wird, anzugeben, tmuxan welcher Sitzung Sie eine Verbindung herstellen möchten.

Es wird verwendet in derVorlage fürlist-sessions:

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

und generiert insession.c(und beginnt immer bei Null):

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

Dieser Wert wird jedoch nur in der formatierten Ausgabe verwendet.

Antwort3

tl;dr

Fahren Sie mit dem Abschnitt „Lösung“ fort.


Analyse

Es gibt einen großenMissverständnisHier.

Ihr Screenshot wurde wahrscheinlich nach erstellt prefixs, wodurch standardmäßig der folgende tmux-Befehl ausgeführt wird:

choose-tree -Zs

(in einer Shell können Sie es mit ausführen tmux choose-tree -Zs). Die Zahlen in Klammern habenNichtsmit Sitzungs-IDs oder Sitzungsnamen zu tun. Es sind nur „Zeilennummern“in der Liste im MomentDie Liste könnte beispielsweise folgendermaßen aussehen:

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

Aber nach dem Erweitern aller Elemente kann es folgendermaßen aussehen:

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

Diese „Zeilennummern“ sind also keine geraden Zahlen, sondern Schlüssel, die Sie verwenden können. Beachten Sie, dass in der obigen Liste nur 0und M-c( Alt+ c) Sitzungen entsprechen.Die Art und Weise, wie tmux Sitzungen zählt, hat nichts mit diesen Schlüsseln zu tun.angefordert (und abgelehnt)session-base-indexwürde Ihr Problem nicht lösen.Eine Aufforderung zum ZählenLinien inchoose-treeab 1 würde viel mehr Sinn machen.

Sie können Ihre eigenen Schlüssel definieren, indem Sie -Kangebenchoose-treeBeispielsweise wird die Umstellung auf einen armen Mann folgendermaßen umgesetzt:

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

Das Ergebnis ist:

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

Allerdings können dadurch nur bis zu neun Zeilen mit Schlüsseln versehen werden. Mein Beispiel sieht nach der Erweiterung so aus:

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

Wo keine usw. vorhanden sind M-a.M-b

ImCodeIch habe Folgendes gefunden:

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

Daraus schließe ich, dass der Standardwert für choose-tree -Kist:

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

Sie können direkt um eins verschieben, indem Sie jedes #{line}durch ersetzen #{e|+:1,#{line}}; oder Sie können die Anzahl der Berechnungen verringern, indem Sie die fest codierten Konstanten gegebenenfalls ändern:

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

Lösung

Der tmux-Befehl lautet:

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

Sie können es in einer Shell innerhalb von tmux testen, indem Sie aufrufen tmux choose-tree …. Wenn das Ergebnis Ihren Wünschen entspricht, binden Sie den Befehl an , prefixsindem Sie die folgende Zeile zu Ihrem hinzufügen .tmux.conf:

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

Beachten Sie, dass die Datei beim Start eines tmux-Servers analysiert wird. Um Ihren bereits laufenden Server zu beeinflussen, müssen Sie den Befehl an tmux weitergeben (z. B. tmux bind-key s …in einer Shell innerhalb von tmux) oder die geänderte Datei neu laden ( prefix:source-file ~/.tmux.confEnter).


Beispielergebnis

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

Und nach dem Erweitern:

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

Antwort4

Wie bereits gesagt, wird dies nicht nativ unterstützt.

Die einfachste Lösung ist das automatische Erstellen dummyeiner Sitzung.

.tmux.confFügen Sie Ihrer Datei einfach diese Zeile hinzu :

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

Wenn Sie tmux dann starten, wird im Hintergrund eine Sitzung mit dem Namen „dummy“ erstellt. Ihre erste manuell erstellte Sitzung erhält dann die Nummer 1.

dummySie können den Namen in einen beliebigen anderen Namen ändern .

verwandte Informationen