ErgoEmacsEmacsLispBlogEmacsLispBuy Tutorial
Web Hosting by 1&1

Emacs: How to Define Super & Hyper Keys

Xah Lee, , …,

This page shows you how to define SuperHyper keys in emacs.

Emacs supports extra modifier keys called Super & Hyper. These keys are from lisp keyboard.

lisp-machine-keyboard-2-left
Symbolics's lisp machine keyboard PN 365407 Rev C. (Photo by Joey Devilla. Used with permission.) 〔☛ Space-cadet Keyboard and Lisp Machine Keyboards〕.

You can set Hyper & Super to PC keyboard's ❖ Win key or the ▤ Menu key, or Apple Keyboard's ⌥ option key.

Why Use Super & Hyper?

The advantage of creating the Super & Hyper in emacs is that you can have more hotkeys. For example, Super for all your personal hotkeys, and Hyper for entering math symbols or Unicode. 〔☛ How to Create a APL or Math Symbols Keyboard Layout ⌨

Setting Up Super & Hyper Keys

Microsoft Windows

;; make PC keyboard's Win key or other to type Super or Hyper, for emacs running on Windows.
(setq w32-pass-lwindow-to-system nil
      w32-pass-rwindow-to-system nil
      w32-pass-apps-to-system nil
      w32-lwindow-modifier 'super ; Left Windows key
      w32-rwindow-modifier 'super ; Right Windows key
      w32-apps-modifier 'hyper) ; Menu key

Note: in Microsoft Windows, several keybindings with the Windows key is bound at a low level, and applications do not see them. For example, 【❖ Win+r】 is for launching apps by command name. 〔☛ Windows Logo Key Keyboard Shortcuts〕 There's no way around that unless you use other tools such as AutoHotkey. Even so, it may not be possible to disable 【❖ Win+l】 (lock window).

(info "(emacs) Windows Keyboard")

See also: AutoHotkey Basics.

Mac OS X

; setting Super & Hyper keys for the Mac keyboard, for emacs running in OS X
(setq mac-option-modifier 'hyper) ; sets the Option key as Hyper
(setq mac-option-modifier 'super) ; sets the Option key as Super
(setq mac-command-modifier 'meta) ; sets the Command key as Meta
(setq mac-control-modifier 'meta) ; sets the Control key as Meta
You can also set Mac's Fn key as Hyper.
(setq ns-function-modifier 'hyper) ; set Mac's Fn key to type Hyper

The Fn key can still be used as the modifier for multimedia keys. Thanks to jcs, see 〔A Hyper Key for the Mac By Jon Snader. @ irreal.org…

See also:

Linux

On Linuxes, you should define Super & Hyper key in the OS. For example, in Ubuntu 11.04, it's under 〖System ▸ Preferences ▸ keyboard〗 then “Layout” tap, “Options…” button.

Defining Super & Hyper Keybinding

The syntax for defining keys with the Super or Hyper modifier keys is the same as Meta and Control. Use H for Hyper, s for Super. Example:

(global-set-key (kbd "H-b") 'backward-word) ; H is for hyper
(global-set-key (kbd "s-b") 'backward-word) ; lower case “s” is for super

(global-set-key (kbd "M-H-b") 'backward-word) ; Meta+Hyper+b
(global-set-key (kbd "M-s-b") 'backward-word) ; Meta+Super+b

Example of using Hyper to insert brackets:

;; type brackets in pairs with Hyper and right hands's home-row
(global-set-key (kbd "H-j") (lambda () (interactive) (insert "{}") (backward-char 1)))
(global-set-key (kbd "H-k") (lambda () (interactive) (insert "()") (backward-char 1)))
(global-set-key (kbd "H-l") (lambda () (interactive) (insert "[]") (backward-char 1)))

Example of defining Hyper to insert special symbols:

;; some Hyper keys to insert Unicode chars
(define-key key-translation-map (kbd "H-3") (kbd "•")) ; bullet
(define-key key-translation-map (kbd "H-4") (kbd "◇")) ; white diamond
(define-key key-translation-map (kbd "H-5") (kbd "†")) ; dagger

For more examples, see: Emacs Keybinding Syntax Examples.

Key Ghosting

Be aware that keyboard won't be able to detect certain combination of keys. This is called keyboard ghosting.

For example, on Microsoft Natural Ergonomic 4000 keyboard, the key【▤ Menu+RShift+x】 does not register (but with left Shift it does). Vast majority of keyboards have ghosting problem. For detail, see: Keyboard Ghosting; How Many Keys Your Keyboard Can Take?.

blog comments powered by Disqus