# god-mode: Emacs commands without the modifier keys

> god-mode is a global minor mode for Emacs that lets you type commands without holding a modifier, by translating plain letters into control and meta sequences. Every existing binding keeps working, so it is a layer over your configuration rather than a replacement for it, and it comes with a little grammar for the keys that would otherwise be ambiguous.

**emacsorphanage/god-mode** — Minor mode for God-like command entering

- Repository: https://github.com/emacsorphanage/god-mode
- Stars: 972 · Forks: 59
- Language: Emacs Lisp
- License: GPL-3.0
- Published: 2026-10-20 · Updated: 2026-10-20 · Language: en
- Canonical page: https://hysenlabs.com/projects/emacsorphanage-god-mode

## A layer over your bindings, not a replacement

The premise is short and slightly unusual. This is a global minor mode for entering Emacs commands without modifier keys, and it is described as similar to Vim's separation of command mode and insert mode.

What makes it different from a modal editor is what it does not take away. All existing key bindings will work in God mode, and the mode is only there to reduce your usage of modifier keys. Whenever you feel like it, you can explicitly use modifier keys too.

The example in the readme makes the saving concrete. A sequence of ordinary Emacs commands that looks like this:

```
Before: C-p C-k C-n M-^ ) C-j C-y M-r C-x z z M-2 M-f C-x C-s
After:    p   k   n g ^ )   j   y g r     . .   2 g f   x   s
```

That is a long run of chords reduced to plain letters, with the few keys that still need a marker in front of them. The readme's claim is that you will find the mode surprisingly natural, because you already know how to use your existing Emacs commands, and the mode is a translation layer rather than a new language to learn.

That claim is the whole design. A modal editor asks you to internalise a new grammar. god-mode asks you to keep the grammar you have and removes the physical cost of pressing it.

The project is GPL-3.0 licensed, it is distributed through MELPA with a stable channel badge, and the readme notes that it requires Emacs 26.3 to work well. The repository is small: the mode itself, a companion file for isearch, a features directory, a Cask file for dependencies, and a workflow directory.

## Setup, and the buffer-local subtlety

Loading it is two lines.

```emacs-lisp
(require 'god-mode)
(god-mode)
```

The second line activates God mode in all future buffers, but the readme immediately points out the subtlety: activation of God mode itself is buffer-local. So the mode is enabled globally for new buffers while the mode in any particular buffer is a local thing you toggle.

The toggle is bound to escape, and there are two functions for it. The local one affects the current buffer only:

```emacs-lisp
(global-set-key (kbd "<escape>") #'god-local-mode)
```

And the one that affects all active and future buffers:

```emacs-lisp
(global-set-key (kbd "<escape>") #'god-mode-all)
```

If you use the global variant, the readme suggests making sure no buffers are skipped, by clearing the exemption lists:

```emacs-lisp
(setq god-exempt-major-modes nil)
(setq god-exempt-predicates nil)
```

The reason is that by default some major modes are exempt, and the readme names Magit and dired as examples. In those modes the mode does not engage, so you would have to remember to toggle it manually when you move from a code buffer to a Magit buffer, which is exactly the kind of interruption the mode is meant to remove.

That default is a sensible compromise, since some modes do their own key handling and a translation layer that rewrote their bindings would break them. The escape binding is the other decision worth understanding: escape is normally a prefix key in Emacs, and binding it globally to a mode toggle takes it away from everything else that uses it as a prefix.

## The key grammar, including the sticky space

The mapping is the part of the readme worth reading in full, and it is a small grammar with a few conventions.

Control is the default. A command is assumed to use the control modifier unless something says otherwise, so a single letter becomes its control version, and a sequence of letters becomes a control prefix followed by a control key, with the space used to produce a bare control key as in a prefix sequence.

The literal key, which is the space, is sticky. That means you do not have to enter it repeatedly for bindings such as C-x r t, and entering it again toggles its state rather than adding another one. The literal key can be changed through a variable, and the readme shows the effect: the same prefix followed by the literal key and another key gives a meta modified command, which is how you reach the commands that would otherwise be impossible.

Two other letters are markers. The lowercase g introduces the meta modifier, so g followed by x is the meta version of x. The uppercase G introduces both control and meta, so G followed by x is the control and meta version.

Digit arguments work as you would expect, so a digit followed by a key becomes a numeric prefix on the command.

And a universal argument can be given with the letter u, which is the usual control and u sequence translated into plain letters.

The marker letters are configurable through a variable, and the readme is careful about the consequences of choosing them badly, because a marker letter that is also a real command letter is a collision you will discover at the worst moment.

## The two things the mode cannot do for you

There are two limitations, and they are stated rather than discovered, which is good practice.

The first is the control and g combination. Because the g letter is the marker for the meta modifier, there is no way to enter that sequence in God mode, and you must therefore type it directly with the modifier keys. For most people that is a rarely used sequence. For anyone who uses it often, it is a hole in the abstraction, and the readme is honest enough not to hide it.

The second concerns function keys. When God mode is enabled, entering a function key is translated to use an appropriate key modifier, so the function key five becomes the control and function key five combination. That translation can be turned off by setting a variable to nil before loading the mode:

```emacs-lisp
(setq god-mode-enable-function-key-translation nil)
(require 'god-mode)
```

