答え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-tree
1 からの方がずっと意味が通ります。
-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.conf
Enter)。
結果例
(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
他の名前に変更できます。