Emacs disable easy-keys minor-mode
Table of Contents
1 Abstract
Train yourself to use the proper Emacs movement keys.
2 News
- 23. July 2012: Made it a proper Emacs package and added it to the marmalade repository.
- 13. July 2012: Updated the code to not enable the mode in the minibuffer. In the minibuffer the suggested no-easy keys to use are wrong or no alternative exists no-easy key exists.
- 28. June 2011: I had switched around some 'b' and 'f' keys. Thanks to anonymous commenter for pointing it out.
- 12. December 2009: Published page.
3 Description
This mode teaches you to use the proper Emacs movement keys in a rather harsh manner.
No-easy-keys disables arrow, end, home and delete keys, as well as their control and meta prefixes. When using any of these keys, you instead get a message informing you of the proper Emacs shortcut you should use instead (e.g. pressing down informs you to use C-n).
The easy keys are not disabled in the minibuffer. The minibuffer has different proper keys replacements than regular buffers and depending on various extensions such as icicles, ido, etc.
4 Github
5 Download
6 Installation
To install, save no-easy-keys.el
in your load path or install the
package no-easy-keys from the marmalade repository. To initialize
no-easy-keys add the following to your .emacs
file:
(require 'no-easy-keys) (no-easy-keys 1)
7 Code
;;; no-easy-keys.el --- Learn the proper Emacs movement keys ;; Copyright (C) 2009-2012 Dan Amlund Thomsen ;; Author: Dan Amlund Thomsen <dan@danamlund.dk> ;; URL: http://danamlund.dk/emacs/no-easy-keys.html ;; Version: 1.0.2 ;; Created: 2009-12-12 ;; By: Dan Amlund Thomsen ;; Keywords: training, pinky ;; COPYRIGHT NOTICE ;; ;; This program is free software; you can redistribute it and/or ;; modify it under the terms of the GNU General Public License as ;; published by the Free Software Foundation; either version 2 of the ;; License, or (at your option) any later version. ;; ;; This program is distributed in the hope that it will be useful, but ;; WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ;; General Public License for more details. ;;; Install: ;; To install, save no-easy-keys.el in your load path and add the ;; following to your .emacs file: ;; ;; (require 'no-easy-keys) ;; (no-easy-keys 1) ;; You can toggle no-easy-keys using 'M-x no-easy-keys'. ;;; Commentary: ;; This mode teaches you to use the proper Emacs movement keys in a ;; rather harsh manner. ;; No-easy-keys disables arrow, end, home and delete keys, as well as ;; their control and meta prefixes. When using any of these keys, you ;; instead get a message informing you of the proper Emacs shortcut ;; you should use instead (e.g. pressing down informs you to use C-n). ;; The easy keys are not disabled in the minibuffer. The minibuffer ;; has different proper keys replacements than regular buffers and ;; depending on various extensions such as icicles, ido, etc. ;;; Code: (defvar no-easy-keys-minor-mode-map (make-keymap) "no-easy-keys-minor-mode keymap.") (let ((f (lambda (m) `(lambda () (interactive) (message (concat "No! use " ,m " instead.")))))) (dolist (l '(("<left>" . "C-b") ("<right>" . "C-f") ("<up>" . "C-p") ("<down>" . "C-n") ("<C-left>" . "M-b") ("<C-right>" . "M-f") ("<C-up>" . "M-{") ("<C-down>" . "M-}") ("<M-left>" . "M-b") ("<M-right>" . "M-f") ("<M-up>" . "M-{") ("<M-down>" . "M-}") ("<delete>" . "C-d") ("<C-delete>" . "M-d") ("<M-delete>" . "M-d") ("<next>" . "C-v") ("<C-next>" . "M-x <") ("<prior>" . "M-v") ("<C-prior>" . "M-x >") ("<home>" . "C-a") ("<C-home>" . "M->") ("<C-home>" . "M-<") ("<end>" . "C-e") ("<C-end>" . "M->"))) (define-key no-easy-keys-minor-mode-map (read-kbd-macro (car l)) (funcall f (cdr l))))) (define-minor-mode no-easy-keys-minor-mode "A minor mode that disables the arrow-keys, pg-up/down, delete and backspace. Use 'M-x no-easy-keys' to toggle this mode in all buffers except the minibuffer. Add (no-easy-keys 1) to your .emacs to enable no-easy-keys by default." nil nil 'no-easy-keys-minor-mode-map) (defun no-easy-keys-hook () (interactive) (unless (minibufferp) (no-easy-keys-minor-mode 1))) (define-globalized-minor-mode no-easy-keys no-easy-keys-minor-mode no-easy-keys-hook) (provide 'no-easy-keys) ;;; no-easy-keys.el ends here