The order matters, since the variable is read at load time, which the readme shows by putting the setting before the require.

There is also the physical layer, and the readme addresses it in a way that many mode authors would consider going too far. It suggests adding to your X keyboard map file to rebind the caps lock key to escape:

```
remove Lock = Caps_Lock
keysym Caps_Lock = Escape
```

and running the keyboard map command for the changes to take effect immediately. On a desktop it gives the same effect through the desktop settings database:

``` sh
dconf write /org/gnome/desktop/input-sources/xkb-options "['caps:escape']"
```

The reasoning is sound. If the mode is toggled with escape, then a keyboard where escape is a secondary key is a keyboard where the mode is awkward to use, and rebinding caps lock, which is otherwise a key you use out of habit, solves it. The trade is that caps lock stops being caps lock, which some applications use for uppercase.

## Telling you which mode you are in

A modal mode with no visual state is a mode you cannot be sure about, so the readme spends a paragraph on indicators.

The minor mode lighter can be customised through a string variable and a face. If you do not want any lighter at all, you can set the string to nil. If you want it to stand out, you can change the face, for example by making it inherit from the error face, either through the customise interface or with a set of faces:

```emacs-lisp
(custom-set-faces
 '(god-mode-lighter ((t (:inherit error)))))
```

The cursor can also carry the state, and the readme shows a function that switches the cursor type between a box and a bar depending on whether the mode is active and whether the buffer is read-only, hooked into the post-command hook.

And the mode line can be recoloured entirely, with a function that sets the foreground and background of the mode line and of the inactive mode line differently depending on the state of the mode.

The cursor and the mode line approaches have a shared property worth noticing. Both are hooks, not built-in behaviour, so they are opt-in and they are yours to write. That is the right default for a package that has to work in any configuration, since a cursor style and a mode line colour are exactly the sort of thing a user has already customised.

The lighter is the one built-in indicator, and the readme tells you how to remove it, which tells you the author expects some people to have their own.

## Looking up what a key does, and the release history

There is a lookup function, and it is a small thing that makes the mode teachable.

You can use the describe function to check what command would be triggered by particular keys. It works similarly to the standard describe key function: it prompts for a key combination, translates it into a command, and displays its information in the Help buffer. By default it is bound to the control and h then k sequence in the local mode keymap.

The limitation is stated precisely: the function is only able to interpret key bindings that are specific to God mode. For other key bindings, mouse clicks and menu items, it is better to use the standard describe key function. So it answers the question the mode creates, which is what does this strange sequence I just typed do, and it declines to answer questions about the rest of Emacs.

The repository layout supports the idea of a package that does one thing. There is the main file, a separate file for isearch integration, a features directory for the project's own specification tests, a Cask file listing the development dependencies, and a workflow directory for continuous integration.

On maintenance, the release history is irregular. Version 2.17.3 came out in January 2021, 2.18.0 in December 2022 and 2.19.0 in August 2025, and the last push was on 2026-04-28 with the repository not archived. The long gaps are consistent with a mature package that is stable and only changes when something needs to change, which for a mode whose entire behaviour is a translation table is the expected pattern.

## Conclusion

god-mode suits an Emacs user whose wrists hurt, since it removes the modifier chords without taking away any command, and the fact that existing bindings still work makes it something you can try in one buffer and abandon. It is a poor fit if you rely on a literal control key such as C-g, because that sequence cannot be typed in the mode, and a poor fit if your muscle memory is built around modifiers. Before you adopt it, read the key mapping section end to end rather than the example, and remember to rebind caps lock to escape, since escape is what toggles the mode and a keyboard without a dedicated escape key is the case this mode makes worse rather than better.

## FAQ

### How do I turn on god-mode in Emacs?

Require the package and call god-mode, which enables it in all future buffers while activation in any buffer remains local. You can bind the escape key to god-local-mode to toggle the current buffer, or to god-mode-all to toggle every active and future buffer, and clear the exemption lists so that modes like Magit are not skipped.

### How do I type a control and g sequence in god-mode?

You cannot. The g key is the marker for the meta modifier, so there is no way to enter that sequence in God mode and the readme says you must type it directly with the modifier keys. The marker keys can be changed through the mode's alist variable if that collision matters to you.

### What does the space key do in god-mode?

The space is the literal key and it is sticky, so you do not have to enter it repeatedly for bindings such as C-x r t. Entering it again toggles its state, and the literal key itself can be changed through the literal key variable.

### Why should I rebind caps lock to escape for god-mode?

The mode is toggled with escape, so a keyboard where escape is a secondary key makes the mode awkward to use. The readme suggests rebinding caps lock to escape through the X keyboard map file or through the desktop settings database, which means giving up a key you use out of habit.

## Sources

- [emacsorphanage/god-mode on GitHub](https://github.com/emacsorphanage/god-mode)
- [Issues](https://github.com/emacsorphanage/god-mode/issues)
- [License: GPL-3.0](https://github.com/emacsorphanage/god-mode/blob/master/LICENSE)
- [README](https://github.com/emacsorphanage/god-mode/blob/master/README.md)
- [Releases](https://github.com/emacsorphanage/god-mode/releases)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/emacsorphanage-god-mode
