dtterm의 bash 커서 키가 예상대로 작동하지 않습니다.

dtterm의 bash 커서 키가 예상대로 작동하지 않습니다.

Bash에서 일부 키보드 단축키를 다시 매핑하려고 합니다. 문제는 표시 키 코드를 사용하려고 할 때 Ctrl-V모든 키가 작동하지 않는다는 것입니다. 예를 들어 평소와 마찬가지로 터미널을 입력한 Ctrl-V다음 맨 위로 이동합니다. Home입력 Ctrl-V하면 Ctrl아무것도 표시되지 않습니다. 을 입력 Ctrl-V하고 left arrowshow 를 ^[OD입력 한 Ctrl-V다음 Ctrl-left arrow동일한 내용을 표시합니다.

커서를 줄의 시작이나 끝으로 이동하고 Ctrl-화살표를 사용하여 단어를 이동하기 위해 Home과 End를 다시 매핑하려고 합니다. 저는 Solaris에서 DtTerm을 사용하고 있습니다.

해결책:

.X기본값:

Dtterm*DtTerm*Translations: #override \n\
<KeyPress>osfBeginLine: string("0x1B")string("[1~") \n\
<KeyPress>osfEndLine:   string("0x1B")string("[4~") \n\
Ctrl<KeyPress>osfLeft:  string("0x1B")string("OC") \n\
Ctrl<KeyPress>osfRight: string("0x1B")string("OD")

.inputrc:

"\e[1~": beginning-of-line
"\e[4~": end-of-line
"\eOD": forward-word
"\eOC": backward-word

답변1

나는 몇 년 동안 dtTerm을 사용하지 않았습니다. 키보드 모드와 커서 키 모드를 "응용 프로그램 모드"(터미널->옵션 아래에 있음)로 설정하여 작동하게 할 수 있습니다.

작동하지 않으면 Xresources 경로를 따라야 할 수도 있지만 Home키(예: escape키)가 DtTerm(ala OSF/Motif)에 특별한 의미를 갖고 있어 재생하려면 추가 작업이 필요하다는 생각이 들었습니다. 잘.

분명히 번역에서 #override를 사용하는 것은 "공식적으로 지원"되지 않지만 해킹으로서는 작동합니다.

쉘에서 dtTerm을 실행하여 현재 존재하는 키맵을 찾은 다음 a를 실행하여 ShiftCtrl*dtTerm이 키맵을 덤프하도록 해야 합니다(dtTerm을 실행하는 쉘의 표준 출력에 나타납니다). *X 키 바인딩에 대해 이야기할 때 이는 숫자 패드의 키(KP_Multiply라고도 함)입니다.

나는 dtTerm이 osfBeginLine.

다음으로 당신은실제xev를 들어 home내 설정의 키는keysym 입니다 0xff50.

KeyPress event, serial 30, synthetic NO, window 0x3600001,
    root 0x102, subw 0x0, time 643678606, (78,90), root:(1578,578),
    state 0x0, keycode 110 (keysym 0xff50, Home), same_screen YES,
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

~/.Xdefaults다음으로 다음을 편집하고 추가해야 합니다 .

Dtterm*DtTerm*translations:#override\n\
:<KeyPress>osfBeginLine: string("0xff50")

그런 다음 실행하면 파일을 dtaction ReloadResources가져와야 합니다 .Xdefaults.

운이 좋다면 매핑을 얻은 다음 평소처럼 키 바인딩을 할 수 있을 것입니다. 그렇지 않다면 아마도 거대한 스파게티 더미였던 Motif의 가상 스테이플링 영역을 돌아다녀야 할 것입니다.

인용하다:

dtTerm 매뉴얼, dtTerm 터미널 옵션 페이지

표준 Xresources dtTerm 구문 분석

답변2

물리적 터미널은 화살표와 함께 사용되는 CTRL에 대해 다른 코드 시퀀스를 생성하지 않습니다. 터미널 에뮬레이터는 물리적 조상과 동일한 방식으로 동작하려고 시도하면서 그 뒤를 따랐습니다. 사용하는 터미널 에뮬레이터에 따라 고유한 시퀀스를 정의할 수도 있습니다. 예를 들어, 나는

XTerm*VT100*Translations:   #override \
    Ctrl<Key>Prior:scroll-back(1,halfpage)\n\
        <Key>Prior:string(0x1B)string([5~)\n\
    Ctrl<Key> Next:scroll-forw(1,halfpage)\n\
        <Key>Next:string(0x1B)string([6~)\n\
    <Key>Delete:string(0x1B)string([3~)\n\
    Ctrl<Key>Home:string(0x1B)string(CH~)\n\
    Ctrl<Key>End:string(0x1B)string(CE~)\n\
    <Key>Home:string(0x1B)string(H~)\n\
    <Key>End:string(0x1B)string(E~)\n\
    <Key>BackSpace:string(0x7F)\n\
    Ctrl<Key>Left:string(0x1B)string(CL~)\n\
    Ctrl<Key>Right:string(0x1B)string(CR~)\n\
    Ctrl<Key>Up:string(0x1B)string(CU~)\n\
    Ctrl<Key>Down:string(0x1B)string(CD~)\n

내 XTerm 리소스 파일에 있습니다.

관련 정보