summaryrefslogtreecommitdiff
path: root/app-editors/emacs/files/emacs-23.1-backspace.patch
blob: bc547af8a27b72d95eeb4131713a997d4d7a524a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
2009-10-22  Stefan Monnier  <monnier@iro.umontreal.ca>

	* simple.el (normal-erase-is-backspace-mode): Use input-decode-map
	rather than fiddling with global-map bindings, since it should only
	affect per-terminal settings.
	See http://bugs.gentoo.org/show_bug.cgi?id=289709.

--- emacs-23.1-orig/lisp/simple.el
+++ emacs-23.1/lisp/simple.el
@@ -6269,31 +6269,27 @@
 	   (let* ((bindings
 		   `(([M-delete] [M-backspace])
 		     ([C-M-delete] [C-M-backspace])
-		     (,esc-map
-		      [C-delete] [C-backspace])))
+		     ([?\e C-delete] [?\e 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 [backspace] [?\C-?])
+                   (dolist (b bindings)
+                     ;; Not sure if input-decode-map is really right, but
+                     ;; keyboard-translate-table (used below) only works
+                     ;; for integer events, and key-translation-table is
+                     ;; global (like the global-map, used earlier).
+                     (define-key input-decode-map (car b) nil)
+                     (define-key input-decode-map (cadr b) nil)))
 	       (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)))))))
+	       (define-key local-function-key-map [backspace] [?\C-?])
+               (dolist (b bindings)
+                 (define-key input-decode-map (car b) (cadr b))
+                 (define-key input-decode-map (cadr b) (car b))))))
 	  (t
 	   (if enabled
 	       (progn