중첩된 tmux 세션에서 iTerm2로 이스케이프 시퀀스를 보내는 방법은 무엇입니까?

중첩된 tmux 세션에서 iTerm2로 이스케이프 시퀀스를 보내는 방법은 무엇입니까?

이는 iTerm에서만 작동합니다(날짜와 시간을 클립보드에 넣음).

printf "\e]1337;Copy=:$(date | base64)\a"; echo $(pbpaste)

이는 로컬로 실행되는 tmux에서 작동합니다(DCS 패스스루 사용).

printf "\ePtmux;\e\e]1337;Copy=:$(date | base64)\a\e\\"; echo $(pbpaste)

이는 원격으로 실행되는 tmux에서 작동합니다.

printf "\ePtmux;\e\e]1337;Copy=:$(date | base64)\a\e\\"; echo $(ssh -p 2222 -qt localhost pbpaste)

내 유일한 문제는 로컬 tmux에서 원격으로 tmux를 실행하는 것입니다.

printf "\ePtmux;\e\ePtmux;\e\e]1337;Copy=:$(date | base64)\a\e\\\e\\"; echo $(ssh -p 2222 -qt localhost pbpaste)

문제는 내부가 \e\\외부로 해석된다는 점이라고 생각합니다 \e\\.

\e\\외부 tmux가 올바르게되도록 내부를 탈출하는 방법이 있습니까 ?

답변1

종료 \e\\의 \e를 포함하여 모든 tmux의 모든 \e를 두 배로 늘려야 합니다.

printf "\ePtmux;\e\ePtmux;\e\e]1337;Copy=:$(date | base64)\a\e\e\\\e\\"

또는 OSC 52를 사용하도록 tmux를 구성한 다음 iTerm2에서 열면("터미널의 응용 프로그램이 클립보드에 액세스할 수 있습니다"를 빠르게 검색하여) 호스트 클립보드에 전달되는 모든 tmux(버퍼)에 붙여넣기를 생성합니다. . tmux의 경우 다음과 같은 것이 필요합니다.

set -as terminal-overrides ',tmux*:Ms=\\E]52;%p1%s;%p2%s\\007'
set -as terminal-overrides ',screen*:Ms=\\E]52;%p1%s;%p2%s\\007'
set -s set-clipboard on

그런 다음 가장 안쪽의 tmux에서 이 작업을 수행할 수 있습니다.

printf "\033]52;$(date)\007"

물론 이는 tmux에서 복사한 모든 내용이 아마도 원하지 않는 호스트 클립보드로 이동한다는 의미입니다.

관련 정보