Skip to content

Instantly share code, notes, and snippets.

@ivyxjc
Forked from tanyuan/smart-caps-lock.md
Last active April 30, 2024 05:48
Show Gist options
  • Save ivyxjc/0ee9b1f37a5abdfbcd8f31db3c10f2f0 to your computer and use it in GitHub Desktop.
Save ivyxjc/0ee9b1f37a5abdfbcd8f31db3c10f2f0 to your computer and use it in GitHub Desktop.
Smart Caps Lock: Remap Caps Lock to Control AND Escape

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

Option 1

Step 1. Install XCAPE

Install XCAPE (xcape). (Linux utility to configure modifier keys to act as other keys when pressed and released on their own.)

Ubuntu:

sudo apt-get install xcape

Step 2. Run the command

# make CapsLock behave like Ctrl:
setxkbmap -option ctrl:nocaps

# make short-pressed Ctrl behave like Escape:
xcape -e 'Control_L=Escape' -t 250

The effect should apply immediately.

Step 3. Autostart

Append code from Step 2 to file ~/.xprofile to run the command when X starts.

Option 2:

对于Arch及其衍生发行版,可以安装interception-toolsinterception-caps2esc。然后将下面的内容复制到/etc/interception/udevmon.yaml,然后执行sudo systemctl restart udevmon

- JOB: intercept -g $DEVNODE | caps2esc -m 1 | uinput -d $DEVNODE
  DEVICE:
    EVENTS:
      EV_KEY: [KEY_CAPSLOCK, KEY_ESC]

caps2esc mode

  • 0:default
    • caps as esc/ctrl
    • esc as caps
  • 1:minimal
    • caps as esc/ctrl
  • 2:useful on 60%% layouts
    • caps as esc/ctrl
    • esc as grave accent
    • grave accent as caps

macOS

  1. Download and install Karabiner-Elements, a powerful and stable keyboard customizer.
  2. Open Karabiner-Elements, select Complex Modifications tab, and click Add rule at the bottom.
  3. Find Post escape if caps is pressed alone, left_ctrl otherwise and click on enable.

The effect should apply immediately.

{
    "description": "left-option to left-control",
    "manipulators": [
        {
            "from": {
                "key_code": "left_option"
            },
            "to": [
                {
                    "key_code": "left_control",
                    "repeat": true
                }
            ],
            "type": "basic"
        }
    ]
}
{
    "description": "left-command to left-option",
    "manipulators": [
        {
            "from": {
                "key_code": "left_gui"
            },
            "to": [
                {
                    "key_code": "left_option",
                    "repeat": true
                }
            ],
            "type": "basic"
        }
    ]
}
{
    "description": "left-control to left-command",
    "manipulators": [
        {
            "from": {
                "key_code": "left_control"
            },
            "to": [
                {
                    "key_code": "left_gui",
                    "repeat": true
                }
            ],
            "type": "basic"
        }
    ]
}
{
    "description": "left-command to left-control",
    "manipulators": [
        {
            "from": {
                "key_code": "left_gui"
            },
            "to": [
                {
                    "key_code": "left_control",
                    "repeat": true
                }
            ],
            "type": "basic"
        }
    ]
}
{
    "description": "Post escape if caps is pressed alone, left_ctrl otherwise",
    "manipulators": [
        {
            "from": {
                "key_code": "caps_lock",
                "modifiers": {
                    "optional": [
                        "any"
                    ]
                }
            },
            "to": [
                {
                    "key_code": "left_command"
                }
            ],
            "to_if_alone": [
                {
                    "key_code": "escape"
                }
            ],
            "type": "basic"
        }
    ]
}
{
    "description": "Change Command+Tab to Control+Tab",
    "manipulators": [
        {
            "from": {
                "key_code": "tab",
                "modifiers": {
                    "mandatory": [
                        "command"
                    ],
                    "optional": [
                        "any"
                    ]
                }
            },
            "to": [
                {
                    "key_code": "tab",
                    "modifiers": [
                        "control"
                    ]
                }
            ],
            "type": "basic"
        }
    ]
}
{
    "description": "Change Control+Tab to Command+Tab",
    "manipulators": [
        {
            "from": {
                "key_code": "tab",
                "modifiers": {
                    "mandatory": [
                        "control"
                    ],
                    "optional": [
                        "any"
                    ]
                }
            },
            "to": [
                {
                    "key_code": "tab",
                    "modifiers": [
                        "command"
                    ]
                }
            ],
            "type": "basic"
        }
    ]
}

Windows

Option 1:

  1. Download and install AutoHotKey.
  2. Use the script CapsLockCtrlEscape.ahk.

Option 2:

Download and run 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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment