;;; prelude-evil.el --- Emacs Prelude: evil-mode configuration. ;; ;; Copyright © 2011-2013 Bozhidar Batsov ;; ;; Author: Bozhidar Batsov ;; URL: http://batsov.com/prelude ;; Version: 1.0.0 ;; Keywords: convenience ;; This file is not part of GNU Emacs. ;;; Commentary: ;; Some basic configuration for evil-mode. ;;; License: ;; 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 GNU Emacs; see the file COPYING. If not, write to the ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ;; Boston, MA 02110-1301, USA. ;;; Code: ;;; goto-chg lets you use the g-; and g-, to go to recent changes ;;; evil-visualstar enables searching visual selection with * ;;; evil-numbers enables vim style numeric incrementing and decrementing (prelude-require-packages '(evil goto-chg evil-surround evil-visualstar evil-numbers)) (require 'evil-visualstar) (setq evil-mode-line-format 'before) (setq evil-emacs-state-cursor '("red" box)) (setq evil-normal-state-cursor '("gray" box)) (setq evil-visual-state-cursor '("gray" box)) (setq evil-insert-state-cursor '("gray" bar)) (setq evil-motion-state-cursor '("gray" box)) ;; prevent esc-key from translating to meta-key in terminal mode (setq evil-esc-delay 0) (evil-mode 1) (global-evil-surround-mode 1) (define-key evil-normal-state-map (kbd "C-A") 'evil-numbers/inc-at-pt) (define-key evil-normal-state-map (kbd "C-S-A") 'evil-numbers/dec-at-pt) ;; ;; Other useful Commands ;; (evil-ex-define-cmd "W" 'evil-write-all) (evil-ex-define-cmd "Tree" 'speedbar-get-focus) (evil-ex-define-cmd "linum" 'linum-mode) (evil-ex-define-cmd "Align" 'align-regexp) (defun prelude-yank-to-end-of-line () "Yank to end of line." (interactive) (evil-yank (point) (point-at-eol))) (define-key evil-normal-state-map (kbd "Y") 'prelude-yank-to-end-of-line) (defun prelude-shift-left-visual () "Shift left and restore visual selection." (interactive) (evil-shift-left (region-beginning) (region-end)) (evil-normal-state) (evil-visual-restore)) (defun prelude-shift-right-visual () "Shift right and restore visual selection." (interactive) (evil-shift-right (region-beginning) (region-end)) (evil-normal-state) (evil-visual-restore)) (define-key evil-visual-state-map (kbd ">") 'prelude-shift-right-visual) (define-key evil-visual-state-map (kbd "<") 'prelude-shift-left-visual) ;; Scrolling (defun prelude-evil-scroll-down-other-window () (interactive) (scroll-other-window)) (defun prelude-evil-scroll-up-other-window () (interactive) (scroll-other-window '-)) (define-key evil-normal-state-map (kbd "C-S-d") 'prelude-evil-scroll-down-other-window) (define-key evil-normal-state-map (kbd "C-S-u") 'prelude-evil-scroll-up-other-window) ;; ;; Magit from avsej ;; (evil-add-hjkl-bindings magit-log-mode-map 'emacs) (evil-add-hjkl-bindings magit-commit-mode-map 'emacs) (evil-add-hjkl-bindings magit-branch-manager-mode-map 'emacs "K" 'magit-discard-item "L" 'magit-key-mode-popup-logging) (evil-add-hjkl-bindings magit-status-mode-map 'emacs "K" 'magit-discard-item "l" 'magit-key-mode-popup-logging "h" 'magit-toggle-diff-refine-hunk) (setq evil-shift-width 2) ;;; enable ace-jump mode with evil-mode (define-key evil-normal-state-map (kbd "SPC") 'ace-jump-mode) ;;; snagged from Eric S. Fraga ;;; http://lists.gnu.org/archive/html/emacs-orgmode/2012-05/msg00153.html (defun prelude-evil-key-bindings-for-org () ;;(message "Defining evil key bindings for org") (evil-declare-key 'normal org-mode-map "gk" 'outline-up-heading "gj" 'outline-next-visible-heading "H" 'org-beginning-of-line ; smarter behaviour on headlines etc. "L" 'org-end-of-line ; smarter behaviour on headlines etc. "t" 'org-todo ; mark a TODO item as DONE ",c" 'org-cycle (kbd "TAB") 'org-cycle ",e" 'org-export-dispatch ",n" 'outline-next-visible-heading ",p" 'outline-previous-visible-heading ",t" 'org-set-tags-command ",u" 'outline-up-heading "$" 'org-end-of-line ; smarter behaviour on headlines etc. "^" 'org-beginning-of-line ; ditto "-" 'org-ctrl-c-minus ; change bullet style "<" 'org-metaleft ; out-dent ">" 'org-metaright ; indent )) (prelude-evil-key-bindings-for-org) (provide 'prelude-evil)