;;; evil-colemak.el --- My keybindings for Colemak -*- lexical-binding: t; -*- ;; Copyright (C) 2014 Tom Willemse ;; Author: Tom Willemse ;; Keywords: convenience ;; 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 3 of the License, 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. If not, see . ;;; Commentary: ;; Only the keybindings that are different from normal QWERTY bindings ;; are put in here. ;; Some of the code is copied from colemak-evil. ;;; Code: (require 'evil) (require 'undo-tree) ;; Remove all keybindings from the insert-state keymap. (setcdr evil-insert-state-map nil) ;; ESC and C-g should switch back to normal state. (define-key evil-insert-state-map (kbd "") 'evil-normal-state) (define-key evil-insert-state-map (kbd "C-g") 'evil-normal-state) (define-key evil-normal-state-map (kbd "d") nil) (define-key evil-normal-state-map (kbd "i") nil) (define-key evil-normal-state-map (kbd "g") nil) (define-key evil-normal-state-map (kbd "o") nil) ;;; Normal state (define-key evil-normal-state-map "s" 'evil-delete) (define-key evil-normal-state-map "S" 'evil-delete-line) (define-key evil-normal-state-map "u" 'evil-insert) (define-key evil-normal-state-map "U" 'evil-insert-line) (define-key evil-normal-state-map "N" 'evil-join) (define-key evil-normal-state-map "y" 'evil-open-below) (define-key evil-normal-state-map "Y" 'evil-open-above) (define-key evil-normal-state-map ";" 'evil-paste-after) (define-key evil-normal-state-map ":" 'evil-paste-before) (define-key evil-normal-state-map "p" 'evil-replace) (define-key evil-normal-state-map "P" 'evil-replace-state) (define-key evil-normal-state-map "r" 'evil-substitute) (define-key evil-normal-state-map "R" 'evil-change-whole-line) (define-key evil-normal-state-map "j" 'evil-yank) (define-key evil-normal-state-map "J" 'evil-yank-line) (define-key evil-normal-state-map "d&" 'evil-ex-repeat-global-substitute) (define-key evil-normal-state-map "d8" 'what-cursor-position) (define-key evil-normal-state-map "da" 'what-cursor-position) (define-key evil-normal-state-map "du" 'evil-insert-resume) (define-key evil-normal-state-map "dN" 'evil-join-whitespace) (define-key evil-normal-state-map "dq" 'evil-fill-and-move) (define-key evil-normal-state-map "dw" 'evil-fill) (define-key evil-normal-state-map "dl" 'evil-downcase) (define-key evil-normal-state-map "dL" 'evil-upcase) (define-key evil-normal-state-map "dt" 'find-file-at-point) (define-key evil-normal-state-map "dT" 'evil-find-file-at-point-with-line) (define-key evil-normal-state-map "d?" 'evil-rot13) (define-key evil-normal-state-map "d~" 'evil-invert-case) (define-key evil-normal-state-map "zy" 'evil-open-fold) (define-key evil-normal-state-map "zp" 'evil-open-folds) (define-key evil-normal-state-map "\C-k" 'evil-paste-pop-next) (define-key evil-normal-state-map (kbd "C-;") 'evil-paste-pop) (define-key evil-normal-state-map "\C-g" 'pop-tag-mark) ;; go to last change (define-key evil-normal-state-map "do" 'goto-last-change) (define-key evil-normal-state-map "d," 'goto-last-change-reverse) ;; undo (define-key evil-normal-state-map "l" 'undo) (define-key evil-normal-state-map "\C-p" 'redo) ;; window commands (define-key evil-window-map "e" 'evil-window-down) (define-key evil-window-map "E" 'evil-window-move-very-bottom) (define-key evil-window-map "i" 'evil-window-up) (define-key evil-window-map "I" 'evil-window-move-very-top) (define-key evil-window-map "o" 'evil-window-right) (define-key evil-window-map "O" 'evil-window-move-far-right) (define-key evil-window-map "k" 'evil-window-new) (define-key evil-window-map "y" 'delete-other-windows) (define-key evil-window-map ";" 'evil-window-mru) (define-key evil-window-map "p" 'evil-window-rotate-downwards) (define-key evil-window-map "P" 'evil-window-rotate-upwards) (define-key evil-window-map "r" 'evil-window-split) (define-key evil-window-map "R" 'evil-window-split) (define-key evil-window-map "g" 'evil-window-top-left) (define-key evil-window-map (kbd "C-S-n") 'evil-window-move-very-bottom) (define-key evil-window-map "\C-n" 'evil-window-down) (define-key evil-window-map (kbd "C-S-e") 'evil-window-move-very-top) (define-key evil-window-map "\C-e" 'evil-window-up) (define-key evil-window-map (kbd "C-S-i") 'evil-window-move-far-right) (define-key evil-window-map "\C-i" 'evil-window-right) (define-key evil-window-map "\C-k" 'evil-window-new) (define-key evil-window-map "\C-y" 'delete-other-windows) (define-key evil-window-map (kbd "C-;") 'evil-window-mru) (define-key evil-window-map "\C-p" 'evil-window-rotate-downwards) (define-key evil-window-map (kbd "C-S-p") 'evil-window-rotate-upwards) (define-key evil-window-map "\C-r" 'evil-window-split) (define-key evil-window-map (kbd "C-S-r") 'evil-window-split) (define-key evil-window-map "\C-g" 'evil-window-top-left) (define-key evil-window-map "\C-t" 'ffap-other-window) ;;; Motion state ;; "0" is a special command when called first (define-key evil-motion-state-map "f" 'evil-forward-word-end) (define-key evil-motion-state-map "F" 'evil-forward-WORD-end) (define-key evil-motion-state-map "t" 'evil-find-char) (define-key evil-motion-state-map "T" 'evil-find-char-backward) (define-key evil-motion-state-map "D" 'evil-goto-line) (define-key evil-motion-state-map "n" 'evil-backward-char) (define-key evil-motion-state-map "e" 'evil-next-line) (define-key evil-motion-state-map "i" 'evil-previous-line) (define-key evil-motion-state-map "o" 'evil-forward-char) (define-key evil-motion-state-map "E" 'evil-lookup) (define-key evil-motion-state-map "I" 'evil-window-bottom) (define-key evil-motion-state-map "k" 'evil-search-next) (define-key evil-motion-state-map "K" 'evil-search-previous) (define-key evil-motion-state-map "g" 'evil-find-char-to) (define-key evil-motion-state-map "G" 'evil-find-char-to-backward) (define-key evil-motion-state-map "ds" 'evil-goto-definition) (define-key evil-motion-state-map "df" 'evil-backward-word-end) (define-key evil-motion-state-map "dF" 'evil-backward-WORD-end) (define-key evil-motion-state-map "dd" 'evil-goto-first-line) (define-key evil-motion-state-map "dn" 'evil-next-visual-line) (define-key evil-motion-state-map "de" 'evil-previous-visual-line) (define-key evil-motion-state-map "d0" 'evil-beginning-of-visual-line) (define-key evil-motion-state-map "d_" 'evil-last-non-blank) (define-key evil-motion-state-map "d^" 'evil-first-non-blank-of-visual-line) (define-key evil-motion-state-map "dm" 'evil-middle-of-visual-line) (define-key evil-motion-state-map "d$" 'evil-end-of-visual-line) (define-key evil-motion-state-map "d\C-]" 'find-tag) (define-key evil-motion-state-map "d#" 'evil-search-unbounded-word-backward) (define-key evil-motion-state-map "d*" 'evil-search-unbounded-word-forward) (define-key evil-motion-state-map "h" 'evil-repeat-find-char) (define-key evil-motion-state-map (kbd "C-t") 'evil-scroll-down) (define-key evil-motion-state-map (kbd "C-f") 'evil-scroll-line-down) (define-key evil-motion-state-map (kbd "C-t") 'evil-scroll-page-down) (define-key evil-motion-state-map (kbd "C-y") 'evil-jump-backward) (define-key evil-motion-state-map (kbd "C-j") 'evil-scroll-line-up) ;; (define-key evil-motion-state-map "zg" 'evil-scroll-line-to-top) ;; TODO: z RET has an advanced form taking an count before the RET ;; but this requires again a special state with a single command ;; bound to RET ;; (define-key evil-motion-state-map (vconcat "z" [return]) "zg^") (define-key evil-motion-state-map "dv" 'evil-visual-restore) ;; (define-key evil-motion-state-map "zi" 'evil-scroll-column-right) ;; (define-key evil-motion-state-map [?z right] "zi") ;; (define-key evil-motion-state-map "zI" 'evil-scroll-right) ;; text objects (define-key evil-outer-text-objects-map "r" 'evil-a-sentence) (define-key evil-outer-text-objects-map ";" 'evil-a-paragraph) (define-key evil-outer-text-objects-map "g" 'evil-a-tag) (define-key evil-outer-text-objects-map "y" 'evil-a-symbol) (define-key evil-inner-text-objects-map "r" 'evil-inner-sentence) (define-key evil-inner-text-objects-map ";" 'evil-inner-paragraph) (define-key evil-inner-text-objects-map "g" 'evil-inner-tag) (define-key evil-inner-text-objects-map "y" 'evil-inner-symbol) (define-key evil-motion-state-map "dk" 'evil-next-match) (define-key evil-motion-state-map "dK" 'evil-previous-match) (when evil-want-C-i-jump (define-key evil-motion-state-map (kbd "C-u") 'evil-jump-forward)) (when evil-want-C-u-scroll (define-key evil-motion-state-map (kbd "C-l") 'evil-scroll-up)) ;;; Visual state (define-key evil-visual-state-map "U" 'evil-insert) (define-key evil-visual-state-map "y" 'exchange-point-and-mark) (define-key evil-visual-state-map "Y" 'evil-visual-exchange-corners) (define-key evil-visual-state-map "p" 'evil-change) (define-key evil-visual-state-map "l" 'evil-downcase) (define-key evil-visual-state-map "L" 'evil-upcase) (define-key evil-visual-state-map "u" evil-inner-text-objects-map) ;;; Operator-Pending state (define-key evil-operator-state-map "u" evil-inner-text-objects-map) ;; Ex (define-key evil-motion-state-map "O" 'evil-ex) ;; search command line (define-key evil-ex-search-keymap "\C-p" 'evil-paste-from-register) ;; ex command line (define-key evil-ex-completion-map "\C-s" 'evil-ex-completion) (define-key evil-ex-completion-map "\C-d" 'abort-recursive-edit) (define-key evil-ex-completion-map "\C-e" 'evil-insert-digraph) (define-key evil-ex-completion-map "\C-i" 'evil-ex-completion) (define-key evil-ex-completion-map (kbd "C-;") #'next-complete-history-element) (define-key evil-ex-completion-map "\C-p" 'evil-paste-from-register) (define-key evil-ex-completion-map "\C-k" #'next-complete-history-element) (define-key evil-ex-completion-map "\C-l" 'evil-delete-whole-line) ;; evil-read-key (define-key evil-read-key-map (kbd "C-e") #'evil-read-digraph-char) ;;; Non-evil keymaps ;; (define-key undo-tree-map (kbd "l") 'undo-tree-undo) (provide 'evil-colemak) ;;; evil-colemak.el ends here