* comint.el (comint-dynamic-simple-complete):
[bpt/emacs.git] / lisp / bindings.el
CommitLineData
1cd7adc6 1;;; bindings.el --- define standard key bindings and some variables
4d120e8c 2
0d30b337 3;; Copyright (C) 1985, 1986, 1987, 1992, 1993, 1994, 1995, 1996, 1999,
409cc4a3 4;; 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
4d120e8c
RS
5
6;; Maintainer: FSF
7;; Keywords: internal
8
9;; This file is part of GNU Emacs.
10
11;; GNU Emacs is free software; you can redistribute it and/or modify
12;; it under the terms of the GNU General Public License as published by
b4aa6026 13;; the Free Software Foundation; either version 3, or (at your option)
4d120e8c
RS
14;; any later version.
15
16;; GNU Emacs is distributed in the hope that it will be useful,
17;; but WITHOUT ANY WARRANTY; without even the implied warranty of
18;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19;; GNU General Public License for more details.
20
21;; You should have received a copy of the GNU General Public License
22;; along with GNU Emacs; see the file COPYING. If not, write to
086add15
LK
23;; the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
24;; Boston, MA 02110-1301, USA.
4d120e8c
RS
25
26;;; Commentary:
27
28;;; !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
29;;; Special formatting conventions are used in this file!
30;;;
8a42b336 31;;; A backslash-newline is used at the beginning of a documentation string
4d120e8c
RS
32;;; when that string should be stored in the file etc/DOCnnn, not in core.
33;;;
34;;; Such strings read into Lisp as numbers (during the pure-loading phase).
35;;;
36;;; But you must obey certain rules to make sure the string is understood
688953b5 37;;; and goes into etc/DOCnnn properly.
4d120e8c
RS
38;;;
39;;; The doc string must appear in the standard place in a call to
40;;; defun, autoload, defvar or defconst. No Lisp macros are recognized.
41;;; The open-paren starting the definition must appear in column 0.
42;;;
43;;; In defvar and defconst, there is an additional rule:
44;;; The double-quote that starts the string must be on the same
45;;; line as the defvar or defconst.
46;;; !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
47
48;;; Code:
49
1ebfdece
GM
50(defun make-mode-line-mouse-map (mouse function) "\
51Return a keymap with single entry for mouse key MOUSE on the mode line.
52MOUSE is defined to run function FUNCTION with no args in the buffer
dfdabcf9
DL
53corresponding to the mode line clicked."
54 (let ((map (make-sparse-keymap)))
1ebfdece 55 (define-key map (vector 'mode-line mouse) function)
dfdabcf9
DL
56 map))
57
e9580d71
GM
58
59(defun mode-line-toggle-read-only (event)
60 "Like `toggle-read-only', for the mode-line."
61 (interactive "e")
62 (save-selected-window
63 (select-window (posn-window (event-start event)))
64 (toggle-read-only)
65 (force-mode-line-update)))
66
67
68(defun mode-line-toggle-modified (event)
69 "Toggle the buffer-modified flag from the mode-line."
24127af0 70 (interactive "e")
e9580d71
GM
71 (save-selected-window
72 (select-window (posn-window (event-start event)))
73 (set-buffer-modified-p (not (buffer-modified-p)))
74 (force-mode-line-update)))
75
76
77(defun mode-line-widen (event)
78 "Widen a buffer from the mode-line."
24127af0 79 (interactive "e")
e9580d71
GM
80 (save-selected-window
81 (select-window (posn-window (event-start event)))
82 (widen)
83 (force-mode-line-update)))
84
85
86(defun mode-line-abbrev-mode (event)
87 "Turn off `abbrev-mode' from the mode-line."
24127af0 88 (interactive "e")
e9580d71
GM
89 (save-selected-window
90 (select-window (posn-window (event-start event)))
91 (abbrev-mode)
92 (force-mode-line-update)))
93
94
95(defun mode-line-auto-fill-mode (event)
96 "Turn off `auto-fill-mode' from the mode-line."
24127af0 97 (interactive "e")
e9580d71
GM
98 (save-selected-window
99 (select-window (posn-window (event-start event)))
100 (auto-fill-mode)
101 (force-mode-line-update)))
102
103
5e1cddda
DL
104(defvar mode-line-input-method-map
105 (let ((map (make-sparse-keymap)))
106 (define-key map [mode-line mouse-2]
107 (lambda (e)
108 (interactive "e")
109 (save-selected-window
110 (select-window
111 (posn-window (event-start e)))
112 (toggle-input-method)
113 (force-mode-line-update))))
114 (define-key map [mode-line mouse-3]
115 (lambda (e)
116 (interactive "e")
117 (save-selected-window
118 (select-window
119 (posn-window (event-start e)))
120 (describe-current-input-method))))
121 (purecopy map)))
122
f3185924
GM
123
124(defvar mode-line-coding-system-map
125 (let ((map (make-sparse-keymap)))
da16962a 126 (define-key map [mode-line mouse-1]
f3185924
GM
127 (lambda (e)
128 (interactive "e")
129 (save-selected-window
130 (select-window (posn-window (event-start e)))
131 (when (and enable-multibyte-characters
132 buffer-file-coding-system)
133 (describe-coding-system buffer-file-coding-system)))))
134 (purecopy map))
135 "Local keymap for the coding-system part of the mode line.")
136
137
6b61353c 138(defun mode-line-change-eol (event)
18a9f968 139 "Cycle through the various possible kinds of end-of-line styles."
6b61353c
KH
140 (interactive "e")
141 (save-selected-window
142 (select-window (posn-window (event-start event)))
143 (let ((eol (coding-system-eol-type buffer-file-coding-system)))
144 (set-buffer-file-coding-system
145 (cond ((eq eol 0) 'dos) ((eq eol 1) 'mac) (t 'unix))))))
18a9f968
SM
146
147(defvar mode-line-eol-desc-cache nil)
148
149(defun mode-line-eol-desc ()
150 (let* ((eol (coding-system-eol-type buffer-file-coding-system))
151 (mnemonic (coding-system-eol-type-mnemonic buffer-file-coding-system))
152 (desc (assq eol mode-line-eol-desc-cache)))
153 (if (and desc (eq (cadr desc) mnemonic))
154 (cddr desc)
155 (if desc (setq mode-line-eol-desc-cache nil)) ;Flush the cache if stale.
156 (setq desc
157 (propertize
158 mnemonic
40fabc71 159 'help-echo (format "End-of-line style: %s\nmouse-1 to cycle"
18a9f968
SM
160 (if (eq eol 0) "Unix-style LF"
161 (if (eq eol 1) "Dos-style CRLF"
162 (if (eq eol 2) "Mac-style CR"
163 "Undecided"))))
164 'keymap
165 (eval-when-compile
166 (let ((map (make-sparse-keymap)))
da16962a 167 (define-key map [mode-line mouse-1] 'mode-line-change-eol)
359e4563
MY
168 map))
169 'mouse-face 'mode-line-highlight))
18a9f968
SM
170 (push (cons eol (cons mnemonic desc)) mode-line-eol-desc-cache)
171 desc)))
172
27d8b4bf
KL
173(defvar mode-line-client
174 `(""
175 (:propertize ("" (:eval (if (frame-parameter nil 'client) "@" "")))
6bccb6c5 176 help-echo "Emacsclient frame"))
27d8b4bf
KL
177 "Mode-line control for identifying Emacsclient frames.")
178
dfdabcf9
DL
179(defvar mode-line-mule-info
180 `(""
9ff33afb 181 (current-input-method
27451bb4
RS
182 (:propertize ("" current-input-method-title)
183 help-echo (concat
f46b8f6d 184 "Current input method: "
27451bb4 185 current-input-method
f46b8f6d
DN
186 "\n\
187mouse-2: Disable input method\n\
188mouse-3: Describe current input method")
359e4563
MY
189 local-map ,mode-line-input-method-map
190 mouse-face mode-line-highlight))
3beb81fc 191 ,(propertize
18a9f968 192 "%z"
7ed93890 193 'help-echo
7e98f74c
RS
194 #'(lambda (window object point)
195 (with-current-buffer (window-buffer window)
196 ;; Don't show this tip if the coding system is nil,
197 ;; it reads like a bug, and is not useful anyway.
198 (when buffer-file-coding-system
f46b8f6d
DN
199 (format "Buffer coding system %s\nmouse-1: describe coding system"
200 (if enable-multibyte-characters
201 (concat "(multi-byte): "
202 (symbol-name buffer-file-coding-system))
203 (concat "(unibyte): "
204 (symbol-name buffer-file-coding-system)))))))
359e4563 205 'mouse-face 'mode-line-highlight
18a9f968
SM
206 'local-map mode-line-coding-system-map)
207 (:eval (mode-line-eol-desc)))
44c034c1
KH
208 "Mode-line control for displaying information of multilingual environment.
209Normally it displays current input method (if any activated) and
210mnemonics of the following coding systems:
211 coding system for saving or writing the current buffer
212 coding system for keyboard input (if Emacs is running on terminal)
ebc6753f 213 coding system for terminal output (if Emacs is running on terminal)"
18a9f968
SM
214 ;; Currently not:
215 ;; coding system for decoding output of buffer process (if any)
216 ;; coding system for encoding text to send to buffer process (if any)."
ebc6753f 217)
f8bce5df
KH
218
219(make-variable-buffer-local 'mode-line-mule-info)
220
da8e1115 221(defvar mode-line-frame-identification '(window-system " " "-%F ")
e6188964 222 "Mode-line control to describe the current frame.")
4544e9db 223
688953b5
DL
224(defvar mode-line-process nil "\
225Mode-line control for displaying info on process status.
4d120e8c
RS
226Normally nil in most modes, since there is no process to display.")
227
228(make-variable-buffer-local 'mode-line-process)
229
dfdabcf9
DL
230(defvar mode-line-modified
231 (list (propertize
3beb81fc
DL
232 "%1*"
233 'help-echo (purecopy (lambda (window object point)
40fabc71 234 (format "Buffer is %s\nmouse-1 toggles"
3beb81fc
DL
235 (save-selected-window
236 (select-window window)
237 (if buffer-read-only
40fabc71
DN
238 "read-only"
239 "writable")))))
1ebfdece 240 'local-map (purecopy (make-mode-line-mouse-map
da16962a 241 'mouse-1
359e4563
MY
242 #'mode-line-toggle-read-only))
243 'mouse-face 'mode-line-highlight)
3beb81fc
DL
244 (propertize
245 "%1+"
246 'help-echo (purecopy (lambda (window object point)
f46b8f6d 247 (format "Buffer is %sodified\nmouse-1 toggles modified state"
3beb81fc
DL
248 (save-selected-window
249 (select-window window)
250 (if (buffer-modified-p)
251 "M"
252 "Not m")))))
1ebfdece 253 'local-map (purecopy (make-mode-line-mouse-map
da16962a 254 'mouse-1 #'mode-line-toggle-modified))
359e4563 255 'mouse-face 'mode-line-highlight))
4d120e8c
RS
256 "Mode-line control for displaying whether current buffer is modified.")
257
258(make-variable-buffer-local 'mode-line-modified)
259
4c43ca07
NR
260(defvar mode-line-remote
261 (list (propertize
2c5b4e79 262 "%1@"
38805987 263 'mouse-face 'mode-line-highlight
4c43ca07
NR
264 'help-echo (purecopy (lambda (window object point)
265 (format "%s"
266 (save-selected-window
267 (select-window window)
2826687d 268 (concat
38805987
DN
269 (if (file-remote-p default-directory)
270 "Current directory is remote: "
271 "Current directory is local: ")
272 default-directory)))))))
4c43ca07
NR
273 "Mode-line flag to show if default-directory for current buffer is remote.")
274
275(make-variable-buffer-local 'mode-line-remote)
276
e6188964
RS
277;; Actual initialization is below.
278(defvar mode-line-position nil
6b61353c
KH
279 "Mode-line control for displaying the position in the buffer.
280Normally displays the buffer percentage and, optionally, the
281buffer size, the line number and the column number.")
e6188964
RS
282
283(defvar mode-line-modes nil
284 "Mode-line control for displaying major and minor modes.")
285
6b61353c 286(defvar mode-line-major-mode-keymap
335028c3 287 (let ((map (make-sparse-keymap)))
359e4563 288 (define-key map [mode-line down-mouse-1] 'mouse-major-mode-menu)
335028c3
MY
289 (define-key map [mode-line mouse-2] 'describe-mode)
290 (define-key map [mode-line down-mouse-3] 'mode-line-mode-menu-1)
291 map) "\
8a42b336
JB
292Keymap to display on major mode.")
293
6b61353c 294(defvar mode-line-minor-mode-keymap
335028c3 295 (let ((map (make-sparse-keymap)))
fe1afc9b 296 (define-key map [mode-line down-mouse-1] 'mouse-minor-mode-menu)
335028c3
MY
297 (define-key map [mode-line mouse-2] 'mode-line-minor-mode-help)
298 (define-key map [mode-line down-mouse-3] 'mode-line-mode-menu-1)
299 (define-key map [header-line down-mouse-3] 'mode-line-mode-menu-1)
300 map) "\
8a42b336
JB
301Keymap to display on minor modes.")
302
10a55ba0
DN
303(defvar mode-line-column-line-number-mode-map
304 (let ((map (make-sparse-keymap))
305 (menu-map (make-sparse-keymap "Toggle Line and Column Number Display")))
306 (define-key menu-map [line-number-mode]
307 `(menu-item ,(purecopy "Display Line Numbers") line-number-mode
308 :help "Toggle displaying line numbers in the mode-line"
309 :button (:toggle . line-number-mode)))
310 (define-key menu-map [column-number-mode]
311 `(menu-item ,(purecopy "Display Column Numbers") column-number-mode
312 :help "Toggle displaying column numbers in the mode-line"
313 :button (:toggle . column-number-mode)))
314 (define-key map [mode-line down-mouse-1] menu-map)
315 map) "\
316Keymap to display on column and line numbers.")
317
e6188964
RS
318(let* ((help-echo
319 ;; The multi-line message doesn't work terribly well on the
320 ;; bottom mode line... Better ideas?
d1bf2a73
SM
321 ;; "\
322 ;; mouse-1: select window, mouse-2: delete others, mouse-3: delete,
323 ;; drag-mouse-1: resize, C-mouse-2: split horizontally"
40fabc71
DN
324 "mouse-1: Select (drag to resize)\n\
325mouse-2: Make current window occupy the whole frame\n\
326mouse-3: Remove current window from display")
044c2978
CY
327 (dashes (propertize "--" 'help-echo help-echo))
328 (standard-mode-line-format
329 (list
330 "%e"
331 (propertize "-" 'help-echo help-echo)
332 'mode-line-mule-info
3f87f67e 333 'mode-line-client
044c2978 334 'mode-line-modified
4c43ca07 335 'mode-line-remote
044c2978
CY
336 'mode-line-frame-identification
337 'mode-line-buffer-identification
338 (propertize " " 'help-echo help-echo)
339 'mode-line-position
340 '(vc-mode vc-mode)
341 (propertize " " 'help-echo help-echo)
342 'mode-line-modes
343 `(which-func-mode ("" which-func-format ,dashes))
344 `(global-mode-string (,dashes global-mode-string))
345 (propertize "-%-" 'help-echo help-echo)))
346 (standard-mode-line-modes
347 (list
348 (propertize "%[(" 'help-echo help-echo)
349 `(:propertize ("" mode-name)
40fabc71
DN
350 help-echo "Major mode\n\
351mouse-1: Display major mode menu\n\
352mouse-2: Show help for major mode\n\
353mouse-3: Toggle minor modes"
044c2978
CY
354 mouse-face mode-line-highlight
355 local-map ,mode-line-major-mode-keymap)
356 '("" mode-line-process)
357 `(:propertize ("" minor-mode-alist)
358 mouse-face mode-line-highlight
40fabc71
DN
359 help-echo "Minor mode\n\
360mouse-1: Display minor mode menu\n\
361mouse-2: Show help for minor mode\n\
362mouse-3: Toggle minor modes"
044c2978 363 local-map ,mode-line-minor-mode-keymap)
40fabc71 364 (propertize "%n" 'help-echo "mouse-2: Remove narrowing from the current buffer"
044c2978
CY
365 'mouse-face 'mode-line-highlight
366 'local-map (make-mode-line-mouse-map
367 'mouse-2 #'mode-line-widen))
368 (propertize ")%]--" 'help-echo help-echo)))
3f87f67e 369
044c2978 370 (standard-mode-line-position
10a55ba0
DN
371 `((-3 ,(propertize
372 "%p"
373 'local-map mode-line-column-line-number-mode-map
38805987 374 'mouse-face 'mode-line-highlight
10a55ba0
DN
375 ;; XXX needs better description
376 'help-echo "Size indication mode\n\
377mouse-1: Display Line and Column Mode Menu"))
044c2978 378 (size-indication-mode
2826687d 379 (8 ,(propertize
40fabc71 380 " of %I"
10a55ba0 381 'local-map mode-line-column-line-number-mode-map
38805987 382 'mouse-face 'mode-line-highlight
40fabc71 383 ;; XXX needs better description
10a55ba0
DN
384 'help-echo "Size indication mode\n\
385mouse-1: Display Line and Column Mode Menu")))
044c2978
CY
386 (line-number-mode
387 ((column-number-mode
2826687d
DN
388 (10 ,(propertize
389 " (%l,%c)"
10a55ba0 390 'local-map mode-line-column-line-number-mode-map
38805987 391 'mouse-face 'mode-line-highlight
10a55ba0
DN
392 'help-echo "Line number and Column number\n\
393mouse-1: Display Line and Column Mode Menu"))
2826687d
DN
394 (6 ,(propertize
395 " L%l"
10a55ba0 396 'local-map mode-line-column-line-number-mode-map
38805987 397 'mouse-face 'mode-line-highlight
10a55ba0
DN
398 'help-echo "Line Number\n\
399mouse-1: Display Line and Column Mode Menu"))))
044c2978 400 ((column-number-mode
2826687d
DN
401 (5 ,(propertize
402 " C%c"
10a55ba0 403 'local-map mode-line-column-line-number-mode-map
38805987 404 'mouse-face 'mode-line-highlight
10a55ba0
DN
405 'help-echo "Column number\n\
406mouse-1: Display Line and Column Mode Menu"))))))))
044c2978
CY
407
408 (setq-default mode-line-format standard-mode-line-format)
409 (put 'mode-line-format 'standard-value
410 (list `(quote ,standard-mode-line-format)))
411
412 (setq-default mode-line-modes standard-mode-line-modes)
413 (put 'mode-line-modes 'standard-value
414 (list `(quote ,standard-mode-line-modes)))
415
416 (setq-default mode-line-position standard-mode-line-position)
417 (put 'mode-line-position 'standard-value
418 (list `(quote ,standard-mode-line-position))))
4d120e8c 419
a8b7149d
SM
420(defvar mode-line-buffer-identification-keymap
421 ;; Add menu of buffer operations to the buffer identification part
422 ;; of the mode line.or header line.
423 (let ((map (make-sparse-keymap)))
424 ;; Bind down- events so that the global keymap won't ``shine
425 ;; through''.
426 (define-key map [mode-line mouse-1] 'mode-line-previous-buffer)
427 (define-key map [header-line down-mouse-1] 'ignore)
428 (define-key map [header-line mouse-1] 'mode-line-previous-buffer)
a8b7149d
SM
429 (define-key map [mode-line mouse-3] 'mode-line-next-buffer)
430 (define-key map [header-line down-mouse-3] 'ignore)
431 (define-key map [header-line mouse-3] 'mode-line-next-buffer)
432 map) "\
688953b5 433Keymap for what is displayed by `mode-line-buffer-identification'.")
b1dcba7b 434
3bd80f8b
RS
435(defun propertized-buffer-identification (fmt)
436 "Return a list suitable for `mode-line-buffer-identification'.
437FMT is a format specifier such as \"%12b\". This function adds
438text properties for face, help-echo, and local-map to it."
439 (list (propertize fmt
440 'face 'mode-line-buffer-id
441 'help-echo
40fabc71
DN
442 (purecopy "Buffer name\n\
443mouse-1: previous buffer\n\
444mouse-3: next buffer")
3bd80f8b
RS
445 'mouse-face 'mode-line-highlight
446 'local-map mode-line-buffer-identification-keymap)))
447
448(defvar mode-line-buffer-identification (propertized-buffer-identification "%12b") "\
449Mode-line control for identifying the buffer being displayed.
450Its default value is (\"%12b\") with some text properties added.
451Major modes that edit things other than ordinary files may change this
452\(e.g. Info, Dired,...)")
453
454(make-variable-buffer-local 'mode-line-buffer-identification)
455
fa3f4090
RS
456(defun unbury-buffer () "\
457Switch to the last buffer in the buffer list."
545f7310
SS
458 (interactive)
459 (switch-to-buffer (last-buffer)))
460
22b50772 461(defun mode-line-unbury-buffer (event) "\
545f7310 462Call `unbury-buffer' in this window."
22b50772
GM
463 (interactive "e")
464 (save-selected-window
465 (select-window (posn-window (event-start event)))
545f7310 466 (unbury-buffer)))
22b50772
GM
467
468(defun mode-line-bury-buffer (event) "\
c85ee897 469Like `bury-buffer', but temporarily select EVENT's window."
22b50772
GM
470 (interactive "e")
471 (save-selected-window
472 (select-window (posn-window (event-start event)))
473 (bury-buffer)))
b1dcba7b 474
688953b5
DL
475(defun mode-line-other-buffer () "\
476Switch to the most recently selected buffer other than the current one."
b1dcba7b
GM
477 (interactive)
478 (switch-to-buffer (other-buffer)))
479
4ec983f1
JL
480(defun mode-line-next-buffer (event)
481 "Like `next-buffer', but temporarily select EVENT's window."
482 (interactive "e")
483 (save-selected-window
484 (select-window (posn-window (event-start event)))
485 (next-buffer)))
486
487(defun mode-line-previous-buffer (event)
488 "Like `previous-buffer', but temporarily select EVENT's window."
489 (interactive "e")
490 (save-selected-window
491 (select-window (posn-window (event-start event)))
492 (previous-buffer)))
493
5e1cddda
DL
494(defvar mode-line-mode-menu (make-sparse-keymap "Minor Modes") "\
495Menu of mode operations in the mode line.")
496
b1dcba7b
GM
497(defun mode-line-mode-menu-1 (event)
498 (interactive "e")
499 (save-selected-window
500 (select-window (posn-window (event-start event)))
501 (let* ((selection (mode-line-mode-menu event))
502 (binding (and selection (lookup-key mode-line-mode-menu
503 (vector (car selection))))))
504 (if binding
505 (call-interactively binding)))))
506
842d2ee9
DL
507(defmacro bound-and-true-p (var)
508 "Return the value of symbol VAR if it is bound, else nil."
ff69e012 509 `(and (boundp (quote ,var)) ,var))
842d2ee9 510
5400586c
NR
511;; Use mode-line-mode-menu for local minor-modes only.
512;; Global ones can go on the menubar (Options --> Show/Hide).
dfdabcf9 513(define-key mode-line-mode-menu [overwrite-mode]
5b1d5e63 514 `(menu-item ,(purecopy "Overwrite (Ovwrt)") overwrite-mode
40fabc71 515 :help "Overwrite mode: typed characters replace existing text"
dfdabcf9 516 :button (:toggle . overwrite-mode)))
2a5405b6 517(define-key mode-line-mode-menu [outline-minor-mode]
5b1d5e63 518 `(menu-item ,(purecopy "Outline (Outl)") outline-minor-mode
40fabc71
DN
519 ;; XXX: This needs a good, brief description.
520 :help ""
2a5405b6 521 :button (:toggle . (bound-and-true-p outline-minor-mode))))
2a5405b6 522(define-key mode-line-mode-menu [highlight-changes-mode]
5b1d5e63 523 `(menu-item ,(purecopy "Highlight changes (Chg)") highlight-changes-mode
40fabc71 524 :help "Show changes in the buffer in a distinctive color"
6455508d 525 :button (:toggle . (bound-and-true-p highlight-changes-mode))))
2a5405b6 526(define-key mode-line-mode-menu [hide-ifdef-mode]
5b1d5e63 527 `(menu-item ,(purecopy "Hide ifdef (Ifdef)") hide-ifdef-mode
40fabc71 528 :help "Show/Hide code within #ifdef constructs"
2a5405b6 529 :button (:toggle . (bound-and-true-p hide-ifdef-mode))))
c29a05c8
DP
530(define-key mode-line-mode-menu [glasses-mode]
531 `(menu-item ,(purecopy "Glasses (o^o)") glasses-mode
40fabc71 532 :help "Insert virtual separators to make long identifiers easy to read"
c29a05c8 533 :button (:toggle . (bound-and-true-p glasses-mode))))
2a5405b6 534(define-key mode-line-mode-menu [font-lock-mode]
aa88b9e5 535 `(menu-item ,(purecopy "Font Lock") font-lock-mode
40fabc71 536 :help "Syntax coloring"
2a5405b6
GM
537 :button (:toggle . font-lock-mode)))
538(define-key mode-line-mode-menu [flyspell-mode]
5b1d5e63 539 `(menu-item ,(purecopy "Flyspell (Fly)") flyspell-mode
40fabc71 540 :help "Spell checking on the fly"
2a5405b6 541 :button (:toggle . (bound-and-true-p flyspell-mode))))
c29a05c8
DP
542(define-key mode-line-mode-menu [auto-revert-tail-mode]
543 `(menu-item ,(purecopy "Auto revert tail (Tail)") auto-revert-tail-mode
40fabc71 544 :help "Revert the tail of the buffer when buffer grows"
9f37aef4 545 :enable (buffer-file-name)
6455508d 546 :button (:toggle . (bound-and-true-p auto-revert-tail-mode))))
2a5405b6 547(define-key mode-line-mode-menu [auto-revert-mode]
5b1d5e63 548 `(menu-item ,(purecopy "Auto revert (ARev)") auto-revert-mode
40fabc71 549 :help "Revert the buffer when the file on disk changes"
6455508d 550 :button (:toggle . (bound-and-true-p auto-revert-mode))))
c29a05c8
DP
551(define-key mode-line-mode-menu [auto-fill-mode]
552 `(menu-item ,(purecopy "Auto fill (Fill)") auto-fill-mode
40fabc71 553 :help "Automatically insert new lines"
c29a05c8 554 :button (:toggle . auto-fill-function)))
2a5405b6 555(define-key mode-line-mode-menu [abbrev-mode]
5b1d5e63 556 `(menu-item ,(purecopy "Abbrev (Abbrev)") abbrev-mode
40fabc71 557 :help "Automatically expand abbreviations"
2a5405b6 558 :button (:toggle . abbrev-mode)))
dfdabcf9 559
5e1cddda
DL
560(defun mode-line-mode-menu (event)
561 (interactive "@e")
562 (x-popup-menu event mode-line-mode-menu))
563
8a42b336 564(defun mode-line-minor-mode-help (event)
fe1afc9b 565 "Describe minor mode for EVENT on minor modes area of the mode line."
8a42b336
JB
566 (interactive "@e")
567 (let ((indicator (car (nth 4 (car (cdr event))))))
568 (describe-minor-mode-from-indicator indicator)))
569
541b8aff
GM
570(defvar minor-mode-alist nil "\
571Alist saying how to show minor modes in the mode line.
572Each element looks like (VARIABLE STRING);
4837b516 573STRING is included in the mode line if VARIABLE's value is non-nil.
541b8aff
GM
574
575Actually, STRING need not be a string; any possible mode-line element
576is okay. See `mode-line-format'.")
577;; Don't use purecopy here--some people want to change these strings.
578(setq minor-mode-alist
579 (list
5b1d5e63 580 (list 'abbrev-mode " Abbrev")
541b8aff 581 '(overwrite-mode overwrite-mode)
5b1d5e63 582 (list 'auto-fill-function " Fill")
541b8aff
GM
583 ;; not really a minor mode...
584 '(defining-kbd-macro " Def")))
585
4d120e8c
RS
586;; These variables are used by autoloadable packages.
587;; They are defined here so that they do not get overridden
588;; by the loading of those packages.
589
590;; Names in directory that end in one of these
591;; are ignored in completion,
592;; making it more likely you will get a unique match.
593(setq completion-ignored-extensions
d34c1b05 594 (append
a12ca054
EZ
595 (cond ((memq system-type '(ms-dos windows-nt))
596 '(".o" "~" ".bin" ".bak" ".obj" ".map" ".ico" ".pif" ".lnk"
597 ".a" ".ln" ".blg" ".bbl" ".dll" ".drv" ".vxd" ".386"))
d34c1b05
RS
598 ((eq system-type 'vax-vms)
599 '(".obj" ".exe" ".bin" ".lbin" ".sbin"
b9d8ddef 600 ".brn" ".rnt" ".lni"
d34c1b05
RS
601 ".olb" ".tlb" ".mlb" ".hlb"))
602 (t
a12ca054 603 '(".o" "~" ".bin" ".lbin" ".so"
d34c1b05
RS
604 ".a" ".ln" ".blg" ".bbl")))
605 '(".elc" ".lof"
606 ".glo" ".idx" ".lot"
607 ;; TeX-related
640602f7 608 ".fmt" ".tfm"
c79e04d8
RS
609 ;; Java compiled
610 ".class"
7ed93890
SS
611 ;; CLISP
612 ".fas" ".lib" ".mem"
c79e04d8 613 ;; CMUCL
ff69e012 614 ".x86f" ".sparcf"
6b61353c 615 ;; Other CL implementations (Allegro, LispWorks, OpenMCL)
2e74da96 616 ".fasl" ".ufsl" ".fsl" ".dxl" ".pfsl" ".dfsl"
f7e1a28d
GM
617 ;; Libtool
618 ".lo" ".la"
008c915c
RS
619 ;; Gettext
620 ".gmo" ".mo"
d34c1b05 621 ;; Texinfo-related
6b61353c
KH
622 ;; This used to contain .log, but that's commonly used for log
623 ;; files you do want to see, not just TeX stuff. -- fx
624 ".toc" ".aux"
d34c1b05 625 ".cp" ".fn" ".ky" ".pg" ".tp" ".vr"
7c226e40
EZ
626 ".cps" ".fns" ".kys" ".pgs" ".tps" ".vrs"
627 ;; Python byte-compiled
628 ".pyc" ".pyo")))
4d120e8c 629
ae95a95a
SM
630;; Suffixes used for executables.
631(setq exec-suffixes
632 (cond
633 ((memq system-type '(ms-dos windows-nt))
634 '(".exe" ".com" ".bat" ".cmd" ".btm" ""))
635 (t
636 '(""))))
637
2b4b2add
DL
638;; Packages should add to this list appropriately when they are
639;; loaded, rather than listing everything here.
4d120e8c
RS
640(setq debug-ignored-errors
641 '(beginning-of-line beginning-of-buffer end-of-line
642 end-of-buffer end-of-file buffer-read-only
c79e04d8 643 file-supersession
4d120e8c
RS
644 "^Previous command was not a yank$"
645 "^Minibuffer window is not active$"
cd8d6674
JL
646 "^No previous history search regexp$"
647 "^No later matching history item$"
648 "^No earlier matching history item$"
649 "^End of history; no default available$"
4d120e8c
RS
650 "^End of history; no next item$"
651 "^Beginning of history; no preceding item$"
652 "^No recursive edit is in progress$"
653 "^Changes to be undone are outside visible portion of buffer$"
654 "^No undo information in this buffer$"
cd8d6674 655 "^No further undo information"
4d120e8c
RS
656 "^Save not confirmed$"
657 "^Recover-file cancelled\\.$"
800c9512 658 "^Cannot switch buffers in a dedicated window$"
cd8d6674 659 ))
4d120e8c
RS
660
661
662(make-variable-buffer-local 'indent-tabs-mode)
663
152d064d 664;; We have base64 and md5 functions built in now.
d1bf2a73
SM
665(provide 'base64)
666(provide 'md5)
667(provide 'overlay '(display syntax-table field))
668(provide 'text-properties '(display syntax-table field point-entered))
acafa9cf 669
0094907b
RS
670(define-key esc-map "\t" 'complete-symbol)
671
688953b5
DL
672(defun complete-symbol (arg) "\
673Perform tags completion on the text around point.
4d120e8c
RS
674Completes to the set of names listed in the current tags table.
675The string to complete is chosen in the same way as the default
364581dc
RS
676for \\[find-tag] (which see).
677
678With a prefix argument, this command does completion within
679the collection of symbols listed in the index of the manual for the
680language you are using."
0094907b
RS
681 (interactive "P")
682 (if arg
364581dc
RS
683 (info-complete-symbol)
684 (if (fboundp 'complete-tag)
685 (complete-tag)
686 ;; Don't autoload etags if we have no tags table.
8c16bd8c 687 (error "%s" (substitute-command-keys
364581dc 688 "No tags table loaded; use \\[visit-tags-table] to load one")))))
4d120e8c
RS
689
690;; Reduce total amount of space we must allocate during this function
691;; that we will not need to keep permanently.
692(garbage-collect)
693\f
3607b64d 694
4d120e8c
RS
695(setq help-event-list '(help f1))
696
97710114
RS
697(make-variable-buffer-local 'minor-mode-overriding-map-alist)
698
d1bf2a73
SM
699;; From frame.c
700(global-set-key [switch-frame] 'handle-switch-frame)
b6cb37ae
SM
701(global-set-key [select-window] 'handle-select-window)
702
703;; FIXME: Do those 3 events really ever reach the global-map ?
704;; It seems that they can't because they're handled via
705;; special-event-map which is used at very low-level. -stef
d1bf2a73
SM
706(global-set-key [delete-frame] 'handle-delete-frame)
707(global-set-key [iconify-frame] 'ignore-event)
708(global-set-key [make-frame-visible] 'ignore-event)
709
710
4d120e8c
RS
711;These commands are defined in editfns.c
712;but they are not assigned to keys there.
713(put 'narrow-to-region 'disabled t)
714(define-key ctl-x-map "nn" 'narrow-to-region)
715(define-key ctl-x-map "nw" 'widen)
716;; (define-key ctl-x-map "n" 'narrow-to-region)
717;; (define-key ctl-x-map "w" 'widen)
718
ad1cc346
KS
719;; Quitting
720(define-key global-map "\e\e\e" 'keyboard-escape-quit)
721(define-key global-map "\C-g" 'keyboard-quit)
722
d3615887
SM
723;; Used to be in termdev.el: when using several terminals, make C-z
724;; suspend only the relevant terminal.
725(substitute-key-definition 'suspend-emacs 'suspend-frame global-map)
726
4d120e8c
RS
727(define-key global-map "\C-j" 'newline-and-indent)
728(define-key global-map "\C-m" 'newline)
729(define-key global-map "\C-o" 'open-line)
730(define-key esc-map "\C-o" 'split-line)
731(define-key global-map "\C-q" 'quoted-insert)
732(define-key esc-map "^" 'delete-indentation)
733(define-key esc-map "\\" 'delete-horizontal-space)
734(define-key esc-map "m" 'back-to-indentation)
735(define-key ctl-x-map "\C-o" 'delete-blank-lines)
736(define-key esc-map " " 'just-one-space)
737(define-key esc-map "z" 'zap-to-char)
738(define-key esc-map "=" 'count-lines-region)
739(define-key ctl-x-map "=" 'what-cursor-position)
740(define-key esc-map ":" 'eval-expression)
741;; Define ESC ESC : like ESC : for people who type ESC ESC out of habit.
742(define-key esc-map "\M-:" 'eval-expression)
743;; Changed from C-x ESC so that function keys work following C-x.
744(define-key ctl-x-map "\e\e" 'repeat-complex-command)
745;; New binding analogous to M-:.
746(define-key ctl-x-map "\M-:" 'repeat-complex-command)
747(define-key ctl-x-map "u" 'advertised-undo)
748;; Many people are used to typing C-/ on X terminals and getting C-_.
749(define-key global-map [?\C-/] 'undo)
750(define-key global-map "\C-_" 'undo)
ad1cc346
KS
751;; Richard said that we should not use C-x <uppercase letter> and I have
752;; no idea whereas to bind it. Any suggestion welcome. -stef
753;; (define-key ctl-x-map "U" 'undo-only)
754
4d120e8c
RS
755(define-key esc-map "!" 'shell-command)
756(define-key esc-map "|" 'shell-command-on-region)
757
ad1cc346
KS
758(define-key global-map [?\C-x right] 'next-buffer)
759(define-key global-map [?\C-x C-right] 'next-buffer)
a74f9094
KL
760(define-key global-map [?\C-x left] 'previous-buffer)
761(define-key global-map [?\C-x C-left] 'previous-buffer)
ad1cc346 762
a77dfeb0
SM
763(let ((map minibuffer-local-map))
764 (define-key map "\en" 'next-history-element)
765 (define-key map [next] 'next-history-element)
766 (define-key map [down] 'next-history-element)
767 (define-key map "\ep" 'previous-history-element)
768 (define-key map [prior] 'previous-history-element)
769 (define-key map [up] 'previous-history-element)
770 (define-key map "\es" 'next-matching-history-element)
b0c24554
SM
771 (define-key map "\er" 'previous-matching-history-element)
772 ;; Override the global binding (which calls indent-relative via
773 ;; indent-for-tab-command). The alignment that indent-relative tries to
774 ;; do doesn't make much sense here since the prompt messes it up.
2d914448
RS
775 (define-key map "\t" 'self-insert-command)
776 (define-key minibuffer-local-map [C-tab] 'file-cache-minibuffer-complete))
4d120e8c
RS
777
778(define-key global-map "\C-u" 'universal-argument)
779(let ((i ?0))
780 (while (<= i ?9)
781 (define-key esc-map (char-to-string i) 'digit-argument)
782 (setq i (1+ i))))
783(define-key esc-map "-" 'negative-argument)
784;; Define control-digits.
785(let ((i ?0))
786 (while (<= i ?9)
787 (define-key global-map (read (format "[?\\C-%c]" i)) 'digit-argument)
788 (setq i (1+ i))))
789(define-key global-map [?\C--] 'negative-argument)
790;; Define control-meta-digits.
791(let ((i ?0))
792 (while (<= i ?9)
793 (define-key esc-map (read (format "[?\\C-%c]" i)) 'digit-argument)
794 (setq i (1+ i))))
795(define-key global-map [?\C-\M--] 'negative-argument)
796
797(define-key global-map "\C-k" 'kill-line)
798(define-key global-map "\C-w" 'kill-region)
799(define-key esc-map "w" 'kill-ring-save)
800(define-key esc-map "\C-w" 'append-next-kill)
801(define-key global-map "\C-y" 'yank)
802(define-key esc-map "y" 'yank-pop)
803
804;; (define-key ctl-x-map "a" 'append-to-buffer)
805
806(define-key global-map "\C-@" 'set-mark-command)
807;; Many people are used to typing C-SPC and getting C-@.
e68e61b5 808(define-key global-map [?\C- ] 'set-mark-command)
4d120e8c
RS
809(define-key ctl-x-map "\C-x" 'exchange-point-and-mark)
810(define-key ctl-x-map "\C-@" 'pop-global-mark)
e68e61b5 811(define-key ctl-x-map [?\C- ] 'pop-global-mark)
4d120e8c
RS
812
813(define-key global-map "\C-n" 'next-line)
814(define-key global-map "\C-p" 'previous-line)
815(define-key ctl-x-map "\C-n" 'set-goal-column)
d17a638d 816(define-key global-map "\C-a" 'move-beginning-of-line)
c77ddea7 817(define-key global-map "\C-e" 'move-end-of-line)
231717ee
RS
818(define-key esc-map "g" (make-sparse-keymap))
819(define-key esc-map "g\M-g" 'goto-line)
820(define-key esc-map "gg" 'goto-line)
4d120e8c 821
ad1cc346
KS
822(define-key esc-map "gn" 'next-error)
823(define-key esc-map "g\M-n" 'next-error)
824(define-key ctl-x-map "`" 'next-error)
825
826(define-key esc-map "gp" 'previous-error)
827(define-key esc-map "g\M-p" 'previous-error)
828
4d120e8c
RS
829;;(defun function-key-error ()
830;; (interactive)
1cd7adc6 831;; (error "That function key is not bound to anything"))
4d120e8c
RS
832
833(define-key global-map [menu] 'execute-extended-command)
834(define-key global-map [find] 'search-forward)
835
9d4850e5
GM
836;; Don't do this. We define <delete> in function-key-map instead.
837;(define-key global-map [delete] 'backward-delete-char)
4e4f9651 838
4d120e8c 839;; natural bindings for terminal keycaps --- defined in X keysym order
d391e05c 840(define-key global-map [C-S-backspace] 'kill-whole-line)
f88febbb 841(define-key global-map [home] 'move-beginning-of-line)
1dfca644 842(define-key global-map [C-home] 'beginning-of-buffer)
4d120e8c 843(define-key global-map [M-home] 'beginning-of-buffer-other-window)
480c8cd3 844(define-key esc-map [home] 'beginning-of-buffer-other-window)
4d120e8c
RS
845(define-key global-map [left] 'backward-char)
846(define-key global-map [up] 'previous-line)
847(define-key global-map [right] 'forward-char)
848(define-key global-map [down] 'next-line)
849(define-key global-map [prior] 'scroll-down)
850(define-key global-map [next] 'scroll-up)
851(define-key global-map [C-up] 'backward-paragraph)
852(define-key global-map [C-down] 'forward-paragraph)
853(define-key global-map [C-prior] 'scroll-right)
e980968d 854(put 'scroll-left 'disabled t)
4d120e8c
RS
855(define-key global-map [C-next] 'scroll-left)
856(define-key global-map [M-next] 'scroll-other-window)
480c8cd3 857(define-key esc-map [next] 'scroll-other-window)
4d120e8c 858(define-key global-map [M-prior] 'scroll-other-window-down)
480c8cd3 859(define-key esc-map [prior] 'scroll-other-window-down)
ad1cc346 860(define-key esc-map [?\C-\S-v] 'scroll-other-window-down)
f88febbb 861(define-key global-map [end] 'move-end-of-line)
1dfca644 862(define-key global-map [C-end] 'end-of-buffer)
4d120e8c 863(define-key global-map [M-end] 'end-of-buffer-other-window)
480c8cd3 864(define-key esc-map [end] 'end-of-buffer-other-window)
4d120e8c
RS
865(define-key global-map [begin] 'beginning-of-buffer)
866(define-key global-map [M-begin] 'beginning-of-buffer-other-window)
480c8cd3 867(define-key esc-map [begin] 'beginning-of-buffer-other-window)
4d120e8c
RS
868;; (define-key global-map [select] 'function-key-error)
869;; (define-key global-map [print] 'function-key-error)
870(define-key global-map [execute] 'execute-extended-command)
871(define-key global-map [insert] 'overwrite-mode)
872(define-key global-map [C-insert] 'kill-ring-save)
873(define-key global-map [S-insert] 'yank)
8d79731e
RS
874;; `insertchar' is what term.c produces. Should we change term.c
875;; to produce `insert' instead?
876(define-key global-map [insertchar] 'overwrite-mode)
877(define-key global-map [C-insertchar] 'kill-ring-save)
878(define-key global-map [S-insertchar] 'yank)
4d120e8c
RS
879(define-key global-map [undo] 'undo)
880(define-key global-map [redo] 'repeat-complex-command)
6b61353c
KH
881(define-key global-map [again] 'repeat-complex-command) ; Sun keyboard
882(define-key global-map [open] 'find-file) ; Sun
883;; The following wouldn't work to interrupt running code since C-g is
884;; treated specially in the event loop.
885;; (define-key global-map [stop] 'keyboard-quit) ; Sun
4d120e8c
RS
886;; (define-key global-map [clearline] 'function-key-error)
887(define-key global-map [insertline] 'open-line)
888(define-key global-map [deleteline] 'kill-line)
4d120e8c
RS
889(define-key global-map [deletechar] 'delete-char)
890;; (define-key global-map [backtab] 'function-key-error)
891;; (define-key global-map [f1] 'function-key-error)
892;; (define-key global-map [f2] 'function-key-error)
893;; (define-key global-map [f3] 'function-key-error)
894;; (define-key global-map [f4] 'function-key-error)
895;; (define-key global-map [f5] 'function-key-error)
896;; (define-key global-map [f6] 'function-key-error)
897;; (define-key global-map [f7] 'function-key-error)
898;; (define-key global-map [f8] 'function-key-error)
899;; (define-key global-map [f9] 'function-key-error)
900;; (define-key global-map [f10] 'function-key-error)
901;; (define-key global-map [f11] 'function-key-error)
902;; (define-key global-map [f12] 'function-key-error)
903;; (define-key global-map [f13] 'function-key-error)
904;; (define-key global-map [f14] 'function-key-error)
905;; (define-key global-map [f15] 'function-key-error)
906;; (define-key global-map [f16] 'function-key-error)
907;; (define-key global-map [f17] 'function-key-error)
908;; (define-key global-map [f18] 'function-key-error)
909;; (define-key global-map [f19] 'function-key-error)
910;; (define-key global-map [f20] 'function-key-error)
911;; (define-key global-map [f21] 'function-key-error)
912;; (define-key global-map [f22] 'function-key-error)
913;; (define-key global-map [f23] 'function-key-error)
914;; (define-key global-map [f24] 'function-key-error)
915;; (define-key global-map [f25] 'function-key-error)
916;; (define-key global-map [f26] 'function-key-error)
917;; (define-key global-map [f27] 'function-key-error)
918;; (define-key global-map [f28] 'function-key-error)
919;; (define-key global-map [f29] 'function-key-error)
920;; (define-key global-map [f30] 'function-key-error)
921;; (define-key global-map [f31] 'function-key-error)
922;; (define-key global-map [f32] 'function-key-error)
923;; (define-key global-map [f33] 'function-key-error)
924;; (define-key global-map [f34] 'function-key-error)
925;; (define-key global-map [f35] 'function-key-error)
926;; (define-key global-map [kp-backtab] 'function-key-error)
927;; (define-key global-map [kp-space] 'function-key-error)
928;; (define-key global-map [kp-tab] 'function-key-error)
929;; (define-key global-map [kp-enter] 'function-key-error)
930;; (define-key global-map [kp-f1] 'function-key-error)
931;; (define-key global-map [kp-f2] 'function-key-error)
932;; (define-key global-map [kp-f3] 'function-key-error)
933;; (define-key global-map [kp-f4] 'function-key-error)
934;; (define-key global-map [kp-multiply] 'function-key-error)
935;; (define-key global-map [kp-add] 'function-key-error)
936;; (define-key global-map [kp-separator] 'function-key-error)
937;; (define-key global-map [kp-subtract] 'function-key-error)
938;; (define-key global-map [kp-decimal] 'function-key-error)
939;; (define-key global-map [kp-divide] 'function-key-error)
940;; (define-key global-map [kp-0] 'function-key-error)
941;; (define-key global-map [kp-1] 'function-key-error)
942;; (define-key global-map [kp-2] 'function-key-error)
943;; (define-key global-map [kp-3] 'function-key-error)
944;; (define-key global-map [kp-4] 'function-key-error)
945;; (define-key global-map [kp-5] 'recenter)
946;; (define-key global-map [kp-6] 'function-key-error)
947;; (define-key global-map [kp-7] 'function-key-error)
948;; (define-key global-map [kp-8] 'function-key-error)
949;; (define-key global-map [kp-9] 'function-key-error)
950;; (define-key global-map [kp-equal] 'function-key-error)
951
952;; X11R6 distinguishes these keys from the non-kp keys.
953;; Make them behave like the non-kp keys unless otherwise bound.
954(define-key function-key-map [kp-home] [home])
955(define-key function-key-map [kp-left] [left])
956(define-key function-key-map [kp-up] [up])
957(define-key function-key-map [kp-right] [right])
958(define-key function-key-map [kp-down] [down])
959(define-key function-key-map [kp-prior] [prior])
960(define-key function-key-map [kp-next] [next])
961(define-key function-key-map [M-kp-next] [M-next])
962(define-key function-key-map [kp-end] [end])
963(define-key function-key-map [kp-begin] [begin])
964(define-key function-key-map [kp-insert] [insert])
9d4850e5
GM
965(define-key function-key-map [backspace] [?\C-?])
966(define-key function-key-map [delete] [?\C-?])
ee5cece0 967(define-key function-key-map [kp-delete] [?\C-?])
9761cd3a
EZ
968(define-key function-key-map [S-kp-end] [S-end])
969(define-key function-key-map [S-kp-down] [S-down])
970(define-key function-key-map [S-kp-next] [S-next])
971(define-key function-key-map [S-kp-left] [S-left])
972(define-key function-key-map [S-kp-right] [S-right])
973(define-key function-key-map [S-kp-home] [S-home])
974(define-key function-key-map [S-kp-up] [S-up])
975(define-key function-key-map [S-kp-prior] [S-prior])
976(define-key function-key-map [C-S-kp-end] [C-S-end])
977(define-key function-key-map [C-S-kp-down] [C-S-down])
978(define-key function-key-map [C-S-kp-next] [C-S-next])
979(define-key function-key-map [C-S-kp-left] [C-S-left])
980(define-key function-key-map [C-S-kp-right] [C-S-right])
981(define-key function-key-map [C-S-kp-home] [C-S-home])
982(define-key function-key-map [C-S-kp-up] [C-S-up])
983(define-key function-key-map [C-S-kp-prior] [C-S-prior])
7bc60154
EZ
984;; Don't bind shifted keypad numeric keys, they reportedly
985;; interfere with the feature of some keyboards to produce
986;; numbers when NumLock is off.
987;(define-key function-key-map [S-kp-1] [S-end])
988;(define-key function-key-map [S-kp-2] [S-down])
989;(define-key function-key-map [S-kp-3] [S-next])
990;(define-key function-key-map [S-kp-4] [S-left])
991;(define-key function-key-map [S-kp-6] [S-right])
992;(define-key function-key-map [S-kp-7] [S-home])
993;(define-key function-key-map [S-kp-8] [S-up])
994;(define-key function-key-map [S-kp-9] [S-prior])
9761cd3a
EZ
995(define-key function-key-map [C-S-kp-1] [C-S-end])
996(define-key function-key-map [C-S-kp-2] [C-S-down])
997(define-key function-key-map [C-S-kp-3] [C-S-next])
998(define-key function-key-map [C-S-kp-4] [C-S-left])
999(define-key function-key-map [C-S-kp-6] [C-S-right])
1000(define-key function-key-map [C-S-kp-7] [C-S-home])
1001(define-key function-key-map [C-S-kp-8] [C-S-up])
1002(define-key function-key-map [C-S-kp-9] [C-S-prior])
4d120e8c
RS
1003
1004(define-key global-map [mouse-movement] 'ignore)
1005
1006(define-key global-map "\C-t" 'transpose-chars)
1007(define-key esc-map "t" 'transpose-words)
1008(define-key esc-map "\C-t" 'transpose-sexps)
1009(define-key ctl-x-map "\C-t" 'transpose-lines)
1010
5589b330 1011(define-key esc-map ";" 'comment-dwim)
fedff3c6
SM
1012(define-key esc-map "j" 'indent-new-comment-line)
1013(define-key esc-map "\C-j" 'indent-new-comment-line)
5589b330 1014(define-key ctl-x-map ";" 'comment-set-column)
4d120e8c
RS
1015(define-key ctl-x-map "f" 'set-fill-column)
1016(define-key ctl-x-map "$" 'set-selective-display)
1017
1018(define-key esc-map "@" 'mark-word)
1019(define-key esc-map "f" 'forward-word)
1020(define-key esc-map "b" 'backward-word)
1021(define-key esc-map "d" 'kill-word)
1022(define-key esc-map "\177" 'backward-kill-word)
1023
1024(define-key esc-map "<" 'beginning-of-buffer)
1025(define-key esc-map ">" 'end-of-buffer)
1026(define-key ctl-x-map "h" 'mark-whole-buffer)
1027(define-key esc-map "\\" 'delete-horizontal-space)
1028
1029(defalias 'mode-specific-command-prefix (make-sparse-keymap))
4b189189 1030(defvar mode-specific-map (symbol-function 'mode-specific-command-prefix)
4d120e8c
RS
1031 "Keymap for characters following C-c.")
1032(define-key global-map "\C-c" 'mode-specific-command-prefix)
1033
1034(global-set-key [M-right] 'forward-word)
480c8cd3 1035(define-key esc-map [right] 'forward-word)
4d120e8c 1036(global-set-key [M-left] 'backward-word)
480c8cd3 1037(define-key esc-map [left] 'backward-word)
4d120e8c
RS
1038;; ilya@math.ohio-state.edu says these bindings are standard on PC editors.
1039(global-set-key [C-right] 'forward-word)
1040(global-set-key [C-left] 'backward-word)
1041;; This is not quite compatible, but at least is analogous
27940e1f
GM
1042(global-set-key [C-delete] 'backward-kill-word)
1043(global-set-key [C-backspace] 'kill-word)
4d120e8c
RS
1044;; This is "move to the clipboard", or as close as we come.
1045(global-set-key [S-delete] 'kill-region)
1046
480c8cd3
AS
1047(global-set-key [C-M-left] 'backward-sexp)
1048(define-key esc-map [C-left] 'backward-sexp)
1049(global-set-key [C-M-right] 'forward-sexp)
1050(define-key esc-map [C-right] 'forward-sexp)
1051(global-set-key [C-M-up] 'backward-up-list)
1052(define-key esc-map [C-up] 'backward-up-list)
1053(global-set-key [C-M-down] 'down-list)
1054(define-key esc-map [C-down] 'down-list)
1055(global-set-key [C-M-home] 'beginning-of-defun)
1056(define-key esc-map [C-home] 'beginning-of-defun)
1057(global-set-key [C-M-end] 'end-of-defun)
1058(define-key esc-map [C-end] 'end-of-defun)
486add9d 1059
4d120e8c
RS
1060(define-key esc-map "\C-f" 'forward-sexp)
1061(define-key esc-map "\C-b" 'backward-sexp)
1062(define-key esc-map "\C-u" 'backward-up-list)
1063(define-key esc-map "\C-@" 'mark-sexp)
1064(define-key esc-map [?\C-\ ] 'mark-sexp)
1065(define-key esc-map "\C-d" 'down-list)
1066(define-key esc-map "\C-k" 'kill-sexp)
0c3a466c
RS
1067;;; These are dangerous in various situations,
1068;;; so let's not encourage anyone to use them.
1069;;;(define-key global-map [C-M-delete] 'backward-kill-sexp)
1070;;;(define-key global-map [C-M-backspace] 'backward-kill-sexp)
da7ddbed
GM
1071(define-key esc-map [C-delete] 'backward-kill-sexp)
1072(define-key esc-map [C-backspace] 'backward-kill-sexp)
4d120e8c
RS
1073(define-key esc-map "\C-n" 'forward-list)
1074(define-key esc-map "\C-p" 'backward-list)
1075(define-key esc-map "\C-a" 'beginning-of-defun)
1076(define-key esc-map "\C-e" 'end-of-defun)
1077(define-key esc-map "\C-h" 'mark-defun)
1078(define-key ctl-x-map "nd" 'narrow-to-defun)
1079(define-key esc-map "(" 'insert-parentheses)
1080(define-key esc-map ")" 'move-past-close-and-reindent)
4d120e8c
RS
1081
1082(define-key ctl-x-map "\C-e" 'eval-last-sexp)
6d64bc9f
RS
1083
1084(define-key ctl-x-map "m" 'compose-mail)
1085(define-key ctl-x-4-map "m" 'compose-mail-other-window)
1086(define-key ctl-x-5-map "m" 'compose-mail-other-frame)
4d120e8c
RS
1087\f
1088(define-key ctl-x-map "r\C-@" 'point-to-register)
1089(define-key ctl-x-map [?r ?\C-\ ] 'point-to-register)
1090(define-key ctl-x-map "r " 'point-to-register)
1091(define-key ctl-x-map "rj" 'jump-to-register)
1092(define-key ctl-x-map "rs" 'copy-to-register)
1093(define-key ctl-x-map "rx" 'copy-to-register)
1094(define-key ctl-x-map "ri" 'insert-register)
1095(define-key ctl-x-map "rg" 'insert-register)
1096(define-key ctl-x-map "rr" 'copy-rectangle-to-register)
bdb45de9
KH
1097(define-key ctl-x-map "rn" 'number-to-register)
1098(define-key ctl-x-map "r+" 'increment-register)
4d120e8c
RS
1099(define-key ctl-x-map "rc" 'clear-rectangle)
1100(define-key ctl-x-map "rk" 'kill-rectangle)
1101(define-key ctl-x-map "rd" 'delete-rectangle)
1102(define-key ctl-x-map "ry" 'yank-rectangle)
1103(define-key ctl-x-map "ro" 'open-rectangle)
1104(define-key ctl-x-map "rt" 'string-rectangle)
1105(define-key ctl-x-map "rw" 'window-configuration-to-register)
1106(define-key ctl-x-map "rf" 'frame-configuration-to-register)
1107
792eb719 1108(define-key esc-map "q" 'fill-paragraph)
4d120e8c
RS
1109(define-key ctl-x-map "." 'set-fill-prefix)
1110\f
1111(define-key esc-map "{" 'backward-paragraph)
1112(define-key esc-map "}" 'forward-paragraph)
1113(define-key esc-map "h" 'mark-paragraph)
1114(define-key esc-map "a" 'backward-sentence)
1115(define-key esc-map "e" 'forward-sentence)
1116(define-key esc-map "k" 'kill-sentence)
1117(define-key ctl-x-map "\177" 'backward-kill-sentence)
1118
1119(define-key ctl-x-map "[" 'backward-page)
1120(define-key ctl-x-map "]" 'forward-page)
1121(define-key ctl-x-map "\C-p" 'mark-page)
1122(define-key ctl-x-map "l" 'count-lines-page)
1123(define-key ctl-x-map "np" 'narrow-to-page)
1124;; (define-key ctl-x-map "p" 'narrow-to-page)
1125\f
1126(define-key ctl-x-map "al" 'add-mode-abbrev)
1127(define-key ctl-x-map "a\C-a" 'add-mode-abbrev)
1128(define-key ctl-x-map "ag" 'add-global-abbrev)
1129(define-key ctl-x-map "a+" 'add-mode-abbrev)
1130(define-key ctl-x-map "aig" 'inverse-add-global-abbrev)
1131(define-key ctl-x-map "ail" 'inverse-add-mode-abbrev)
1132;; (define-key ctl-x-map "a\C-h" 'inverse-add-global-abbrev)
1133(define-key ctl-x-map "a-" 'inverse-add-global-abbrev)
1134(define-key ctl-x-map "ae" 'expand-abbrev)
1135(define-key ctl-x-map "a'" 'expand-abbrev)
1136;; (define-key ctl-x-map "\C-a" 'add-mode-abbrev)
1137;; (define-key ctl-x-map "\+" 'add-global-abbrev)
1138;; (define-key ctl-x-map "\C-h" 'inverse-add-mode-abbrev)
1139;; (define-key ctl-x-map "\-" 'inverse-add-global-abbrev)
1140(define-key esc-map "'" 'abbrev-prefix-mark)
1141(define-key ctl-x-map "'" 'expand-abbrev)
1142
aa5ba90e 1143(define-key ctl-x-map "z" 'repeat)
e4ade21b 1144
ef2cfb2e
RS
1145(define-key esc-map "\C-l" 'reposition-window)
1146
1147(define-key ctl-x-4-map "a" 'add-change-log-entry-other-window)
ad1cc346
KS
1148(define-key ctl-x-4-map "c" 'clone-indirect-buffer-other-window)
1149
56c5808a 1150;; Signal handlers
653a9100
KS
1151(define-key special-event-map [sigusr1] 'ignore)
1152(define-key special-event-map [sigusr2] 'ignore)
56c5808a 1153
d1bf2a73
SM
1154;; Don't look for autoload cookies in this file.
1155;; Local Variables:
1156;; no-update-autoloads: t
1157;; End:
4d120e8c 1158
6455508d 1159;; arch-tag: 23b5c7e6-e47b-49ed-8c6c-ed213c5fffe0
4d120e8c 1160;;; bindings.el ends here