Linux 서버에 zsh 쉘이 있고 다른 시스템의 스크린 세션에서 서버에 연결합니다. 컨트롤 키(예: home 및 end)가 제대로 작동하도록 하려고 합니다.
zsh는 GNU Readline 라이브러리를 사용하지 않기 때문에 터미널 시퀀스를 zsh 명령에 매핑하는 일을 담당합니다. 먼저 zkbd를 사용하여 각 키 입력이 전송된 순서를 알아낸 다음 이를 올바른 명령에 매핑했습니다. 이것이 .zshrc에 있는 것입니다:
autoload zkbd
[ ! -f "${ZDOTDIR:-$HOME}/.zkbd/$TERM-${DISPLAY:-$VENDOR-$OSTYPE}" ] && zkbd
source "${ZDOTDIR:-$HOME}/.zkbd/$TERM-${DISPLAY:-$VENDOR-$OSTYPE}"
[ -n "${key[Backspace]}" ] && bindkey "${key[Backspace]}" backward-delete-char
[ -n "${key[Home]}" ] && bindkey "${key[Home]}" beginning-of-line
...
이제 두 가지 질문이 있습니다.
- 일반적으로 서버에 연결하면 $DISPLAY 환경 변수의 일련 번호가 새로운 값을 얻습니다. 그래서 zkbd가 실행되기 시작하고 모든 컨트롤 키를 눌러야 합니다. 키 시퀀스는 반드시 $DISPLAY에 의존합니까?
- 스크린 세션에서 서버에 연결하면 $TERM 환경 변수가 로 설정됩니다
screen
. 그러나 연결하는 시스템에 따라 일부 키의 순서가 다릅니다(예: F1 또는 F1^[[11~
)^[OP
. 서로 다른 매핑을 구별하려면 zkbd 파일 이름을 어떻게 지정해야 합니까?
답변1
TERM=screen
스크린 프로그램에는 단순히 사용하는 것이 아닌 설정을 통해 사용할 수 있는 기능이 있습니다.다른값 TERM
. 이는 전체 ncurses 터미널 데이터베이스를 설치하고 다음을 사용했다고 가정합니다.TERM
외부실제 단말기에 대응되는 화면입니다.
주어진 에 대해 TERM
터미널 데이터베이스에 해당 "screen.$TERM" 항목이 있으면 screen은 다음을 사용합니다.저것. ncurses 터미널 데이터베이스에는 터미널 세트의 실제 동작과 일치하는 여러 가지가 있습니다 TERM=xterm
.
화면.Eterm,
스크린 그놈,
스크린 콘솔,
screen.konsole-256color,
screen.linux,
필터.mlterm,
screen.mlterm-256color,
스크린.mrxvt,
스크린 퍼티,
screen.putty-256color,
스크린.rxvt,
screen.teraterm,
screen.vte,
screen.vte-256color,
screen.xterm-256color,
screen.xterm-new,
screen.xterm-r6,
screen.xterm-xfree86.
터미널 데이터베이스를 사용하도록 설정한 후에는 특수/마법 구성 파일이 필요하지 않습니다. 또한 어떤 파일을 사용할지 서버에 어떻게 알릴 수 있나요? 실제 정보는 고객에 관한 것입니다.알다실제로 어떤 터미널 에뮬레이터를 사용하고 있습니까?
zsh
이 정보를 어레이에서 직접 사용할 수 있습니다 $terminfo
.
추가 자료:
- 왜 "xterm"으로 설정된 TERM을 사용하지 않습니까?
- 키바인딩(토론 참조
$terminfo[]
)