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

tl;dr

"해결책" 섹션으로 건너뛰세요.


분석

큰 게 하나 있어요오해여기.

스크린샷은 아마도 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-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}}. 또는 적절한 경우 하드코딩된 상수를 변경하여 계산 수를 줄일 수 있습니다.

#{?#{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다른 이름으로 변경할 수 있습니다.

관련 정보