문제 설명
터미널에서 자주 실행하는 명령을 키 조합에 묶고 싶습니다. 이 bind
명령은 처음에는 작동하는 것 같았습니다.
그러나 키 조합을 사용하면 터미널에 입력한 문자가 보이지 않게 되고 Enter를 눌러도 새 줄이 생성되지 않습니다. 내 생각에는 호출기가 적다는 것과 관련이 있을 수 있다는 것입니다.
stty --all
문제가 시작되기 전과 후에 실행하면 터미널 회선 설정의 차이점이 드러납니다.
echo
->-echo
(echo input characters
)가 이제 닫혀서 내가 입력하는 모든 내용이 보이지 않습니다.icrnl
->-icrnl
(translate carriage return to newline
)icanon
->-icanon
(enable special characters: erase, kill, werase, rprnt
)lnext = ^V
->lnext = <undef>
(CHAR will enter the next character quoted
) 더 이상 Ctrl+V를 누른 다음 Esc를 눌러 이스케이프 문자를 입력할 수 없습니다.flush = ^O
->flush = <undef>
(https://man.openbsd.org/stty.1#flush)
왜 이런 일이 발생합니까? 보이지 않는 문제 없이 사용자 정의 터미널 키 조합을 사용할 수 있습니까?
재생산 방법
lxterminal
, kitty
및 를 포함한 여러 터미널에서 테스트했습니다.alpine
.
- +와 같은 키 조합을
bind -x '"\ea":"ls"'
명령에 바인딩합니다.Altals
- 파일 보기
less
- Ctrl호출기를 종료하려면 +를 사용하세요.c
- Alt+를 누릅니다 a. 그러면
ls
명령이 실행됩니다. less
파일을 다시 보기- Ctrl호출기를 종료하려면 +를 사용하세요.c
- Alt+를 누릅니다 a.
ls
명령을 다시 실행 해야 합니다 . 그 이후에 입력한 문자는 보이지 않습니다.
Alt+로 종료한 후 두 번째로 +를 누를 때만 이 문제가 발생하는지, 왜 그런 일이 발생하는지 모르겠습니다 .aless
Ctrlc