tmux의 "선택 모드"에서 키를 사용자 정의하는 방법이 있습니까?

tmux의 "선택 모드"에서 키를 사용자 정의하는 방법이 있습니까?

~에서티먹스 매뉴얼

      -   Choose mode, which allows an item to be chosen from a
          list.  This may be a client, a session or window or pane,
          or a buffer.  This mode is entered with the
          choose-buffer, choose-client and choose-tree commands.

choose-tree명령을 살펴보면 다음과 같습니다 .

The following keys may be used in tree mode:

                   Key    Function
                   Enter  Choose selected item
                   Up     Select previous item
                   Down   Select next item
                   +      Expand selected item
                   -      Collapse selected item
                   M-+    Expand all items
                   M--    Collapse all items
                   x      Kill selected item
                   X      Kill tagged items
                   <      Scroll list of previews left
                   >      Scroll list of previews right
                   C-s    Search by name
                   m      Set the marked pane
                   M      Clear the marked pane
                   n      Repeat last search
                   t      Toggle if item is tagged
                   T      Tag no items
                   C-t    Tag all items
                   :      Run a command for each tagged item
                   f      Enter a format to filter items
                   H      Jump to the starting pane
                   O      Change sort field
                   r      Reverse sort order
                   v      Toggle preview
                   q      Exit mode

특히 지금 처럼 C-c에 바인딩하고 싶습니다 .Exit modeq

복사 모드, 복사 모드-vi 및 루트와 달리 이 소위 "선택 모드"에는 키탭이 없습니다. 그렇다면 이것이 가능합니까?

답변1

특히 지금 처럼 C-c에 바인딩하고 싶습니다 .Exit modeq

특정 스키마( copy-mode* 제외) 에서는 root키 테이블과 스키마별 키(질문에서 인용한 것과 같은)가 관련되어 있는 것으로 보이지만 root키 테이블이 먼저 적용됩니다.

즉 , root키 테이블을 스키마에 있을 때로 변환 C-c하면 스키마는 + qCtrl반응 c한 것처럼 반응합니다 q.

C-c조건부 로 변환할 수 있습니다 q. 이것은 다음과 같습니다 ~/.tmux.conf.

bind-key -T root C-c if-shell -F '#{==:#{pane_mode},tree-mode}' 'send-keys q' 'send-keys C-c'

이 파일은 tmux 서버가 시작될 때 구문 분석된다는 점을 기억하세요. 이미 실행 중인 서버에 영향을 미치려면 명령을 tmux에 전달하거나(예: tmux bind-key …tmux 내의 셸에서) 변경된 파일( prefix:source-file ~/.tmux.confEnter)을 다시 로드해야 합니다.

Ctrl+ c, 바인딩은 현재 창이 tree-mode( -F '#{==:#{pane_mode},tree-mode}')에 있는지 여부를 감지합니다. 그렇다면 q( )를 보내고, 그렇지 않으면 해당 모드에 있지 않을 때 +의 기능을 잃고 싶지 않기 때문에 ( )를 send-keys q보냅니다 .C-csend-keys C-cCtrlc

다른 패턴의 공식 이름을 알기 위해 다음과 같이 할 수 있습니다:

  1. 창의 셸에서 echo "$TMUX_PANE"출력이 이라고 가정해 보겠습니다 %0.
  2. 창을 원하는 모드로 설정합니다.
  3. 셸의 다른 창에서는 1단계의 출력이 tmux display-message -t %0 -p '#{pane_mode}'어디에 있는지 호출합니다.%0

나는 view-mode, tree-mode, client-mode, buffer-mode및 ( 귀하의 질문의 맥락에서 두드러집니다. 각주* 참조)를 확인했습니다 options-mode. 다른 사람들도 있을 수 있습니다.clock-modecopy-mode

여러 패턴을 감지하려면 몇 가지 논리가 필요합니다. 예:

bind-key -T root C-c if-shell -F '#{m/r:(tree|client|buffer)-mode,#{pane_mode}}' 'send-keys q' 'send-keys C-c'

C-c모든 모드* 로 변환하려면 q다음 줄을 사용하면 됩니다.

bind-key -T root C-c if-shell -F '#{pane_in_mode}' 'send-keys q' 'send-keys C-c'

copy-mode* 키 테이블 root( ) 에는 중요하지 않은 것 같습니다 -T root. 아시다시피 copy-mode복제 모드에서는 별도의 테이블(또는)이 사용됩니다.copy-mode-vi

관련 정보