# Smart Caps Lock: Remap to Control AND Escape (Linux, Mac, Windows)
把 Caps Lock 變成智慧的 Control 以及 Escape :
- 單獨輕按一下就是 Escape 。
- 若按下時同時按著其他鍵,就會是 Control 。
這應該是 Vim 和 Emacs 的最佳解了!(Emacs? Bash 的快捷鍵就是 Emacs 系列的)
- Send Escape if you tap Caps Lock alone.
- Send Control if you press Caps Lock with another key.
For both Vim and Emacs world.
## GNU/Linux
### Step 1. Install XCAPE
Install [XCAPE](https://github.com/alols/xcape) (`xcape`). (Linux utility to configure modifier keys to act as other keys when pressed and released on their own.)
Ubuntu:
```bash
sudo apt-get install xcape
```
### Step 2. Run the command
```bash
# make CapsLock behave like Ctrl:
setxkbmap -option ctrl:nocaps
# make short-pressed Ctrl behave like Escape:
xcape -e 'Control_L=Escape'
```
The effect should apply immediately.
### Step 3. Autostart
Append code from Step 2 to file `~/.xprofile` to run the command when X starts.
## macOS
1. Download and install [Karabiner-Elements](https://pqrs.org/osx/karabiner/), a powerful and stable keyboard customizer.
2. Open Karabiner-Elements, select **Complex Modifications** tab, and click **Add rule** at the bottom.
3. Click **Import more rules from the Internet (open a web browser)**
4. Find **Change caps_lock to dual keys, escape and left_control** and click on **enable**.
The effect should apply immediately.
If you cannot find the rule, you can manually edit the config files at **~/.config/karabiner/karabiner.json**, under **profiles**:
```
"rules": [
{
"description": "Post escape if caps is pressed alone, left_ctrl otherwise",
"manipulators": [
{
"from": {
"key_code": "caps_lock",
"modifiers": {
"optional": [
"any"
]
}
},
"to": [
{
"key_code": "left_control"
}
],
"to_if_alone": [
{
"key_code": "escape"
}
],
"type": "basic"
}
]
},
]
```
## Windows
### Option 1:
1. Download and install [AutoHotKey](https://autohotkey.com/).
2. Use the script [CapsLockCtrlEscape.ahk](https://gist.github.com/sedm0784/4443120).
### Option 2:
Download and run [dual-key-remap](https://github.com/ililim/dual-key-remap). (Note that in config.txt, CONTROL might needed to changed to LEFT_CTRL for some computers)
For both options, the effect should apply immediately.