;;; 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
;;; Code:
-(defconst mode-line-mule-info
- (purecopy '(""
- (current-input-method ("" current-input-method-title))
- "%Z"))
+(defun make-mode-line-mouse2-map (f) "\
+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] f)
+ map))
+
+
+(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
+ (: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:
(make-variable-buffer-local 'mode-line-process)
-(defconst mode-line-modified
- (let ((s "%1*%1+")
- (map (make-sparse-keymap)))
- (define-key map [mode-line mouse-2]
- (lambda (event)
- (interactive "e")
- (save-selected-window
- (select-window (posn-window (event-start event)))
- (let ((binding (key-binding "\C-x\C-q")))
- (if binding
- (funcall binding)
- (toggle-read-only))))))
- (set-text-properties 0 (length s)
- (list 'help-echo
- "Read-only status: mouse-2 toggles it"
- 'local-map map)
- s)
- (list s))
+(defvar mode-line-modified
+ (list (propertize
+ "%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.
Actually, STRING need not be a string; any possible mode-line element
is okay. See `mode-line-format'.")
;; Don't use purecopy here--some people want to change these strings.
-(setq minor-mode-alist '((abbrev-mode " Abbrev")
- (overwrite-mode overwrite-mode)
- (auto-fill-function " Fill")
- ;; not really a minor mode...
- (defining-kbd-macro " Def")))
+(setq minor-mode-alist
+ (list
+ (list 'abbrev-mode
+ (propertize " Abbrev"
+ 'help-echo (purecopy
+ "mouse-2: turn off Abbrev mode")
+ 'local-map (purecopy (make-mode-line-mouse2-map
+ #'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
+ #'mode-line-auto-fill-mode))))
+ ;; not really a minor mode...
+ '(defining-kbd-macro " Def")))
(defvar mode-line-buffer-identification-keymap nil "\
Keymap for what is displayed by `mode-line-buffer-identification'.")
(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
(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 ,v)) ,var))
-
-(defvar mode-line-mouse-sensitive-p nil "\
-Non-nil means mode line has been made mouse-sensitive.")
-
-(defvar mode-line-mode-menu nil "\
-Menu of mode operations in the mode line.")
-
-(defun make-mode-line-mouse-sensitive ()
- (when (and window-system
- (not mode-line-mouse-sensitive-p))
- (setq mode-line-mouse-sensitive-p t)
- (let ((map (make-sparse-keymap "Minor Modes")))
- (define-key map [abbrev-mode]
- '(menu-item "Abbrev" abbrev-mode
- :active t :style toggle :selected abbrev-mode))
- (define-key map [auto-revert-mode]
- '(menu-item "Auto revert" auto-revert-mode
- :active t :style toggle
- :selected (bound-and-true-p auto-revert-mode)))
- (define-key map [auto-fill-mode]
- '(menu-item "Auto-fill" auto-fill-mode
- :active t :style toggle :selected auto-fill-function))
- (define-key map [column-number-mode]
- '(menu-item "Column number" column-number-mode
- :active t :style toggle :selected column-number-mode))
- (define-key map [flyspell-mode]
- '(menu-item "Flyspell" flyspell-mode
- :active t :style toggle
- :selected (bound-and-true-p flyspell-mode)))
- (define-key map [font-lock-mode]
- '(menu-item "Font-lock" font-lock-mode
- :active t :style toggle :selected font-lock-mode))
- (define-key map [hide-ifdef-mode]
- '(menu-item "Hide ifdef" hide-ifdef-mode
- :active t :style toggle
- :selected (bound-and-true-p hide-ifdef-mode)))
- (define-key map [highlight-changes-mode]
- '(menu-item "Highlight changes" highlight-changes-mode
- :active t :style toggle
- :selected (bound-and-true-p highlight-changes-mode)))
- (define-key map [line-number-mode]
- '(menu-item "Line number" line-number-mode
- :active t :style toggle :selected line-number-mode))
- (define-key map [outline-minor-mode]
- '(menu-item "Outline" outline-minor-mode
- :active t :style toggle
- :selected (bound-and-true-p outline-minor-mode)))
- (define-key map [overwrite-mode]
- '(menu-item "Overwrite" overwrite-mode
- :active t :style toggle :selected overwrite-mode))
- (setq mode-line-mode-menu map)
- (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))
- (s (copy-sequence "%12b")))
- (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 s))
- (put-text-property 0 (length s) 'face '(:weight bold) s)
- (put-text-property 0 (length s) 'help-echo
- "mouse-1: other buffer, mouse-2: prev, M-mouse-2: next, mouse-3: buffer menu" s)
- (put-text-property 0 (length s) 'local-map map s))
-
- ;; 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)))
-
+ `(and (boundp (quote ,var)) ,var))
+
+(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 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
".brn" ".rnt" ".mem" ".lni" ".lis"
".olb" ".tlb" ".mlb" ".hlb"))
(t
- '(".o" "~" ".bin" ".lbin" ".fasl"
+ '(".o" "~" ".bin" ".lbin" ".fasl" ".ufsl"
".a" ".ln" ".blg" ".bbl")))
'(".elc" ".lof"
".glo" ".idx" ".lot"
;; TeX-related
- ".dvi" ".fmt"
+ ".dvi" ".fmt" ".tfm" ".pdf"
;; Java compiled
".class"
;; Clisp
".fas" ".lib"
;; CMUCL
- ".x86f"
+ ".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
"^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 "
"^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)
(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)
(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)
(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)
(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)
(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)
(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)