xcape를 사용하면 수정자 키를 단독으로 눌렀다가 놓을 때 다른 키로 사용할 수 있습니다. 키를 놓을 때까지 누른 이벤트가 발생하지 않기 때문에 원래 키를 누르는 것보다 약간 느립니다. 기본 동작은 왼쪽 Control을 눌렀다 놓으면 Esc 키를 생성하는 것입니다. (왜 누군가가 이것을 원하는지 이해하지 못한다면 Vim은 당신이 가장 좋아하는 텍스트 편집기가 아닌 것 같습니다.)
먼저 개발 종속성을 설치합니다. Debian 기반 시스템(Ubuntu 및 Linux Mint 포함)에서는 다음을 실행합니다.
$ sudo apt-get install git gcc make pkg-config libx11-dev libxtst-dev libxi-dev
Fedora 기반 시스템에서는 다음을 실행합니다.
$ sudo dnf install git gcc make pkgconfig libX11-devel libXtst-devel libXi-devel
그런 다음 다음을 실행하십시오.
$ git clone https://github.com/alols/xcape.git
$ cd xcape
$ make
$ sudo make install
$ xcape [-d] [-f] [-t <timeout ms>] [-e <map-expression>]
-d
디버그 모드. 백그라운드로 포크되지 않습니다. 디버그 정보를 인쇄합니다.
-f
전경 모드. 백그라운드로 포크되지 않습니다.
-t <timeout ms>
이 시간 초과보다 오랫동안 키를 보유하면 xcape는 키 이벤트를 생성하지 않습니다. 기본값은 500ms입니다.
-e <map-expression>
표현식에는 'ModKey=Key[|OtherKey][;NextExpression]'
문법이 있습니다.
키 이름 목록은 헤더 파일 X11/keysymdef.h
에 있습니다( XK_
접두사 제거). X11 시프트 키의 제한으로 인해 문자의 실제 이름이 아닌 Shift 키 뒤에 누를 키를 지정 해야 합니다 . 예를 들어 "{"를 생성하려면 'ModKey=Shift_L|bracketleft'
표현식을 사용할 수 있습니다("[" 위에 "{"가 있는 키가 있다고 가정).
10진수(접두사 #
), 8진수( #0
) 또는 16진수( #0x
)로 키를 지정할 수도 있습니다. 해당 키 이름이 없으면 키 코드로 해석됩니다.
이렇게 하면 왼쪽 Shift가 단독으로 눌렸다가 해제될 때 Escape가 생성되고, Left Control이 단독으로 눌렸다가 해제될 때 Ctrl-O 조합이 생성됩니다.
xcape -e 'Shift_L=Escape;Control_L=Control_L|O'
xmodmap과 함께 일반 키를 추가 수정자로 작동하게 만드는 것이 가능합니다. 먼저 xmodmap을 사용하여 수정자에 키를 매핑한 다음 xcape를 사용하여 수정자를 키에 다시 매핑합니다. 그러나 여기에는 몇 가지 제한 사항이 있습니다. 키를 놓을 때까지 키가 정상적으로 작동하지 않으며, 특히 너무 빨리 입력하면 의도치 않게 수정자 역할을 할 수 있습니다. 이는 xcape의 버그는 아니지만 이러한 두 도구를 이런 방식으로 함께 사용함으로써 발생하는 피할 수 없는 결과입니다. 예를 들어, 다음 명령 순서를 사용하여 스페이스바를 누르고 있을 때(Space2ctrl과 유사) 추가 Ctrl 키로 작동하도록 할 수 있습니다.
# Map an unused modifier's keysym to the spacebar's keycode and make it a
# control modifier. It needs to be an existing key so that emacs won't
# spazz out when you press it. Hyper_L is a good candidate.
spare_modifier="Hyper_L"
xmodmap -e "keycode 65 = $spare_modifier"
xmodmap -e "remove mod4 = $spare_modifier" # hyper_l is mod4 by default
xmodmap -e "add Control = $spare_modifier"
# Map space to an unused keycode (to keep it around for xcape to
# use).
xmodmap -e "keycode any = space"
# Finally use xcape to cause the space bar to generate a space when tapped.
xcape -e "$spare_modifier=space"
키코드를 키심에 다시 매핑하는 습관이 있는 경우(예: xmodmap 사용) 두 가지 문제가 발생할 수 있습니다.
키코드에서 키심으로의 매핑을 수정할 때마다(예: xmodmap 사용) xcape를 다시 시작해야 합니다. 그렇지 않으면 xcape는 계속 이전 매핑을 사용합니다.
보내려는 키에는 정의된 키코드가 있어야 합니다. 예를 들어 기본 매핑 Control_L=Escape
사용하면 xmodmap 매핑에 정의된 Esc 키가 여전히 필요합니다. (저는 키보드에서 보낼 수 없는 255를 사용하여 이 문제를 해결했습니다.)
https://github.com/alols/xcape에서 최신 버전을 찾으세요.
저자는 gmail dot com의 albin dot olsson에게 연락할 수 있습니다.