PlanDuSite ModificationsRécentes Nouvelles SectionElisp CommentFaire

setup-keys.el

Dernière modification

Modifié(e) :

< ;; Last-Updated: Wed Mar 6 14:37:35 2013 (-0800)

à

> ;; Last-Updated: Sun Apr 21 11:24:49 2013 (-0700)

Modifié(e) :

< ;; Update #: 1179

à

> ;; Update #: 1184

Ajouté(e) :

> ;; 2013/04/21 dadams
> ;; Bind zoom-in/out to C-x +, C-x -, C-x =, C-x 0.

Modifié(e) :

< (global-set-key (vector (list 'control mouse-wheel-up-event)) 'zoom-out))))

à

> (global-set-key (vector (list 'control mouse-wheel-up-event)) 'zoom-out))
> (when (fboundp 'text-scale-adjust) ; Emacs 23+
> (define-key ctl-x-map [(control ?+)] 'zoom-in/out) ; `C-x +'
> (define-key ctl-x-map [(control ?-)] 'zoom-in/out) ; `C-x -'
> (define-key ctl-x-map [(control ?=)] 'zoom-in/out) ; `C-x ='
> (define-key ctl-x-map [(control ?0)] 'zoom-in/out
)))) ; `C-x 0'


Download

;;; setup-keys.el --- Some key bindings.
;;
;; Filename: setup-keys.el
;; Description: Some key bindings.
;; Author: Drew Adams
;; Maintainer: Drew Adams
;; Copyright (C) 1999-2013, Drew Adams, all rights reserved.
;; Created: Fri Apr  2 12:34:20 1999
;; Version: 21.1
;; Last-Updated: Sun Apr 21 11:24:49 2013 (-0700)
;;           By: dradams
;;     Update #: 1184
;; URL: http://www.emacswiki.org/setup-keys.el
;; Keywords: mouse, keyboard, menus, menu-bar
;; Compatibility: GNU Emacs: 20.x, 21.x, 22.x, 23.x, 24.x
;;
;; Features that might be required by this library:
;;
;;   `apropos', `apropos+', `avoid', `doremi', `doremi-cmd',
;;   `doremi-frm', `eyedropper', `faces', `faces+', `fit-frame',
;;   `frame-cmds', `frame-fns', `help+20', `hexrgb', `highlight',
;;   `info', `info+', `isearch+', `iso-transl', `menu-bar',
;;   `menu-bar+', `misc-cmds', `misc-fns', `mouse', `mouse+',
;;   `mwheel', `naked', `pp', `pp+', `replace+', `ring', `ring+',
;;   `second-sel', `simple+', `strings', `thingatpt', `thingatpt+',
;;   `unaccent', `w32browser-dlgopen', `wid-edit', `wid-edit+',
;;   `widget'.
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;;; Commentary:
;;
;;    Some key bindings.
;;
;;  Think of this library more as an extension to your init file
;;  (~/.emacs) than as a true library.  It makes changes to your Emacs
;;  key bindings.  If you want only some of the bindings that are
;;  defined here, then either modify this file for your own use or
;;  load it and then modify selected bindings afterward.
;;
;;  The user options defined here are not customizable using Customize
;;  (they are not defined using `defcustom').  They are used only
;;  once, when this file is loaded - it makes no sense to change their
;;  values after this file is loaded.  To change their behavior from
;;  the default, set them in your init file before loading this
;;  library.  For example, if you do not want to substitute command
;;  `kill-buffer-and-its-windows' for command `kill-buffer' in all
;;  interactive uses, then put this in your init file *before* loading
;;  library `setup-keys':
;;
;;  (setq sub-kill-buffer-and-its-windows nil) ; Keep `kill-buffer'.
;;
;;  If you also load library `menu-bar+', then load it *before*
;;  loading library `setup-keys'.
;;
;;  User options defined here:
;;
;;    `sub-*-of-line', `sub-delete-windows-for',
;;    `sub-kill-buffer-and-its-windows', `sub-pp-evals',
;;    `sub-query-replace-w-options', `sub-recenter-top-bottom'.
;;
;;  Other variables defined here:
;;
;;    `comparison-map', `doremi-map'.
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;;; Change Log:
;;
;; 2013/04/21 dadams
;;     Bind zoom-in/out to C-x +, C-x -, C-x =, C-x 0.
;; 2013/03/06 dadams
;;     Bind C-x C-M-SPC to set-secondary-start, C-x C-M-RET to secondary-save-then-kill.
;; 2013/01/17 dadams
;;     Added bindings for move-frame-to-screen-(top|bottom|left|right).
;; 2013/01/02 dadams
;;     Bound C-o also in minibuffer-(inactive-mode|local-(isearch|shell-command))-map.
;; 2012/12/24 dadams
;;     Added bindings for visual-line-mode line movements.
;; 2012/08/27 dadams
;;     Treat Emacs 24+ insert-char the same as ucs-insert (old name).
;; 2012/07/08 dadams
;;     Bind C-mouse-1 to ignore, so don't see error msg on up event.
;; 2012/07/02 dadams
;;     Bind find-library-other-window to C-x 4 l.
;; 2012/06/02 dadams
;;     If ucs-cmds.el is loaded, bind C-x 8 RET to ucsc-insert, if Emacs 23+.
;; 2011/11/12 dadams
;;     Vars sub-*: Removed (when (fboundp '*)...) wrapper - define always.  But mention in doc
;;       string that has no effect unless library loaded.
;; 2011/07/25 dadams
;;     Use eval-after-load where appropriate (e.g. instead of featurep/fboundp/boundp).
;; 2010/04/22 dadams
;;     Bound C-M-y to isearch-yank-secondary in isearch-mode-map.
;; 2010/02/24 dadams
;;     Bound C-; to iedit-mode, globally and in isearch-mode-map.
;; 2010/02/20 dadams
;;     Bound framemove keys: M-S-(up|down|left|right).
;; 2009/11/07 dadams
;;     Bound doremi-face-bg+ to k.  Applied doremi cmd renamings (added +).
;; 2009/08/26 dadams
;;     Changed binding of region-to-file from `C-x a' to C-x M-f, due to abbrev keys conflict.
;; 2009/07/26 dadams
;;     Fixed typo: prev-buffer -> previous-buffer.
;; 2009/06/25 dadams
;;     Use renaming: yank-secondary-or-swap-w-region to secondary-dwim.
;; 2009/06/11 dadams
;;     Bind zoom-(in|out), not zoom-frm-(in|out).
;;     Don't bind M-s if Emacs 23+.
;; 2009/05/17 dadams
;;     Updated to reflect thumb-frm.el name changes.
;; 2009/04/08 dadams
;;     Use revert-buffer-no-confirm, if defined.
;; 2009/04/06 dadams
;;     Changed binding of revert-buffer from S-f1 to f5 (a la MS Windows).
;; 2009/01/06 dadams
;;     Move delete-window from C-x C-a to C-x C-z, to avoid conflict with gud.
;;      Replaces std binding for iconify-or-deiconify-frame.
;; 2008/11/08 dadams
;;     Bind swiss-move-line-up/down to S-prior/S-next.
;; 2008/10/19 dadams
;;     Bind mouse-2 in ctl-x-map to ignore, so hlt-highlighter works on down-mouse-2.
;; 2008/08/17 dadams
;;     Made zoom-frm-(in|out) bindings portable, and make C- bindings work for Emacs 20, 21.
;; 2008/08/14 dadams
;;     Bound C-x C-a to delete-window, so you can do it with one hand.
;; 2008/08/07 dadams
;;     Bound zoom-frm-(in|out) to C-wheel-(down|up).
;; 2008/08/06 dadams
;;     Bind bm-toggle, bm-next, bm-previous to S-f3, C-f3, M-f3, not C-f3, f3, S-f3.
;; 2008/05/23 dadams
;;     Bound yank-pop-commands to M-y.  Soft-require second-sel.el.
;;     Soft-require second-sel.el.
;; 2008/05/06 dadams
;;     Renamed yank-secondary-or-convert-primary to yank-secondary-or-swap-w-region.
;; 2008/05/03 dadams
;;     Bind yank-secondary-or-convert-primary, not yank-secondary, to C-M-y.
;; 2008/03/19 dadams
;;     Don't bind C-o in completion maps if they inherit from minibuffer-local-map.
;; 2008/03/06 dadams
;;     Removed binding for iconify-everything - too easy to hit by mistake.
;; 2008/03/02 dadams
;;     Removed describe-file binding (done now in help-fns+.el and help+20.el).
;; 2007/12/14 dadams
;;     Require help+20.el for Emacs 20.  Require (new) help+.el for Emacss 22.
;; 2007/12/02 dadams
;;     Bound describe-face to C-h C-M-f.
;; 2007/11/21 dadams
;;     Bound C-o in minibuffer maps to 1on1-fit-minibuffer-frame.
;; 2007/11/06 dadams
;;     Added: sub-recenter-top-bottom.  Substituted recenter-top-bottom for recenter binding.
;; 2007/11/01 dadams
;;     Changed C-x t w from doremi-frame-width to doremi-window-height.
;; 2007/10/13 dadams
;;     Bound bm.el keys to [f3] with modifiers.
;; 2007/09/28 dadams
;;     Bound lisp-spell-symbol to M-#.
;; 2007/09/24 dadams
;;     Bound mark-buffer-(before|after)-point.
;; 2007/09/19 dadams
;;     Removed bindings for goto-previous(-global)-mark.
;; 2007/07/15 dadams
;;     Changed binding of cycle-thing-region to M-@.
;; 2007/06/04 dadams
;;     Removed sub-customize-other window (RMS's bug fix was implemented).
;; 2007/06/02 dadams
;;     Renamed: highlight to hlt-highlight,
;;              highlight-(highlighter|eraser) to hlt-(highlighter|eraser),
;;              highlight-(next|previous)-* to hlt-(next|previous)-*.
;; 2007/04/06 dadams
;;     Changed bindings of fisheye-(next|previous)-frame.
;; 2007/04/02 dadams
;;     Bound goto-longest-line to C-x L.
;; 2007/03/17 dadams
;;     Bound highlight-(next|previous)-highlight, highlight-eraser.
;; 2007/03/16 dadams
;;     Bound highlight-with-marker.  Protect with fboundp.
;; 2007/02/03 dadams
;;     Fixed mark-ring binding.  Thx to Fidel Salas.
;; 2007/01/27 dadams
;;     Bound S-down-mouse-2 to mouse-scan-lines-or-M-:, instead of mouse-M-:.
;; 2007/01/13 dadams
;;     Bound C-h M-f to describe-file.
;; 2006/11/04 dadams
;;     Bound S-down-mouse-2 to mouse-M-:.
;; 2006/11/03 dadams
;;     Bound down-mouse-2 to mouse-flash-position-or-M-x, not mouse-flash-position.
;; 2006/09/12 dadams
;;     Replaced [pause] by [f12] for C-x 8 synonym.  ([pause] is used by Icicles.)
;; 2006/09/08 dadams
;;     Bound crosshairs-mode to C-+.
;; 2006/08/22 dadams
;;     Replaced sub-remove-window by sub-delete-windows-for.
;; 2006/08/15 dadams
;;     Removed C-f1 binding of kill-buffer.
;; 2006/08/11 dadams
;;     Bound mouse-flash-position to down-mouse-2.
;; 2006/07/30 dadams
;;     Added bindings for mark-thing and cycle-thing-region.
;; 2006/05/26 dadams
;;     Clarified commentary.
;;     foldout-mouse-modifiers: Use setq, not defvar.
;; 2006/05/16 dadams
;;     Removed Icicles bindings - use new library icicles-keys.el instead.
;; 2006/03/01 dadams
;;     Bound icicle-complete-thesaurus-entry to C-c /.
;; 2006/01/24 dadams
;;     Bound icicle-execute-extended-command.
;; 2006/01/19 dadams
;;     Added sub-*-of-line.  Use it with move-*-of-line, if Emacs 22.
;; 2006/01/04 dadams
;;     Bound other-window-or-frame to C-x o.
;; 2005/12/13 dadams
;;     Bound delete-other-frames to C-x 4 1.
;; 2005/12/03 dadams
;;     Changed bindings of thumb-frm.el commands and show-hide.
;; 2005/11/18 dadams
;;     Bound mouse-4 to help-go-back in help-mode-map, and M-` to icicle-execute-menu-command.
;; 2005/10/27 dadams
;;     Renamed sub-icicle-buffer to sub-icicle-commands.  Bound icicle-find-file*.
;; 2005/10/16 dadams
;;     Bound icicle-compilation-search in compilation-minor-mode-map.  Bound grep in grep.
;; 2005/09/02 dadams
;;     Added sub-icicle-buffer, and substituted for switch-to-buffer*.
;;     Protected sub-* by fboundp.
;; 2005/08/13 dadams
;;     Added binding for icicle-execute-menu-command.
;; 2005/08/02 dadams
;;     Added binding for doremi-all-faces-fg.
;; 2005/05/29 dadams
;;     Added move-frame-* bindings.
;; 2005/05/17 dadams
;;     Updated to work with Emacs 22.x.
;; 2005/05/06 dadams
;;     Added commented-out binding for thumbify-frame-upon-event, as a model.
;; 2005/01/26 dadams
;;     Commented out (w32-register-hot-key [A-tab]).
;;     Removed ###autoload for defvars.
;; 2005/01/20 dadams
;;     Removed sub-exit-with-confirmation.
;; 2005/01/09 dadams
;;     Renamed: doremi-bg-rgb to doremi-bg, doremi-face-fg-rgb to doremi-face-fg.
;;     Changed some doremi bindings.
;; 2005/01/02 dadams
;;     Changed binding of region-to-file because `C-x w' conflicted with hi-lock.
;;     Added bindings for doremi-mark and doremi-global-mark; changed for doremi-bookmarks.
;; 2004/12/28 dadams
;;     Added doremi-face-fg-rgb binding.  Changed binding: doremi-font.
;; 2004/12/26 dadams
;;     Added thumb-frm.el bindings.
;; 2004/11/24 dadams
;;     (w32-register-hot-key [A-tab])
;; 2004/11/21 dadams
;;     Added [C-pause], [M-pause] bindings for prev-buffer, next-buffer.
;; 2004/11/20 dadams
;;     Refined to deal with Emacs 21 < 21.3.50 (soon to be 22.x)
;; 2004/11/16 dadams
;;     Added substitute-key-definition '*-of-line '*-of-line+.
;; 2004/10/13 dadams
;;     These were added for Emacs 21 also: replace+.el, buff-menu+.el.
;; 2004/10/02 dadams
;;     Per request by RMS:
;;     Renamed grow-frame-height and grow-frame-width to enlarge-frame
;;     and enlarge-frame-horizontally, respectively.
;;     Added shrink-frame and shrink-frame-horizontally.
;; 2004/09/21 dadams
;;     Don't require stuff that's not yet ready or inappropriate for Emacs 21.
;; 2004/09/11 dadams
;;     Bound vertical-line mouse commands.
;;     Added bindings for commands in doremi-frm.el.
;; 2004/08/26 dadams
;;     Changed C-M-up/down/left/right to enlarge-frame* and shrink-frame*.
;; 2004/04/28 dadams
;;     Added C-M-home and C-M-end bindings for beginning- and end-of-defun.
;; 1999/09/03 dadams
;;     Added sub-pp-evals.  Use it to replace eval-* with pp-eval-*.
;; 1999/09/02 dadams
;;     1. Added binding for show-hide.
;;     2. Added vars: sub-exit-with-confirmation,
;;        sub-kill-buffer-and-its-windows, sub-pp-evals,
;;        sub-query-replace-w-options, sub-remove-window.  Use to
;;        protect substitute-key-definition's.
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;; This program 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)
;; any later version.

;; This program is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
;; GNU General Public License for more details.

;; You should have received a copy of the GNU General Public License
;; along with this program; see the file COPYING.  If not, write to
;; the Free Software Foundation, Inc., 51 Franklin Street, Fifth
;; Floor, Boston, MA 02110-1301, USA.
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;;; Code:

(require 'frame-cmds nil t) ;; (no error if not found): delete-other-frames,
                            ;; delete-windows-for, enlarge-frame*,
                            ;; iconify-everything, iconify/map-frame, move-frame-*,
                            ;; mouse-iconify/map-frame, mouse-remove-window,
                            ;; mouse-show-hide-mark-unmark, other-window-or-frame,
                            ;; show-*Help*-buffer, show-hide, shrink-frame*
(require 'mouse+ nil t) ;; (no error if not found): mouse-tear-off-window, mouse-flash-position
(require 'simple+ nil t) ;; (no error if not found): comment-region
(require 'highlight nil t) ;; (no error if not found): hlt-highlight, hlt-highlighter,
                           ;; hlt-eraser, hlt-(next|previous)-highlight
(require 'misc-cmds nil t) ;; (no error if not found): beginning-of-line+,
                           ;; end-of-line+, goto-longest-line, kill-buffer-and-its-windows,
                           ;; mark-buffer-after-point, mark-buffer-before-point,
                           ;; recenter-top-bottom, region-to-buffer, region-to-file
(require 'second-sel nil t) ;; (no error if not found): secondary-dwim, isearch-yank-secondary,
                            ;; yank-pop-commands, isearch-yank-secondary, set-secondary-start,
                            ;; secondary-save-then-kill
(require 'pp+ nil t) ;; (no error if not found): pp-eval-expression
(require 'fit-frame nil t) ;; (no error if not found):
                           ;; fit-frame, fit-frame-or-mouse-drag-vertical-line
(require 'doremi-frm nil t) ;; (no error if not found): doremi-bg+, doremi-face-fg+,
                            ;; doremi-font+, doremi-frame-font-size+, doremi-frame-configs+,
                            ;; doremi-frame-height+, doremi-frame-horizontally+,
                            ;; doremi-frame-vertically+
(require 'doremi-cmd nil t) ;; (no error if not found): doremi-buffers+, doremi-bookmarks+,
                            ;; doremi-color-themes+,

(when (< emacs-major-version 21)
  (require 'help+20 nil t) ;; (no error if not found): help-on-click/key
  (require 'unaccent nil t)) ;; (no error if not found): unaccent-region, unaccent-word
(when (> emacs-major-version 21)
  (require 'help+ nil t)) ;; (no error if not found): help-on-click/key
(require 'replace+ nil t)   ;; (no error if not found): query-replace-w-options

;; Quiet the byte compiler.
(defvar grep-mode-map)                  ; Defined in `grep.el'.
(defvar mouse-wheel-down-event)         ; Defined in `mwheel.el'.
(defvar mouse-wheel-up-event)           ; Defined in `mwheel.el'.

;;;-----------------------------

(when (boundp 'help-mode-map) (define-key help-mode-map [mouse-4] 'help-go-back))
(when (boundp 'grep-mode-map) (define-key grep-mode-map "g" 'grep)) ; Emacs 22

(autoload 'compare-windows "compare-w"
  "Compare text in current window with text in next window." t)
(autoload 'ediff-buffers "ediff"
  "Run Ediff on a pair of buffers, BUFFER-A and BUFFER-B." t)
(autoload 'ediff-files "ediff"
  "Run Ediff on a pair of files, FILE-A and FILE-B." t)
(autoload 'kill-rectangle "rect"
  "Delete rectangle with corners at point & mark; save as last killed." t)
(autoload 'fill-individual-paragraphs "fill"
  "Fill paragraphs of uniform indentation within the region." t)
(autoload 'ispell-complete-word "ispell"
  "Complete word using letters at point to word beginning using `look'." t)
(autoload 'forward-whitespace "thingatpt" nil t)
(autoload 'forward-symbol "thingatpt" nil t)
(autoload 'dired-jump-other-window "dired-x"
  "Jump to dired buffer corresponding to current buffer, in new window." t)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;; Don't let Windows grap ALT-TAB:
;; (when (eq system-type 'windows-nt) (w32-register-hot-key [A-tab]))

;; Additional definitions for some standard mouse commands:
;; SGI does not pass all ALT-mouse stuff thru to Emacs, so use C-M-mouse also:
(global-set-key [C-M-mouse-1] 'mouse-start-secondary) ; In `mouse.el'.            `C-M-mouse-1'
(global-set-key [C-M-drag-mouse-1] 'mouse-set-secondary) ; In `mouse.el'.
(global-set-key [C-M-down-mouse-1] 'mouse-drag-secondary) ; In `mouse.el'.
(global-set-key [C-M-mouse-3] 'mouse-secondary-save-then-kill) ; `second-sel.el'. `C-M-mouse-3'
(global-set-key [C-M-mouse-2] 'mouse-yank-secondary) ; `mouse+.el' or `mouse.el'  `C-M-mouse-2'

(eval-after-load "mouse+"
  '(progn                               ; Highlight yank position or call `M-x' in echo area.
    (global-set-key [down-mouse-2]   'mouse-flash-position-or-M-x)               ; `mouse-2'
    ;; Highlight line or `M-:'.
    (global-set-key [S-down-mouse-2] 'mouse-scan-lines-or-M-:)))                 ; `S-mouse-2'

(eval-after-load "second-sel"
  '(progn
    (global-set-key (kbd "C-M-y")               'secondary-dwim)                 ; `C-M-y'
    (define-key esc-map "y"                     'yank-pop-commands)              ; `M-y'
    (define-key isearch-mode-map (kbd "C-M-y")  'isearch-yank-secondary)         ; `C-M-y'
    (global-set-key (kbd "C-x C-M-SPC")         'set-secondary-start)            ;`C-x C-M-SPC'
    (global-set-key (kbd "C-x C-M-<return>")    'secondary-save-then-kill)))     ;`C-x C-M-RET'

;; Because C-M- is being used for secondary.
(eval-after-load "foldout" '(setq foldout-mouse-modifiers '(meta shift)))

(eval-after-load "oneonone"                                                      ; `C-o'
  '(when (framep 1on1-minibuffer-frame) ; Standalone minibuffer frame.
    (define-key minibuffer-local-map "\C-o" '1on1-fit-minibuffer-frame)
    (unless (eq minibuffer-local-map (keymap-parent minibuffer-local-completion-map))
      (define-key minibuffer-local-must-match-map "\C-o" '1on1-fit-minibuffer-frame)
      (define-key minibuffer-local-completion-map "\C-o" '1on1-fit-minibuffer-frame))
    (when (boundp 'minibuffer-local-filename-completion-map)
      (define-key minibuffer-local-filename-completion-map "\C-o"
        '1on1-fit-minibuffer-frame))
    (when (boundp 'minibuffer-local-must-match-filename-map) ; Emacs 22
      (define-key minibuffer-local-must-match-filename-map "\C-o"
        '1on1-fit-minibuffer-frame))
    (when (boundp 'minibuffer-local-filename-must-match-map) ; Emacs 23+
      (define-key minibuffer-local-filename-must-match-map "\C-o"
        '1on1-fit-minibuffer-frame))
    (when (boundp 'minibuffer-local-isearch-map)
      (unless (eq minibuffer-local-map (keymap-parent minibuffer-local-isearch-map))
        (define-key minibuffer-local-isearch-map "\C-o" '1on1-fit-minibuffer-frame)))
    (when (boundp 'minibuffer-local-shell-command-map)
      (unless (eq minibuffer-local-map (keymap-parent minibuffer-local-shell-command-map))
        (define-key minibuffer-local-shell-command-map "\C-o" '1on1-fit-minibuffer-frame)))
    (when (boundp 'minibuffer-inactive-mode-map)
      (define-key minibuffer-inactive-mode-map "\C-o" '1on1-fit-minibuffer-frame))))

(eval-after-load "frame-cmds"
  '(progn
    (global-set-key [(meta up)]             'move-frame-up)                      ; `M-up'
    (global-set-key [(meta down)]           'move-frame-down)                    ; `M-down'
    (global-set-key [(meta left)]           'move-frame-left)                    ; `M-left'
    (global-set-key [(meta right)]          'move-frame-right)                   ; `M-right'
    (global-set-key [(meta shift ?v)]       'move-frame-to-screen-top)           ; `M-S-v'
    (global-set-key [(control shift ?v)]    'move-frame-to-screen-bottom)        ; `C-S-v'
    (global-set-key [(control shift prior)] 'move-frame-to-screen-left)          ; `C-S-prior'
    (global-set-key [(control shift next)]  'move-frame-to-screen-right)         ; `C-S-next'
    (global-set-key [(control meta up)]     'shrink-frame)                       ; `C-M-up'
    (global-set-key [(control meta down)]   'enlarge-frame)                      ; `C-M-down'
    (global-set-key [(control meta left)]   'shrink-frame-horizontally)          ; `C-M-left'
    (global-set-key [(control meta right)]  'enlarge-frame-horizontally)         ; `C-M-right'
    ;; Replaces`iconify-or-deiconify-frame'.
    (global-set-key [(control ?z)] 'iconify/map-frame)                           ; `C-z'
    ;; $$$$ (global-set-key [(control ?x) (control ?z)] 'iconify-everything)
    (global-set-key [(shift control meta ?z)] 'show-hide)                        ; `C-M-S-z'
    (global-set-key [C-down-mouse-1] 'mouse-show-hide-mark-unmark)               ; `C-mouse-1'
    (global-set-key [C-mouse-1] 'ignore)
    (global-set-key [S-down-mouse-1] nil) ; Get rid of `mouse-set-font'.         ; `S-mouse-1'
    ;;(global-set-key [vertical-line mouse-1] 'ignore)
    (global-set-key [vertical-line C-down-mouse-1] 'show-hide)
    ;;(global-set-key [vertical-line C-mouse-1] 'ignore)
    (global-set-key [vertical-line S-down-mouse-1] 'iconify-everything)
    ;;(global-set-key [vertical-line S-mouse-1] 'ignore)
    ;; [mode-line mouse-3] as deletion (Emacs std) is too hazardous.  Iconify instead.
    (global-set-key [mode-line mouse-3] 'mouse-iconify/map-frame)
    (global-set-key [mode-line C-mouse-3] 'mouse-remove-window)))

(eval-after-load "framemove"
  '(progn
    (global-set-key [(shift meta up)]    'fm-up-frame)                           ; `M-S-up'
    (global-set-key [(shift meta down)]  'fm-down-frame)                         ; `M-S-down'
    (global-set-key [(shift meta left)]  'fm-left-frame)                         ; `M-S-left'
    (global-set-key [(shift meta right)] 'fm-right-frame)))                      ; `M-S-right'

(eval-after-load "zoom-frm"             ; `zoom-frm.el' requires `frame-cmds.el'.
  '(progn
    (global-set-key [S-mouse-1] 'zoom-in)                                     ; `S-mouse-1'
    (global-set-key [C-S-mouse-1] 'zoom-out)                                  ; `C-S-mouse-1'
    (global-set-key (if (boundp 'mouse-wheel-down-event)                      ; `C-mouse-wheel'
                        (vector (list 'control mouse-wheel-down-event))
                      [C-mouse-wheel])  ; Emacs 20, 21
     'zoom-in)
    (when (boundp 'mouse-wheel-up-event)
      (global-set-key (vector (list 'control mouse-wheel-up-event)) 'zoom-out))

    (when (fboundp 'text-scale-adjust)  ; Emacs 23+
      (define-key ctl-x-map [(control ?+)] 'zoom-in/out)                         ; `C-x +'
      (define-key ctl-x-map [(control ?-)] 'zoom-in/out)                         ; `C-x -'
      (define-key ctl-x-map [(control ?=)] 'zoom-in/out)                         ; `C-x ='
      (define-key ctl-x-map [(control ?0)] 'zoom-in/out))))                      ; `C-x 0'

;;;   ;; These [nil] bindings are no doubt a HACK, based on an undocumented handy "feature".
;;;   ;; (This works in Emacs 19.34.6, but it doesn't work in Emacs 20.6.)
;;;   ;; In Windows, at least, such a key sequence [nil...] occurs if you click in the
;;;   ;; lower right corner, between the scroll bar and the mode-line.
;;;   (global-set-key [nil down-mouse-1] 'fit-frame)
;;;   (global-set-key [nil mouse-1] 'ignore)
;;;   (global-set-key [nil C-down-mouse-1] 'show-hide)
;;;   (global-set-key [nil C-mouse-1] 'ignore)
;;;   (global-set-key [nil S-down-mouse-1] 'iconify-everything)
;;;   (global-set-key [nil S-mouse-1] 'ignore)

(eval-after-load "mouse+"
  '(global-set-key [mode-line C-mouse-1] 'mouse-tear-off-window))

;; These are defined in `fit-frame.el'.
(eval-after-load "fit-frame"
  '(progn
    (global-set-key [(control ?x) (control ?_)] 'fit-frame)                      ; `C-x C-_'
    (global-set-key [vertical-line down-mouse-1] 'fit-frame-or-mouse-drag-vertical-line)))

(eval-after-load "iedit"
  '(progn
    (define-key global-map       (kbd "C-;") 'iedit-mode)                        ; `C-;'
    (define-key isearch-mode-map (kbd "C-;") 'iedit-mode)))

;;; Put *Help* buffer in `help-minor-mode'.
;;(save-excursion (set-buffer (get-buffer-create "*Help*")) (help-minor-mode 1))

;;;; Help mouse-menu.
;;(when (fboundp 'help-mouse-menu)        ; In `help-minor.el'.
;;  (unless (lookup-key (current-global-map) [C-M-S-down-mouse-1])
;;    (global-set-key [C-M-S-down-mouse-1] 'help-mouse-menu)
;;    (global-set-key [C-M-S-mouse-1] 'ignore))
;;  (unless (lookup-key (current-global-map) [C-M-S-down-mouse-2])
;;    (global-set-key [C-M-S-down-mouse-2] 'help-mouse-menu)
;;    (global-set-key [C-M-S-mouse-2] 'ignore))
;;  (unless (lookup-key (current-global-map) [C-M-S-down-mouse-3])
;;    (global-set-key [C-M-S-down-mouse-3] 'help-mouse-menu)
;;    (global-set-key [C-M-S-mouse-3] 'ignore)))

;; Comparisons: windows, buffers, files.
(global-set-key [(control meta ?=)] 'compare-windows) ; Defined in `compare-w.el'.
(defvar comparison-map (lookup-key global-map [?\C-=])
  "Prefix keymap for comparison commands.")
(unless (keymapp comparison-map)
  (setq comparison-map (make-sparse-keymap))
  (global-set-key [(control ?=)] comparison-map)
  (define-key comparison-map "b" 'ediff-buffers) ; Defined in `ediff.el'.        ; `C-= b'
  (define-key comparison-map "e" 'ediff-files) ; Defined in `ediff.el'.          ; `C-= e'
  (define-key comparison-map "f" 'ediff-files) ; Defined in `ediff.el'.          ; `C-= f'
  (define-key comparison-map "d" 'diff) ; Defined in `diff+.el'.                 ; `C-= d'
  (define-key comparison-map "w" 'compare-windows)) ; Defined in `compare-w.el'. ; `C-= w'

;; Completions (non-minibuffer).
;(global-set-key "\M-\r" 'complete)      ; Defined in `completion.el':
;(global-set-key [?\C-\r] 'complete)
;(define-key function-key-map [C-return] [?\C-\r])

(eval-after-load "fill"
  '(define-key text-mode-map [(meta ?j)] 'fill-individual-paragraphs))           ; `M-j'

(eval-after-load "ispell"
  '(global-set-key [(meta ?$)] 'ispell-complete-word))                           ; `M-$'

(eval-after-load "thingatpt"
  '(progn
    (global-set-key [(meta ?_)] 'forward-whitespace)                             ; `M-_'
    ;; Emacs 23 co-opts `M-s-' as a prefix key.
    (unless (lookup-key global-map [(meta ?s)])                                  ; `M-s-'
      (global-set-key [(meta ?s)] 'forward-symbol)))) ; Defined in `thingatpt.el'

;; These replace the bindings for `mark-sexp' and `mark-word'.  Defined in `thing-cmds.el'.
(eval-after-load "thing-cmds"
  '(progn
    (global-set-key [(control meta ? )] 'mark-thing)                             ; `C-M-SPC'
    (global-set-key [(meta ?@)] 'cycle-thing-region)))                           ; `M-@'

(eval-after-load "crosshairs"
  '(global-set-key [(control ?+)] 'crosshairs-mode))                             ; `C-+'

(eval-after-load "unaccent"
  '(progn
    (global-set-key [(meta ?\")] 'unaccent-word)                                 ; `M-"'
    (define-key ctl-x-map [\"] 'unaccent-region)))                               ; `C-x "'

;;; Do Re Mi commands
(eval-after-load "doremi-frm"
  '(progn
    (unless (fboundp 'doremi-prefix)
      (defalias 'doremi-prefix (make-sparse-keymap))
      (defvar doremi-map (symbol-function 'doremi-prefix)
        "Keymap for Do Re Mi commands."))
    (define-key global-map "\C-xt" 'doremi-prefix)
    (define-key doremi-map "a" 'doremi-all-faces-fg+) ; "All"                    `C-x t a'
    (define-key doremi-map "c" 'doremi-bg+) ; "Color"                            `C-x t c'
    (define-key doremi-map "f" 'doremi-face-fg+) ; Face"                         `C-x t f'
    (define-key doremi-map "h" 'doremi-frame-height+) ; Height                   `C-x t h'
    (define-key doremi-map "k" 'doremi-face-bg+) ; bacKground"                   `C-x t k'
    (define-key doremi-map "t" 'doremi-font+) ; "Typeface"                       `C-x t t'
    (define-key doremi-map "u" 'doremi-frame-configs+) ; "Undo"                  `C-x t u'
    (define-key doremi-map "x" 'doremi-frame-horizontally+) ; X (abscissa)       `C-x t x'
    (define-key doremi-map "y" 'doremi-frame-vertically+)   ; Y (ordinate)       `C-x t y'
    (define-key doremi-map "z" 'doremi-frame-font-size+))) ; "Zoom"              `C-x t z'

(eval-after-load "doremi-cmd"
  '(progn
    (unless (fboundp 'doremi-prefix)
      (defalias 'doremi-prefix (make-sparse-keymap))
      (defvar doremi-map (symbol-function 'doremi-prefix)
        "Keymap for Do Re Mi commands."))
    (define-key global-map "\C-xt"  'doremi-prefix)
    (define-key doremi-map "b" 'doremi-buffers+) ; Buffer                        `C-x t b'
    (define-key doremi-map "g" 'doremi-global-marks+) ; Global mark              `C-x t g'
    (define-key doremi-map "m" 'doremi-marks+) ; Mark                            `C-x t m'
    (define-key doremi-map "r" 'doremi-bookmarks+) ; `r' for Reading books       `C-x t r'
    (define-key doremi-map "s" 'doremi-color-themes+) ; `s' for color Schemes    `C-x t s'
    (define-key doremi-map "w" 'doremi-window-height+))) ; Window                `C-x t w'

(eval-after-load "frame-cmds"
  '(progn
    (unless (fboundp 'doremi-prefix)
      (defalias 'doremi-prefix (make-sparse-keymap))
      (defvar doremi-map (symbol-function 'doremi-prefix)
        "Keymap for Do Re Mi commands."))
    (define-key global-map "\C-xt"  'doremi-prefix)
    (define-key doremi-map "." 'save-frame-config)))                           ; `C-x t .'

(eval-after-load "thumb-frm"
  '(progn
    (global-set-key [(shift mouse-3)]         'thumfr-toggle-thumbnail-frame)  ; `S-mouse-3'
    (global-set-key [(shift control mouse-3)] 'thumfr-thumbify-other-frames)   ; `C-S-mouse-3'
    (global-set-key [(shift control ?z)]      'thumfr-thumbify-other-frames)   ; `C-S-z'
    (global-set-key [(shift control ?n)]      'thumfr-fisheye-next-frame)      ; `C-S-n'
    (global-set-key [(shift control ?p)]      'thumfr-fisheye-previous-frame)  ; `C-S-p'
    (global-set-key [(control meta ?z)]                                        ; `C-M-z'
     'thumfr-really-iconify-or-deiconify-frame)
    ;; `e' for eye (fisheye)
    (define-key global-map "\C-xte" 'thumfr-doremi-thumbnail-frames+)          ; `C-x t e'
    ;; Make window-manager "minimize" button thumbify instead of iconify.
    ;; (define-key special-event-map [iconify-frame] 'thumfr-thumbify-frame-upon-event)
    ))

(eval-after-load "ucs-cmds"
  '(when (> emacs-major-version 22)     ; Need Emacs 23+ version of `insert-char'/`ucs-insert'.
    (when (commandp 'insert-char)       ; `ucs-insert' renamed to `insert-char' in Emacs 24.
      (define-key global-map [remap insert-char] 'ucsc-insert))
    (when (fboundp 'ucs-insert)
      (define-key global-map [remap ucs-insert] 'ucsc-insert))))

(define-key help-map "\C-\M-f" 'describe-face)                                 ; `C-h C-M-f'

;; `C-x' stuff.
;;
;; So you can do it with one hand.
(define-key ctl-x-map [(control ?z)] 'delete-window)                           ; `C-x C-z'
; Defined in `simple.el'.
(define-key ctl-x-map [(control ?\;)] 'comment-region)                         ; `C-x C-;'

(eval-after-load "misc-cmds"
  '(progn
    (define-key ctl-x-map [home] 'mark-buffer-before-point)                    ; `C-x home'
    (define-key ctl-x-map [end]  'mark-buffer-after-point)                     ; `C-x end'
    (define-key ctl-x-map "\M-f" 'region-to-file)                              ; `C-x M-f'
    (define-key ctl-x-map "L"    'goto-longest-line)))                         ; `C-x L'
;; In `chistory.el'.
(define-key ctl-x-map [(meta ?x)] 'repeat-matching-complex-command)            ; `C-x M-x'
(define-key ctl-x-map "c" 'font-lock-mode)                                     ; `C-x c'

(eval-after-load "frame-cmds"
  '(define-key ctl-x-map "o" 'other-window-or-frame))                          ; `C-x o'

(eval-after-load "highlight"
  '(progn
    (define-key ctl-x-map [(control ?y)] 'hlt-highlight)                       ; `C-x C-y'
    (define-key ctl-x-map [(down-mouse-2)] 'hlt-highlighter)                   ; `C-x mouse-2'
    (define-key ctl-x-map [(mouse-2)] 'ignore)
    (define-key ctl-x-map [(S-down-mouse-2)] 'hlt-eraser)                     ; `C-x S-mouse-2'
    (when (fboundp 'next-single-char-property-change) ; Emacs 21+
      (global-set-key [(shift control ?p)] 'hlt-previous-highlight)            ; `C-S-p'
      (global-set-key [(shift control ?n)] 'hlt-next-highlight))))             ; `C-S-n'

(eval-after-load "dired-x"
  '(progn
    (define-key ctl-x-map   [(control ?j)] 'dired-jump)                        ; `C-x j'
    (define-key ctl-x-4-map [(control ?j)] 'dired-jump-other-window)))         ; `C-x 4 j'

(eval-after-load "frame-cmds"
  '(progn
    (define-key ctl-x-4-map "1" 'delete-other-frames)                          ; `C-x 4 1'
    (define-key ctl-x-5-map "h" 'show-*Help*-buffer)))                         ; `C-x 5 h'

(eval-after-load "find-func+"           ; Emacs 22+
  '(define-key ctl-x-4-map "l" 'find-library-other-window))                    ; `C-x 4 l'

;; [f1] function key.
(eval-after-load "help+"
  ;; Standard binding is `help-command'
  '(global-set-key [f1] 'help-on-click/key))                                   ; `f1'
(eval-after-load "help+20"
  '(global-set-key [f1] 'help-on-click/key))

(eval-after-load "misc-cmds"
  '(global-set-key [C-S-f1] 'region-to-buffer))                                ; `C-S-f1'

(global-set-key [M-S-f1] 'insert-buffer) ; Defined in `simple.el'.             ; `M-S-f1'
;; Defined in `font-lock.el'
(global-set-key [C-M-f1] 'font-lock-fontify-buffer)                            ; `C-M-f1'
(global-set-key [C-M-S-f1] 'rename-buffer)                                     ; `C-M-S-f1'

;; [f3] function key.
(eval-after-load "bm"
  '(progn
    (global-set-key (kbd "<S-f3>") 'bm-toggle)                                 ; `S-f3'
    (global-set-key (kbd "<C-f3>") 'bm-next)                                   ; `C-f3'
    (global-set-key (kbd "<M-f3>") 'bm-previous)))                             ; `M-f3'

;; [f5] function key - a la MS Windows.
(global-set-key [f5] 'revert-buffer)                                           ; `f5'
(eval-after-load "misc-cmds"
  '(global-set-key [f5] 'revert-buffer-no-confirm))                            ; `f5'

;; [insert] key.  [C-insert] is `kill-ring-save'.  [S-insert] is `yank'.
(global-set-key [M-insert] 'yank-pop) ; Defined in `simple.el'.                ; `M-insert'
(global-set-key [C-S-insert] 'insert-buffer) ; Defined in `simple.el'.         ; `C-S-insert'
(global-set-key [M-S-insert] 'yank-rectangle)                                  ; `M-S-insert'
(global-set-key [C-M-insert] 'lisp-complete-symbol)                            ; `C-M-insert'
(global-set-key [C-M-S-insert] 'insert-file)                                   ; `C-M-S-insert'

(eval-after-load "fuzzy-match"
  '(global-set-key "\M-#" 'lisp-spell-symbol))                                 ; `M-#'

;; [delete] key.
(global-set-key [delete] 'kill-line)    ; Defined in `simple.el'.                `delete'
(global-set-key [C-delete] 'kill-paragraph) ; Defined in `paragraphs.el'.        `C-delete'
(global-set-key [M-delete] 'kill-ring-save) ; Defined in `simple.el'.            `M-delete'
; Emacs standard: [S-delete] is `kill-region'.
(global-set-key [C-S-delete] 'append-next-kill) ; Defined in `simple.el'.        `C-S-delete'
(global-set-key [M-S-delete] 'kill-rectangle) ; Defined in `rect.el'.            `M-S-delete'
(global-set-key [C-M-delete] 'kill-sexp) ; Defined in `lisp.el'.                 `C-M-delete'
(global-set-key [C-M-S-delete] 'append-to-register) ; Defined in `register.el'.  `C-M-S-delete'

;; [backspace] key.
(global-set-key [C-backspace] 'backward-kill-paragraph) ; In `paragraphs.el'.    `C-backspace'

(eval-after-load "misc-cmds"
  '(global-set-key [C-S-backspace] 'region-to-file))                        ; `C-S-backspace'

(global-set-key [M-S-backspace] 'clear-rectangle) ; Defined in `rect.el'.     `M-S-backspace'
; This was standard in Emacs 20:
(global-set-key [C-M-backspace] 'backward-kill-sexp) ; In  `lisp.el'.         `C-M-backspace'
(global-set-key [C-M-S-backspace] 'copy-to-register) ; In `register.el'.      `C-M-S-backspace'

;; [pause] / [break] key:
;; NOTE: On Windows, [C-pause] is considered to be [C-cancel].  Still true for XP?

;; Better than the standard bindings `C-x <right>' and `C-x <right>',
;; because you can hold these down to repeat: cycle through buffers.
(when (fboundp 'next-buffer)            ; Emacs 21+.
  (global-set-key [C-pause] 'previous-buffer)                                  ; `C-pause'
  (global-set-key [M-pause] 'next-buffer))                                     ; `M-pause'

;; `iso-transl.el' is needed to use an ISO prefix key (e.g. `C-x 8'. [f12]).
(require 'iso-transl)                   ; Defines `key-translation-map'.
;;;@@@Emacs20 ;; This lets users do `[f12] C-h]' for help on ISO chars.
;;;@@@Emacs20 (autoload 'help-iso-prefix "help+"
;;;@@@Emacs20   "Show commands bound to ISO (pseudo-)prefix key sequences." t)

;; Make [f12] key be a synonym for `C-x 8'. (Use [f12] as a compose key.)
(define-key key-translation-map [f12] ; See `iso-transl.el'.                   ; `f12'
  (lookup-key key-translation-map "\C-x8"))
;; Make [f12] key be a synonym for `C-x 8' for isearch too.
;; This lets you search for accented chars using [f12].
(define-key isearch-mode-map [f12] nil)
;;;@@@Emacs20 ;; [f12] C-h and C-x 8 C-h  :=  Help for [f12] and C-x 8 prefixes:
;;;@@@Emacs20 (global-set-key (vector 'f12 help-char) 'help-iso-prefix) ; In `help.el'.
;;;@@@Emacs20 (define-key ctl-x-map "8\C-h" 'help-iso-prefix) ; Defined in `help.el'.

;; These *declp* commands are defined in `misc-cmds.el'.
;(global-set-key [C-print] 'declp-buffer) ; Print buffer. (defsubst)
;(global-set-key [M-print] 'pr-declp-buffer) ; Print buffer via `pr'.
;(global-set-key [C-M-print] 'declp-buffer-w-switches) ; User `declp' switches.
;(global-set-key [S-print] 'transpose-paragraphs) ; Defined in `paragraphs.el'
;(global-set-key [C-S-print] 'declp-region) ; Print region. (defsubst)
;(global-set-key [M-S-print] 'pr-declp-region) ; Print region via `pr'.
;(global-set-key [C-M-S-print] 'declp-region-w-switches) ; `declp' + switches.

;; [home], [end], [prior], and [next] keys.  These are used, unmodified, by
;; `s-region-move', which is defined in `s-region+.el'.  The following commands,
;; except `forward-page' & `backward-page', are also defined in `s-region+.el'.
;(global-set-key [C-prior] 'backward-page) ; Defined in `page.el'.
;(global-set-key [C-previous] 'backward-page)
;(global-set-key [C-next] 'forward-page) ; Defined in `page.el'.
;(global-set-key [next] 'scroll-up-windowful) ; Defined in `s-region+.el'.
;(global-set-key [previous] 'scroll-down-windowful) ; Defined in `s-region+.el'.
;(global-set-key [prior] 'scroll-down-windowful)
;(global-set-key [M-next] 'scroll-other-window-up-windowful) ; In `s-region+.el'
;(global-set-key [M-previous] 'scroll-other-window-down-windowful)
;(global-set-key [M-prior] 'scroll-other-window-down-windowful) ; `s-region+.el'
;(global-set-key [home] 'goto-point-min) ; (defsubst) Defined in `s-region+.el'.
;(global-set-key [end] 'goto-point-max) ; (defsubst) Defined in `s-region+.el'.
;(global-set-key [M-home] 'bob-other-window) ; (defsubst) In `s-region+.el'.
;(global-set-key [M-end] 'eob-other-window) ; (defsubst) In `s-region+.el'.
;(s-region-bind (list [prior] [C-prior] [M-prior]))

(eval-after-load "swiss-move"
  '(progn
    (global-set-key [S-prior] 'swiss-move-line-up)                            ; `S-prior'
    (global-set-key [S-next]  'swiss-move-line-down)))                        ; `S-next'

;; [up], [down], [left], [right] keys.
(global-set-key [S-down] (lambda () (interactive) (scroll-up 1)))            ; `S-down'
(global-set-key [S-up] (lambda () (interactive) (scroll-down 1)))            ; `S-up'
;;(global-set-key [M-up] (lookup-key esc-map "p")) ; Probably not defined.
;;(global-set-key [M-down] (lookup-key esc-map "n")) ; Probably not defined.
;;(global-set-key [M-left] (lookup-key esc-map "b")) ; Predefined.
;;(global-set-key [M-right] (lookup-key esc-map "f")) ; Predefined.
(global-set-key [C-M-home] 'beginning-of-defun)                               ; `C-M-home'
(global-set-key [C-M-end] 'end-of-defun)                                      ; `C-M-end'


;;;-----------REPLACEMENT BINDINGS------------------------------------

(defvar sub-*-of-line t
  "*Non-nil means `substitute-key-definition' of `*-of-line' commands
by `*-of-line+', everywhere.
This applies to `move-to-(beginning|end)-of-line', if defined, or to
`(beginning|end)-of-line', otherwise.
This has no effect unless you use library `misc-cmds.el'.")

(defvar sub-recenter-top-bottom t
  "*Non-nil means `substitute-key-definition' of `recenter' command
by `sub-recenter-top-bottom', everywhere.
This has no effect unless you use library `misc-cmds.el'.")

(defvar sub-kill-buffer-and-its-windows t
  "*Non-nil means `substitute-key-definition' of `kill-buffer' command
by `kill-buffer-and-its-windows', everywhere.
This has no effect unless you use library `misc-cmds.el'.")

(defvar sub-pp-evals t
  "*Non-nil means `substitute-key-definition' of `eval-*' commands
by `pp-eval-*', everywhere.  Thus, `pp-eval-expression' replaces
`eval-expression' and `pp-eval-last-sexp' replaces `eval-last-sexp'.
This has no effect unless you use library `pp+.el'.")

(defvar sub-query-replace-w-options t
  "*Non-nil means `substitute-key-definition' of `query-replace' command
by `query-replace-w-options', everywhere.
This has no effect unless you use library `replace+.el'.")

(defvar sub-delete-windows-for t
  "*Non-nil means `substitute-key-definition' of `delete-window' command
by `delete-windows-for', everywhere.
This has no effect unless you use library `frame-cmds.el'.")


;;; Do these all *after* load `menu-bar+.el', since that sets original bindings.

(eval-after-load "frame-cmds"
  '(when sub-delete-windows-for
    (substitute-key-definition 'delete-window 'delete-windows-for global-map)))
(eval-after-load "replace+"
  '(when sub-query-replace-w-options
    (substitute-key-definition 'query-replace 'query-replace-w-options global-map)))
(eval-after-load "misc-cmds"
  '(when sub-kill-buffer-and-its-windows
    (substitute-key-definition 'kill-buffer 'kill-buffer-and-its-windows global-map)))
(eval-after-load "pp+"
  '(when sub-pp-evals
    (substitute-key-definition 'eval-last-sexp 'pp-eval-last-sexp global-map)
    (substitute-key-definition 'eval-expression 'pp-eval-expression global-map)))
(when (fboundp 'buffer-menu)
  (substitute-key-definition 'list-buffers 'buffer-menu global-map)) ; In `buff-menu+.el'.
(eval-after-load "misc-cmds"
  '(progn
    (when sub-*-of-line
      (cond ((fboundp 'move-beginning-of-line)
             (substitute-key-definition 'move-beginning-of-line 'beginning-of-line+ global-map)
             (substitute-key-definition 'move-end-of-line 'end-of-line+ global-map))
            (t
             (substitute-key-definition 'beginning-of-line 'beginning-of-line+ global-map)
             (substitute-key-definition 'end-of-line 'end-of-line+ global-map)))
      (when (boundp 'visual-line-mode-map)
        (define-key visual-line-mode-map [remap move-beginning-of-line] nil)
        (define-key visual-line-mode-map [remap move-end-of-line]       nil)
        (define-key visual-line-mode-map [home] 'beginning-of-line+)
        (define-key visual-line-mode-map [end]  'end-of-line+)
        (define-key visual-line-mode-map "\C-a" 'beginning-of-visual-line+)
        (define-key visual-line-mode-map "\C-e" 'end-of-visual-line+)))
    (when sub-recenter-top-bottom
      (substitute-key-definition 'recenter 'recenter-top-bottom global-map))))

;;;;;;;;;;;;;;;;;;;;;;;

(provide 'setup-keys)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; setup-keys.el ends here