comparison lisp/term/rxvt.el @ 88155:d7ddb3e565de

sync with trunk
author Henrik Enberg <henrik.enberg@telia.com>
date Mon, 16 Jan 2006 00:03:54 +0000
parents 5ade352e8d1c
children
comparison
equal deleted inserted replaced
88154:8ce476d3ba36 88155:d7ddb3e565de
1 ;;; rxvt.el --- define function key sequences and standard colors for rxvt 1 ;;; rxvt.el --- define function key sequences and standard colors for rxvt
2 2
3 ;; Copyright (C) 2002 Free Software Foundation, Inc. 3 ;; Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
4 4
5 ;; Author: Eli Zaretskii 5 ;; Author: Eli Zaretskii
6 ;; Keywords: terminals 6 ;; Keywords: terminals
7 7
8 ;; This file is part of GNU Emacs. 8 ;; This file is part of GNU Emacs.
17 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 ;; GNU General Public License for more details. 18 ;; GNU General Public License for more details.
19 19
20 ;; You should have received a copy of the GNU General Public License 20 ;; You should have received a copy of the GNU General Public License
21 ;; along with GNU Emacs; see the file COPYING. If not, write to the 21 ;; along with GNU Emacs; see the file COPYING. If not, write to the
22 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, 22 ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
23 ;; Boston, MA 02111-1307, USA. 23 ;; Boston, MA 02110-1301, USA.
24 24
25 ;;; Commentary: 25 ;;; Commentary:
26 26
27 ;;; Code: 27 ;;; Code:
28 28
29 ;; Set up function-key-map entries that termcap and terminfo don't know. 29 (defun terminal-init-rxvt ()
30 (let ((map (make-sparse-keymap))) 30 "Terminal initialization function for rxvt."
31 (define-key map "\e[A" [up]) 31 ;; The terminal intialization C code file might have initialized
32 (define-key map "\e[B" [down]) 32 ;; function keys F11->F42 from the termcap/terminfo information. On
33 (define-key map "\e[C" [right]) 33 ;; a PC-style keyboard these keys correspond to
34 (define-key map "\e[D" [left]) 34 ;; MODIFIER-FUNCTION_KEY, where modifier is S-, C-, C-S-. The
35 (define-key map "\e[7~" [home]) 35 ;; code here subsitutes the corresponding defintions in
36 (define-key map "\e[2~" [insert]) 36 ;; function-key-map. This substitution is needed because if a key
37 (define-key map "\e[3~" [delete]) 37 ;; definition if found in function-key-map, there are no further
38 (define-key map "\e[4~" [select]) 38 ;; lookups in other keymaps.
39 (define-key map "\e[5~" [prior]) 39 (substitute-key-definition [f11] [S-f1] function-key-map)
40 (define-key map "\e[6~" [next]) 40 (substitute-key-definition [f12] [S-f2] function-key-map)
41 (define-key map "\e[11~" [f1]) 41 (substitute-key-definition [f13] [S-f3] function-key-map)
42 (define-key map "\e[12~" [f2]) 42 (substitute-key-definition [f14] [S-f4] function-key-map)
43 (define-key map "\e[13~" [f3]) 43 (substitute-key-definition [f15] [S-f5] function-key-map)
44 (define-key map "\e[14~" [f4]) 44 (substitute-key-definition [f16] [S-f6] function-key-map)
45 (define-key map "\e[15~" [f5]) 45 (substitute-key-definition [f17] [S-f7] function-key-map)
46 (define-key map "\e[17~" [f6]) 46 (substitute-key-definition [f18] [S-f8] function-key-map)
47 (define-key map "\e[18~" [f7]) 47 (substitute-key-definition [f19] [S-f9] function-key-map)
48 (define-key map "\e[19~" [f8]) 48 (substitute-key-definition [f20] [S-f10] function-key-map)
49 (define-key map "\e[20~" [f9]) 49
50 (define-key map "\e[21~" [f10]) 50 (substitute-key-definition [f23] [C-f1] function-key-map)
51 (define-key map "\e[23~" [f11]) 51 (substitute-key-definition [f24] [C-f2] function-key-map)
52 (define-key map "\e[24~" [f12]) 52 (substitute-key-definition [f25] [C-f3] function-key-map)
53 (define-key map "\e[29~" [print]) 53 (substitute-key-definition [f26] [C-f4] function-key-map)
54 54 (substitute-key-definition [f27] [C-f5] function-key-map)
55 (define-key map "\e[11^" [C-f1]) 55 (substitute-key-definition [f28] [C-f6] function-key-map)
56 (define-key map "\e[12^" [C-f2]) 56 (substitute-key-definition [f29] [C-f7] function-key-map)
57 (define-key map "\e[13^" [C-f3]) 57 (substitute-key-definition [f30] [C-f8] function-key-map)
58 (define-key map "\e[14^" [C-f4]) 58 (substitute-key-definition [f31] [C-f9] function-key-map)
59 (define-key map "\e[15^" [C-f5]) 59 (substitute-key-definition [f32] [C-f10] function-key-map)
60 (define-key map "\e[17^" [C-f6]) 60
61 (define-key map "\e[18^" [C-f7]) 61 (substitute-key-definition [f33] [C-S-f1] function-key-map)
62 (define-key map "\e[19^" [C-f8]) 62 (substitute-key-definition [f34] [C-S-f2] function-key-map)
63 (define-key map "\e[20^" [C-f9]) 63 (substitute-key-definition [f35] [C-S-f3] function-key-map)
64 (define-key map "\e[21^" [C-f10]) 64 (substitute-key-definition [f36] [C-S-f4] function-key-map)
65 (define-key map "\e[23^" [C-f11]) 65 (substitute-key-definition [f37] [C-S-f5] function-key-map)
66 (define-key map "\e[24^" [C-f12]) 66 (substitute-key-definition [f38] [C-S-f6] function-key-map)
67 67 (substitute-key-definition [f39] [C-S-f7] function-key-map)
68 (define-key map "\e[29~" [print]) 68 (substitute-key-definition [f40] [C-S-f8] function-key-map)
69 69 (substitute-key-definition [f41] [C-S-f9] function-key-map)
70 (define-key map "\e[2;2~" [S-insert]) 70 (substitute-key-definition [f42] [C-S-f10] function-key-map)
71 (define-key map "\e[3$" [S-delete]) 71
72 72 ;; Set up function-key-map entries that termcap and terminfo don't know.
73 (define-key map "\e[2^" [C-insert]) 73 (let ((map (make-sparse-keymap)))
74 (define-key map "\e[3^" [C-delete]) 74 (define-key map "\e[A" [up])
75 (define-key map "\e[5^" [C-prior]) 75 (define-key map "\e[B" [down])
76 (define-key map "\e[6^" [C-next]) 76 (define-key map "\e[C" [right])
77 (define-key map "\eOd" [C-left]) 77 (define-key map "\e[D" [left])
78 (define-key map "\eOc" [C-right]) 78 (define-key map "\e[2~" [insert])
79 (define-key map "\eOa" [C-up]) 79 (define-key map "\e[3~" [delete])
80 (define-key map "\eOb" [C-down]) 80 (define-key map "\e[4~" [select])
81 81 (define-key map "\e[5~" [prior])
82 (define-key map "\e[5$" [S-prior]) 82 (define-key map "\e[6~" [next])
83 (define-key map "\e[6$" [S-next]) 83 (define-key map "\e[7~" [home])
84 (define-key map "\e[8$" [S-end]) 84 (define-key map "\e[8~" [end])
85 (define-key map "\e[7$" [S-home]) 85 (define-key map "\e[11~" [f1])
86 (define-key map "\e[d" [S-left]) 86 (define-key map "\e[12~" [f2])
87 (define-key map "\e[c" [S-right]) 87 (define-key map "\e[13~" [f3])
88 (define-key map "\e[a" [S-up]) 88 (define-key map "\e[14~" [f4])
89 (define-key map "\e[b" [S-down]) 89 (define-key map "\e[15~" [f5])
90 90 (define-key map "\e[17~" [f6])
91 ;; Use inheritance to let the main keymap override those defaults. 91 (define-key map "\e[18~" [f7])
92 ;; This way we don't override terminfo-derived settings or settings 92 (define-key map "\e[19~" [f8])
93 ;; made in the .emacs file. 93 (define-key map "\e[20~" [f9])
94 (set-keymap-parent map (keymap-parent function-key-map)) 94 (define-key map "\e[21~" [f10])
95 (set-keymap-parent function-key-map map)) 95 ;; The strings emitted by f11 and f12 are the same as the strings
96 ;; emitted by S-f1 and S-f2, so don't define f11 and f12.
97 ;; (define-key map "\e[23~" [f11])
98 ;; (define-key map "\e[24~" [f12])
99 (define-key map "\e[29~" [print])
100
101 (define-key map "\e[11^" [C-f1])
102 (define-key map "\e[12^" [C-f2])
103 (define-key map "\e[13^" [C-f3])
104 (define-key map "\e[14^" [C-f4])
105 (define-key map "\e[15^" [C-f5])
106 (define-key map "\e[17^" [C-f6])
107 (define-key map "\e[18^" [C-f7])
108 (define-key map "\e[19^" [C-f8])
109 (define-key map "\e[20^" [C-f9])
110 (define-key map "\e[21^" [C-f10])
111
112 (define-key map "\e[23~" [S-f1])
113 (define-key map "\e[24~" [S-f2])
114 (define-key map "\e[25~" [S-f3])
115 (define-key map "\e[26~" [S-f4])
116 (define-key map "\e[28~" [S-f5])
117 (define-key map "\e[29~" [S-f6])
118 (define-key map "\e[31~" [S-f7])
119 (define-key map "\e[32~" [S-f8])
120 (define-key map "\e[33~" [S-f9])
121 (define-key map "\e[34~" [S-f10])
122
123 (define-key map "\e[23^" [C-S-f1])
124 (define-key map "\e[24^" [C-S-f2])
125 (define-key map "\e[25^" [C-S-f3])
126 (define-key map "\e[26^" [C-S-f4])
127 (define-key map "\e[28^" [C-S-f5])
128 (define-key map "\e[29^" [C-S-f6])
129 (define-key map "\e[31^" [C-S-f7])
130 (define-key map "\e[32^" [C-S-f8])
131 (define-key map "\e[33^" [C-S-f9])
132 (define-key map "\e[34^" [C-S-f10])
133
134 (define-key map "\e[2^" [C-insert])
135 (define-key map "\e[3^" [C-delete])
136 (define-key map "\e[5^" [C-prior])
137 (define-key map "\e[6^" [C-next])
138 (define-key map "\e[7^" [C-home])
139 (define-key map "\e[8^" [C-end])
140 (define-key map "\eOd" [C-left])
141 (define-key map "\eOc" [C-right])
142 (define-key map "\eOa" [C-up])
143 (define-key map "\eOb" [C-down])
144
145 (define-key map "\e[2;2~" [S-insert])
146 (define-key map "\e[3$" [S-delete])
147 (define-key map "\e[5$" [S-prior])
148 (define-key map "\e[6$" [S-next])
149 (define-key map "\e[7$" [S-home])
150 (define-key map "\e[8$" [S-end])
151 (define-key map "\e[d" [S-left])
152 (define-key map "\e[c" [S-right])
153 (define-key map "\e[a" [S-up])
154 (define-key map "\e[b" [S-down])
155
156 ;; Use inheritance to let the main keymap override those defaults.
157 ;; This way we don't override terminfo-derived settings or settings
158 ;; made in the .emacs file.
159 (set-keymap-parent map (keymap-parent function-key-map))
160 (set-keymap-parent function-key-map map))
161
162 ;; Initialize colors and background mode.
163 (rxvt-register-default-colors)
164 (rxvt-set-background-mode)
165 ;; This recomputes all the default faces given the colors we've just set up.
166 (tty-set-up-initial-frame-faces))
96 167
97 ;; Set up colors, for those versions of rxvt that support it. 168 ;; Set up colors, for those versions of rxvt that support it.
98 (defvar rxvt-standard-colors 169 (defvar rxvt-standard-colors
99 ;; The names of the colors in the comments taken from the rxvt.1 man 170 ;; The names of the colors in the comments taken from the rxvt.1 man
100 ;; page; the corresponding RGB values--from rgb.txt. 171 ;; page; the corresponding RGB values--from rgb.txt.
103 ("green" 2 ( 0 205 0)) ; green3 174 ("green" 2 ( 0 205 0)) ; green3
104 ("yellow" 3 (205 205 0)) ; yellow3 175 ("yellow" 3 (205 205 0)) ; yellow3
105 ("blue" 4 ( 0 0 205)) ; blue3 176 ("blue" 4 ( 0 0 205)) ; blue3
106 ("magenta" 5 (205 0 205)) ; magenta3 177 ("magenta" 5 (205 0 205)) ; magenta3
107 ("cyan" 6 ( 0 205 205)) ; cyan3 178 ("cyan" 6 ( 0 205 205)) ; cyan3
108 ("white" 7 (250 235 215)) ; AntiqueWhite 179 ("white" 7 (229 229 229)) ; gray90
109 ("brightblack" 8 ( 64 64 64)) ; gray25 180 ("brightblack" 8 ( 77 77 77)) ; gray30
110 ("brightred" 9 (255 0 0)) ; red 181 ("brightred" 9 (255 0 0)) ; red
111 ("brightgreen" 10 ( 0 255 0)) ; green 182 ("brightgreen" 10 ( 0 255 0)) ; green
112 ("brightyellow" 11 (255 255 0)) ; yellow 183 ("brightyellow" 11 (255 255 0)) ; yellow
113 ("brightblue" 12 ( 0 0 255)) ; blue 184 ("brightblue" 12 ( 0 0 255)) ; blue
114 ("brightmagenta" 13 (255 0 255)) ; magenta 185 ("brightmagenta" 13 (255 0 255)) ; magenta
137 (mapcar 'rxvt-rgb-convert-to-16bit 208 (mapcar 'rxvt-rgb-convert-to-16bit
138 (car (cddr color)))) 209 (car (cddr color))))
139 (setq colors (cdr colors) 210 (setq colors (cdr colors)
140 color (car colors) 211 color (car colors)
141 ncolors (1- ncolors))) 212 ncolors (1- ncolors)))
213 (when (> ncolors 0)
214 (cond
215 ((= ncolors 240) ; 256-color rxvt
216 ;; 216 non-gray colors first
217 (let ((r 0) (g 0) (b 0))
218 (while (> ncolors 24)
219 ;; This and other formulae taken from 256colres.pl and
220 ;; 88colres.pl in the xterm distribution.
221 (tty-color-define (format "color-%d" (- 256 ncolors))
222 (- 256 ncolors)
223 (mapcar 'rxvt-rgb-convert-to-16bit
224 (list (round (* r 42.5))
225 (round (* g 42.5))
226 (round (* b 42.5)))))
227 (setq b (1+ b))
228 (if (> b 5)
229 (setq g (1+ g)
230 b 0))
231 (if (> g 5)
232 (setq r (1+ r)
233 g 0))
234 (setq ncolors (1- ncolors))))
235 ;; Now the 24 gray colors
236 (while (> ncolors 0)
237 (setq color (rxvt-rgb-convert-to-16bit (+ 8 (* (- 24 ncolors) 10))))
238 (tty-color-define (format "color-%d" (- 256 ncolors))
239 (- 256 ncolors)
240 (list color color color))
241 (setq ncolors (1- ncolors))))
242
243 ((= ncolors 72) ; rxvt-unicode
244 ;; 64 non-gray colors
245 (let ((levels '(0 139 205 255))
246 (r 0) (g 0) (b 0))
247 (while (> ncolors 8)
248 (tty-color-define (format "color-%d" (- 88 ncolors))
249 (- 88 ncolors)
250 (mapcar 'rxvt-rgb-convert-to-16bit
251 (list (nth r levels)
252 (nth g levels)
253 (nth b levels))))
254 (setq b (1+ b))
255 (if (> b 3)
256 (setq g (1+ g)
257 b 0))
258 (if (> g 3)
259 (setq r (1+ r)
260 g 0))
261 (setq ncolors (1- ncolors))))
262 ;; Now the 8 gray colors
263 (while (> ncolors 0)
264 (setq color (rxvt-rgb-convert-to-16bit
265 (floor
266 (if (= ncolors 8)
267 46.36363636
268 (+ (* (- 8 ncolors) 23.18181818) 69.54545454)))))
269 (tty-color-define (format "color-%d" (- 88 ncolors))
270 (- 88 ncolors)
271 (list color color color))
272 (setq ncolors (1- ncolors))))
273 (t (error "Unsupported number of rxvt colors (%d)" (+ 16 ncolors)))))
142 ;; Modifying color mappings means realized faces don't use the 274 ;; Modifying color mappings means realized faces don't use the
143 ;; right colors, so clear them. 275 ;; right colors, so clear them.
144 (clear-face-cache))) 276 (clear-face-cache)))
145 277
146 ;; rxvt puts the default colors into an environment variable 278 ;; rxvt puts the default colors into an environment variable
148 ;; intelligent way than the default guesswork in startup.el. 280 ;; intelligent way than the default guesswork in startup.el.
149 (defun rxvt-set-background-mode () 281 (defun rxvt-set-background-mode ()
150 "Set background mode as appropriate for the default rxvt colors." 282 "Set background mode as appropriate for the default rxvt colors."
151 (let ((fgbg (getenv "COLORFGBG")) 283 (let ((fgbg (getenv "COLORFGBG"))
152 bg rgb) 284 bg rgb)
153 (setq frame-background-mode 'light) ; default 285 (setq default-frame-background-mode 'light)
154 (when (and fgbg 286 (when (and fgbg
155 (string-match ".*;\\([0-9][0-9]?\\)\\'" fgbg)) 287 (string-match ".*;\\([0-9][0-9]?\\)\\'" fgbg))
156 (setq bg (string-to-number (substring fgbg (match-beginning 1)))) 288 (setq bg (string-to-number (substring fgbg (match-beginning 1))))
157 ;; The next line assumes that rxvt-standard-colors are ordered 289 ;; The next line assumes that rxvt-standard-colors are ordered
158 ;; by the color index in the ascending order! 290 ;; by the color index in the ascending order!
161 ;; computation below. 293 ;; computation below.
162 (if (< (apply '+ rgb) 294 (if (< (apply '+ rgb)
163 ;; The following line assumes that white is the 15th 295 ;; The following line assumes that white is the 15th
164 ;; color in rxvt-standard-colors. 296 ;; color in rxvt-standard-colors.
165 (* (apply '+ (car (cddr (nth 15 rxvt-standard-colors)))) 0.6)) 297 (* (apply '+ (car (cddr (nth 15 rxvt-standard-colors)))) 0.6))
166 (setq frame-background-mode 'dark))) 298 (setq default-frame-background-mode 'dark)))
167 (frame-set-background-mode (selected-frame)))) 299 (frame-set-background-mode (selected-frame))))
168 300
169 ;; Do it! 301 ;; arch-tag: 20cf2fb6-6318-4bab-9dbf-1d15048f2257
170 (rxvt-register-default-colors)
171 (rxvt-set-background-mode)
172 ;; This recomputes all the default faces given the colors we've just set up.
173 (tty-set-up-initial-frame-faces)
174
175 ;;; rxvt.el ends here 302 ;;; rxvt.el ends here