서버에서 zkbd(zsh 키 바인딩)를 설정하는 방법은 무엇입니까?

서버에서 zkbd(zsh 키 바인딩)를 설정하는 방법은 무엇입니까?

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
...

이제 두 가지 질문이 있습니다.

  1. 일반적으로 서버에 연결하면 $DISPLAY 환경 변수의 일련 번호가 새로운 값을 얻습니다. 그래서 zkbd가 실행되기 시작하고 모든 컨트롤 키를 눌러야 합니다. 키 시퀀스는 반드시 $DISPLAY에 의존합니까?
  2. 스크린 세션에서 서버에 연결하면 $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.

추가 자료:

관련 정보