X가 ALT_L 및 ALT_R을 Mod1과 다르게 처리하지 않는 이유

X가 ALT_L 및 ALT_R을 Mod1과 다르게 처리하지 않는 이유

Mod1xmodmap포함하지 않도록 via의 정의를 변경했습니다 ALT_R(왜 아래쪽으로 스크롤되는지 이해하기 위해). 현재 수정자의 레이아웃은 다음과 같습니다. ALT_R정의에 관련되지 는 않지만 mod1생성된 레코드 xev에 따르면 Alt 키를 누르면 (8 in 으로 정의됨) KeyEvent.state으로 설정됩니다 .mod1Mask/usr/include/X11/X.h

'아니오 ' xmodmask라고 되어 있다면 보고서에 + 왜 그렇게 보이는 걸까요?ALT_Rmod1XALT_Rf

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),  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)

다음 순서는 ALT_L+ f다음 ALT_R+ 입니다 f.

KeyPress event, serial 32, synthetic NO, window 0x1000001,
    root 0xc0, subw 0x0, time 4126632, (85,488), root:(86,489),
    state 0x0, keycode 64 (keysym 0xffe9, Alt_L), same_screen YES,
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyPress event, serial 32, synthetic NO, window 0x1000001,
    root 0xc0, subw 0x0, time 4126850, (85,488), root:(86,489),
    state 0x8, keycode 41 (keysym 0x66, f), same_screen YES,
    XLookupString gives 1 bytes: (66) "f"
    XmbLookupString gives 1 bytes: (66) "f"
    XFilterEvent returns: False

KeyRelease event, serial 32, synthetic NO, window 0x1000001,
    root 0xc0, subw 0x0, time 4126930, (85,488), root:(86,489),
    state 0x8, keycode 64 (keysym 0xffe9, Alt_L), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyRelease event, serial 32, synthetic NO, window 0x1000001,
    root 0xc0, subw 0x0, time 4126969, (85,488), root:(86,489),
    state 0x0, keycode 41 (keysym 0x66, f), same_screen YES,
    XLookupString gives 1 bytes: (66) "f"
    XFilterEvent returns: False

KeyPress event, serial 32, synthetic NO, window 0x1000001,
    root 0xc0, subw 0x0, time 4127907, (85,488), root:(86,489),
    state 0x0, keycode 108 (keysym 0xffea, Alt_R), same_screen YES,
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyPress event, serial 32, synthetic NO, window 0x1000001,
    root 0xc0, subw 0x0, time 4128123, (85,488), root:(86,489),
    state 0x8, keycode 41 (keysym 0x66, f), same_screen YES,
    XLookupString gives 1 bytes: (66) "f"
    XmbLookupString gives 1 bytes: (66) "f"
    XFilterEvent returns: False

KeyRelease event, serial 32, synthetic NO, window 0x1000001,
    root 0xc0, subw 0x0, time 4128164, (85,488), root:(86,489),
    state 0x8, keycode 108 (keysym 0xffea, Alt_R), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyRelease event, serial 32, synthetic NO, window 0x1000001,
    root 0xc0, subw 0x0, time 4128203, (85,488), root:(86,489),
    state 0x0, keycode 41 (keysym 0x66, f), same_screen YES,
    XLookupString gives 1 bytes: (66) "f"
    XFilterEvent returns: False

배경:

ALT_RENTER+를 사용하여 기능을 수행하는 응용 프로그램이 있습니다 . Xmonad에서 이 응용 프로그램을 사용할 때 Mod1+ 조합은 ENTER"현재 창을 기본 창으로 바꾸기" 기능을 트리거합니다. 기본적으로 ALT_LALT_R에 매핑됩니다 Mod1.

내에서는 Xmonad를 시작하기 전에 정의의 일부 가 아닌 .xinitrc키맵을 변경했습니다 . 그럼에도 불구하고 Xmonad는 +가 입력될 때 여전히 창 교환 동작을 수행합니다 . Xmonad는 그것이 더 이상 포함되지 않는다는 사실을 모르는 것 같습니다 .xmodmapALT_RMod1ALT_RENTERMod1ALT_R

이 내 꺼야.xinitrc

# Java's GUI can't handle some non-reparenting window managers like
# Xmonad without being told how to behave
export _JAVA_AWT_WM_NONREPARENTING=1

# The right Alt key is useful in IntelliJ, tell Xmonad to ignore it
xmodmap ~/.Xmodmap

# Start Xmonad
xmonad

xmodmap위에서 Xmonad를 시작한 후의 출력입니다.

시퀀스를 기록했으며 xev해당 ENTER시퀀스가 ​​등록된 적이 없음을 확인했습니다. 대신 녹화 후 여러 FocusIn/ FocusOut이벤트 가 발생합니다.ALT_R

KeyPress event, serial 32, synthetic NO, window 0x1200001,
    root 0xc0, subw 0x0, time 1432589, (92,374), root:(93,375),
    state 0x0, keycode 108 (keysym 0xffea, Alt_R), same_screen YES,
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

FocusOut event, serial 32, synthetic NO, window 0x1200001,
    mode NotifyGrab, detail NotifyAncestor

PropertyNotify event, serial 32, synthetic NO, window 0x1200001,
    atom 0x155 (WM_STATE), time 1433760, state PropertyNewValue

FocusOut event, serial 32, synthetic NO, window 0x1200001,
    mode NotifyUngrab, detail NotifyPointer

FocusIn event, serial 32, synthetic NO, window 0x1200001,
    mode NotifyUngrab, detail NotifyAncestor

KeymapNotify event, serial 32, synthetic NO, window 0x0,
    keys:  0   0   0   0   0   0   0   0   0   0   0   0   0   16  0   0   
           0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   

KeyRelease event, serial 32, synthetic NO, window 0x1200001,
    root 0xc0, subw 0x0, time 1434117, (92,374), root:(93,375),
    state 0x8, keycode 108 (keysym 0xffea, Alt_R), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

답변1

Alt_R이 다른 수정자에 할당되지 않은 경우 기본값은 Mod1Mask인 것 같습니다.

0x20에서 올바른 alt를 바인딩 해제하기만 하면 됩니다.

솔루션보다 해결 방법에 가깝지만.

관련 정보