DESCRIPTION is the descriptive string for the syntax.")
+;;; Handling of Backspace and Delete keys.
+
+(defcustom delete-key-deletes-forward nil
+ "Whether the Delete key should delete forward or not.
+
+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
+
+If not running under a window system, setting 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
+the F1 key. You should probably not use this setting if you don't
+have both Backspace, Delete and F1 keys."
+ :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))
+ (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-deleted-forward'."
+ (interactive "P")
+ (setq delete-key-deletes-forward
+ (if arg
+ (> (prefix-numeric-value arg) 0)
+ (not delete-key-deletes-forward)))
+
+ (cond ((memq window-system '(x w32 mac))
+ (if delete-key-deletes-forward
+ (progn
+ (define-key global-map [delete] 'delete-char)
+ (define-key global-map [C-delete] 'kill-word)
+ (define-key esc-map [C-delete] 'kill-sexp)
+ (define-key global-map [C-M-delete] 'kill-sexp))
+ (define-key esc-map [C-delete] 'backward-kill-sexp)
+ (define-key global-map [C-M-delete] 'backward-kill-sexp)
+ (define-key global-map [C-delete] 'backward-kill-word)
+ (define-key global-map [delete] 'delete-backward-char)))
+ (t
+ (if delete-key-deletes-forward
+ (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)
+ (if (interactive-p)
+ (message "Delete key deletes %s"
+ (if delete-key-deletes-forward "forward" "backward"))))
+
+
;;; Misc
(defun byte-compiling-files-p ()