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-c( Alt+ )만 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-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}각 비트를 ;로 바꾸면 #{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다른 이름으로 변경할 수 있습니다.

관련 정보