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(そして常に0から始まります):

/* 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-cAlt+)のみがセッションcに対応しています。tmuxがセッションを評価する方法はこれらのキーとは無関係です。リクエスト(および拒否)session-base-indexそれはあなたの問題を解決しないでしょう。リクエスト回数移動中choose-tree1から始める方が合理的です。

-K以下を指定して独自のキーを定義できます。choose-tree。たとえば、貧しい人々の交代勤務は次のように達成されます。

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-aM-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}各ビットを ; に変更すると、#{e|+:1,#{line}}1 ビットずつ直接移動できます。あるいは、適切な場合は、ハードコーディングされた定数を変更して計算数を減らすこともできます。

#{?#{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別の名前に変更できます。

関連情報