(tar-header-block-summarize, tar-get-descriptor):
[bpt/emacs.git] / lisp / bindings.el
CommitLineData
1cd7adc6 1;;; bindings.el --- define standard key bindings and some variables
4d120e8c 2
9d4850e5 3;; Copyright (C) 1985,86,87,92,93,94,95,96,99,2000, 2001
9ff33afb 4;; 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
13;; the Free Software Foundation; either version 2, or (at your option)
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
23;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
24;; Boston, MA 02111-1307, USA.
25
26;;; Commentary:
27
28;;; !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
29;;; Special formatting conventions are used in this file!
30;;;
31;;; a backslash-newline is used at the beginning of a documentation string
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)))
126 (define-key map [mode-line mouse-3]
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
dfdabcf9
DL
138(defvar mode-line-mule-info
139 `(""
9ff33afb 140 (current-input-method
5e1cddda 141 (:eval
3beb81fc
DL
142 ,(purecopy
143 '(propertize current-input-method-title
144 'help-echo (concat
145 "Input method: "
146 current-input-method
f3185924 147 ". mouse-2: disable, mouse-3: describe")
3beb81fc
DL
148 'local-map mode-line-input-method-map))))
149 ,(propertize
150 "%Z"
7ed93890 151 'help-echo
7e98f74c
RS
152 #'(lambda (window object point)
153 (with-current-buffer (window-buffer window)
154 ;; Don't show this tip if the coding system is nil,
155 ;; it reads like a bug, and is not useful anyway.
156 (when buffer-file-coding-system
157 (if enable-multibyte-characters
158 (concat (symbol-name buffer-file-coding-system)
159 " buffer; mouse-3: describe coding system")
160 (concat "Unibyte " (symbol-name buffer-file-coding-system)
161 " buffer")))))
f3185924 162 'local-map mode-line-coding-system-map))
44c034c1
KH
163 "Mode-line control for displaying information of multilingual environment.
164Normally it displays current input method (if any activated) and
165mnemonics of the following coding systems:
166 coding system for saving or writing the current buffer
167 coding system for keyboard input (if Emacs is running on terminal)
ebc6753f 168 coding system for terminal output (if Emacs is running on terminal)"
555f1a32
RS
169;;; Currently not:
170;;; coding system for decoding output of buffer process (if any)
171;;; coding system for encoding text to send to buffer process (if any)."
ebc6753f 172)
f8bce5df
KH
173
174(make-variable-buffer-local 'mode-line-mule-info)
175
688953b5
DL
176(defvar mode-line-buffer-identification (purecopy '("%12b")) "\
177Mode-line control for identifying the buffer being displayed.
4544e9db 178Its default value is (\"%12b\").
4d120e8c
RS
179Major modes that edit things other than ordinary files may change this
180\(e.g. Info, Dired,...)")
181
182(make-variable-buffer-local 'mode-line-buffer-identification)
183
e6188964
RS
184(defvar mode-line-frame-identification '("-%F ")
185 "Mode-line control to describe the current frame.")
4544e9db 186
688953b5
DL
187(defvar mode-line-process nil "\
188Mode-line control for displaying info on process status.
4d120e8c
RS
189Normally nil in most modes, since there is no process to display.")
190
191(make-variable-buffer-local 'mode-line-process)
192
dfdabcf9
DL
193(defvar mode-line-modified
194 (list (propertize
3beb81fc
DL
195 "%1*"
196 'help-echo (purecopy (lambda (window object point)
1ebfdece 197 (format "%sead-only: mouse-3 toggles"
3beb81fc
DL
198 (save-selected-window
199 (select-window window)
200 (if buffer-read-only
201 "R"
202 "Not r")))))
1ebfdece
GM
203 'local-map (purecopy (make-mode-line-mouse-map
204 'mouse-3
24127af0 205 #'mode-line-toggle-read-only)))
3beb81fc
DL
206 (propertize
207 "%1+"
208 'help-echo (purecopy (lambda (window object point)
1ebfdece 209 (format "%sodified: mouse-3 toggles"
3beb81fc
DL
210 (save-selected-window
211 (select-window window)
212 (if (buffer-modified-p)
213 "M"
214 "Not m")))))
1ebfdece
GM
215 'local-map (purecopy (make-mode-line-mouse-map
216 'mouse-3 #'mode-line-toggle-modified))))
4d120e8c
RS
217 "Mode-line control for displaying whether current buffer is modified.")
218
219(make-variable-buffer-local 'mode-line-modified)
220
e6188964
RS
221;; Actual initialization is below.
222(defvar mode-line-position nil
223 "Mode-line control for displaying line number, column number and fraction.")
224
225(defvar mode-line-modes nil
226 "Mode-line control for displaying major and minor modes.")
227
5b1d5e63
RS
228(defvar mode-line-minor-mode-keymap nil "\
229Keymap to display on major and minor modes.")
230
231;; Menu of minor modes.
232(let ((map (make-sparse-keymap)))
233 (define-key map [mode-line down-mouse-3] 'mode-line-mode-menu-1)
234 (define-key map [header-line down-mouse-3] 'mode-line-mode-menu-1)
235 (setq mode-line-minor-mode-keymap map))
236
e6188964
RS
237(let* ((help-echo
238 ;; The multi-line message doesn't work terribly well on the
239 ;; bottom mode line... Better ideas?
d1bf2a73
SM
240 ;; "\
241 ;; mouse-1: select window, mouse-2: delete others, mouse-3: delete,
242 ;; drag-mouse-1: resize, C-mouse-2: split horizontally"
243 "mouse-1: select (drag to resize), mouse-2: delete others, mouse-3: delete")
244 (dashes (propertize "--" 'help-echo help-echo)))
e6188964 245 (setq-default mode-line-format
2b4b2add
DL
246 (list
247 (propertize "-" 'help-echo help-echo)
248 'mode-line-mule-info
249 'mode-line-modified
250 'mode-line-frame-identification
251 'mode-line-buffer-identification
252 (propertize " " 'help-echo help-echo)
253 'global-mode-string
e6188964
RS
254 'mode-line-modes
255 `(which-func-mode ("" which-func-format ,dashes))
256 'mode-line-position
257 (propertize "-%-" 'help-echo help-echo)))
258
259 (setq-default mode-line-modes
260 (list
2b4b2add 261 (propertize " %[(" 'help-echo help-echo)
5b1d5e63
RS
262 `(:propertize ("" mode-name mode-line-process minor-mode-alist)
263 help-echo "mouse-3: minor mode menu"
264 local-map ,mode-line-minor-mode-keymap)
2b4b2add 265 (propertize "%n" 'help-echo "mouse-2: widen"
7ed93890 266 'local-map (make-mode-line-mouse-map
1ebfdece 267 'mouse-2 #'mode-line-widen))
e6188964
RS
268 (propertize ")%]--" 'help-echo help-echo)))
269
545f7310 270 (setq-default mode-line-position
e6188964
RS
271 `((line-number-mode (,(propertize "L%l" 'help-echo help-echo) ,dashes))
272 (column-number-mode (,(propertize "C%c" 'help-echo help-echo) ,dashes))
273 (-3 . ,(propertize "%p" 'help-echo help-echo)))))
4d120e8c 274
688953b5
DL
275(defvar mode-line-buffer-identification-keymap nil "\
276Keymap for what is displayed by `mode-line-buffer-identification'.")
b1dcba7b 277
fa3f4090 278(defun last-buffer () "\
545f7310
SS
279Return the last non-hidden buffer in the buffer list."
280 (let ((list (reverse (buffer-list))))
281 (while (eq (aref (buffer-name (car list)) 0) ? )
282 (setq list (cdr list)))
283 (car list)))
284
fa3f4090
RS
285(defun unbury-buffer () "\
286Switch to the last buffer in the buffer list."
545f7310
SS
287 (interactive)
288 (switch-to-buffer (last-buffer)))
289
22b50772 290(defun mode-line-unbury-buffer (event) "\
545f7310 291Call `unbury-buffer' in this window."
22b50772
GM
292 (interactive "e")
293 (save-selected-window
294 (select-window (posn-window (event-start event)))
545f7310 295 (unbury-buffer)))
22b50772
GM
296
297(defun mode-line-bury-buffer (event) "\
c85ee897 298Like `bury-buffer', but temporarily select EVENT's window."
22b50772
GM
299 (interactive "e")
300 (save-selected-window
301 (select-window (posn-window (event-start event)))
302 (bury-buffer)))
b1dcba7b 303
688953b5
DL
304(defun mode-line-other-buffer () "\
305Switch to the most recently selected buffer other than the current one."
b1dcba7b
GM
306 (interactive)
307 (switch-to-buffer (other-buffer)))
308
5e1cddda
DL
309(defvar mode-line-mode-menu (make-sparse-keymap "Minor Modes") "\
310Menu of mode operations in the mode line.")
311
b1dcba7b
GM
312(defun mode-line-mode-menu-1 (event)
313 (interactive "e")
314 (save-selected-window
315 (select-window (posn-window (event-start event)))
316 (let* ((selection (mode-line-mode-menu event))
317 (binding (and selection (lookup-key mode-line-mode-menu
318 (vector (car selection))))))
319 (if binding
320 (call-interactively binding)))))
321
842d2ee9
DL
322(defmacro bound-and-true-p (var)
323 "Return the value of symbol VAR if it is bound, else nil."
ff69e012 324 `(and (boundp (quote ,var)) ,var))
842d2ee9 325
dfdabcf9 326(define-key mode-line-mode-menu [overwrite-mode]
5b1d5e63 327 `(menu-item ,(purecopy "Overwrite (Ovwrt)") overwrite-mode
dfdabcf9 328 :button (:toggle . overwrite-mode)))
2a5405b6 329(define-key mode-line-mode-menu [outline-minor-mode]
5b1d5e63 330 `(menu-item ,(purecopy "Outline (Outl)") outline-minor-mode
2a5405b6
GM
331 :button (:toggle . (bound-and-true-p outline-minor-mode))))
332(define-key mode-line-mode-menu [line-number-mode]
333 `(menu-item ,(purecopy "Line number") line-number-mode
334 :button (:toggle . line-number-mode)))
335(define-key mode-line-mode-menu [highlight-changes-mode]
5b1d5e63 336 `(menu-item ,(purecopy "Highlight changes (Chg)") highlight-changes-mode
2a5405b6 337 :button (:toggle . highlight-changes-mode)))
7f8661a0 338(define-key mode-line-mode-menu [glasses-mode]
5b1d5e63 339 `(menu-item ,(purecopy "Glasses (o^o)") glasses-mode
e84c695d 340 :button (:toggle . (bound-and-true-p glasses-mode))))
2a5405b6 341(define-key mode-line-mode-menu [hide-ifdef-mode]
5b1d5e63 342 `(menu-item ,(purecopy "Hide ifdef (Ifdef)") hide-ifdef-mode
2a5405b6
GM
343 :button (:toggle . (bound-and-true-p hide-ifdef-mode))))
344(define-key mode-line-mode-menu [font-lock-mode]
345 `(menu-item ,(purecopy "Font-lock") font-lock-mode
346 :button (:toggle . font-lock-mode)))
347(define-key mode-line-mode-menu [flyspell-mode]
5b1d5e63 348 `(menu-item ,(purecopy "Flyspell (Fly)") flyspell-mode
2a5405b6
GM
349 :button (:toggle . (bound-and-true-p flyspell-mode))))
350(define-key mode-line-mode-menu [column-number-mode]
351 `(menu-item ,(purecopy "Column number") column-number-mode
352 :button (:toggle . column-number-mode)))
353(define-key mode-line-mode-menu [auto-fill-mode]
5b1d5e63 354 `(menu-item ,(purecopy "Auto-fill (Fill)") auto-fill-mode
2a5405b6
GM
355 :button (:toggle . auto-fill-function)))
356(define-key mode-line-mode-menu [auto-revert-mode]
5b1d5e63 357 `(menu-item ,(purecopy "Auto revert (ARev)") auto-revert-mode
2a5405b6
GM
358 :button (:toggle . auto-revert-mode)))
359(define-key mode-line-mode-menu [abbrev-mode]
5b1d5e63 360 `(menu-item ,(purecopy "Abbrev (Abbrev)") abbrev-mode
2a5405b6 361 :button (:toggle . abbrev-mode)))
dfdabcf9 362
5e1cddda
DL
363(defun mode-line-mode-menu (event)
364 (interactive "@e")
365 (x-popup-menu event mode-line-mode-menu))
366
367;; Add menu of buffer operations to the buffer identification part
1ebfdece
GM
368;; of the mode line.or header line.
369;
5e1cddda 370(let ((map (make-sparse-keymap)))
22b50772
GM
371 ;; Bind down- events so that the global keymap won't ``shine
372 ;; through''.
373 (define-key map [mode-line down-mouse-1] 'ignore)
1ebfdece 374 (define-key map [mode-line mouse-1] 'mode-line-unbury-buffer)
22b50772 375 (define-key map [header-line down-mouse-1] 'ignore)
1ebfdece 376 (define-key map [header-line mouse-1] 'mode-line-unbury-buffer)
22b50772
GM
377 (define-key map [header-line down-mouse-3] 'ignore)
378 (define-key map [mode-line mouse-3] 'mode-line-bury-buffer)
379 (define-key map [header-line down-mouse-3] 'ignore)
380 (define-key map [header-line mouse-3] 'mode-line-bury-buffer)
ec9db7a7
GM
381 (setq mode-line-buffer-identification-keymap map))
382
383(defun propertized-buffer-identification (fmt)
384 "Return a list suitable for `mode-line-buffer-identification'.
385FMT is a format specifier such as \"%12b\". This function adds
386text properties for face, help-echo, and local-map to it."
387 (list (propertize fmt
388 'face '(:weight bold)
7ed93890 389 'help-echo
1ebfdece 390 (purecopy "mouse-1: previous buffer, mouse-3: next buffer")
ec9db7a7 391 'local-map mode-line-buffer-identification-keymap)))
7ed93890 392
ec9db7a7
GM
393(setq-default mode-line-buffer-identification
394 (propertized-buffer-identification "%12b"))
5e1cddda 395
541b8aff
GM
396(defvar minor-mode-alist nil "\
397Alist saying how to show minor modes in the mode line.
398Each element looks like (VARIABLE STRING);
399STRING is included in the mode line iff VARIABLE's value is non-nil.
400
401Actually, STRING need not be a string; any possible mode-line element
402is okay. See `mode-line-format'.")
403;; Don't use purecopy here--some people want to change these strings.
404(setq minor-mode-alist
405 (list
5b1d5e63 406 (list 'abbrev-mode " Abbrev")
541b8aff 407 '(overwrite-mode overwrite-mode)
5b1d5e63 408 (list 'auto-fill-function " Fill")
541b8aff
GM
409 ;; not really a minor mode...
410 '(defining-kbd-macro " Def")))
411
4d120e8c
RS
412;; These variables are used by autoloadable packages.
413;; They are defined here so that they do not get overridden
414;; by the loading of those packages.
415
416;; Names in directory that end in one of these
417;; are ignored in completion,
418;; making it more likely you will get a unique match.
419(setq completion-ignored-extensions
d34c1b05 420 (append
a12ca054
EZ
421 (cond ((memq system-type '(ms-dos windows-nt))
422 '(".o" "~" ".bin" ".bak" ".obj" ".map" ".ico" ".pif" ".lnk"
423 ".a" ".ln" ".blg" ".bbl" ".dll" ".drv" ".vxd" ".386"))
d34c1b05
RS
424 ((eq system-type 'vax-vms)
425 '(".obj" ".exe" ".bin" ".lbin" ".sbin"
7ed93890 426 ".brn" ".rnt" ".lni" ".lis"
d34c1b05
RS
427 ".olb" ".tlb" ".mlb" ".hlb"))
428 (t
a12ca054 429 '(".o" "~" ".bin" ".lbin" ".so"
d34c1b05
RS
430 ".a" ".ln" ".blg" ".bbl")))
431 '(".elc" ".lof"
432 ".glo" ".idx" ".lot"
433 ;; TeX-related
71a92751 434 ".dvi" ".fmt" ".tfm" ".pdf"
c79e04d8
RS
435 ;; Java compiled
436 ".class"
7ed93890
SS
437 ;; CLISP
438 ".fas" ".lib" ".mem"
c79e04d8 439 ;; CMUCL
ff69e012 440 ".x86f" ".sparcf"
7ed93890
SS
441 ;; Other CL implementations (Allegro, LispWorks)
442 ".fasl" ".ufsl" ".fsl" ".dxl"
f7e1a28d
GM
443 ;; Libtool
444 ".lo" ".la"
d34c1b05
RS
445 ;; Texinfo-related
446 ".toc" ".log" ".aux"
447 ".cp" ".fn" ".ky" ".pg" ".tp" ".vr"
448 ".cps" ".fns" ".kys" ".pgs" ".tps" ".vrs")))
4d120e8c 449
ae95a95a
SM
450;; Suffixes used for executables.
451(setq exec-suffixes
452 (cond
453 ((memq system-type '(ms-dos windows-nt))
454 '(".exe" ".com" ".bat" ".cmd" ".btm" ""))
455 (t
456 '(""))))
457
2b4b2add
DL
458;; Packages should add to this list appropriately when they are
459;; loaded, rather than listing everything here.
4d120e8c
RS
460(setq debug-ignored-errors
461 '(beginning-of-line beginning-of-buffer end-of-line
462 end-of-buffer end-of-file buffer-read-only
c79e04d8 463 file-supersession
4d120e8c
RS
464 "^Previous command was not a yank$"
465 "^Minibuffer window is not active$"
466 "^End of history; no next item$"
467 "^Beginning of history; no preceding item$"
468 "^No recursive edit is in progress$"
469 "^Changes to be undone are outside visible portion of buffer$"
470 "^No undo information in this buffer$"
471 "^No further undo information$"
472 "^Save not confirmed$"
473 "^Recover-file cancelled\\.$"
800c9512 474 "^Cannot switch buffers in a dedicated window$"
7ed93890 475
cdd4703c
RS
476 ;; ediff
477 "^Errors in diff output. Diff output is in "
478 "^Hmm... I don't see an Ediff command around here...$"
479 "^Undocumented command! Type `G' in Ediff Control Panel to drop a note to the Ediff maintainer$"
480 ": This command runs in Ediff Control Buffer only!$"
481 ": Invalid op in ediff-check-version$"
482 "^ediff-shrink-window-C can be used only for merging jobs$"
483 "^Lost difference info on these directories$"
484 "^This command is inapplicable in the present context$"
485 "^This session group has no parent$"
486 "^Can't hide active session, $"
cdd4703c
RS
487 "^Ediff: something wrong--no multiple diffs buffer$"
488 "^Can't make context diff for Session $"
489 "^The patch buffer wasn't found$"
490 "^Aborted$"
491 "^This Ediff session is not part of a session group$"
492 "^No active Ediff sessions or corrupted session registry$"
493 "^No session info in this line$"
494 "^`.*' is not an ordinary file$"
495 "^Patch appears to have failed$"
496 "^Recomputation of differences cancelled$"
497 "^No fine differences in this mode$"
498 "^Lost connection to ancestor buffer...sorry$"
499 "^Not merging with ancestor$"
500 "^Don't know how to toggle read-only in buffer "
501 "Emacs is not running as a window application$"
502 "^This command makes sense only when merging with an ancestor$"
503 "^At end of the difference list$"
504 "^At beginning of the difference list$"
cdd4703c
RS
505 "^Nothing saved for diff .* in buffer "
506 "^Buffer is out of sync for file "
507 "^Buffer out of sync for file "
508 "^Output from `diff' not found$"
509 "^You forgot to specify a region in buffer "
510 "^All right. Make up your mind and come back...$"
511 "^Current buffer is not visiting any file$"
512 "^Failed to retrieve revision: $"
513 "^Can't determine display width.$"
514 "^File `.*' does not exist or is not readable$"
515 "^File `.*' is a directory$"
516 "^Buffer .* doesn't exist$"
517 "^Directories . and . are the same: "
518 "^Directory merge aborted$"
519 "^Merge of directory revisions aborted$"
520 "^Buffer .* doesn't exist$"
521 "^There is no file to merge$"
d8d0fa6c 522 "^Version control package .*.el not found. Use vc.el instead$"))
4d120e8c
RS
523
524
525(make-variable-buffer-local 'indent-tabs-mode)
526
152d064d 527;; We have base64 and md5 functions built in now.
d1bf2a73
SM
528(provide 'base64)
529(provide 'md5)
530(provide 'overlay '(display syntax-table field))
531(provide 'text-properties '(display syntax-table field point-entered))
acafa9cf 532
0094907b
RS
533(define-key esc-map "\t" 'complete-symbol)
534
688953b5
DL
535(defun complete-symbol (arg) "\
536Perform tags completion on the text around point.
4d120e8c
RS
537Completes to the set of names listed in the current tags table.
538The string to complete is chosen in the same way as the default
364581dc
RS
539for \\[find-tag] (which see).
540
541With a prefix argument, this command does completion within
542the collection of symbols listed in the index of the manual for the
543language you are using."
0094907b
RS
544 (interactive "P")
545 (if arg
364581dc
RS
546 (info-complete-symbol)
547 (if (fboundp 'complete-tag)
548 (complete-tag)
549 ;; Don't autoload etags if we have no tags table.
550 (error (substitute-command-keys
551 "No tags table loaded; use \\[visit-tags-table] to load one")))))
4d120e8c
RS
552
553;; Reduce total amount of space we must allocate during this function
554;; that we will not need to keep permanently.
555(garbage-collect)
556\f
d92921c3
KH
557;; Make all multibyte characters self-insert.
558(let ((l (generic-character-list))
559 (table (nth 1 global-map)))
560 (while l
561 (set-char-table-default table (car l) 'self-insert-command)
562 (setq l (cdr l))))
3607b64d 563
4d120e8c
RS
564(setq help-event-list '(help f1))
565
97710114
RS
566(make-variable-buffer-local 'minor-mode-overriding-map-alist)
567
d1bf2a73
SM
568;; From macros.c
569(define-key ctl-x-map "(" 'start-kbd-macro)
570(define-key ctl-x-map ")" 'end-kbd-macro)
571(define-key ctl-x-map "e" 'call-last-kbd-macro)
572;; From frame.c
573(global-set-key [switch-frame] 'handle-switch-frame)
574(global-set-key [delete-frame] 'handle-delete-frame)
575(global-set-key [iconify-frame] 'ignore-event)
576(global-set-key [make-frame-visible] 'ignore-event)
577
578
4d120e8c
RS
579;These commands are defined in editfns.c
580;but they are not assigned to keys there.
581(put 'narrow-to-region 'disabled t)
582(define-key ctl-x-map "nn" 'narrow-to-region)
583(define-key ctl-x-map "nw" 'widen)
584;; (define-key ctl-x-map "n" 'narrow-to-region)
585;; (define-key ctl-x-map "w" 'widen)
586
587(define-key global-map "\C-j" 'newline-and-indent)
588(define-key global-map "\C-m" 'newline)
589(define-key global-map "\C-o" 'open-line)
590(define-key esc-map "\C-o" 'split-line)
591(define-key global-map "\C-q" 'quoted-insert)
592(define-key esc-map "^" 'delete-indentation)
593(define-key esc-map "\\" 'delete-horizontal-space)
594(define-key esc-map "m" 'back-to-indentation)
595(define-key ctl-x-map "\C-o" 'delete-blank-lines)
596(define-key esc-map " " 'just-one-space)
597(define-key esc-map "z" 'zap-to-char)
598(define-key esc-map "=" 'count-lines-region)
599(define-key ctl-x-map "=" 'what-cursor-position)
600(define-key esc-map ":" 'eval-expression)
601;; Define ESC ESC : like ESC : for people who type ESC ESC out of habit.
602(define-key esc-map "\M-:" 'eval-expression)
603;; Changed from C-x ESC so that function keys work following C-x.
604(define-key ctl-x-map "\e\e" 'repeat-complex-command)
605;; New binding analogous to M-:.
606(define-key ctl-x-map "\M-:" 'repeat-complex-command)
607(define-key ctl-x-map "u" 'advertised-undo)
608;; Many people are used to typing C-/ on X terminals and getting C-_.
609(define-key global-map [?\C-/] 'undo)
610(define-key global-map "\C-_" 'undo)
611(define-key esc-map "!" 'shell-command)
612(define-key esc-map "|" 'shell-command-on-region)
613
a77dfeb0
SM
614(let ((map minibuffer-local-map))
615 (define-key map "\en" 'next-history-element)
616 (define-key map [next] 'next-history-element)
617 (define-key map [down] 'next-history-element)
618 (define-key map "\ep" 'previous-history-element)
619 (define-key map [prior] 'previous-history-element)
620 (define-key map [up] 'previous-history-element)
621 (define-key map "\es" 'next-matching-history-element)
622 (define-key map "\er" 'previous-matching-history-element))
4d120e8c
RS
623
624(define-key global-map "\C-u" 'universal-argument)
625(let ((i ?0))
626 (while (<= i ?9)
627 (define-key esc-map (char-to-string i) 'digit-argument)
628 (setq i (1+ i))))
629(define-key esc-map "-" 'negative-argument)
630;; Define control-digits.
631(let ((i ?0))
632 (while (<= i ?9)
633 (define-key global-map (read (format "[?\\C-%c]" i)) 'digit-argument)
634 (setq i (1+ i))))
635(define-key global-map [?\C--] 'negative-argument)
636;; Define control-meta-digits.
637(let ((i ?0))
638 (while (<= i ?9)
639 (define-key esc-map (read (format "[?\\C-%c]" i)) 'digit-argument)
640 (setq i (1+ i))))
641(define-key global-map [?\C-\M--] 'negative-argument)
642
643(define-key global-map "\C-k" 'kill-line)
644(define-key global-map "\C-w" 'kill-region)
645(define-key esc-map "w" 'kill-ring-save)
646(define-key esc-map "\C-w" 'append-next-kill)
647(define-key global-map "\C-y" 'yank)
648(define-key esc-map "y" 'yank-pop)
649
650;; (define-key ctl-x-map "a" 'append-to-buffer)
651
652(define-key global-map "\C-@" 'set-mark-command)
653;; Many people are used to typing C-SPC and getting C-@.
e68e61b5 654(define-key global-map [?\C- ] 'set-mark-command)
4d120e8c
RS
655(define-key ctl-x-map "\C-x" 'exchange-point-and-mark)
656(define-key ctl-x-map "\C-@" 'pop-global-mark)
e68e61b5 657(define-key ctl-x-map [?\C- ] 'pop-global-mark)
4d120e8c
RS
658
659(define-key global-map "\C-n" 'next-line)
660(define-key global-map "\C-p" 'previous-line)
661(define-key ctl-x-map "\C-n" 'set-goal-column)
662
663;;(defun function-key-error ()
664;; (interactive)
1cd7adc6 665;; (error "That function key is not bound to anything"))
4d120e8c
RS
666
667(define-key global-map [menu] 'execute-extended-command)
668(define-key global-map [find] 'search-forward)
669
9d4850e5
GM
670;; Don't do this. We define <delete> in function-key-map instead.
671;(define-key global-map [delete] 'backward-delete-char)
4e4f9651 672
4d120e8c 673;; natural bindings for terminal keycaps --- defined in X keysym order
1dfca644
GM
674(define-key global-map [home] 'beginning-of-line)
675(define-key global-map [C-home] 'beginning-of-buffer)
4d120e8c
RS
676(define-key global-map [M-home] 'beginning-of-buffer-other-window)
677(define-key global-map [left] 'backward-char)
678(define-key global-map [up] 'previous-line)
679(define-key global-map [right] 'forward-char)
680(define-key global-map [down] 'next-line)
681(define-key global-map [prior] 'scroll-down)
682(define-key global-map [next] 'scroll-up)
683(define-key global-map [C-up] 'backward-paragraph)
684(define-key global-map [C-down] 'forward-paragraph)
685(define-key global-map [C-prior] 'scroll-right)
686(define-key global-map [C-next] 'scroll-left)
687(define-key global-map [M-next] 'scroll-other-window)
688(define-key global-map [M-prior] 'scroll-other-window-down)
1dfca644
GM
689(define-key global-map [end] 'end-of-line)
690(define-key global-map [C-end] 'end-of-buffer)
4d120e8c
RS
691(define-key global-map [M-end] 'end-of-buffer-other-window)
692(define-key global-map [begin] 'beginning-of-buffer)
693(define-key global-map [M-begin] 'beginning-of-buffer-other-window)
694;; (define-key global-map [select] 'function-key-error)
695;; (define-key global-map [print] 'function-key-error)
696(define-key global-map [execute] 'execute-extended-command)
697(define-key global-map [insert] 'overwrite-mode)
698(define-key global-map [C-insert] 'kill-ring-save)
699(define-key global-map [S-insert] 'yank)
700(define-key global-map [undo] 'undo)
701(define-key global-map [redo] 'repeat-complex-command)
702;; (define-key global-map [clearline] 'function-key-error)
703(define-key global-map [insertline] 'open-line)
704(define-key global-map [deleteline] 'kill-line)
705;; (define-key global-map [insertchar] 'function-key-error)
706(define-key global-map [deletechar] 'delete-char)
707;; (define-key global-map [backtab] 'function-key-error)
708;; (define-key global-map [f1] 'function-key-error)
709;; (define-key global-map [f2] 'function-key-error)
710;; (define-key global-map [f3] 'function-key-error)
711;; (define-key global-map [f4] 'function-key-error)
712;; (define-key global-map [f5] 'function-key-error)
713;; (define-key global-map [f6] 'function-key-error)
714;; (define-key global-map [f7] 'function-key-error)
715;; (define-key global-map [f8] 'function-key-error)
716;; (define-key global-map [f9] 'function-key-error)
717;; (define-key global-map [f10] 'function-key-error)
718;; (define-key global-map [f11] 'function-key-error)
719;; (define-key global-map [f12] 'function-key-error)
720;; (define-key global-map [f13] 'function-key-error)
721;; (define-key global-map [f14] 'function-key-error)
722;; (define-key global-map [f15] 'function-key-error)
723;; (define-key global-map [f16] 'function-key-error)
724;; (define-key global-map [f17] 'function-key-error)
725;; (define-key global-map [f18] 'function-key-error)
726;; (define-key global-map [f19] 'function-key-error)
727;; (define-key global-map [f20] 'function-key-error)
728;; (define-key global-map [f21] 'function-key-error)
729;; (define-key global-map [f22] 'function-key-error)
730;; (define-key global-map [f23] 'function-key-error)
731;; (define-key global-map [f24] 'function-key-error)
732;; (define-key global-map [f25] 'function-key-error)
733;; (define-key global-map [f26] 'function-key-error)
734;; (define-key global-map [f27] 'function-key-error)
735;; (define-key global-map [f28] 'function-key-error)
736;; (define-key global-map [f29] 'function-key-error)
737;; (define-key global-map [f30] 'function-key-error)
738;; (define-key global-map [f31] 'function-key-error)
739;; (define-key global-map [f32] 'function-key-error)
740;; (define-key global-map [f33] 'function-key-error)
741;; (define-key global-map [f34] 'function-key-error)
742;; (define-key global-map [f35] 'function-key-error)
743;; (define-key global-map [kp-backtab] 'function-key-error)
744;; (define-key global-map [kp-space] 'function-key-error)
745;; (define-key global-map [kp-tab] 'function-key-error)
746;; (define-key global-map [kp-enter] 'function-key-error)
747;; (define-key global-map [kp-f1] 'function-key-error)
748;; (define-key global-map [kp-f2] 'function-key-error)
749;; (define-key global-map [kp-f3] 'function-key-error)
750;; (define-key global-map [kp-f4] 'function-key-error)
751;; (define-key global-map [kp-multiply] 'function-key-error)
752;; (define-key global-map [kp-add] 'function-key-error)
753;; (define-key global-map [kp-separator] 'function-key-error)
754;; (define-key global-map [kp-subtract] 'function-key-error)
755;; (define-key global-map [kp-decimal] 'function-key-error)
756;; (define-key global-map [kp-divide] 'function-key-error)
757;; (define-key global-map [kp-0] 'function-key-error)
758;; (define-key global-map [kp-1] 'function-key-error)
759;; (define-key global-map [kp-2] 'function-key-error)
760;; (define-key global-map [kp-3] 'function-key-error)
761;; (define-key global-map [kp-4] 'function-key-error)
762;; (define-key global-map [kp-5] 'recenter)
763;; (define-key global-map [kp-6] 'function-key-error)
764;; (define-key global-map [kp-7] 'function-key-error)
765;; (define-key global-map [kp-8] 'function-key-error)
766;; (define-key global-map [kp-9] 'function-key-error)
767;; (define-key global-map [kp-equal] 'function-key-error)
768
769;; X11R6 distinguishes these keys from the non-kp keys.
770;; Make them behave like the non-kp keys unless otherwise bound.
771(define-key function-key-map [kp-home] [home])
772(define-key function-key-map [kp-left] [left])
773(define-key function-key-map [kp-up] [up])
774(define-key function-key-map [kp-right] [right])
775(define-key function-key-map [kp-down] [down])
776(define-key function-key-map [kp-prior] [prior])
777(define-key function-key-map [kp-next] [next])
778(define-key function-key-map [M-kp-next] [M-next])
779(define-key function-key-map [kp-end] [end])
780(define-key function-key-map [kp-begin] [begin])
781(define-key function-key-map [kp-insert] [insert])
9d4850e5
GM
782(define-key function-key-map [backspace] [?\C-?])
783(define-key function-key-map [delete] [?\C-?])
ee5cece0 784(define-key function-key-map [kp-delete] [?\C-?])
9761cd3a
EZ
785(define-key function-key-map [S-kp-end] [S-end])
786(define-key function-key-map [S-kp-down] [S-down])
787(define-key function-key-map [S-kp-next] [S-next])
788(define-key function-key-map [S-kp-left] [S-left])
789(define-key function-key-map [S-kp-right] [S-right])
790(define-key function-key-map [S-kp-home] [S-home])
791(define-key function-key-map [S-kp-up] [S-up])
792(define-key function-key-map [S-kp-prior] [S-prior])
793(define-key function-key-map [C-S-kp-end] [C-S-end])
794(define-key function-key-map [C-S-kp-down] [C-S-down])
795(define-key function-key-map [C-S-kp-next] [C-S-next])
796(define-key function-key-map [C-S-kp-left] [C-S-left])
797(define-key function-key-map [C-S-kp-right] [C-S-right])
798(define-key function-key-map [C-S-kp-home] [C-S-home])
799(define-key function-key-map [C-S-kp-up] [C-S-up])
800(define-key function-key-map [C-S-kp-prior] [C-S-prior])
7bc60154
EZ
801;; Don't bind shifted keypad numeric keys, they reportedly
802;; interfere with the feature of some keyboards to produce
803;; numbers when NumLock is off.
804;(define-key function-key-map [S-kp-1] [S-end])
805;(define-key function-key-map [S-kp-2] [S-down])
806;(define-key function-key-map [S-kp-3] [S-next])
807;(define-key function-key-map [S-kp-4] [S-left])
808;(define-key function-key-map [S-kp-6] [S-right])
809;(define-key function-key-map [S-kp-7] [S-home])
810;(define-key function-key-map [S-kp-8] [S-up])
811;(define-key function-key-map [S-kp-9] [S-prior])
9761cd3a
EZ
812(define-key function-key-map [C-S-kp-1] [C-S-end])
813(define-key function-key-map [C-S-kp-2] [C-S-down])
814(define-key function-key-map [C-S-kp-3] [C-S-next])
815(define-key function-key-map [C-S-kp-4] [C-S-left])
816(define-key function-key-map [C-S-kp-6] [C-S-right])
817(define-key function-key-map [C-S-kp-7] [C-S-home])
818(define-key function-key-map [C-S-kp-8] [C-S-up])
819(define-key function-key-map [C-S-kp-9] [C-S-prior])
4d120e8c
RS
820
821(define-key global-map [mouse-movement] 'ignore)
822
823(define-key global-map "\C-t" 'transpose-chars)
824(define-key esc-map "t" 'transpose-words)
825(define-key esc-map "\C-t" 'transpose-sexps)
826(define-key ctl-x-map "\C-t" 'transpose-lines)
827
5589b330 828(define-key esc-map ";" 'comment-dwim)
fedff3c6
SM
829(define-key esc-map "j" 'indent-new-comment-line)
830(define-key esc-map "\C-j" 'indent-new-comment-line)
5589b330 831(define-key ctl-x-map ";" 'comment-set-column)
4d120e8c
RS
832(define-key ctl-x-map "f" 'set-fill-column)
833(define-key ctl-x-map "$" 'set-selective-display)
834
835(define-key esc-map "@" 'mark-word)
836(define-key esc-map "f" 'forward-word)
837(define-key esc-map "b" 'backward-word)
838(define-key esc-map "d" 'kill-word)
839(define-key esc-map "\177" 'backward-kill-word)
840
841(define-key esc-map "<" 'beginning-of-buffer)
842(define-key esc-map ">" 'end-of-buffer)
843(define-key ctl-x-map "h" 'mark-whole-buffer)
844(define-key esc-map "\\" 'delete-horizontal-space)
845
846(defalias 'mode-specific-command-prefix (make-sparse-keymap))
4b189189 847(defvar mode-specific-map (symbol-function 'mode-specific-command-prefix)
4d120e8c
RS
848 "Keymap for characters following C-c.")
849(define-key global-map "\C-c" 'mode-specific-command-prefix)
850
851(global-set-key [M-right] 'forward-word)
852(global-set-key [M-left] 'backward-word)
853;; ilya@math.ohio-state.edu says these bindings are standard on PC editors.
854(global-set-key [C-right] 'forward-word)
855(global-set-key [C-left] 'backward-word)
856;; This is not quite compatible, but at least is analogous
27940e1f
GM
857(global-set-key [C-delete] 'backward-kill-word)
858(global-set-key [C-backspace] 'kill-word)
4d120e8c
RS
859;; This is "move to the clipboard", or as close as we come.
860(global-set-key [S-delete] 'kill-region)
861
862(define-key esc-map "\C-f" 'forward-sexp)
863(define-key esc-map "\C-b" 'backward-sexp)
864(define-key esc-map "\C-u" 'backward-up-list)
865(define-key esc-map "\C-@" 'mark-sexp)
866(define-key esc-map [?\C-\ ] 'mark-sexp)
867(define-key esc-map "\C-d" 'down-list)
868(define-key esc-map "\C-k" 'kill-sexp)
869(define-key global-map [C-M-delete] 'backward-kill-sexp)
870(define-key global-map [C-M-backspace] 'backward-kill-sexp)
da7ddbed
GM
871(define-key esc-map [C-delete] 'backward-kill-sexp)
872(define-key esc-map [C-backspace] 'backward-kill-sexp)
4d120e8c
RS
873(define-key esc-map "\C-n" 'forward-list)
874(define-key esc-map "\C-p" 'backward-list)
875(define-key esc-map "\C-a" 'beginning-of-defun)
876(define-key esc-map "\C-e" 'end-of-defun)
877(define-key esc-map "\C-h" 'mark-defun)
878(define-key ctl-x-map "nd" 'narrow-to-defun)
879(define-key esc-map "(" 'insert-parentheses)
880(define-key esc-map ")" 'move-past-close-and-reindent)
4d120e8c
RS
881
882(define-key ctl-x-map "\C-e" 'eval-last-sexp)
6d64bc9f
RS
883
884(define-key ctl-x-map "m" 'compose-mail)
885(define-key ctl-x-4-map "m" 'compose-mail-other-window)
886(define-key ctl-x-5-map "m" 'compose-mail-other-frame)
4d120e8c
RS
887\f
888(define-key ctl-x-map "r\C-@" 'point-to-register)
889(define-key ctl-x-map [?r ?\C-\ ] 'point-to-register)
890(define-key ctl-x-map "r " 'point-to-register)
891(define-key ctl-x-map "rj" 'jump-to-register)
892(define-key ctl-x-map "rs" 'copy-to-register)
893(define-key ctl-x-map "rx" 'copy-to-register)
894(define-key ctl-x-map "ri" 'insert-register)
895(define-key ctl-x-map "rg" 'insert-register)
896(define-key ctl-x-map "rr" 'copy-rectangle-to-register)
bdb45de9
KH
897(define-key ctl-x-map "rn" 'number-to-register)
898(define-key ctl-x-map "r+" 'increment-register)
4d120e8c
RS
899(define-key ctl-x-map "rc" 'clear-rectangle)
900(define-key ctl-x-map "rk" 'kill-rectangle)
901(define-key ctl-x-map "rd" 'delete-rectangle)
902(define-key ctl-x-map "ry" 'yank-rectangle)
903(define-key ctl-x-map "ro" 'open-rectangle)
904(define-key ctl-x-map "rt" 'string-rectangle)
905(define-key ctl-x-map "rw" 'window-configuration-to-register)
906(define-key ctl-x-map "rf" 'frame-configuration-to-register)
907
908;; These key bindings are deprecated; use the above C-x r map instead.
909;; We use these aliases so \[...] will show the C-x r bindings instead.
910(defalias 'point-to-register-compatibility-binding 'point-to-register)
911(defalias 'jump-to-register-compatibility-binding 'jump-to-register)
912(defalias 'copy-to-register-compatibility-binding 'copy-to-register)
913(defalias 'insert-register-compatibility-binding 'insert-register)
914(define-key ctl-x-map "/" 'point-to-register-compatibility-binding)
915(define-key ctl-x-map "j" 'jump-to-register-compatibility-binding)
916(define-key ctl-x-map "x" 'copy-to-register-compatibility-binding)
917(define-key ctl-x-map "g" 'insert-register-compatibility-binding)
918;; (define-key ctl-x-map "r" 'copy-rectangle-to-register)
919
920(define-key esc-map "q" 'fill-paragraph)
921;; (define-key esc-map "g" 'fill-region)
922(define-key ctl-x-map "." 'set-fill-prefix)
923\f
924(define-key esc-map "{" 'backward-paragraph)
925(define-key esc-map "}" 'forward-paragraph)
926(define-key esc-map "h" 'mark-paragraph)
927(define-key esc-map "a" 'backward-sentence)
928(define-key esc-map "e" 'forward-sentence)
929(define-key esc-map "k" 'kill-sentence)
930(define-key ctl-x-map "\177" 'backward-kill-sentence)
931
932(define-key ctl-x-map "[" 'backward-page)
933(define-key ctl-x-map "]" 'forward-page)
934(define-key ctl-x-map "\C-p" 'mark-page)
935(define-key ctl-x-map "l" 'count-lines-page)
936(define-key ctl-x-map "np" 'narrow-to-page)
937;; (define-key ctl-x-map "p" 'narrow-to-page)
938\f
939(define-key ctl-x-map "al" 'add-mode-abbrev)
940(define-key ctl-x-map "a\C-a" 'add-mode-abbrev)
941(define-key ctl-x-map "ag" 'add-global-abbrev)
942(define-key ctl-x-map "a+" 'add-mode-abbrev)
943(define-key ctl-x-map "aig" 'inverse-add-global-abbrev)
944(define-key ctl-x-map "ail" 'inverse-add-mode-abbrev)
945;; (define-key ctl-x-map "a\C-h" 'inverse-add-global-abbrev)
946(define-key ctl-x-map "a-" 'inverse-add-global-abbrev)
947(define-key ctl-x-map "ae" 'expand-abbrev)
948(define-key ctl-x-map "a'" 'expand-abbrev)
949;; (define-key ctl-x-map "\C-a" 'add-mode-abbrev)
950;; (define-key ctl-x-map "\+" 'add-global-abbrev)
951;; (define-key ctl-x-map "\C-h" 'inverse-add-mode-abbrev)
952;; (define-key ctl-x-map "\-" 'inverse-add-global-abbrev)
953(define-key esc-map "'" 'abbrev-prefix-mark)
954(define-key ctl-x-map "'" 'expand-abbrev)
955
aa5ba90e 956(define-key ctl-x-map "z" 'repeat)
e4ade21b 957
d1bf2a73
SM
958;; Don't look for autoload cookies in this file.
959;; Local Variables:
960;; no-update-autoloads: t
961;; End:
4d120e8c
RS
962
963;;; bindings.el ends here