xterm
이나 vim
xterm에서 마우스를 사용할 수 있는 다른 응용 프로그램에서는 키 를 눌러 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이 이스케이프 시퀀스로 변환하는 일부 이벤트를 제거하여)