# HG changeset patch # User Karoly Lorentey # Date 1136251322 0 # Node ID d2af586aefe4e013eddfd92a7dac8a081f8bd767 # Parent a78c6255d3be1616adec10a2607fe5b7c9f3c395 Fix Delete keys under X (for good, this time). * lisp/simple.el (normal-erase-is-backspace-mode): Fix enabled/disabled logic. git-archimport-id: lorentey@elte.hu--2004/emacs--multi-tty--0--patch-488 diff -r a78c6255d3be -r d2af586aefe4 lisp/simple.el --- a/lisp/simple.el Mon Jan 02 09:07:22 2006 +0000 +++ b/lisp/simple.el Tue Jan 03 01:22:02 2006 +0000 @@ -5369,57 +5369,57 @@ See also `normal-erase-is-backspace'." (interactive "P") - (set-terminal-parameter - nil 'normal-erase-is-backspace - (if (or (and arg (> (prefix-numeric-value arg) 0)) - (not (eq 1 (terminal-parameter nil 'normal-erase-is-backspace)))) - 0 - 1)) - - (cond ((or (memq window-system '(x w32 mac pc)) - (memq system-type '(ms-dos windows-nt))) - (let* ((bindings - `(([C-delete] [C-backspace]) - ([M-delete] [M-backspace]) - ([C-M-delete] [C-M-backspace]) - (,esc-map - [C-delete] [C-backspace]))) - (old-state (lookup-key local-function-key-map [delete]))) - - (if (eq 1 (terminal-parameter nil 'normal-erase-is-backspace)) + (let ((enabled (or (and arg (> (prefix-numeric-value arg) 0)) + (and (not arg) + (not (eq 1 (terminal-parameter + nil 'normal-erase-is-backspace))))))) + (set-terminal-parameter nil 'normal-erase-is-backspace + (if enabled 1 0)) + + (cond ((or (memq window-system '(x w32 mac pc)) + (memq system-type '(ms-dos windows-nt))) + (let* ((bindings + `(([C-delete] [C-backspace]) + ([M-delete] [M-backspace]) + ([C-M-delete] [C-M-backspace]) + (,esc-map + [C-delete] [C-backspace]))) + (old-state (lookup-key local-function-key-map [delete]))) + + (if enabled + (progn + (define-key local-function-key-map [delete] [?\C-d]) + (define-key local-function-key-map [kp-delete] [?\C-d]) + (define-key local-function-key-map [backspace] [?\C-?])) + (define-key local-function-key-map [delete] [?\C-?]) + (define-key local-function-key-map [kp-delete] [?\C-?]) + (define-key local-function-key-map [backspace] [?\C-?])) + + ;; Maybe swap bindings of C-delete and C-backspace, etc. + (unless (equal old-state (lookup-key local-function-key-map [delete])) + (dolist (binding bindings) + (let ((map global-map)) + (when (keymapp (car binding)) + (setq map (car binding) binding (cdr binding))) + (let* ((key1 (nth 0 binding)) + (key2 (nth 1 binding)) + (binding1 (lookup-key map key1)) + (binding2 (lookup-key map key2))) + (define-key map key1 binding2) + (define-key map key2 binding1))))))) + (t + (if enabled (progn - (define-key local-function-key-map [delete] [?\C-d]) - (define-key local-function-key-map [kp-delete] [?\C-d]) - (define-key local-function-key-map [backspace] [?\C-?])) - (define-key local-function-key-map [delete] [?\C-?]) - (define-key local-function-key-map [kp-delete] [?\C-?]) - (define-key local-function-key-map [backspace] [?\C-?])) - - ;; Maybe swap bindings of C-delete and C-backspace, etc. - (unless (equal old-state (lookup-key local-function-key-map [delete])) - (dolist (binding bindings) - (let ((map global-map)) - (when (keymapp (car binding)) - (setq map (car binding) binding (cdr binding))) - (let* ((key1 (nth 0 binding)) - (key2 (nth 1 binding)) - (binding1 (lookup-key map key1)) - (binding2 (lookup-key map key2))) - (define-key map key1 binding2) - (define-key map key2 binding1))))))) - (t - (if (eq 1 (terminal-parameter nil '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 'normal-erase-is-backspace-hook) - (if (interactive-p) - (message "Delete key deletes %s" - (if (terminal-parameter nil 'normal-erase-is-backspace) - "forward" "backward")))) + (keyboard-translate ?\C-h ?\C-?) + (keyboard-translate ?\C-? ?\C-d)) + (keyboard-translate ?\C-h ?\C-h) + (keyboard-translate ?\C-? ?\C-?)))) + + (run-hooks 'normal-erase-is-backspace-hook) + (if (interactive-p) + (message "Delete key deletes %s" + (if (terminal-parameter nil 'normal-erase-is-backspace) + "forward" "backward"))))) (defvar vis-mode-saved-buffer-invisibility-spec nil "Saved value of `buffer-invisibility-spec' when Visible mode is on.")