fix live process/dead buffer bub on w32
[bpt/emacs.git] / lisp / bindings.el
index 113ce20..10a098b 100644 (file)
@@ -1,6 +1,7 @@
 ;;; bindings.el --- define standard key bindings and some variables.
 
-;; Copyright (C) 1985,86,87,92,93,94,95,96,99 Free Software Foundation, Inc.
+;; Copyright (C) 1985,86,87,92,93,94,95,96,99,2000, 2001
+;;   Free Software Foundation, Inc.
 
 ;; Maintainer: FSF
 ;; Keywords: internal
@@ -51,23 +52,97 @@ Return a keymap with single entry for mouse-2 on mode line.
 This is defined to run function F with no args in the buffer
 corresponding to the mode line clicked."
   (let ((map (make-sparse-keymap)))
-    (define-key map [mode-line mouse-2]
-      `(lambda (e)
-        (interactive "e")
-        (save-selected-window
-          (select-window
-           (posn-window (event-start e)))
-          (,f)
-          (force-mode-line-update))))
+    (define-key map [mode-line mouse-2] f)
     map))
 
-;; This might have a local-map to bring up a MULE menu or describe the
-;; current method.  At least give the user a clue what the field is.
+
+(defun mode-line-toggle-read-only (event)
+  "Like `toggle-read-only', for the mode-line."
+  (interactive "e")
+  (save-selected-window
+    (select-window (posn-window (event-start event)))
+    (toggle-read-only)
+    (force-mode-line-update)))
+
+
+(defun mode-line-toggle-modified (event)
+  "Toggle the buffer-modified flag from the mode-line."
+  (interactive "e")
+  (save-selected-window
+    (select-window (posn-window (event-start event)))
+    (set-buffer-modified-p (not (buffer-modified-p)))
+    (force-mode-line-update)))
+
+
+(defun mode-line-widen (event)
+  "Widen a buffer from the mode-line."
+  (interactive "e")
+  (save-selected-window
+    (select-window (posn-window (event-start event)))
+    (widen)
+    (force-mode-line-update)))
+
+
+(defun mode-line-abbrev-mode (event)
+  "Turn off `abbrev-mode' from the mode-line."
+  (interactive "e")
+  (save-selected-window
+    (select-window (posn-window (event-start event)))
+    (abbrev-mode)
+    (force-mode-line-update)))
+
+
+(defun mode-line-auto-fill-mode (event)
+  "Turn off `auto-fill-mode' from the mode-line."
+  (interactive "e")
+  (save-selected-window
+    (select-window (posn-window (event-start event)))
+    (auto-fill-mode)
+    (force-mode-line-update)))
+
+
+(defvar mode-line-input-method-map
+  (let ((map (make-sparse-keymap)))
+    (define-key map [mode-line mouse-2]
+      (lambda (e)
+       (interactive "e")
+       (save-selected-window
+         (select-window
+          (posn-window (event-start e)))
+         (toggle-input-method)
+         (force-mode-line-update))))
+    (define-key map [mode-line mouse-3]
+      (lambda (e)
+       (interactive "e")
+       (save-selected-window
+         (select-window
+          (posn-window (event-start e)))
+         (describe-current-input-method))))
+    (purecopy map)))
+
 (defvar mode-line-mule-info
   `(""
-    (current-input-method ("" (propertize current-input-method-title
-                                         'help-echo "Input method")))
-    ,(propertize "%Z" 'help-echo (purecopy "Coding system information")))
+    (current-input-method
+     (:eval
+      ,(purecopy
+       '(propertize current-input-method-title
+                    'help-echo (concat
+                                "Input method: "
+                                current-input-method
+                                ".  mouse-2 disables, mouse-3 describes")
+                    'local-map mode-line-input-method-map))))
+    ,(propertize
+      "%Z"
+      'help-echo 
+      (purecopy (lambda (window object point)
+                 (save-window-excursion
+                   (select-window window)
+                   (if enable-multibyte-characters
+                       (concat (symbol-name buffer-file-coding-system)
+                               " buffer; see M-x describe-coding-system")
+                     (concat "Unibyte "
+                             (symbol-name buffer-file-coding-system)
+                             " buffer")))))))
   "Mode-line control for displaying information of multilingual environment.
 Normally it displays current input method (if any activated) and
 mnemonics of the following coding systems:
@@ -99,30 +174,58 @@ Normally nil in most modes, since there is no process to display.")
 
 (defvar mode-line-modified
   (list (propertize
-        "%1*%1+"
-        'help-echo (purecopy "Read-only status: mouse-2 toggles it")
-        'local-map (purecopy (make-mode-line-mouse2-map #'toggle-read-only))))
+        "%1*"
+        'help-echo (purecopy (lambda (window object point)
+                               (format "%sead-only: mouse-2 toggles"
+                                       (save-selected-window
+                                         (select-window window)
+                                         (if buffer-read-only
+                                             "R"
+                                           "Not r")))))
+        'local-map (purecopy (make-mode-line-mouse2-map
+                              #'mode-line-toggle-read-only)))
+       (propertize
+        "%1+"
+        'help-echo  (purecopy (lambda (window object point)
+                                (format "%sodified: mouse-2 toggles"
+                                        (save-selected-window
+                                          (select-window window)
+                                          (if (buffer-modified-p)
+                                            "M"
+                                          "Not m")))))
+        'local-map (purecopy (make-mode-line-mouse2-map
+                              #'mode-line-toggle-modified))))
   "Mode-line control for displaying whether current buffer is modified.")
 
 (make-variable-buffer-local 'mode-line-modified)
 
 (setq-default mode-line-format
-  (list (purecopy "-")
-   'mode-line-mule-info
-   'mode-line-modified
-   'mode-line-frame-identification
-   'mode-line-buffer-identification
-   (purecopy "   ")
-   'global-mode-string
-   (purecopy "   %[(")
-   '(:eval (mode-line-mode-name)) 'mode-line-process 'minor-mode-alist
-   (purecopy "%n")
-   (purecopy ")%]--")
-   '(which-func-mode ("" which-func-format "--"))
-   (purecopy '(line-number-mode "L%l--"))
-   (purecopy '(column-number-mode "C%c--"))
-   (purecopy '(-3 . "%p"))
-   (purecopy "-%-")))
+  (let* ((help-echo
+         ;; The multi-line message doesn't work terribly well on the
+         ;; bottom mode line...  Better ideas?
+;;;      "\
+;;; mouse-1: select window, mouse-2: delete others, mouse-3: delete,
+;;; drag-mouse-1: resize, C-mouse-2: split horizontally"
+         "mouse-1: select window, mouse-2: delete others, mouse-3: delete ...")
+        (dashes (propertize "--" 'help-echo help-echo)))
+    (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)
+     'global-mode-string
+     (propertize "   %[(" 'help-echo help-echo)
+     '(:eval (mode-line-mode-name)) 'mode-line-process 'minor-mode-alist
+     (propertize "%n" 'help-echo "mouse-2: widen"
+                'local-map (make-mode-line-mouse2-map #'mode-line-widen))
+     (propertize ")%]--" 'help-echo help-echo)
+     `(which-func-mode ("" which-func-format ,dashes))
+     `(line-number-mode ("L%l" ,dashes))
+     `(column-number-mode ("C%c" ,dashes))
+     (purecopy '(-3 . "%p"))
+     (propertize "-%-" 'help-echo help-echo))))
 
 (defvar minor-mode-alist nil "\
 Alist saying how to show minor modes in the mode line.
@@ -139,14 +242,14 @@ is okay.  See `mode-line-format'.")
                         'help-echo (purecopy
                                     "mouse-2: turn off Abbrev mode")
                         'local-map (purecopy (make-mode-line-mouse2-map
-                                              #'abbrev-mode))))
+                                              #'mode-line-abbrev-mode))))
        '(overwrite-mode overwrite-mode)
        (list 'auto-fill-function
             (propertize " Fill"
                         'help-echo (purecopy
                                     "mouse-2: turn off Autofill mode")
                         'local-map (purecopy (make-mode-line-mouse2-map
-                                              #'auto-fill-mode))))
+                                              #'mode-line-auto-fill-mode))))
        ;; not really a minor mode...
        '(defining-kbd-macro " Def")))
 
@@ -172,6 +275,9 @@ Switch to the most recently selected buffer other than the current one."
   (interactive)
   (switch-to-buffer (other-buffer)))
 
+(defvar mode-line-mode-menu (make-sparse-keymap "Minor Modes") "\
+Menu of mode operations in the mode line.")
+
 (defun mode-line-mode-menu-1 (event)
   (interactive "e")
   (save-selected-window
@@ -185,106 +291,97 @@ Switch to the most recently selected buffer other than the current one."
 (defun mode-line-mode-name () "\
 Return a string to display in the mode line for the current mode name."
   (let (length (result mode-name))
-    (when mode-line-mouse-sensitive-p
-      (let ((local-map (get-text-property 0 'local-map result))
-           (help-echo (get-text-property 0 'help-echo result)))
-       (setq result (copy-sequence result))
-       ;; Add `local-map' property if there isn't already one.
-       (when (and (null local-map)
-                  (null (next-single-property-change 0 'local-map result)))
-         (put-text-property 0 (length result)
-                            'local-map mode-line-minor-mode-keymap result))
-       ;; Add `help-echo' property if there isn't already one.
-       (when (and (null help-echo)
-                  (null (next-single-property-change 0 'help-echo result)))
-         (put-text-property 0 (length result)
-                            'help-echo "mouse-3: minor mode menu" result))))
+    (let ((local-map (get-text-property 0 'local-map result))
+         (help-echo (get-text-property 0 'help-echo result)))
+      (setq result (copy-sequence result))
+      ;; Add `local-map' property if there isn't already one.
+      (when (and (null local-map)
+                (null (next-single-property-change 0 'local-map result)))
+       (put-text-property 0 (length result)
+                          'local-map mode-line-minor-mode-keymap result))
+      ;; Add `help-echo' property if there isn't already one.
+      (when (and (null help-echo)
+                (null (next-single-property-change 0 'help-echo result)))
+       (put-text-property 0 (length result)
+                          'help-echo "mouse-3: minor mode menu" result)))
     result))
 
 (defmacro bound-and-true-p (var)
   "Return the value of symbol VAR if it is bound, else nil."
   `(and (boundp (quote ,var)) ,var))
 
-(defvar mode-line-mouse-sensitive-p nil "\
-Non-nil means mode line has been made mouse-sensitive.")
-
-(defvar mode-line-mode-menu (make-sparse-keymap "Minor Modes") "\
-Menu of mode operations in the mode line.")
-
-;; These bindings were defined inside
-;; `make-mode-line-mouse-sensitive', but then invoking `x-popup-menu'
-;; with `mode-line-mode-menu' lost because the menu items were in
-;; purespace.
-(define-key mode-line-mode-menu [abbrev-mode]
-  `(menu-item ,(purecopy "Abbrev") abbrev-mode
-             :button (:toggle . abbrev-mode)))
-(define-key mode-line-mode-menu [auto-revert-mode]
-  `(menu-item ,(purecopy "Auto revert") auto-revert-mode
-             :button (:toggle . auto-revert-mode)))
-(define-key mode-line-mode-menu [auto-fill-mode]
-  `(menu-item ,(purecopy "Auto-fill") auto-fill-mode
-             :button (:toggle . auto-fill-function)))
-(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 [flyspell-mode]
-  `(menu-item ,(purecopy "Flyspell") flyspell-mode
-             :button (:toggle . (bound-and-true-p flyspell-mode))))
-(define-key mode-line-mode-menu [font-lock-mode]
-  `(menu-item ,(purecopy "Font-lock") font-lock-mode
-             :button (:toggle . font-lock-mode)))
-(define-key mode-line-mode-menu [hide-ifdef-mode]
-  `(menu-item ,(purecopy "Hide ifdef") hide-ifdef-mode
-             :button (:toggle . (bound-and-true-p hide-ifdef-mode))))
-(define-key mode-line-mode-menu [highlight-changes-mode]
-  `(menu-item ,(purecopy "Highlight changes") highlight-changes-mode
-             :button (:toggle . highlight-changes-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 [outline-minor-mode]
-  `(menu-item ,(purecopy "Outline") outline-minor-mode
-             :button (:toggle . (bound-and-true-p outline-minor-mode))))
 (define-key mode-line-mode-menu [overwrite-mode]
   `(menu-item ,(purecopy "Overwrite") overwrite-mode
              :button (:toggle . overwrite-mode)))
+(define-key mode-line-mode-menu [outline-minor-mode]
+  `(menu-item ,(purecopy "Outline") 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") highlight-changes-mode
+             :button (:toggle . highlight-changes-mode)))
+(define-key mode-line-mode-menu [glasses-mode]
+  `(menu-item ,(purecopy "Glasses") glasses-mode
+             :button (:toggle . (bound-and-true-p glasses-mode))))
+(define-key mode-line-mode-menu [hide-ifdef-mode]
+  `(menu-item ,(purecopy "Hide ifdef") hide-ifdef-mode
+             :button (:toggle . (bound-and-true-p hide-ifdef-mode))))
+(define-key mode-line-mode-menu [font-lock-mode]
+  `(menu-item ,(purecopy "Font-lock") font-lock-mode
+             :button (:toggle . font-lock-mode)))
+(define-key mode-line-mode-menu [flyspell-mode]
+  `(menu-item ,(purecopy "Flyspell") 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-fill-mode]
+  `(menu-item ,(purecopy "Auto-fill") auto-fill-mode
+             :button (:toggle . auto-fill-function)))
+(define-key mode-line-mode-menu [auto-revert-mode]
+  `(menu-item ,(purecopy "Auto revert") auto-revert-mode
+             :button (:toggle . auto-revert-mode)))
+(define-key mode-line-mode-menu [abbrev-mode]
+  `(menu-item ,(purecopy "Abbrev") abbrev-mode
+             :button (:toggle . abbrev-mode)))
 
-(defun make-mode-line-mouse-sensitive ()
-  (when (and window-system
-            (not mode-line-mouse-sensitive-p))
-    (setq mode-line-mouse-sensitive-p t)
-    (defun mode-line-mode-menu (event)
-      (interactive "@e")
-      (x-popup-menu event mode-line-mode-menu))
-
-    ;; Add menu of buffer operations to the buffer identification part
-    ;; of the mode line.
-    (let ((map (make-sparse-keymap)))
-      (define-key map [mode-line mouse-1] 'mode-line-other-buffer)
-      (define-key map [header-line mouse-1] 'mode-line-other-buffer)
-      (define-key map [mode-line M-mouse-2] 'mode-line-unbury-buffer)
-      (define-key map [header-line M-mouse-2] 'mode-line-unbury-buffer)
-      (define-key map [mode-line mouse-2] 'bury-buffer)
-      (define-key map [header-line mouse-2] 'bury-buffer)
-      (define-key map [mode-line down-mouse-3] 'mouse-buffer-menu)
-      (define-key map [header-line down-mouse-3] 'mouse-buffer-menu)
-      (setq mode-line-buffer-identification-keymap map)
-      (setq-default mode-line-buffer-identification
-                   (list (propertize "%12b"
-                                     'face '(:weight bold)
-                                     'help-echo
-                                     "mouse-1: other buffer, mouse-2: \
-prev, M-mouse-2: next, mouse-3: buffer menu"
-                                     'local-map map))))
-
-    ;; Menu of minor modes.
-    (let ((map (make-sparse-keymap)))
-      (define-key map [mode-line down-mouse-3] 'mode-line-mode-menu-1)
-      (define-key map [header-line down-mouse-3] 'mode-line-mode-menu-1)
-      (setq mode-line-minor-mode-keymap map))
-    
-    (force-mode-line-update)))
-
+(defun mode-line-mode-menu (event)
+  (interactive "@e")
+  (x-popup-menu event mode-line-mode-menu))
+
+;; Add menu of buffer operations to the buffer identification part
+;; of the mode line.
+(let ((map (make-sparse-keymap)))
+  (define-key map [mode-line mouse-1] 'mode-line-other-buffer)
+  (define-key map [header-line mouse-1] 'mode-line-other-buffer)
+  (define-key map [mode-line M-mouse-2] 'mode-line-unbury-buffer)
+  (define-key map [header-line M-mouse-2] 'mode-line-unbury-buffer)
+  (define-key map [mode-line mouse-2] 'bury-buffer)
+  (define-key map [header-line mouse-2] 'bury-buffer)
+  (define-key map [mode-line down-mouse-3] 'mouse-buffer-menu)
+  (define-key map [header-line down-mouse-3] 'mouse-buffer-menu)
+  (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 '(:weight bold)
+                   'help-echo (purecopy "mouse-1: other \
+buffer, mouse-2: prev, M-mouse-2: next, mouse-3: buffer menu")
+                   'local-map mode-line-buffer-identification-keymap)))
+  
+(setq-default mode-line-buffer-identification
+             (propertized-buffer-identification "%12b"))
+
+;; Menu of minor modes.
+(let ((map (make-sparse-keymap)))
+  (define-key map [mode-line down-mouse-3] 'mode-line-mode-menu-1)
+  (define-key map [header-line down-mouse-3] 'mode-line-mode-menu-1)
+  (setq mode-line-minor-mode-keymap map))
 
 ;; These variables are used by autoloadable packages.
 ;; They are defined here so that they do not get overridden
@@ -315,11 +412,15 @@ prev, M-mouse-2: next, mouse-3: buffer menu"
         ".fas" ".lib"
         ;; CMUCL
         ".x86f" ".sparcf"
+        ;; Libtool
+        ".lo" ".la"
         ;; Texinfo-related
         ".toc" ".log" ".aux"
         ".cp" ".fn" ".ky" ".pg" ".tp" ".vr"
         ".cps" ".fns" ".kys" ".pgs" ".tps" ".vrs")))
 
+;; Packages should add to this list appropriately when they are
+;; loaded, rather than listing everything here.
 (setq debug-ignored-errors
       '(beginning-of-line beginning-of-buffer end-of-line
        end-of-buffer end-of-file buffer-read-only
@@ -335,63 +436,6 @@ prev, M-mouse-2: next, mouse-3: buffer menu"
        "^Save not confirmed$"
        "^Recover-file cancelled\\.$"
        "^Cannot switch buffers in a dedicated window$"
-
-       ;; comint
-       "^Not at command line$"
-       "^Empty input ring$"
-       "^No history$"
-       "^Not found$";; To common?
-       "^Current buffer has no process$"
-
-       ;; dabbrev
-       "^No dynamic expansion for .* found$"
-       "^No further dynamic expansion for .* found$"
-       "^No possible abbreviation preceding point$"
-
-       ;; Completion
-       "^To complete, the point must be after a symbol at least [0-9]* character long\\.$"
-       "^The string \".*\" is too short to be saved as a completion\\.$"
-
-       ;; Compile
-       "^No more errors\\( yet\\|\\)$"
-
-       ;; Gnus
-       "^NNTP: Connection closed\\.$"
-
-       ;; info
-       "^Node has no Previous$"
-       "^No menu in this node$"
-       "^Node has no Next$"
-       "^No \".*\" in index$"
-
-       ;; imenu
-       "^No items suitable for an index found in this buffer\\.$"
-       "^This buffer cannot use `imenu-default-create-index-function'$"
-       "^The mode `.*' does not support Imenu$"
-
-       ;; ispell
-       "^No word found to check!$"
-
-       ;; mh-e
-       "^Cursor not pointing to message$"
-       "^There is no other window$"
-
-       ;; man
-       "^No manpage [0-9]* found$"
-       "^Can't find the .* manpage$"
-
-       ;; etags
-       "^No tags table in use; use .* to select one$"
-       "^There is no default tag$"
-       "^No previous tag locations$"
-       "^File .* is not a valid tags table$"
-       "^No \\(more \\|\\)tags \\(matching\\|containing\\) "
-       "^Rerun etags: `.*' not found in "
-       "^All files processed$"
-       "^No .* or .* in progress$"
-       "^File .* not in current tags tables$"
-       "^No tags table loaded"
-       "^Nothing to complete$"
        
        ;; ediff
        "^Errors in diff output. Diff output is in "
@@ -439,20 +483,15 @@ prev, M-mouse-2: next, mouse-3: buffer menu"
        "^Merge of directory revisions aborted$"
        "^Buffer .* doesn't exist$"
        "^There is no file to merge$"
-       "^Version control package .*.el not found. Use vc.el instead$"
-       
-       ;; cus-edit
-       "^No user options have changed defaults in recent Emacs versions$"
-
-       ;; BBDB
-       "^no previous record$"
-       "^no next record$"))
+       "^Version control package .*.el not found. Use vc.el instead$"))
 
 
 (make-variable-buffer-local 'indent-tabs-mode)
 
-;; We have base64 functions built in now.
+;; We have base64 and md5 functions built in now.
 (add-to-list 'features 'base64)
+(add-to-list 'features 'md5)
+(add-to-list 'features 'overlay)
 
 (define-key esc-map "\t" 'complete-symbol)
 
@@ -580,8 +619,12 @@ language you are using."
 (define-key global-map [menu] 'execute-extended-command)
 (define-key global-map [find] 'search-forward)
 
+;; Don't do this.  We define <delete> in function-key-map instead.
+;(define-key global-map [delete] 'backward-delete-char)
+
 ;; natural bindings for terminal keycaps --- defined in X keysym order
-(define-key global-map [home]          'beginning-of-buffer)
+(define-key global-map [home]          '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 global-map [left]          'backward-char)
 (define-key global-map [up]            'previous-line)
@@ -595,7 +638,8 @@ language you are using."
 (define-key global-map [C-next]                'scroll-left)
 (define-key global-map [M-next]                'scroll-other-window)
 (define-key global-map [M-prior]       'scroll-other-window-down)
-(define-key global-map [end]           'end-of-buffer)
+(define-key global-map [end]           '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 global-map [begin]         'beginning-of-buffer)
 (define-key global-map [M-begin]       'beginning-of-buffer-other-window)
@@ -687,7 +731,9 @@ language you are using."
 (define-key function-key-map [kp-end] [end])
 (define-key function-key-map [kp-begin] [begin])
 (define-key function-key-map [kp-insert] [insert])
-(define-key function-key-map [kp-delete] [delete])
+(define-key function-key-map [backspace] [?\C-?])
+(define-key function-key-map [delete] [?\C-?])
+(define-key function-key-map [kp-delete] [?\C-?])
 
 (define-key global-map [mouse-movement] 'ignore)
 
@@ -696,10 +742,10 @@ language you are using."
 (define-key esc-map "\C-t" 'transpose-sexps)
 (define-key ctl-x-map "\C-t" 'transpose-lines)
 
-(define-key esc-map ";" 'indent-for-comment)
-(define-key esc-map "j" 'indent-new-comment-line)
-(define-key esc-map "\C-j" 'indent-new-comment-line)
-(define-key ctl-x-map ";" 'set-comment-column)
+(define-key esc-map ";" 'comment-dwim)
+(define-key esc-map "j" 'comment-indent-new-line)
+(define-key esc-map "\C-j" 'comment-indent-new-line)
+(define-key ctl-x-map ";" 'comment-set-column)
 (define-key ctl-x-map "f" 'set-fill-column)
 (define-key ctl-x-map "$" 'set-selective-display)
 
@@ -725,7 +771,8 @@ language you are using."
 (global-set-key [C-right]  'forward-word)
 (global-set-key [C-left]   'backward-word)
 ;; This is not quite compatible, but at least is analogous
-(global-set-key [C-delete]   'backward-kill-word)
+(global-set-key [C-delete] 'backward-kill-word)
+(global-set-key [C-backspace] 'kill-word)
 ;; This is "move to the clipboard", or as close as we come.
 (global-set-key [S-delete] 'kill-region)
 
@@ -738,6 +785,8 @@ language you are using."
 (define-key esc-map "\C-k" 'kill-sexp)
 (define-key global-map [C-M-delete] 'backward-kill-sexp)
 (define-key global-map [C-M-backspace] 'backward-kill-sexp)
+(define-key esc-map [C-delete] 'backward-kill-sexp)
+(define-key esc-map [C-backspace] 'backward-kill-sexp)
 (define-key esc-map "\C-n" 'forward-list)
 (define-key esc-map "\C-p" 'backward-list)
 (define-key esc-map "\C-a" 'beginning-of-defun)