Minor mode for translating key sequences
devil-0.7.0beta3.0.20240129.2809.tar (.sig), 2024-Mar-31, 170 KiB
Susam Pal <>
Atom feed
Browse ELPA's repository
CGit or Gitweb

To install this package from Emacs, use package-install or list-packages.

Full description

1. Devil Mode

devil-badge.svg devil-badge.svg devil.svg mastodon-%40susam-%2355f.svg

Devil mode trades your comma key in exchange for a modifier-free editing experience in Emacs. Yes, the comma key! The key you would normally wield for punctuation in nearly every corner of text. Yes, this is twisted! It would not be called the Devil otherwise, would it? If it were any more rational, we might call it something divine, like, uh, the God mode? But alas, there is nothing divine to be found here. Welcome, instead, to the realm of the Devil! You will be granted the occasional use of the comma key for punctuation, but only if you can charm the Devil. But beware, for in this sinister domain, you must relinquish your comma key and embrace an editing experience that whispers wicked secrets into your fingertips!

1.1. Introduction

Devil is available in MELPA as well as NonGNU ELPA. If you are using Emacs 28.1 or a more recent version of Emacs, you can get the latest stable version of Devil by typing M-x package-install RET devil RET. Otherwise, you need to add MELPA or NonGNU ELPA to your list of package archives and then install MELPA. More details on the installation procedure is provided in the manual.

By default, Devil mode rebinds the comma key to activate Devil. Once activated, Devil reads a so-called Devil key sequence from you. As you type your Devil key sequence, Devil translates the key sequence to a regular Emacs key sequence. If any command is bound to the translated Emacs key sequence, Devil runs that command and then deactivates itself.

By default, each comma in the Devil key sequence is translated to "C-". For example, if you type ", x , f", Devil translates it to "C-x C-f". Similarly ", m" is translated to "M-". If you type ", m x", Devil translates it to "M-x". Further ", m m" is translated to "C-M-". If you type ", m m f" Devil translates it to "C-M-f". There are several other translations available in the default translation rules that let you enjoy working with Emacs while avoiding modifier keys. Further, the Devil activation key, translation rules, etc. are customisable. Thus if you do not like the default choices made in this package, you can customise it easily to suit your preferences.

Read the manual to learn how to install, use, and customise Devil.

1.2. Channels

The author of this project hangs out at the following places online:

You are welcome to subscribe to, follow, or join one or more of the above channels to receive updates from the author or ask questions about this project.

1.3. Support

To report bugs, suggest improvements, or ask questions, create issues.

1.4. Contributing

See for contribution guidelines.

1.5. Thanks

Thanks to:

1.6. Reactions

Some amusing reactions to this project collected from various corners of the world wide web:

Every bit of this horrifies me, and I can't believe you've done it. Outstanding. Well done! – @kstrauser

This is insane. I am going to try it immediately. – @jrockway

Will defiantly check this out. – @strings

Defiantly! – @oantolin

😈 – @SequentialDesign

1.7. More

See Emacs4CL, a DIY quick-starter kit to set up Emacs for Common Lisp programming.

See Emfy, a DIY quick-starter kit to set up Emacs for general purpose editing and programming.

Old versions

devil-0.7.0beta3.0.20231005.225912.tar.lz2023-Oct-0629.5 KiB
devil-0.7.0beta3.0.20230925.224045.tar.lz2023-Sep-2629.5 KiB
devil-0.7.0beta3.0.20230830.1310.tar.lz2023-Aug-3029.5 KiB
devil-0.7.0beta2.0.20230813.225725.tar.lz2023-Aug-1428.3 KiB
devil- KiB
devil-0.6.0beta1.0.20230726.162857.tar.lz2023-Jul-2625.9 KiB
devil- KiB
devil-0.5.0beta5.0.20230615.2132.tar.lz2023-Jun-1525.7 KiB
devil- KiB
devil-0.4.0pre5.0.20230526.214623.tar.lz2023-May-2722.8 KiB



Version 0.7.0 (2023-08-12)

  • Repeatable key sequence , m e.
  • Repeatable key sequence , x u.
  • Repeatable key sequence group for , m @ and , m h.
  • Repeatable key sequence group for , x [ and , x ].
  • Repeatable key sequence group for , x ^ and , x { and , x }.
  • Repeatable key sequences , a and , e added to group for , p.
  • Repeatable key sequences , m a and , m e added to group for , m b.
  • Customisable variable devil-global-sets-buffer-default that, when set to t, makes enabling global-devil-mode also enable Devil in all new buffers.
  • Support for repeatable key groups. When a Devil key sequence in a repeatable group is typed, then that key sequence or any another key sequence in the same group can be executed and repeated merely by typing the last character of that key sequence.
  • Repeatable key groups defined in devil-repeatable-keys is not ignored anymore when devil-all-keys-repeatable is set to non-nil.
  • Devil key sequences , p and , n and , b and , f have been grouped together into a repeatable key group.
  • Devil key sequences , m f and , m b have been grouped together into a repeatable key group.
  • Prevent special key sequences from being repeatable.

Version 0.6.0 (2023-07-30)

  • Devil key sequence , m now translates to M- instead of C-M-.
  • Devil key sequence , m z now translates to M- instead of C-M-.
  • Devil key sequence , m , now translates to M-, instead of C-M-,.
  • Devil key sequence , m m now translates to C-M- instead of M-.
  • Repeatable key sequence , m m f changed to , m f.
  • Repeatable key sequence , m m b changed to , m b.
  • Repeatable key sequence , m m y changed to , m y.
  • Repeatable key sequence , m m ^ changed to , m ^.
  • Devil key translation from m z to M-.
  • Devil key translation from m m to m.
  • Devil key translation from m to M-.

Version 0.5.0 (2023-06-15)

  • Function devil-set-key to set a new Devil key and update the mode's keymap.
  • Reinstate variable devil-version since it is useful in determining the source version conveniently. It helps during troubleshooting the package when installed from MELPA which sets the package version to a version derived from the current date and time.
  • Command devil-describe-key to describe Devil key sequences.
  • Command devil-toggle-logging to toggle logging.
  • Special key , h , k to execute devil-describe-key.
  • Special key , h , l to execute devil-toggle-logging.
  • Customising devil-key also updates the mode's keymap.
  • When no binding exists for the translated key sequence, convert the key sequence to a fallback key sequence for terminal Emacs according to local-function-key-map and execute any command bound to the fallback key sequence. For example, when the Devil key sequence , x <tab> is converted to C-x <tab>, since no command is bound to this key sequence, it is further translated to C-x TAB and the command indent-rigidly bound to it is executed.
  • Format control sequence to show the Devil key sequence read by Devil has changed from %k to %r.
  • The default special key sequences no longer merely insert literal characters into the buffer. That behaviour was problematic in isearch-mode because typing special keys like , , and , SPC in isearch-mode inserted the literal characters in the buffer as opposed to appending these characters to the search pattern. The default special key sequences now invoke devil-execute-key instead which carefully look up the current binding for the current special key and executes it. This produces the correct behaviour of special keys even in isearch-mode.
  • Fix special key sequence , <return> which was broken by the

… …