;-*- coding: utf-8 -*- ;; ergonomic_keybinding_qwerty.el -- A ergonomic keybinding for qwerty keyboard. ;; Copyright © 2007 Xah Lee ;; Author: Xah Lee (http://xahlee.org/) ;; Keywords: qwerty, dvorak, keybinding, ergonomic ;; You can redistribute this program 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. ;;; Commentary: ;; This keybinding puts the most frequently used emacs shortcuts into ;; the most easier to type spots, and, using the Meta-«key» space only. ;; For detail on the design of this keybinding and a visual layout, ;; and versions for Dvorak or Qwerty keyboards, see: ;; http://xahlee.org/emacs/ergonomic_emacs_keybinding.html ;;; Install: ;; Place this file in your favoritate directory, such as ;; ~/emacs/ergonomic_keybinding_qwerty.el ;; Then, place the following code in your emacs init file (~/.emacs): ;; (load-file "~/emacs/ergonomic_keybinding_qwerty.el") ;;; History: ;; version 3.2, 2008-09-02. moved cua fix function to modern_operations.el. The functinos are: no-select-cua-scroll-down, no-select-cua-scroll-up, no-select-backward-paragraph, no-select-forward-paragraph, no-select-beginning-of-buffer, no-select-end-of-buffer, no-select-move-end-of-line. ;; version 3.1, 2008-09-02. Added just-one-space, delete-blank-lines. Added fill-paragraph, unfill-paragraph. Added comment-dwim. ;; version 3, 2008-08-31. Added isearch. Added redo, kill-line-backward, shell-command. Added bug fix for cua-mode. Now, commands with Shift keys won't go into a selection mode. ;; version 2, 2008-08-29. Somewhat major change. Positions for undo, cut, copy, paste, paste previous, has been moved. Added delete-char, delete-backward-char, kill-word, backward-kill-word. Removed the now redundant binding of kill-word and backward-kill-word using the backspace key. Removed the other-frame binding. ;; version 1.1, 2007-12-18. changed keycode to consistantly use kbd syntax. Fixed a scroll-up and scroll-down mixup. ;; version 1.0, 2007-08-01. first version. ;;; Code: ;;; CURSOR MOVEMENTS ;; Single char cursor movement (global-set-key (kbd "M-j") 'backward-char) (global-set-key (kbd "M-l") 'forward-char) (global-set-key (kbd "M-i") 'previous-line) (global-set-key (kbd "M-k") 'next-line) ;; Move by word (global-set-key (kbd "M-u") 'backward-word) (global-set-key (kbd "M-o") 'forward-word) ; was (prefix) ;; Move by paragraph (global-set-key (kbd "M-U") 'backward-paragraph) (global-set-key (kbd "M-O") 'forward-paragraph) ;; Move to beginning/ending of line (global-set-key (kbd "M-h") 'move-beginning-of-line) (global-set-key (kbd "M-H") 'move-end-of-line) ;; Move by screen (page up/down) (global-set-key (kbd "M-I") 'scroll-down) (global-set-key (kbd "M-K") 'scroll-up) ;; Move to beginning/ending of file (global-set-key (kbd "M-J") 'beginning-of-buffer) (global-set-key (kbd "M-L") 'end-of-buffer) ;; isearch (global-set-key (kbd "M-;") 'isearch-forward) (global-set-key (kbd "M-:") 'isearch-backward) (global-set-key (kbd "M-p") 'recenter) ;;; MAJOR EDITING COMMANDS ;; Delete previous/next char. (global-set-key (kbd "M-d") 'delete-backward-char) (global-set-key (kbd "M-f") 'delete-char) ; Delete previous/next word. (global-set-key (kbd "M-e") 'backward-kill-word) (global-set-key (kbd "M-r") 'kill-word) ; Copy Cut Paste, Paste previous (global-set-key (kbd "M-x") 'kill-region) (global-set-key (kbd "M-c") 'kill-ring-save) (global-set-key (kbd "M-v") 'yank) (global-set-key (kbd "M-V") 'yank-pop) ;; undo and redo (require 'redo "redo.elc" t) (global-set-key (kbd "M-Z") 'redo) (global-set-key (kbd "M-z") 'undo) ; Kill line (global-set-key (kbd "M-g") 'kill-line) ; was facemenu prefix (global-set-key (kbd "M-G") 'kill-line-backward) ;;; Textual Transformation (global-set-key (kbd "M-S-SPC") 'mark-paragraph) (global-set-key (kbd "M-w") 'just-one-space) (global-set-key (kbd "M-W") 'delete-blank-lines) (global-set-key (kbd "M-'") 'comment-dwim) ; Hard-wrap/un-hard-wrap paragraph (global-set-key (kbd "M-q") 'fill-paragraph) (global-set-key (kbd "M-Q") 'unfill-paragraph) ;;; EMACS'S SPECIAL COMMANDS ; Mark point. (global-set-key (kbd "M-SPC") 'set-mark-command) (global-set-key (kbd "M-a") 'execute-extended-command) (global-set-key (kbd "M-A") 'shell-command) ;;; WINDOW SPLITING (global-set-key (kbd "M-2") 'split-window-vertically) (global-set-key (kbd "M-1") 'delete-other-windows) (global-set-key (kbd "M-0") 'delete-window) (global-set-key (kbd "M-s") 'other-window) ;;; -------------------------------------------------- ;;; RECLAIM SOME BINDINGS ;; isearch (add-hook 'isearch-mode-hook (lambda () (define-key isearch-mode-map (kbd "M-;") 'isearch-repeat-forward) (define-key isearch-mode-map (kbd "M-:") 'isearch-repeat-backward) ) ) ;; reclaim some bindings used in minibuffer (define-key minibuffer-local-map (kbd "M-p") 'recenter) (define-key minibuffer-local-map (kbd "M-r") 'kill-word) (define-key minibuffer-local-map (kbd "M-s") 'other-window) (define-key minibuffer-local-map (kbd "") 'previous-matching-history-element) (define-key minibuffer-local-map (kbd "") 'next-matching-history-element) ;; reclaim some binding used by shell mode and shell-command. ;; the shell mode and associated mode and commands use keys in comint-mode-map. (add-hook 'comint-mode-hook (lambda () (define-key comint-mode-map (kbd "M-p") 'recenter) (define-key comint-mode-map (kbd "M-r") 'kill-word) (define-key comint-mode-map (kbd "") 'comint-previous-matching-input) (define-key comint-mode-map (kbd "") 'comint-next-matching-input) )) ;; reclaim from info mode (add-hook 'Info-mode-hook (lambda () (define-key Info-mode-map (kbd "M-s") 'other-window) ) ) ;;; -------------------------------------------------- ;;; FIX cua-mode ;; prevent cua-mode from going into selection mode when ;; commands with Shift key is used. (add-hook 'cua-mode-hook (lambda () (define-key cua-global-keymap (kbd "M-I") 'no-select-cua-scroll-down) (define-key cua-global-keymap (kbd "M-K") 'no-select-cua-scroll-up) (define-key cua-global-keymap (kbd "M-U") 'no-select-backward-paragraph) (define-key cua-global-keymap (kbd "M-O") 'no-select-forward-paragraph) (define-key cua-global-keymap (kbd "M-J") 'no-select-beginning-of-buffer) (define-key cua-global-keymap (kbd "M-L") 'no-select-end-of-buffer) (define-key cua-global-keymap (kbd "M-H") 'no-select-move-end-of-line) ) )