3203dc8656
This is also mentioned in bbatsov/prelude#1226 and originates from magit/magit#3695.
152 lines
4.7 KiB
EmacsLisp
152 lines
4.7 KiB
EmacsLisp
;;; prelude-evil.el --- Emacs Prelude: evil-mode configuration.
|
|
;;
|
|
;; Copyright © 2011-2018 Bozhidar Batsov
|
|
;;
|
|
;; Author: Bozhidar Batsov <bozhidar@batsov.com>
|
|
;; 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
|
|
"L" 'magit-log)
|
|
(evil-add-hjkl-bindings magit-status-mode-map 'emacs
|
|
"K" 'magit-discard
|
|
"l" 'magit-log
|
|
"h" 'magit-diff-toggle-refine-hunk)
|
|
|
|
(setq evil-shift-width 2)
|
|
|
|
;;; enable avy with evil-mode
|
|
(define-key evil-normal-state-map (kbd "SPC") 'avy-goto-word-1)
|
|
|
|
;;; 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)
|