클립보드 패치를 설치했고 내 컴퓨터에config.h
#define MODKEY Mod1Mask
#define TERMMOD (Mod1Mask|ShiftMask)
그리고
{ ShiftMask, XK_Insert, clippaste, {.i = 0} },
{ TERMMOD, XK_c, clipcopy, {.i = 0} },
{ TERMMOD, XK_v, clippaste, {.i = 0} },
{ MODKEY, XK_p, selpaste, {.i = 0} },
흥미롭게 Shift+Insert
도 마우스 가운데 버튼을 클릭하면 클립보드에서 붙여넣을 수 있지만 위의 TERMMOD
및 조합을 사용하면 MODKEY
그렇지 않습니다. 및 (예: 확대/축소, 화면 인쇄, 스크롤)을 사용하는 TERMMOD
다른 단축키도 작동합니다. MODKEY
다른 조합을 사용해 보았 Ctrl+Shift+c/v
으나 재미가 없었습니다. 동일한 조합이 xterm, urxvt 및 alacritty에서 작동합니다(다른 에뮬레이터를 철저하게 테스트하지는 않았습니다).
누구든지 이것을 설명할 수 있나요?
답변1
내부에st
소스의 기본 키 바인딩, 바인딩이 사용됩니다 XK_V
(대문자 사용에 주의하세요).
{ TERMMOD, XK_C, clipcopy, {.i = 0} },
{ TERMMOD, XK_V, clippaste, {.i = 0} },
{ TERMMOD, XK_Y, selpaste, {.i = 0} },
XK_v
소문자를 다시 원래 대소문자로 변경해 보세요(새 값을 유지하면서 TERMMOD
).
설명하다
XK_v
XK_V
X11 포함 파일에서는 0x76 및 0x56으로 정의 됩니다 keysymdef.h
. 그들은 다른 키로 간주됩니다. 테스트를 위해 다음 xev
도구를 사용할 수 있습니다.
아니요 Shift:
KeyRelease event, serial 47, synthetic NO, window 0x4c00001,
root 0x4cf, subw 0x0, time 433723403, (134,121), root:(1235,171),
state 0x0, keycode 55 (keysym 0x76, v), same_screen YES,
XLookupString gives 1 bytes: (76) "v"
XmbLookupString gives 1 bytes: (76) "v"
XFilterEvent returns: False
누르고 있으면 Shift동일한 keycode
결과가 나타납니다 keysym
.
KeyPress event, serial 47, synthetic NO, window 0x4c00001,
root 0x4cf, subw 0x0, time 433724571, (134,121), root:(1235,171),
state 0x1, keycode 55 (keysym 0x56, V), same_screen YES,
XLookupString gives 1 bytes: (56) "V"
XmbLookupString gives 1 bytes: (56) "V"
XFilterEvent returns: False
, 및 를 합치면 XK_v
눌렀을 때 소문자가 나올 때 붙여넣고 싶다는 뜻입니다. 그러나 누르고 있으면 X 서버가 대문자 키를 보냅니다. 그것은 우리가 원하는 것이 아니므로 아무 것도 하지 않습니다.TERMMOD
TERMMOD
ShiftMask
st
vShiftShiftVst