Merge from emacs--rel--22
[bpt/emacs.git] / lisp / bindings.el
index 0acdb2a..e38cc5b 100644 (file)
@@ -1,7 +1,7 @@
 ;;; bindings.el --- define standard key bindings and some variables
 
 ;; Copyright (C) 1985, 1986, 1987, 1992, 1993, 1994, 1995, 1996, 1999,
-;;   2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+;;   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; Maintainer: FSF
 ;; Keywords: internal
@@ -10,7 +10,7 @@
 
 ;; GNU Emacs is free software; you can redistribute it and/or modify
 ;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 2, or (at your option)
+;; the Free Software Foundation; either version 3, or (at your option)
 ;; any later version.
 
 ;; GNU Emacs is distributed in the hope that it will be useful,
@@ -123,7 +123,7 @@ corresponding to the mode line clicked."
 
 (defvar mode-line-coding-system-map
   (let ((map (make-sparse-keymap)))
-    (define-key map [mode-line mouse-3]
+    (define-key map [mode-line mouse-1]
       (lambda (e)
        (interactive "e")
        (save-selected-window
@@ -156,7 +156,7 @@ corresponding to the mode line clicked."
       (setq desc
            (propertize
             mnemonic
-            'help-echo (format "%s end-of-line; mouse-3 to cycle"
+            'help-echo (format "%s end-of-line; mouse-1 to cycle"
                                (if (eq eol 0) "Unix-style LF"
                                  (if (eq eol 1) "Dos-style CRLF"
                                    (if (eq eol 2) "Mac-style CR"
@@ -164,7 +164,7 @@ corresponding to the mode line clicked."
             'keymap
             (eval-when-compile
               (let ((map (make-sparse-keymap)))
-                (define-key map [mode-line mouse-3] 'mode-line-change-eol)
+                (define-key map [mode-line mouse-1] 'mode-line-change-eol)
                 map))
             'mouse-face 'mode-line-highlight))
       (push (cons eol (cons mnemonic desc)) mode-line-eol-desc-cache)
@@ -190,7 +190,7 @@ corresponding to the mode line clicked."
            (when buffer-file-coding-system
              (if enable-multibyte-characters
                  (concat (symbol-name buffer-file-coding-system)
-                         " buffer; mouse-3: describe coding system")
+                         " buffer; mouse-1: describe coding system")
                (concat "Unibyte " (symbol-name buffer-file-coding-system)
                        " buffer")))))
       'mouse-face 'mode-line-highlight
@@ -209,14 +209,6 @@ mnemonics of the following coding systems:
 
 (make-variable-buffer-local 'mode-line-mule-info)
 
-(defvar mode-line-buffer-identification (purecopy '("%12b")) "\
-Mode-line control for identifying the buffer being displayed.
-Its default value is (\"%12b\").
-Major modes that edit things other than ordinary files may change this
-\(e.g. Info, Dired,...)")
-
-(make-variable-buffer-local 'mode-line-buffer-identification)
-
 (defvar mode-line-frame-identification '("-%F  ")
   "Mode-line control to describe the current frame.")
 
@@ -230,32 +222,48 @@ Normally nil in most modes, since there is no process to display.")
   (list (propertize
         "%1*"
         'help-echo (purecopy (lambda (window object point)
-                               (format "%sead-only: mouse-3 toggles"
+                               (format "%sead-only: mouse-1 toggles"
                                        (save-selected-window
                                          (select-window window)
                                          (if buffer-read-only
                                              "R"
                                            "Not r")))))
         'local-map (purecopy (make-mode-line-mouse-map
-                              'mouse-3
+                              'mouse-1
                               #'mode-line-toggle-read-only))
         'mouse-face 'mode-line-highlight)
        (propertize
         "%1+"
         'help-echo  (purecopy (lambda (window object point)
-                                (format "%sodified: mouse-3 toggles"
+                                (format "%sodified: mouse-1 toggles"
                                         (save-selected-window
                                           (select-window window)
                                           (if (buffer-modified-p)
                                             "M"
                                           "Not m")))))
         'local-map (purecopy (make-mode-line-mouse-map
-                              'mouse-3 #'mode-line-toggle-modified))
+                              'mouse-1 #'mode-line-toggle-modified))
         'mouse-face 'mode-line-highlight))
   "Mode-line control for displaying whether current buffer is modified.")
 
 (make-variable-buffer-local 'mode-line-modified)
 
+(defvar mode-line-remote
+  (list (propertize
+        "%1@"
+        'help-echo (purecopy (lambda (window object point)
+                               (format "%s"
+                                       (save-selected-window
+                                         (select-window window)
+                                         (concat 
+                                         (if (file-remote-p default-directory)
+                                             "Remote: "
+                                           "Local: ")
+                                         default-directory)))))))
+  "Mode-line flag to show if default-directory for current buffer is remote.")
+
+(make-variable-buffer-local 'mode-line-remote)
+
 ;; Actual initialization is below.
 (defvar mode-line-position nil
   "Mode-line control for displaying the position in the buffer.
@@ -287,78 +295,98 @@ Keymap to display on minor modes.")
        ;;        "\
        ;; mouse-1: select window, mouse-2: delete others, mouse-3: delete,
        ;; drag-mouse-1: resize, C-mouse-2: split horizontally"
-       "mouse-1: select (drag to resize), mouse-2: delete others, mouse-3: delete this")
-       (dashes (propertize "--" 'help-echo help-echo)))
-  (setq-default mode-line-format
-    (list
-     (propertize "-" 'help-echo help-echo)
-     'mode-line-mule-info
-     'mode-line-modified
-     'mode-line-frame-identification
-     'mode-line-buffer-identification
-     (propertize "   " 'help-echo help-echo)
-     'mode-line-position
-     '(vc-mode vc-mode)
-     (propertize "   " 'help-echo help-echo)
-     'mode-line-modes
-     `(which-func-mode ("" which-func-format ,dashes))
-     `(global-mode-string (,dashes global-mode-string))
-     (propertize "-%-" 'help-echo help-echo)))
-
-  (setq-default mode-line-modes
-    (list
-     (propertize "%[(" 'help-echo help-echo)
-     `(:propertize ("" mode-name)
-                  help-echo "mouse-1: major-mode-menu mouse-2: help for current major mode"
-                  mouse-face mode-line-highlight
-                  local-map ,mode-line-major-mode-keymap)
-     '("" mode-line-process)
-     `(:propertize ("" minor-mode-alist)
-                  mouse-face mode-line-highlight
-                  help-echo "mouse-2: help for minor modes, mouse-3: minor mode menu"
-                  local-map ,mode-line-minor-mode-keymap)
-     (propertize "%n" 'help-echo "mouse-2: widen"
-                'mouse-face 'mode-line-highlight
-                'local-map (make-mode-line-mouse-map
-                            'mouse-2 #'mode-line-widen))
-     (propertize ")%]--" 'help-echo help-echo)))
-
-  (setq-default mode-line-position
-    `((-3 ,(propertize "%p" 'help-echo help-echo))
-      (size-indication-mode
-       (8 ,(propertize " of %I" 'help-echo help-echo)))
-      (line-number-mode
-       ((column-number-mode
-        (10 ,(propertize " (%l,%c)" 'help-echo help-echo))
-        (6 ,(propertize " L%l" 'help-echo help-echo))))
-       ((column-number-mode
-        (5 ,(propertize " C%c" 'help-echo help-echo))))))))
-
-(defvar mode-line-buffer-identification-keymap nil "\
+       "mouse-1: select (drag to resize), mouse-2 = C-x 1, mouse-3 = C-x 0")
+       (dashes (propertize "--" 'help-echo help-echo))
+       (standard-mode-line-format
+       (list
+        "%e"
+        (propertize "-" 'help-echo help-echo)
+        'mode-line-mule-info
+        'mode-line-modified
+        'mode-line-remote
+        'mode-line-frame-identification
+        'mode-line-buffer-identification
+        (propertize "   " 'help-echo help-echo)
+        'mode-line-position
+        '(vc-mode vc-mode)
+        (propertize "  " 'help-echo help-echo)
+        'mode-line-modes
+        `(which-func-mode ("" which-func-format ,dashes))
+        `(global-mode-string (,dashes global-mode-string))
+        (propertize "-%-" 'help-echo help-echo)))
+       (standard-mode-line-modes
+       (list
+        (propertize "%[(" 'help-echo help-echo)
+        `(:propertize ("" mode-name)
+                      help-echo "mouse-1: major mode, mouse-2: major mode help, mouse-3: toggle minor modes"
+                      mouse-face mode-line-highlight
+                      local-map ,mode-line-major-mode-keymap)
+        '("" mode-line-process)
+        `(:propertize ("" minor-mode-alist)
+                      mouse-face mode-line-highlight
+                      help-echo "mouse-2: minor mode help, mouse-3: toggle minor modes"
+                      local-map ,mode-line-minor-mode-keymap)
+        (propertize "%n" 'help-echo "mouse-2: widen"
+                    'mouse-face 'mode-line-highlight
+                    'local-map (make-mode-line-mouse-map
+                                'mouse-2 #'mode-line-widen))
+        (propertize ")%]--" 'help-echo help-echo)))
+       (standard-mode-line-position
+       `((-3 ,(propertize "%p" 'help-echo help-echo))
+         (size-indication-mode
+          (8 ,(propertize " of %I" 'help-echo help-echo)))
+         (line-number-mode
+          ((column-number-mode
+            (10 ,(propertize " (%l,%c)" 'help-echo help-echo))
+            (6 ,(propertize " L%l" 'help-echo help-echo))))
+          ((column-number-mode
+            (5 ,(propertize " C%c" 'help-echo help-echo))))))))
+
+  (setq-default mode-line-format standard-mode-line-format)
+  (put 'mode-line-format 'standard-value
+       (list `(quote ,standard-mode-line-format)))
+
+  (setq-default mode-line-modes standard-mode-line-modes)
+  (put 'mode-line-modes 'standard-value
+       (list `(quote ,standard-mode-line-modes)))
+
+  (setq-default mode-line-position standard-mode-line-position)
+  (put 'mode-line-position 'standard-value
+       (list `(quote ,standard-mode-line-position))))
+
+(defvar mode-line-buffer-identification-keymap
+  ;; Add menu of buffer operations to the buffer identification part
+  ;; of the mode line.or header line.
+  (let ((map (make-sparse-keymap)))
+    ;; Bind down- events so that the global keymap won't ``shine
+    ;; through''.
+    (define-key map [mode-line mouse-1] 'mode-line-previous-buffer)
+    (define-key map [header-line down-mouse-1] 'ignore)
+    (define-key map [header-line mouse-1] 'mode-line-previous-buffer)
+    (define-key map [mode-line mouse-3] 'mode-line-next-buffer)
+    (define-key map [header-line down-mouse-3] 'ignore)
+    (define-key map [header-line mouse-3] 'mode-line-next-buffer)
+    map) "\
 Keymap for what is displayed by `mode-line-buffer-identification'.")
 
-(defun last-buffer () "\
-Return the last non-hidden buffer in the buffer list."
-  ;; This logic is more or less copied from bury-buffer,
-  ;; except that we reverse the buffer list.
-  (let ((list (nreverse (buffer-list (selected-frame))))
-       (pred (frame-parameter nil 'buffer-predicate))
-       found notsogood)
-    (while (and list (not found))
-      (unless (or (eq (aref (buffer-name (car list)) 0) ? )
-                 ;; If the selected frame has a buffer_predicate,
-                 ;; disregard buffers that don't fit the predicate.
-                 (and pred (not (funcall pred (car list)))))
-       (if (get-buffer-window (car list) 'visible)
-           (or notsogood (eq (car list) (current-buffer)))
-         (setq found (car list))))
-      (pop list))
-    (or found notsogood
-       (get-buffer "*scratch*")
-       (progn
-         (set-buffer-major-mode
-          (get-buffer-create "*scratch*"))
-         (get-buffer "*scratch*")))))
+(defun propertized-buffer-identification (fmt)
+  "Return a list suitable for `mode-line-buffer-identification'.
+FMT is a format specifier such as \"%12b\".  This function adds
+text properties for face, help-echo, and local-map to it."
+  (list (propertize fmt
+                   'face 'mode-line-buffer-id
+                   'help-echo
+                   (purecopy "mouse-1: previous buffer, mouse-3: next buffer")
+                   'mouse-face 'mode-line-highlight
+                   'local-map mode-line-buffer-identification-keymap)))
+
+(defvar mode-line-buffer-identification (propertized-buffer-identification "%12b") "\
+Mode-line control for identifying the buffer being displayed.
+Its default value is (\"%12b\") with some text properties added.
+Major modes that edit things other than ordinary files may change this
+\(e.g. Info, Dired,...)")
+
+(make-variable-buffer-local 'mode-line-buffer-identification)
 
 (defun unbury-buffer () "\
 Switch to the last buffer in the buffer list."
@@ -384,6 +412,20 @@ Switch to the most recently selected buffer other than the current one."
   (interactive)
   (switch-to-buffer (other-buffer)))
 
+(defun mode-line-next-buffer (event)
+  "Like `next-buffer', but temporarily select EVENT's window."
+  (interactive "e")
+  (save-selected-window
+    (select-window (posn-window (event-start event)))
+    (next-buffer)))
+
+(defun mode-line-previous-buffer (event)
+  "Like `previous-buffer', but temporarily select EVENT's window."
+  (interactive "e")
+  (save-selected-window
+    (select-window (posn-window (event-start event)))
+    (previous-buffer)))
+
 (defvar mode-line-mode-menu (make-sparse-keymap "Minor Modes") "\
 Menu of mode operations in the mode line.")
 
@@ -401,15 +443,14 @@ Menu of mode operations in the mode line.")
   "Return the value of symbol VAR if it is bound, else nil."
   `(and (boundp (quote ,var)) ,var))
 
+;; Use mode-line-mode-menu for local minor-modes only.
+;; Global ones can go on the menubar (Options --> Show/Hide).
 (define-key mode-line-mode-menu [overwrite-mode]
   `(menu-item ,(purecopy "Overwrite (Ovwrt)") overwrite-mode
              :button (:toggle . overwrite-mode)))
 (define-key mode-line-mode-menu [outline-minor-mode]
   `(menu-item ,(purecopy "Outline (Outl)") outline-minor-mode
              :button (:toggle . (bound-and-true-p outline-minor-mode))))
-(define-key mode-line-mode-menu [line-number-mode]
-  `(menu-item ,(purecopy "Line number") line-number-mode
-             :button (:toggle . line-number-mode)))
 (define-key mode-line-mode-menu [highlight-changes-mode]
   `(menu-item ,(purecopy "Highlight changes (Chg)") highlight-changes-mode
              :button (:toggle . (bound-and-true-p highlight-changes-mode))))
@@ -425,11 +466,9 @@ Menu of mode operations in the mode line.")
 (define-key mode-line-mode-menu [flyspell-mode]
   `(menu-item ,(purecopy "Flyspell (Fly)") flyspell-mode
              :button (:toggle . (bound-and-true-p flyspell-mode))))
-(define-key mode-line-mode-menu [column-number-mode]
-  `(menu-item ,(purecopy "Column number") column-number-mode
-             :button (:toggle . column-number-mode)))
 (define-key mode-line-mode-menu [auto-revert-tail-mode]
   `(menu-item ,(purecopy "Auto revert tail (Tail)") auto-revert-tail-mode
+             :enable (buffer-file-name)
              :button (:toggle . (bound-and-true-p auto-revert-tail-mode))))
 (define-key mode-line-mode-menu [auto-revert-mode]
   `(menu-item ,(purecopy "Auto revert (ARev)") auto-revert-mode
@@ -446,44 +485,15 @@ Menu of mode operations in the mode line.")
   (x-popup-menu event mode-line-mode-menu))
 
 (defun mode-line-minor-mode-help (event)
-  "Describe minor mode for EVENT occured on minor modes area of the mode line."
+  "Describe minor mode for EVENT occurred on minor modes area of the mode line."
   (interactive "@e")
   (let ((indicator (car (nth 4 (car (cdr event))))))
     (describe-minor-mode-from-indicator indicator)))
 
-;; Add menu of buffer operations to the buffer identification part
-;; of the mode line.or header line.
-;
-(let ((map (make-sparse-keymap)))
-  ;; Bind down- events so that the global keymap won't ``shine
-  ;; through''.
-  (define-key map [mode-line mouse-1] 'mode-line-unbury-buffer)
-  (define-key map [header-line down-mouse-1] 'ignore)
-  (define-key map [header-line mouse-1] 'mode-line-unbury-buffer)
-  (define-key map [header-line down-mouse-3] 'ignore)
-  (define-key map [mode-line mouse-3] 'mode-line-bury-buffer)
-  (define-key map [header-line down-mouse-3] 'ignore)
-  (define-key map [header-line mouse-3] 'mode-line-bury-buffer)
-  (setq mode-line-buffer-identification-keymap map))
-
-(defun propertized-buffer-identification (fmt)
-  "Return a list suitable for `mode-line-buffer-identification'.
-FMT is a format specifier such as \"%12b\".  This function adds
-text properties for face, help-echo, and local-map to it."
-  (list (propertize fmt
-                   'face 'Buffer-menu-buffer
-                   'help-echo
-                   (purecopy "mouse-1: previous buffer, mouse-3: next buffer")
-                   'mouse-face 'mode-line-highlight
-                   'local-map mode-line-buffer-identification-keymap)))
-
-(setq-default mode-line-buffer-identification
-             (propertized-buffer-identification "%12b"))
-
 (defvar minor-mode-alist nil "\
 Alist saying how to show minor modes in the mode line.
 Each element looks like (VARIABLE STRING);
-STRING is included in the mode line iff VARIABLE's value is non-nil.
+STRING is included in the mode line if VARIABLE's value is non-nil.
 
 Actually, STRING need not be a string; any possible mode-line element
 is okay.  See `mode-line-format'.")
@@ -608,7 +618,7 @@ language you are using."
 (let ((l (generic-character-list))
       (table (nth 1 global-map)))
   (while l
-    (set-char-table-default table (car l) 'self-insert-command)
+    (aset table (car l) 'self-insert-command)
     (setq l (cdr l))))
 
 (setq help-event-list '(help f1))
@@ -672,8 +682,8 @@ language you are using."
 
 (define-key global-map [?\C-x right] 'next-buffer)
 (define-key global-map [?\C-x C-right] 'next-buffer)
-(define-key global-map [?\C-x left] 'prev-buffer)
-(define-key global-map [?\C-x C-left] 'prev-buffer)
+(define-key global-map [?\C-x left] 'previous-buffer)
+(define-key global-map [?\C-x C-left] 'previous-buffer)
 
 (let ((map minibuffer-local-map))
   (define-key map "\en"   'next-history-element)
@@ -683,7 +693,11 @@ language you are using."
   (define-key map [prior] 'previous-history-element)
   (define-key map [up]    'previous-history-element)
   (define-key map "\es"   'next-matching-history-element)
-  (define-key map "\er"   'previous-matching-history-element))
+  (define-key map "\er"   'previous-matching-history-element)
+  ;; Override the global binding (which calls indent-relative via
+  ;; indent-for-tab-command).  The alignment that indent-relative tries to
+  ;; do doesn't make much sense here since the prompt messes it up.
+  (define-key map "\t"    'self-insert-command))
 
 (define-key global-map "\C-u" 'universal-argument)
 (let ((i ?0))
@@ -748,7 +762,7 @@ language you are using."
 
 ;; natural bindings for terminal keycaps --- defined in X keysym order
 (define-key global-map [C-S-backspace]  'kill-whole-line)
-(define-key global-map [home]          'beginning-of-line)
+(define-key global-map [home]          'move-beginning-of-line)
 (define-key global-map [C-home]                'beginning-of-buffer)
 (define-key global-map [M-home]                'beginning-of-buffer-other-window)
 (define-key esc-map    [home]          'beginning-of-buffer-other-window)
@@ -768,7 +782,7 @@ language you are using."
 (define-key global-map [M-prior]       'scroll-other-window-down)
 (define-key esc-map    [prior]         'scroll-other-window-down)
 (define-key esc-map [?\C-\S-v]         'scroll-other-window-down)
-(define-key global-map [end]           'end-of-line)
+(define-key global-map [end]           'move-end-of-line)
 (define-key global-map [C-end]         'end-of-buffer)
 (define-key global-map [M-end]         'end-of-buffer-other-window)
 (define-key esc-map    [end]           'end-of-buffer-other-window)
@@ -1015,18 +1029,6 @@ language you are using."
 (define-key ctl-x-map "rw" 'window-configuration-to-register)
 (define-key ctl-x-map "rf" 'frame-configuration-to-register)
 
-;; These key bindings are deprecated; use the above C-x r map instead.
-;; We use these aliases so \[...] will show the C-x r bindings instead.
-(defalias 'point-to-register-compatibility-binding 'point-to-register)
-(defalias 'jump-to-register-compatibility-binding 'jump-to-register)
-(defalias 'copy-to-register-compatibility-binding 'copy-to-register)
-(defalias 'insert-register-compatibility-binding 'insert-register)
-(define-key ctl-x-map "/" 'point-to-register-compatibility-binding)
-(define-key ctl-x-map "j" 'jump-to-register-compatibility-binding)
-(define-key ctl-x-map "x" 'copy-to-register-compatibility-binding)
-(define-key ctl-x-map "g" 'insert-register-compatibility-binding)
-;; (define-key ctl-x-map "r" 'copy-rectangle-to-register)
-
 (define-key esc-map "q" 'fill-paragraph)
 ;; (define-key esc-map "g" 'fill-region)
 (define-key ctl-x-map "." 'set-fill-prefix)
@@ -1067,6 +1069,10 @@ language you are using."
 
 (define-key ctl-x-4-map "c" 'clone-indirect-buffer-other-window)
 
+;; Signal handlers
+(define-key special-event-map [sigusr1] 'ignore)
+(define-key special-event-map [sigusr2] 'ignore)
+
 ;; Don't look for autoload cookies in this file.
 ;; Local Variables:
 ;; no-update-autoloads: t