;;; Handling of Backspace and Delete keys.
-(defcustom delete-key-deletes-forward nil
- "Whether the Delete key should delete forward or not.
+(defcustom normal-erase-is-backspace nil
+ "If non-nil, Delete key deletes forward and Backspace key deletes backward.
On window systems, the default value of this option is chosen
according to the keyboard used. If the keyboard has both a Backspace
key and a Delete key, and both are mapped to their usual meanings, the
option's default value is set to t, so that Backspace can be used to
-delete backward, and Delete can be used used to delete forward
+delete backward, and Delete can be used to delete forward.
-If not running under a window system, setting this option accomplishes
+If not running under a window system, customizing this option accomplishes
a similar effect by mapping C-h, which is usually generated by the
Backspace key, to DEL, and by mapping DEL to C-d via
`keyboard-translate'. The former functionality of C-h is available on
have both Backspace, Delete and F1 keys.
Setting this variable with setq doesn't take effect. Programmatically,
-call `delete-key-deleted-forward-mode' instead."
+call `normal-erase-is-backspace-mode' (which see) instead."
:type 'boolean
:group 'editing-basics
:version "21.1"
:set (lambda (symbol value)
;; The fboundp is because of a problem with :set when
;; dumping Emacs. It doesn't really matter.
- (if (fboundp 'delete-key-deletes-forward-mode)
- (delete-key-deletes-forward-mode (or value 0))
+ (if (fboundp 'normal-erase-is-backspace-mode)
+ (normal-erase-is-backspace-mode (or value 0))
(set-default symbol value))))
-(defun delete-key-deletes-forward-mode (&optional arg)
- "Toggle Delete key deleting forward or backward.
-With numeric arg, turn the mode on if and only iff ARG is positive.
-For more details, see `delete-key-deletes-forward'."
+(defun normal-erase-is-backspace-mode (&optional arg)
+ "Toggle the Erase and Delete mode of the Backspace and Delete keys.
+
+With numeric arg, turn the mode on if and only ARG is positive.
+
+On window systems, when this mode is on, Delete is mapped to C-d and
+Backspace is mapped to DEL; when this mode is off, both Delete and
+Backspace are mapped to DEL. (The remapping goes via
+`function-key-map', so binding Delete or Backspace in the global or
+local keymap will override that.)
+
+In addition, on window systems, the bindings of C-Delete, M-Delete,
+C-M-Delete, C-Backspace, M-Backspace, and C-M-Backspace are changed in
+the global keymap in accordance with the functionality of Delete and
+Backspace. For example, if Delete is remapped to C-d, which deletes
+forward, C-Delete is bound to `kill-word', but if Delete is remapped
+to DEL, which deletes backward, C-Delete is bound to
+`backward-kill-word'.
+
+If not running on a window system, a similar effect is accomplished by
+remapping C-h (normally produced by the Backspace key) and DEL via
+`keyboard-translate': if this mode is on, C-h is mapped to DEL and DEL
+to C-d; if it's off, the keys are not remapped.
+
+When not running on a window system, and this mode is turned on, the
+former functionality of C-h is available on the F1 key. You should
+probably not turn on this mode on a text-only terminal if you don't
+have both Backspace, Delete and F1 keys.
+
+See also `normal-erase-is-backspace'."
(interactive "P")
- (setq delete-key-deletes-forward
+ (setq normal-erase-is-backspace
(if arg
(> (prefix-numeric-value arg) 0)
- (not delete-key-deletes-forward)))
+ (not normal-erase-is-backspace)))
(cond ((or (memq window-system '(x w32 mac pc))
(memq system-type '(ms-dos windows-nt)))
- (let ((bindings
+ (let ((bindings
`(([C-delete] [C-backspace])
([M-delete] [M-backspace])
([C-M-delete] [C-M-backspace])
[C-delete] [C-backspace])))
(old-state (lookup-key function-key-map [delete])))
- (if delete-key-deletes-forward
+ (if normal-erase-is-backspace
(progn
(define-key function-key-map [delete] [?\C-d])
(define-key function-key-map [kp-delete] [?\C-d])
(define-key map key1 binding2)
(define-key map key2 binding1)))))))
(t
- (if delete-key-deletes-forward
+ (if normal-erase-is-backspace
(progn
(keyboard-translate ?\C-h ?\C-?)
(keyboard-translate ?\C-? ?\C-d))
(keyboard-translate ?\C-h ?\C-h)
(keyboard-translate ?\C-? ?\C-?))))
- (run-hooks 'delete-key-deletes-forward-hook)
+ (run-hooks 'normal-erase-is-backspace-hook)
(if (interactive-p)
- (message "Delete key deletes %s"
- (if delete-key-deletes-forward "forward" "backward"))))
+ (message "Delete key deletes %s"
+ (if normal-erase-is-backspace "forward" "backward"))))
+
-
;;; Misc
(defun byte-compiling-files-p ()