tmux セッションを 0 ではなく 1 からカウントするにはどうすればよいですか?

tmux セッションを 0 ではなく 1 からカウントするにはどうすればよいですか?

次のような設定があります:

# 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)。括弧内の数字は何もないセッションIDやセッション名と関係があります。これらは単なる「行番号」です現時点でリストにあるたとえば、リストは次のようになります。

(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-tree1 からの方がずっと意味が通ります。

-K次のように指定することで独自のキーを定義することができます。choose-treeたとえば、貧乏人の 1 つずつのシフトは次のように実装されます。

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

これにより、次のようになります。

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

しかし、これでは最大 9 行にしかキーを添付できません。展開後の例は次のようになります。

(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}それぞれを; に置き換えることで、単純に 1 つずつシフトすることができます#{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他の名前に変更できます。

関連情報