tmux 는 창별 제목을 지원하지만 이러한 제목을 표시 할 창별 위치를 제공하지 않습니다.
ESC ]2;
… ESC 이스케이프 시퀀스를 사용하여 분할 창의 제목을 설정할 수 있습니다 \
(예 : tmux 맨 페이지 의 이름 및 제목 섹션 참조 ). 다음과 같이 쉘에서이를 수행 할 수 있습니다.
printf '\033]2;%s\033\\' 'title goes here'
각 창의 제목은 기본적으로 시스템의 호스트 이름입니다. 기본적으로 활성 창 제목이 오른쪽에 표시됩니다 TMUX의 상태 표시 줄 (세션 변수의 기본 전역 값 status-right
이다 "#22T" %H:%M %d-%b-%y
,하는 쇼 창의 제목, 시간 및 날짜의 22 자).
따라서 활성 창의 제목을 볼 수있는 경우 (즉, 비활성 창의 제목을보기 위해 창을 전환하려는 경우) 기본 기능을 사용할 수 있습니다. 각 창에 대한 기본 명령을 시작하기 전에 적절한 제목 설정 이스케이프 시퀀스를 보내십시오.
일부 창별 정보를 표시하기 위해 전용 회선이 반드시 필요한 경우 중첩 된 tmux 세션은 처음 생각하는 것만 큼 많은 (불필요한) "과잉"이 아닐 수 있습니다.
일반적으로 특정 터미널에 위반 상태 라인을 제공하려면 원래 터미널과 새 터미널 (하나 더 적은 라인이있는 터미널) 사이에있는 전체 터미널 (재) 에뮬레이터가 필요합니다. 이러한 (재) 에뮬레이션은 내부 터미널로 전송 된 제어 시퀀스를 변환하고 원래 터미널로 변환하는 데 필요합니다. 예를 들어 외부 터미널 맨 아래에 상태 표시 줄을 유지하려면 다음 명령을 사용하십시오.
마지막 줄로 이동합니다.
내부 터미널로 보내야합니다.
다음 줄로 이동합니다.
번역되어 외부 터미널로 전송 될 때. 마찬가지로 내부 터미널로 전송되는 LF는
커서가 마지막 줄 옆에있는 경우이 줄과 그 위의 모든 줄을 한 줄 위로 스크롤하여 마지막 줄에서 명확한 줄을 제공합니다 (마지막 줄의 상태 줄 보호). 그렇지 않으면 LF를 보냅니다.
외부 터미널에서.
tmux 및 screen 과 같은 프로그램 은 이러한 터미널 재 에뮬레이터입니다. 물론 터미널 에뮬레이터를 둘러싼 많은 다른 기능이 있지만 안정적인 상태 표시 줄 을 제공하려면 터미널 에뮬레이션 코드의 큰 덩어리가 필요합니다 .
그러나 한 가벼운 솔루션이 있습니다.
- 프로그램 ( Node.js 인스턴스)이 실행중인 창과 제한된 터미널 상호 작용 (예 : 커서 위치 없음)이 있고
- 프로그램이 실행되는 동안 창 크기를 조정하지 않습니다.
많은 터미널 에뮬레이터와 마찬가지로 tmux 는 창에서 "스크롤링 영역 설정"터미널 제어 명령을 지원합니다. 이 명령을 사용하여 스크롤 영역을 터미널의 위쪽 (또는 아래쪽) N-1 줄로 제한하고 일종의 인스턴스 식별 텍스트를 스크롤하지 않는 줄에 쓸 수 있습니다.
출력을 생성하는 프로그램 (예 : Node.js 인스턴스)이 스크롤링이 특정 영역으로 제한되었음을 알지 못 하기 때문에 제한 (커서 이동 명령 허용, 크기 조정 없음)이 필요합니다 . 출력 생성 프로그램이 커서를 스크롤 영역 밖으로 이동하면 출력이 깨질 수 있습니다. 마찬가지로, 터미널 에뮬레이터는 터미널의 크기가 조정될 때 스크롤 영역을 자동으로 재설정 할 것입니다 (따라서 "비 스크롤 라인"은 아마도 스크롤링을 끝낼 것입니다).
tput
적절한 제어 시퀀스를 생성하고 스크롤하지 않는 줄에 쓰고 커서를 스크롤 영역으로 이동 한 후 프로그램을 실행하는 데 사용하는 스크립트를 작성했습니다 .
#!/bin/sh
# usage: no_scroll_line top|bottom 'non-scrolling line content' command to run with args
#
# Set up a non-scrolling line at the top (or the bottom) of the
# terminal, write the given text into it, then (in the scrolling
# region) run the given command with its arguments. When the
# command has finished, pause with a prompt and reset the
# scrolling region.
get_size() {
set -- $(stty size)
LINES=$1
COLUMNS=$2
}
set_nonscrolling_line() {
get_size
case "$1" in
t|to|top)
non_scroll_line=0
first_scrolling_line=1
scroll_region="1 $(($LINES - 1))"
;;
b|bo|bot|bott|botto|bottom)
first_scrolling_line=0
scroll_region="0 $(($LINES - 2))"
non_scroll_line="$(($LINES - 1))"
;;
*)
echo 'error: first argument must be "top" or "bottom"'
exit 1
;;
esac
clear
tput csr $scroll_region
tput cup "$non_scroll_line" 0
printf %s "$2"
tput cup "$first_scrolling_line" 0
}
reset_scrolling() {
get_size
clear
tput csr 0 $(($LINES - 1))
}
# Set up the scrolling region and write into the non-scrolling line
set_nonscrolling_line "$1" "$2"
shift 2
# Run something that writes into the scolling region
"$@"
ec=$?
# Reset the scrolling region
printf %s 'Press ENTER to reset scrolling (will clear screen)'
read a_line
reset_scrolling
exit "$ec"
다음과 같이 사용할 수 있습니다.
tmux split-window '/path/to/no_scroll_line bottom "Node instance foo" node foo.js'
tmux split-window '/path/to/no_scroll_line bottom "Node instance bar" node bar.js'
tmux split-window '/path/to/no_scroll_line bottom "Node instance quux" node quux.js'
터미널이 해당 및 terminfo 기능을 지원하고 게시 하는 한 스크립트는 tmux 외부에서도 작동해야 합니다.csr
cup