Shift+MouseButton을 복원하는 방법 = xterm 361에서 마우스 프로토콜이 활성화된 경우 선택?

Shift+MouseButton을 복원하는 방법 = xterm 361에서 마우스 프로토콜이 활성화된 경우 선택?

xterm이나 vimxterm에서 마우스를 사용할 수 있는 다른 응용 프로그램에서는 키 를 눌러 Shift마우스 버튼 처리를 우회하고 일반적인 X 선택을 할 수 있었습니다.

Debian의 xterm 버전 361에 대한 최신 업데이트에서는 더 이상 작동하지 않습니다. 에서는 vim이제 Shift+LeftButton이 아래로 스크롤되는 것처럼 보입니다. 를 입력한 후 printf '\e[?1000h'Shift+LeftButton을 누르면 다음과 같은 내용이 전송되는 것을 볼 수 있습니다 \e[M$xy.

이전 행동으로 돌아가려면 어떻게 해야 합니까? 아니면 X 마우스 선택이 제대로 작동하도록 하는 다른 방법이 있습니까 vim(또는 마우스 프로토콜이 활성화된 다른 응용 프로그램)?

FWIW, 제가 생각할 수 있는 모든 사용자 정의를 비활성화하더라도 다음을 재현할 수 있습니다.

xrdb < /dev/null
env -i DISPLAY="$DISPLAY" xterm -class MYXTerm -name myxterm -e \
  vim -u NONE -c 'set mouse=a' -c help

(그리고 vim 도움말 화면에서 Shift+LeftMouseButton을 사용해 보세요).

둘 다 xterm 361 Debian 패키지와 기본 설정을 사용하여 소스에서 빌드된 xterm을 포함합니다.

편집하다. 재부팅 후 문제가 사라졌는데, 결국 NumLock이 비활성화되었기 때문이었습니다. 그래서,옳은: "문제"는 NumLock을 켤 때만 발생합니다.

답변1

OP 코멘트:

"문제"는 다음과 같은 경우에만 나타납니다.NumLock(mod2수정자)가 켜져 있습니다.

그리고엑스텀 #361, 이는 의도적인 것입니다:

사용 규칙 수정옮기다- 키 재정의마우스 프로토콜~을 위한선택/붙여넣기선택/붙여넣기 작업에 실제로 바인딩된 마우스 버튼으로 기능을 제한합니다.

xterm 사용X 툴킷번역하다수정자가 포함된 다양한 키와 마우스(포인터) 버튼을 작업 리소스에 바인딩합니다. 대부분의 사람들이 사용하는기본 번역, X 리소스에 무언가를 추가했을 수 있습니다. 번역 기능은 상대적으로 정적이기 때문에 xterm은 다음을 구현합니다.마우스 프로토콜선택/붙여넣기 작업에 표시된 이벤트를 검사하여 다음을 수행합니다.

#361에서 (참조원천), xterm은 시작 시 번역 리소스를 확인하여 어떤 포인터(마우스) 버튼이 이러한 이벤트에 바인딩되어 있는지 확인하고 Shift 수정자만 사용하여 일치하는 버튼 이벤트가 수신되면 마우스 프로토콜을 무시하고 선택/붙여넣기 작업을 수행합니다( 꽤 오랫동안 진행되었기 때문입니다.)

변경 이유는 애플리케이션이 일부 조합(예:옮기다휠 마우스 사용) 해석할 수 있는 이스케이프 시퀀스를 수신합니다.

번역 리소스에서는 이러한 특별한 변환 처리를 설명하지 않습니다.

                       ~Meta <Btn1Down>:select-start() \n\
                     ~Meta <Btn1Motion>:select-extend() \n\

그러나 xterm의 마우스 프로토콜은 번역에서 실제로 잘 정의되지 않은 이벤트를 수신할 수 있는 능력에 의존합니다. #361 이후에 낫지 않는 걸 봤어요스포츠 이벤트이 변경된 시나리오와 일치합니다(수정 사항은 #362에 있음).

나는 보통 xmodmap을 사용하여 정의합니다.이 번역을 사용할 수 있도록 키를 입력하세요. macOS 디스플레이의 경우 다음이 있습니다.

xmodmap:  up to 2 keys per modifier, (keycodes in parentheses):

shift       Shift_L (0x40),  Shift_R (0x44)
lock        Caps_Lock (0x41)
control     Control_L (0x43),  Control_R (0x46)
mod1        Alt_L (0x42),  Alt_R (0x45)
mod2        Meta_L (0x3f),  Meta_R (0x47)
mod3      
mod4      
mod5      

Debian에 표시되는 수정되지 않은 xmodmap은 다릅니다:

xmodmap:  up to 4 keys per modifier, (keycodes in parentheses):

shift       Shift_L (0x32),  Shift_R (0x3e)
lock        Caps_Lock (0x42)
control     Control_L (0x25),  Control_R (0x69)
mod1        Alt_L (0x40),  Alt_R (0x6c),  Meta_L (0xcd)
mod2        Num_Lock (0x4d)
mod3      
mod4        Super_L (0x85),  Super_R (0x86),  Super_L (0xce),  Hyper_L (0xcf)
mod5        ISO_Level3_Shift (0x5c),  Mode_switch (0xcb)

~하도록 하다후자의 경우 접근이 가능하지만 덜 편리합니다. 여러 모드 스위치가 필요합니다.

보류 중인 끌어오기 요청과 같이 탐색해야 할 다른 문제 영역이 있습니다._XtMatchUsingDontCareMods에서 누락된 비표준 수정자를 무시하지 마십시오., 이는 사용을 방해합니다.mod2~을 위한(xterm이 이스케이프 시퀀스로 변환하는 일부 이벤트를 제거하여)

관련 정보