쉘에서 유일한 화살표로 인식되는 Ctrl + 화살표

쉘에서 유일한 화살표로 인식되는 Ctrl + 화살표

새로 설치된아키텍처Linux, 내 쉘( bash, zsh, )은 화살표 키와 + 또는 + 를 tcsh구별하지 않습니다 .Ctrlarrow keysShiftarrow keys

catCtrl이 명령은 왼쪽 화살표, + Left arrow또는 Shift+에 대해 동일한 코드를 표시합니다 Left arrow.^[[D

이는 셸에서 문자별 변위 및 텍스트 선택을 구성할 수 없기 때문에 짜증나는 일이지만, 여전히 문자별로 탐색할 수 있으므로 중요한 문제는 아닙니다.

그러나 nano에서는 CtrlShift+가 arrow단어별 이동 및 텍스트 선택에 문제 없이 잘 작동합니다.

정확하게 말씀드리자면, 이번이 처음으로 Arch-Linux를 설치하는 것이므로 이 문제를 일으킨 기본 구성을 잊어버렸을 수도 있습니다.

쉘에서 Ctrl/ Shift+를 어떻게 감지합니까 ?Arrow

--필수 정보를 추가하려면 편집하세요--

zle-line-init() echoti smkx문제를 해결하지 못하고,

echoti smkx; STTY='-icanon -echo min 0 time 20' od -vtc -tx1다음을 출력합니다.

no such terminfo capability: smkx
00000000 033    [    D
          1b   5b   44
00000003

leftctrl+ 의 경우 left,

그리고 echoti rmkx; STTY='-icanon -echo min 0 time 20' od -vtc -tx1:

no such terminfo capability: rmkx
00000000 033    [    D
          1b   5b   44
00000003

leftctrl+에 대한left

나는 Arch-linux의 기본 터미널을 사용합니다. 올바르게 이해했다면 linux라고 합니다( echo $TERM출력에서는 실제 터미널을 마스킹할 linux필요가 없습니다 )./etc/inittabl

답변1

질문대로포즈를 공격, 이는 ncurses FAQ와 관련이 있을 수 있습니다.커서 키가 작동하지 않습니다.

nano는 터미널을 다음과 같이 초기화합니다.신청방법, 쉘은 그렇지 않지만, 쉘은 그렇지 않습니다.일반 모드.

터미널(에뮬레이터)을 인식하지 못하지만 "일반" 모드에서 SS3(escape-O) 대신 CSI(escape-[)를 잘못 사용할 수 있습니다.

그러나 후속 댓글에서는 상충되는 정보가 제공되었습니다. 작동하지 않는 것으로 지정된 프로그램(bash, tcsh, zsh)은 관련 정보를 얻기 위해 터미널 데이터베이스를 사용하지 않기 때문에 놀라운 일이 아닙니다.수정자 키. 이들 중 일부는 xterm 매뉴얼(특수 키). 이 중 어느 것도 쉘 매뉴얼에 문서화되어 있지 않습니다. "작업"이 진행되는 한 구성에서 리터럴 문자열에 의존합니다. zsh는 터미널 데이터베이스를 사용하려고 시도하지만 확장 정보를 읽지 않으므로 - 참조원천- 운이 없군요.

GUI에서 기본 "터미널"은 아마도 gnome-terminal... TERM로 설정되어 있을 것입니다 xterm-256color. 이것은 (대부분) 작동하지만 문서가 있는 경우에는 gnome-terminal그 단점이 적절하게 언급되어 있을 것으로 예상할 수 있습니다.

nano는 터미널 설명을 사용하여(함수 호출 호출) tigetstr이 정보를 사용하는 방법을 보여줍니다(참조).원천):

src/nano.c:1233:int get_keycode(const char *keyname, const int standard)
src/nano.c:2389:        controlleft = get_keycode("kLFT5", CONTROL_LEFT);
src/nano.c:2390:        controlright = get_keycode("kRIT5", CONTROL_RIGHT);
src/nano.c:2391:        controlup = get_keycode("kUP5", CONTROL_UP);
src/nano.c:2392:        controldown = get_keycode("kDN5", CONTROL_DOWN);
src/nano.c:2394:        controlhome = get_keycode("kHOM5", CONTROL_HOME);
src/nano.c:2395:        controlend = get_keycode("kEND5", CONTROL_END);
src/nano.c:2397:        controldelete = get_keycode("kDC5", CONTROL_DELETE);
src/nano.c:2398:        controlshiftdelete = get_keycode("kDC6", CONTROL_SHIFT_DELETE);
src/nano.c:2400:        shiftup = get_keycode("kUP", SHIFT_UP);
src/nano.c:2401:        shiftdown = get_keycode("kDN", SHIFT_DOWN);
src/nano.c:2403:        shiftcontrolleft = get_keycode("kLFT6", SHIFT_CONTROL_LEFT);
src/nano.c:2404:        shiftcontrolright = get_keycode("kRIT6", SHIFT_CONTROL_RIGHT);
src/nano.c:2405:        shiftcontrolup = get_keycode("kUP6", SHIFT_CONTROL_UP);
src/nano.c:2406:        shiftcontroldown = get_keycode("kDN6", SHIFT_CONTROL_DOWN);
src/nano.c:2408:        shiftcontrolhome = get_keycode("kHOM6", SHIFT_CONTROL_HOME);
src/nano.c:2409:        shiftcontrolend = get_keycode("kEND6", SHIFT_CONTROL_END);
src/nano.c:2411:        altleft = get_keycode("kLFT3", ALT_LEFT);
src/nano.c:2412:        altright = get_keycode("kRIT3", ALT_RIGHT);
src/nano.c:2413:        altup = get_keycode("kUP3", ALT_UP);
src/nano.c:2414:        altdown = get_keycode("kDN3", ALT_DOWN);
src/nano.c:2416:        altpageup = get_keycode("kPRV3", ALT_PAGEUP);
src/nano.c:2417:        altpagedown = get_keycode("kNXT3", ALT_PAGEDOWN);
src/nano.c:2418:        altinsert = get_keycode("kIC3", ALT_INSERT);
src/nano.c:2419:        altdelete = get_keycode("kDC3", ALT_DELETE);
src/nano.c:2421:        shiftaltleft = get_keycode("kLFT4", SHIFT_ALT_LEFT);
src/nano.c:2422:        shiftaltright = get_keycode("kRIT4", SHIFT_ALT_RIGHT);
src/nano.c:2423:        shiftaltup = get_keycode("kUP4", SHIFT_ALT_UP);
src/nano.c:2424:        shiftaltdown = get_keycode("kDN4", SHIFT_ALT_DOWN);

답변2

저는 Thomas Dickey가 댓글에 제공한 답변을 여기에 씁니다. 내가 하고 싶은 작업( ctrl+ 사용 arrow)은 Linux 커널 터미널에서 불가능합니다.

데스크톱 환경(KDE Plasma)을 설치하고 터미널 에뮬레이터(Konsole)를 열면 수정된 키를 문제 없이 사용할 수 있습니다.

모두의 도움에 감사드립니다.

관련 정보