TOP

Emacs init.el


katsue-emacs26-color-theme.zip

EvilのNormalステート。


EvilのInsertステート。


EvilのVisualステート。


;; このinit.elをUbuntuで使う場合。
;; sudo apt install emacs
;; sudo apt install gauche
;; sudo apt install elpa-evil
;; sudo apt install elpa-powerline
;; 以上のコマンドでemacs, gauche, evil, powerlineをインストールしてください。

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

;; Gauche のデフォルトエンコーディングに合わせます。
;; Gauche のデフォルトエンコーディングがeuc-jp の時はutf-8 をeuc-jp に
;; してください。
(modify-coding-system-alist 'process "gosh" '(utf-8 . utf-8))

;; gosh インタプリタのパスに合わせます。-i は対話モードを意味します。
(setq scheme-program-name "gosh -i")

;; scheme モードとrun-scheme モードにcmuscheme.el を使用します。
(autoload 'scheme-mode "cmuscheme" "Major mode for Scheme." t)
(autoload 'run-scheme "cmuscheme" "Run an inferior Scheme process." t)

;; ウィンドウを2 つに分け、一方でgosh インタプリタを実行するコマンドを定義します。
(defun scheme-other-window ()
  "Run scheme on other window"
  (interactive)
  (switch-to-buffer-other-window
   (get-buffer-create "*scheme*"))
  (run-scheme scheme-program-name))

;; そのコマンドをCtrl-cs で呼び出します。
(define-key global-map
  "\C-cs" 'scheme-other-window)

;; 直前/ 直後の括弧に対応する括弧を光らせます。
(show-paren-mode)

;; 以下はインデントの定義です。
(put 'and-let* 'scheme-indent-function 1)
(put 'begin0 'scheme-indent-function 0)
(put 'call-with-client-socket 'scheme-indent-function 1)
(put 'call-with-input-conversion 'scheme-indent-function 1)
(put 'call-with-input-file 'scheme-indent-function 1)
(put 'call-with-input-process 'scheme-indent-function 1)
(put 'call-with-input-string 'scheme-indent-function 1)
(put 'call-with-iterator 'scheme-indent-function 1)
(put 'call-with-output-conversion 'scheme-indent-function 1)
(put 'call-with-output-file 'scheme-indent-function 1)
(put 'call-with-output-string 'scheme-indent-function 0)
(put 'call-with-temporary-file 'scheme-indent-function 1)
(put 'call-with-values 'scheme-indent-function 1)
(put 'dolist 'scheme-indent-function 1)
(put 'dotimes 'scheme-indent-function 1)
(put 'if-match 'scheme-indent-function 2)
(put 'let*-values 'scheme-indent-function 1)
(put 'let-args 'scheme-indent-function 2)
(put 'let-keywords* 'scheme-indent-function 2)
(put 'let-match 'scheme-indent-function 2)
(put 'let-optionals* 'scheme-indent-function 2)
(put 'let-syntax 'scheme-indent-function 1)
(put 'let-values 'scheme-indent-function 1)
(put 'let/cc 'scheme-indent-function 1)
(put 'let1 'scheme-indent-function 2)
(put 'letrec-syntax 'scheme-indent-function 1)
(put 'make 'scheme-indent-function 1)
(put 'multiple-value-bind 'scheme-indent-function 2)
(put 'match 'scheme-indent-function 1)
(put 'parameterize 'scheme-indent-function 1)
(put 'parse-options 'scheme-indent-function 1)
(put 'receive 'scheme-indent-function 2)
(put 'rxmatch-case 'scheme-indent-function 1)
(put 'rxmatch-cond 'scheme-indent-function 0)
(put 'rxmatch-if 'scheme-indent-function 2)
(put 'rxmatch-let 'scheme-indent-function 2)
(put 'syntax-rules 'scheme-indent-function 1)
(put 'unless 'scheme-indent-function 1)
(put 'until 'scheme-indent-function 1)
(put 'when 'scheme-indent-function 1)
(put 'while 'scheme-indent-function 1)
(put 'with-builder 'scheme-indent-function 1)
(put 'with-error-handler 'scheme-indent-function 0)
(put 'with-error-to-port 'scheme-indent-function 1)
(put 'with-input-conversion 'scheme-indent-function 1)
(put 'with-input-from-port 'scheme-indent-function 1)
(put 'with-input-from-process 'scheme-indent-function 1)
(put 'with-input-from-string 'scheme-indent-function 1)
(put 'with-iterator 'scheme-indent-function 1)
(put 'with-module 'scheme-indent-function 1)
(put 'with-output-conversion 'scheme-indent-function 1)
(put 'with-output-to-port 'scheme-indent-function 1)
(put 'with-output-to-process 'scheme-indent-function 1)
(put 'with-output-to-string 'scheme-indent-function 1)
(put 'with-port-locking 'scheme-indent-function 1)
(put 'with-string-io 'scheme-indent-function 1)
(put 'with-time-counter 'scheme-indent-function 1)
(put 'with-signal-handlers 'scheme-indent-function 1)
(put 'with-locking-mutex 'scheme-indent-function 1)
(put 'guard 'scheme-indent-function 1)

;; (global-font-lock-mode t)

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

(setq mouse-wheel-scroll-amount '(1 ((shift) . 5)))

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

(setq make-backup-files nil)

(setq auto-save-default nil)

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

(setq initial-scratch-message
  "#!/usr/bin/env gosh\n\n(define (main args)\n  ()\n  0)\n\n;; : 勝沼かつえ かつぬまかつえ カツヌマカツエ\n")

(add-hook 'after-save-hook 'executable-make-buffer-file-executable-if-script-p)

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

(setq-default indent-tabs-mode nil)

;; (setq-default tab-width 1)

(add-hook 'scheme-mode-hook
           '(lambda () (setq tab-width 1)))

(add-hook 'lisp-mode-hook
           '(lambda () (setq tab-width 1)))

(add-hook 'elisp-mode-hook 
           '(lambda () (setq tab-width 1)))

(add-hook 'c++-mode-hook
           '(lambda () (setq tab-width 1)))

(add-hook 'c-mode-hook
           '(lambda () (setq tab-width 1)))

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

;; 勝沼かつえカラーテーマ。
(deftheme katsue-katsunuma1
  "Katsue Katsunuma1 theme.")

(let ((class '((class color) (min-colors 89))))
  (custom-theme-set-faces
   'katsue-katsunuma1
   `(default
      ((,class (:background "#e7e7e7" :foreground "#223569"))))
   `(font-lock-comment-face ((,class (:foreground "Grey52"))))
   `(font-lock-string-face ((,class (:foreground "darkgreen"))))
   `(region ((,class (:background "dark cyan" :foreground "cyan"))))
   `(show-paren-match
      ((,class (:background "Aquamarine" :foreground "SlateBlue"))))
   `(show-paren-mismatch
      ((,class (:background "red1" :foreground "white")))) ))

(provide-theme 'katsue-katsunuma1)

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

;; 勝沼かつえカラーテーマ。
(deftheme katsue-katsunuma2
  "Katsue Katsunuma2 theme.")

(let ((class '((class color) (min-colors 89))))
  (custom-theme-set-faces
   'katsue-katsunuma2
   `(default
      ((,class (:background "Grey69" :foreground "#223569"))))
   `(font-lock-comment-face ((,class (:foreground "Grey52"))))
   `(font-lock-string-face ((,class (:foreground "darkgreen"))))
   `(region ((,class (:background "dark cyan" :foreground "cyan"))))
   `(show-paren-match
      ((,class (:background "Aquamarine" :foreground "SlateBlue"))))
   `(show-paren-mismatch
      ((,class (:background "red1" :foreground "white")))) ))

(provide-theme 'katsue-katsunuma2)

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

(custom-set-variables
 '(custom-enabled-themes '(katsue-katsunuma2))
 '(inhibit-startup-screen t)
 '(ispell-dictionary nil)
)

(custom-set-faces
 '(mode-line ((t (:background "#223569" :foreground "white"))))
 '(mode-line-inactive ((t (:background "Grey60" :foreground "Grey76"))))
)

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

;; 勝沼かつえ拡張子の関連付け。
(add-to-list 'auto-mode-alist '("\\.katsue\\'" . katsue-mode))
(add-to-list 'auto-mode-alist '("\\.kte\\'" . katsue-mode))
(add-to-list 'auto-mode-alist '("\\.text\\'" . katsue-mode))
(add-to-list 'auto-mode-alist '("\\.txt\\'" . katsue-mode))

;; 勝沼かつえ編集モード。  勝沼かつえ関係の字句の強調表示。
(defun katsue-mode ()
  "Katsue Mode"
  (interactive)
  (kill-all-local-variables)
  (setq mode-name "Katsue")
  (setq major-mode 'katsue-mode)
  (run-hooks 'katsue-mode-hook))

(defcustom katsue-mode-hook nil
  "Normal hook run when entering `katsue-mode'.
See `run-hooks'."
  :type 'hook
  :group 'katsue)

(font-lock-add-keywords 'katsue-mode
  '(("KATSUE\\|Katsue\\|katsue\\|KATSUNUMA\\|Katsunuma\\|katsunuma\\|勝沼\\|かつぬま\\|カツヌマ\\|かつえ\\|カツエ" . 'katsue-face) ))

(defface katsue-face '((t :background "grey80")) "my-katsue-face")

(add-hook 'katsue-mode-hook
          '(lambda ()
             (font-lock-mode 1)
             (make-face 'katsue-face)
             (set-face-foreground 'katsue-face "darkcyan")
             (font-lock-fontify-buffer) ))

(provide 'katsue-mode)

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

;; katsue-gosh開発環境モード。

(fset 'katsue-gosh1
   (kmacro-lambda-form
     [?\C-x ?1 ?\C-c ?s escape ?i ?\C-x ?o] 0 "%d"))

(fset 'katsue-gosh2
   (kmacro-lambda-form
     [?\C-x ?1 ?\C-c ?s ?\C-x ?2 ?\C-x ?o ?\M-x ?e ?s ?h ?e ?l ?l return
      ?\C-x ?o ?\C-x ?o escape ?i ?\C-x ?o ?\C-x ?o] 0 "%d"))

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

(fset 'katsue-buffer-left
   (kmacro-lambda-form [?\C-x left] 0 "%d"))

(fset 'katsue-buffer-right
   (kmacro-lambda-form [?\C-x right] 0 "%d"))

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

;; (defun katsue-gosh-mode-hooks ()
;;  "katsue-gosh-mode-hooks"
;;  (when (eq major-mode 'scheme-mode)
;;    (katsue-gosh)
;;    (katsue-buffer-left)
;;  ))

;; (add-hook 'find-file-hook 'katsue-gosh-mode-hooks)
;; (add-hook 'scheme-mode-hook 'katsue-gosh-mode-hooks)

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

;; Evil

(require 'evil)
(evil-mode 1)

;; Schemeを使うには必須のEvil設定。
(setq evil-move-cursor-back nil)
(setq evil-move-beyond-eol t)
(setq evil-highlight-closing-paren-at-point-states '(not emacs insert replace normal))

;; EvilのNormalステートでeeのキーバインドでS式を評価。
(define-key evil-normal-state-map (kbd "ee") (kbd "C-x C-e"))

;; EvilのNormalステートでのファイルの入出力。
(define-key evil-normal-state-map (kbd "ff") (kbd "C-x C-f"))
(define-key evil-normal-state-map (kbd "ww") (kbd "C-x C-s"))

;; ファイル読み込み。
(define-key evil-normal-state-map (kbd ":l") (kbd "C-c C-l"))

;; 行の削除。
(define-key evil-normal-state-map (kbd ":k") (kbd "C-k"))  ;; kill line

;; 行頭・行末の移動。
(define-key evil-normal-state-map (kbd ":a") 'beginning-of-line)
(define-key evil-normal-state-map (kbd ":e") 'move-end-of-line)

;; S式移動。  forward back
(define-key evil-normal-state-map (kbd ":f") (kbd "C-M-f"))  ;; forward
(define-key evil-normal-state-map (kbd ":b") (kbd "C-M-b"))  ;; back

;; S式移動。  head tail
(define-key evil-normal-state-map (kbd ":h") (kbd "C-M-a"))  ;; head
(define-key evil-normal-state-map (kbd ":t") (kbd "C-M-e"))  ;; tail

;; S式移動。  up down
(define-key evil-normal-state-map (kbd ":u") (kbd "C-M-u"))  ;; up
(define-key evil-normal-state-map (kbd ":d") (kbd "C-M-d"))  ;; down

;; S式のマーク。
(define-key evil-normal-state-map (kbd ": SPC") (kbd "C-M-SPC"))
;; (define-key evil-visual-state-map (kbd ": SPC") (kbd "C-M-SPC"))

;; S式のインデント揃え。
(define-key evil-normal-state-map (kbd ":\\") (kbd "C-M-\\"))

;; カット・コピー・ヤンク。
;; (define-key evil-normal-state-map (kbd ":x") (kbd "dd"))
(define-key evil-visual-state-map (kbd ":x") 'evil-delete)
(define-key evil-normal-state-map (kbd ":c") (kbd "yw"))
(define-key evil-normal-state-map (kbd ":y") (kbd "p"))

;;(define-key evil-visual-state-map (kbd ":x") (kbd "dd"))
(define-key evil-visual-state-map (kbd ":x") 'evil-delete)
(define-key evil-visual-state-map (kbd ":c") (kbd "yw"))
(define-key evil-visual-state-map (kbd ":y") (kbd "p"))

;; 選択範囲。
(define-key evil-normal-state-map (kbd ":v1") (kbd "v"))
(define-key evil-normal-state-map (kbd ":v2") (kbd "V"))
(define-key evil-normal-state-map (kbd ":v3") (kbd "C-v"))

;; 画面分割。
(define-key evil-normal-state-map (kbd ":0") (kbd "C-x 0"))
(define-key evil-normal-state-map (kbd ":1") (kbd "C-x 1"))
(define-key evil-normal-state-map (kbd ":2") (kbd "C-x 2"))
(define-key evil-normal-state-map (kbd ":3") (kbd "C-x 3"))

;; 画面の移動。
(define-key evil-normal-state-map (kbd "C-w") (kbd "C-x o"))
(define-key evil-insert-state-map (kbd "C-w") (kbd "C-x o"))
(define-key evil-visual-state-map (kbd "C-w") (kbd "C-x o"))
(define-key evil-operator-state-map (kbd "C-w") (kbd "C-x o"))
(define-key evil-replace-state-map (kbd "C-w") (kbd "C-x o"))
(define-key evil-motion-state-map (kbd "C-w") (kbd "C-x o"))
(define-key evil-emacs-state-map  (kbd "C-w") (kbd "C-x o"))

;; (define-key evil-normal-state-map (kbd ":o") (kbd "C-x o"))
;; (define-key evil-insert-state-map (kbd ":o") (kbd "C-x o"))
;; (define-key evil-visual-state-map (kbd ":o") (kbd "C-x o"))
;; (define-key evil-operator-state-map (kbd ":o") (kbd "C-x o"))
;; (define-key evil-replace-state-map (kbd ":o") (kbd "C-x o"))
;; (define-key evil-motion-state-map (kbd ":o") (kbd "C-x o"))
;; (define-key evil-emacs-state-map  (kbd ":o") (kbd "C-x o"))

;; 各ステートとEmacsステートの切り替え。
;; (define-key evil-normal-state-map (kbd ":z") (kbd "C-z"))
;; (define-key evil-insert-state-map (kbd ":z") (kbd "C-z"))
;; (define-key evil-visual-state-map (kbd ":z") (kbd "C-z"))
;; (define-key evil-operator-state-map (kbd ":z") (kbd "C-z"))
;; (define-key evil-replace-state-map (kbd ":z") (kbd "C-z"))
;; (define-key evil-motion-state-map (kbd ":z") (kbd "C-z"))
;; (define-key evil-emacs-state-map  (kbd ":z") (kbd "C-z"))

;; goshの起動。
(define-key evil-normal-state-map (kbd ":g1") 'katsue-gosh1)
(define-key evil-normal-state-map (kbd ":g2") 'katsue-gosh2)

;; Evilのステートごとの勝沼かつえカラーテーマの背景色の色分け。
(add-hook 'evil-normal-state-entry-hook
           '(lambda ()
             (with-current-buffer (window-buffer)
              (buffer-face-set '(:background "Grey69")))))

(add-hook 'evil-insert-state-entry-hook
           '(lambda ()
             (with-current-buffer (window-buffer)
              (buffer-face-set '(:background "#e7e7e7")))))

(add-hook 'evil-visual-state-entry-hook
           '(lambda ()
             (with-current-buffer (window-buffer)
              (buffer-face-set '(:background "#e7e7e7")))))

(add-hook 'evil-operator-state-entry-hook
           '(lambda ()
             (with-current-buffer (window-buffer)
              (buffer-face-set '(:background "#e7e7e7")))))

(add-hook 'evil-replace-state-entry-hook
           '(lambda ()
             (with-current-buffer (window-buffer)
              (buffer-face-set '(:background "#e7e7e7")))))

(add-hook 'evil-motion-state-entry-hook
           '(lambda ()
             (with-current-buffer (window-buffer)
              (buffer-face-set '(:background "#e7e7e7")))))

(add-hook 'evil-emacs-state-entry-hook
           '(lambda ()
             (with-current-buffer (window-buffer)
              (buffer-face-set '(:background "#e7e7e7")))))

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

;; Powerline-evil

;;; powerline-evil-themes.el --- Evil themes for Powerline

;; Copyright (C) 2014 Chris Johnson

;; Author: Chris Johnson  chris@christophermjohnson.net
;; Version: 1.0
;; Keywords: evil, mode-line, powerline
;; URL: http://github.com/johnson-christopher/powerline-evil/

;;; Commentary:
;;
;; Evil themes for Powerline.
;; Included themes: evil-center-color, evil-vim, and evil-vim-color.
;;

;;; Code:

;;;###autoload
(defun powerline-evil-center-color-theme ()
  "Powerline's center-evil them with the evil state in color."
  (interactive)
  (setq-default mode-line-format
        '("%e"
          (:eval
           (let* ((active (powerline-selected-window-active))
                  (mode-line (if active 'mode-line 'mode-line-inactive))
                  (face1 (if active 'powerline-active1 'powerline-inactive1))
                  (face2 (if active 'powerline-active2 'powerline-inactive2))
                  (separator-left (intern (format "powerline-%s-%s"
                                                  (powerline-current-separator)
                                                  (car powerline-default-separator-dir))))
                  (separator-right (intern (format "powerline-%s-%s"
                                                   (powerline-current-separator)
                                                   (cdr powerline-default-separator-dir))))
                  (lhs (list (powerline-raw "%*" nil 'l)
                             (powerline-buffer-size nil 'l)
                             (powerline-buffer-id nil 'l)
                             (powerline-raw " ")
                             (funcall separator-left mode-line face1)
                             (powerline-narrow face1 'l)
                             (powerline-vc face1)))
                  (rhs (list (powerline-raw global-mode-string face1 'r)
                             (powerline-raw "%4l" face1 'r)
                             (powerline-raw ":" face1)
                             (powerline-raw "%3c" face1 'r)
                             (funcall separator-right face1 mode-line)
                             (powerline-raw " ")
                             (powerline-raw "%6p" nil 'r)
                             (powerline-hud face2 face1)))
                  (center (append (list (powerline-raw " " face1)
                                        (funcall separator-left face1 face2)
                                        (when (boundp 'erc-modified-channels-object)
                                          (powerline-raw erc-modified-channels-object face2 'l))
                                        (powerline-major-mode face2 'l)
                                        (powerline-process face2)
                                        (powerline-raw " " face2))
                                  (let ((evil-face (powerline-evil-face)))
                                    (if (split-string (format-mode-line minor-mode-alist))
                                        (append (if evil-mode
                                                    (list (funcall separator-right face2 evil-face)
                                                          (powerline-raw (powerline-evil-tag) evil-face 'l)
                                                          (powerline-raw " " evil-face)
                                                          (funcall separator-left evil-face face2)))
                                                (list (powerline-minor-modes face2 'l)
                                                      (powerline-raw " " face2)
                                                      (funcall separator-right face2 face1)))
                                      (list (powerline-raw (powerline-evil-tag) evil-face)
                                            (funcall separator-right evil-face face1)))))))
             (concat (powerline-render lhs)
                     (powerline-fill-center face1 (/ (powerline-width center) 2.0))
                     (powerline-render center)
                     (powerline-fill face1 (powerline-width rhs))
                     (powerline-render rhs)))))))

;;;###autoload
(defun powerline-evil-vim-theme ()
  "Powerline's Vim-like mode-line with evil state at the beginning."
  (interactive)
  (setq-default mode-line-format
                '("%e"
                  (:eval
                   (let* ((active (powerline-selected-window-active))
                          (mode-line (if active 'mode-line 'mode-line-inactive))
                          (face1 (if active 'powerline-active1 'powerline-inactive1))
                          (face2 (if active 'powerline-active2 'powerline-inactive2))
                          (separator-left (intern (format "powerline-%s-%s"
                                                          (powerline-current-separator)
                                                          (car powerline-default-separator-dir))))
                          (separator-right (intern (format "powerline-%s-%s"
                                                           (powerline-current-separator)
                                                           (cdr powerline-default-separator-dir))))
                          (lhs (list (if evil-mode
                                         (powerline-raw (powerline-evil-tag) mode-line))
                                     (powerline-buffer-id `(mode-line-buffer-id ,mode-line) 'l)
                                     (powerline-raw "[" mode-line 'l)
                                     (powerline-major-mode mode-line)
                                     (powerline-process mode-line)
                                     (powerline-raw "]" mode-line)
                                     (when (buffer-modified-p)
                                       (powerline-raw "[+]" mode-line))
                                     (when buffer-read-only
                                       (powerline-raw "[RO]" mode-line))
                                     (powerline-raw "[%z]" mode-line)
                                     ;; (powerline-raw (concat "[" (mode-line-eol-desc) "]") mode-line)
                                     (when (and (boundp 'which-func-mode) which-func-mode)
                                       (powerline-raw which-func-format nil 'l))
                                     (when (boundp 'erc-modified-channels-object)
                                       (powerline-raw erc-modified-channels-object face1 'l))
                                     (powerline-raw "[" mode-line 'l)
                                     (powerline-minor-modes mode-line) (powerline-raw "%n" mode-line)
                                     (powerline-raw "]" mode-line)
                                     (when (and vc-mode buffer-file-name)
                                       (let ((backend (vc-backend buffer-file-name)))
                                         (when backend
                                           (concat (powerline-raw "[" mode-line 'l)
                                                   (powerline-raw (format "%s / %s" backend (vc-working-revision buffer-file-name backend)))
                                                   (powerline-raw "]" mode-line)))))))
                          (rhs (list (powerline-raw '(10 "%i"))
                                     (powerline-raw global-mode-string mode-line 'r)
                                     (powerline-raw "%l," mode-line 'l)
                                     (powerline-raw (format-mode-line '(10 "%c")))
                                     (powerline-raw (replace-regexp-in-string  "%" "%%" (format-mode-line '(-3 "%p"))) mode-line 'r))))
                     (concat (powerline-render lhs)
                             (powerline-fill mode-line (powerline-width rhs))
                             (powerline-render rhs)))))))

;;;###autoload
(defun powerline-evil-vim-color-theme ()
  "Powerline's Vim-like mode-line with evil state at the beginning in color."
  (interactive)
  (setq-default mode-line-format
                '("%e"
                  (:eval
                   (let* ((active (powerline-selected-window-active))
                          (mode-line (if active 'mode-line 'mode-line-inactive))
                          (face1 (if active 'powerline-active1 'powerline-inactive1))
                          (face2 (if active 'powerline-active2 'powerline-inactive2))
                          (separator-left (intern (format "powerline-%s-%s"
                                                          (powerline-current-separator)
                                                          (car powerline-default-separator-dir))))
                          (separator-right (intern (format "powerline-%s-%s"
                                                           (powerline-current-separator)
                                                           (cdr powerline-default-separator-dir))))
                          (lhs (list (let ((evil-face (powerline-evil-face)))
                                       (if evil-mode
                                           (powerline-raw (powerline-evil-tag) evil-face)))
                                     (powerline-buffer-id `(mode-line-buffer-id ,mode-line) 'l)
                                     (powerline-raw "[" mode-line 'l)
                                     (powerline-major-mode mode-line)
                                     (powerline-process mode-line)
                                     (powerline-raw "]" mode-line)
                                     (when (buffer-modified-p)
                                       (powerline-raw "[+]" mode-line))
                                     (when buffer-read-only
                                       (powerline-raw "[RO]" mode-line))
                                     (powerline-raw "[%z]" mode-line)
                                     ;; (powerline-raw (concat "[" (mode-line-eol-desc) "]") mode-line)
                                     (when (and (boundp 'which-func-mode) which-func-mode)
                                       (powerline-raw which-func-format nil 'l))
                                     (when (boundp 'erc-modified-channels-object)
                                       (powerline-raw erc-modified-channels-object face1 'l))
                                     (powerline-raw "[" mode-line 'l)
                                     (powerline-minor-modes mode-line)
                                     (powerline-raw "%n" mode-line)
                                     (powerline-raw "]" mode-line)
                                     (when (and vc-mode buffer-file-name)
                                       (let ((backend (vc-backend buffer-file-name)))
                                         (when backend
                                           (concat (powerline-raw "[" mode-line 'l)
                                                   (powerline-raw (format "%s / %s" backend (vc-working-revision buffer-file-name backend)))
                                                   (powerline-raw "]" mode-line)))))))
                          (rhs (list (powerline-raw '(10 "%i"))
                                     (powerline-raw global-mode-string mode-line 'r)
                                     (powerline-raw "%l," mode-line 'l)
                                     (powerline-raw (format-mode-line '(10 "%c")))
                                     (powerline-raw (replace-regexp-in-string  "%" "%%" (format-mode-line '(-3 "%p"))) mode-line 'r))))
                     (concat (powerline-render lhs)
                             (powerline-fill mode-line (powerline-width rhs))
                             (powerline-render rhs)))))))

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

;;;###autoload
(defun powerline-evil-center-katsue-color-theme ()
  "Powerline's center-evil them with the evil state in color."
  (interactive)
  (setq-default mode-line-format
        '("%e"
          (:eval
           (let* ((active (powerline-selected-window-active))
                  (mode-line (if active 'mode-line 'mode-line-inactive))
                  (face1 (if active 'powerline-active1 'powerline-inactive1))
                  (face2 (if active 'powerline-active2 'powerline-inactive2))
                  (separator-left (intern (format "powerline-%s-%s"
                                                  (powerline-current-separator)
                                                  (car powerline-default-separator-dir))))
                  (separator-right (intern (format "powerline-%s-%s"
                                                   (powerline-current-separator)
                                                   (cdr powerline-default-separator-dir))))
                  (lhs (list
                             (powerline-raw "%*" nil 'l)
                             ;; (powerline-buffer-size nil 'l)
                             (powerline-buffer-id nil 'l)
                             (powerline-raw " ")
                             (funcall separator-left mode-line face1)
                             ;; (powerline-narrow face2 'l)
                             ;; (powerline-vc face2)
                             ))
                  (rhs (list
                             ;; (powerline-raw global-mode-string face2 'r)
                             (powerline-raw "%4l" mode-line 'r)
                             (powerline-raw ":" mode-line)
                             (powerline-raw "%3c" mode-line 'r)
                             ;; (funcall separator-right face1 mode-line)
                             ;; (powerline-raw " ")
                             ;; (powerline-raw "%6p" nil 'r)
                             ;; (powerline-hud face2 face1)
                             ))
                  (center (append (list (powerline-raw " " face1)
                                        (funcall separator-left face1 face2)
                                        (when (boundp 'erc-modified-channels-object)
                                          (powerline-raw erc-modified-channels-object face2 'l))
                                        (powerline-major-mode face2 'l)
                                        (powerline-process face2)
                                        (powerline-raw " " face2))
                                  (let ((evil-face (powerline-evil-face)))
                                    (if (split-string (format-mode-line minor-mode-alist))
                                        (append (if evil-mode
                                                    (list (funcall separator-right face2 evil-face)
                                                          (powerline-raw (powerline-evil-tag) evil-face 'l)
                                                          (powerline-raw " " evil-face)
                                                          (funcall separator-left evil-face face2)))
                                                (list (powerline-minor-modes face2 'l)
                                                      (powerline-raw " " face2)
                                                      (funcall separator-right face2 face1)
                                                      (powerline-raw " " face1)
                                                      (funcall separator-right face1 mode-line)))
                                      (list (powerline-raw (powerline-evil-tag) evil-face)
                                            (funcall separator-right evil-face face1)))))))
             (concat (powerline-render lhs)
                     ;; (powerline-fill-center face1 (/ (powerline-width center) 2.0))
                     (powerline-render center)
                     ;; (powerline-fill face1 (powerline-width rhs))
                     (powerline-render rhs)))))))

;;;###autoload
(defun powerline-evil-vim-katsue-theme ()
  "Powerline's Vim-like mode-line with evil state at the beginning."
  (interactive)
  (setq-default mode-line-format
                '("%e"
                  (:eval
                   (let* ((active (powerline-selected-window-active))
                          (mode-line (if active 'mode-line 'mode-line-inactive))
                          (face1 (if active 'powerline-active1 'powerline-inactive1))
                          (face2 (if active 'powerline-active2 'powerline-inactive2))
                          (separator-left (intern (format "powerline-%s-%s"
                                                          (powerline-current-separator)
                                                          (car powerline-default-separator-dir))))
                          (separator-right (intern (format "powerline-%s-%s"
                                                           (powerline-current-separator)
                                                           (cdr powerline-default-separator-dir))))
                          (lhs (list (if evil-mode
                                         (powerline-raw (powerline-evil-tag) mode-line))
                                     (powerline-buffer-id `(mode-line-buffer-id ,mode-line) 'l)
                                     (powerline-raw "[" mode-line 'l)
                                     (powerline-major-mode mode-line)
                                     (powerline-process mode-line)
                                     (powerline-raw "]" mode-line)
                                     ;; (when (buffer-modified-p)
                                     ;;   (powerline-raw "[+]" mode-line))
                                     (if (buffer-modified-p)
                                       (powerline-raw "[+]" mode-line)
                                       (powerline-raw "[-]" mode-line))
                                     ;; (when buffer-read-only
                                     ;;   (powerline-raw "[RO]" mode-line))
                                     (if buffer-read-only
                                       (powerline-raw "[R]" mode-line)
                                       (powerline-raw "[-]" mode-line))
                                     (powerline-raw "[%z]" mode-line)
                                     ;; (powerline-raw (concat "[" (mode-line-eol-desc) "]") mode-line)
                                     (when (and (boundp 'which-func-mode) which-func-mode)
                                       (powerline-raw which-func-format nil 'l))
                                     (when (boundp 'erc-modified-channels-object)
                                       (powerline-raw erc-modified-channels-object face1 'l))
                                     (powerline-raw "[" mode-line 'l)
                                     (powerline-minor-modes mode-line)
                                     (powerline-raw "%n" mode-line)
                                     (powerline-raw "]" mode-line)
                                     (when (and vc-mode buffer-file-name)
                                       (let ((backend (vc-backend buffer-file-name)))
                                         (when backend
                                           (concat (powerline-raw "[" mode-line 'l)
                                                   (powerline-raw (format "%s / %s" backend (vc-working-revision buffer-file-name backend)))
                                                   (powerline-raw "]" mode-line)))))))
                          (rhs (list
                                     ;; (powerline-raw '(10 "%i"))
                                     ;; (powerline-raw global-mode-string mode-line 'r)
                                     (powerline-raw "%l," mode-line 'l)
                                     (powerline-raw (format-mode-line '(10 "%c")))
                                     ;; (powerline-raw (replace-regexp-in-string  "%" "%%" (format-mode-line '(-3 "%p"))) mode-line 'r)
                                     )))
                     (concat (powerline-render lhs)
                             ;; (powerline-fill mode-line (powerline-width rhs))
                             (powerline-render rhs)
                             ))))))

;;;###autoload
(defun powerline-evil-vim-katsue-color-theme ()
  "Powerline's Vim-like mode-line with evil state at the beginning in color."
  (interactive)
  (setq-default mode-line-format
                '("%e"
                  (:eval
                   (let* ((active (powerline-selected-window-active))
                          (mode-line (if active 'mode-line 'mode-line-inactive))
                          (face1 (if active 'powerline-active1 'powerline-inactive1))
                          (face2 (if active 'powerline-active2 'powerline-inactive2))
                          (separator-left (intern (format "powerline-%s-%s"
                                                          (powerline-current-separator)
                                                          (car powerline-default-separator-dir))))
                          (separator-right (intern (format "powerline-%s-%s"
                                                           (powerline-current-separator)
                                                           (cdr powerline-default-separator-dir))))
                          (lhs (list
                                     (powerline-raw " " mode-line)

                                     ;; (funcall separator-right mode-line (powerline-evil-face))
                                     ;; (funcall separator-right (powerline-evil-face) mode-line)
                                     (funcall separator-right mode-line (powerline-evil-face))

                                     ;; (funcall separator-left mode-line (powerline-evil-face))
                                     ;; (funcall separator-left (powerline-evil-face) mode-line)
                                     ;; (funcall separator-left mode-line (powerline-evil-face))

                                     ;; (powerline-raw " " (powerline-evil-face))

                                     (let ((evil-face (powerline-evil-face)))
                                       (if evil-mode
                                           (powerline-raw (powerline-evil-tag) evil-face)))

                                     ;; (powerline-raw " " (powerline-evil-face))

                                     (funcall separator-left (powerline-evil-face) mode-line)
                                     ;; (funcall separator-left mode-line (powerline-evil-face))
                                     ;; (funcall separator-left (powerline-evil-face) mode-line)

                                     (powerline-buffer-id `(mode-line-buffer-id ,mode-line) 'l)
                                     ;; (powerline-raw " " mode-line)
                                     ;; (funcall separator-left mode-line (powerline-evil-face))
                                     ;; (powerline-raw " " (powerline-evil-face))
                                     ;; (funcall separator-left (powerline-evil-face) mode-line)
                                     (powerline-raw "[" mode-line 'l)
                                     (powerline-major-mode mode-line)
                                     (powerline-process mode-line)
                                     (powerline-raw "]" mode-line)
                                     ;; (when (buffer-modified-p)
                                     ;;   (powerline-raw "[+]" mode-line))
                                     (if (buffer-modified-p)
                                       (powerline-raw "[+]" mode-line)
                                       (powerline-raw "[-]" mode-line))
                                     ;; (when buffer-read-only
                                     ;;   (powerline-raw "[RO]" mode-line))
                                     (if buffer-read-only
                                       (powerline-raw "[R]" mode-line)
                                       (powerline-raw "[-]" mode-line))
                                     (powerline-raw "[%z]" mode-line)
                                     ;; (powerline-raw (concat "[" (mode-line-eol-desc) "]") mode-line)
                                     (when (and (boundp 'which-func-mode) which-func-mode)
                                       (powerline-raw which-func-format nil 'l))
                                     (when (boundp 'erc-modified-channels-object)
                                       (powerline-raw erc-modified-channels-object face1 'l))
                                     (powerline-raw "[" mode-line 'l)
                                     (powerline-minor-modes mode-line)
                                     (powerline-raw "%n" mode-line)
                                     (powerline-raw "]" mode-line)
                                     (when (and vc-mode buffer-file-name)
                                       (let ((backend (vc-backend buffer-file-name)))
                                         (when backend
                                           (concat (powerline-raw "[" mode-line 'l)
                                                   (powerline-raw (format "%s / %s" backend (vc-working-revision buffer-file-name backend)))
                                                   (powerline-raw "]" mode-line)))))))
                          (rhs (list
                                     ;; (powerline-raw '(10 "%i"))
                                     ;; (powerline-raw global-mode-string mode-line 'r)
                                     ;; (powerline-raw " " mode-line)
                                     ;; (funcall separator-left mode-line (powerline-evil-face))
                                     ;; (powerline-raw " " (powerline-evil-face))
                                     ;; (funcall separator-left (powerline-evil-face) mode-line)
                                     ;; (powerline-raw "   " mode-line 'l)
                                     (powerline-raw "%l," mode-line 'l)
                                     (powerline-raw (format-mode-line '(10 "%c")))
                                     ;; (powerline-raw (replace-regexp-in-string  "%" "%%" (format-mode-line '(-3 "%p"))) mode-line 'r)
                                     )))
                     (concat (powerline-render lhs)
                             ;; (powerline-fill mode-line (powerline-width rhs))
                             (powerline-render rhs)
                             ))))))

(provide 'powerline-evil-themes)
;;; powerline-evil-themes.el ends here

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

;;; powerline-evil.el --- Utilities for better Evil support for Powerline

;; Copyright (C) 2014 Chris Johnson

;; Author: Chris Johnson  chris@christophermjohnson.net
;; Version: 1.0
;; Package-Requires: ((evil "1.0.8") (powerline "2.3"))
;; Keywords: evil, mode-line, powerline
;; URL: http://github.com/johnson-christopher/powerline-evil/

;;; Commentary:
;;
;; Utilities for better Evil support for Powerline and a few extra themes.
;;

;;; Code:

;; (require 'evil)
(require 'powerline)
;; (require 'powerline-evil-themes)

(defcustom powerline-evil-tag-style 'visual-expanded
  "The style to use for displaying the evil state tag.

Valid Values: standard, verbose, visual-expanded"
  :group 'powerline
  :type '(choice (const standard)
                 (const verbose)
                 (const visual-expanded)))

(defface powerline-evil-base-face
  '((t (:foreground "white" :inherit mode-line)))
  "Base face for powerline evil faces."
  :group 'powerline)

(defface powerline-evil-normal-face
  ;; '((t (:background "green" :inherit powerline-evil-base-face)))
  ;; '((t (:background "darkgreen" :inherit powerline-evil-base-face)))
  ;; '((t (:background "#238534" :inherit powerline-evil-base-face)))
  '((t (:background "#288b39" :inherit powerline-evil-base-face)))
  "Powerline face for evil NORMAL state."
  :group 'powerline)

(defface powerline-evil-insert-face
  '((t (:background "blue" :inherit powerline-evil-base-face)))
  "Powerline face for evil INSERT state."
  :group 'powerline)

(defface powerline-evil-visual-face
  ;; '((t (:background "orange" :inherit powerline-evil-base-face)))
  '((t (:background "darkcyan" :inherit powerline-evil-base-face)))
  "Powerline face for evil VISUAL state."
  :group 'powerline)

(defface powerline-evil-operator-face
  '((t (:background "cyan" :inherit powerline-evil-operator-face)))
  "Powerline face for evil OPERATOR state."
  :group 'powerline)

(defface powerline-evil-replace-face
  '((t (:background "red" :inherit powerline-evil-base-face)))
  "Powerline face for evil REPLACE state."
  :group 'powerline)

(defface powerline-evil-motion-face
  '((t (:background "magenta" :inherit powerline-evil-base-face)))
  "Powerline face for evil MOTION state."
  :group 'powerline)

(defface powerline-evil-emacs-face
  '((t (:background "violet" :inherit powerline-evil-base-face)))
  "Powerline face for evil EMACS state."
  :group 'powerline)


;;;###autoload
(defun powerline-evil-face ()
  "Function to select appropriate face based on `evil-state'."
  (let* ((face (intern (concat "powerline-evil-" (symbol-name evil-state) "-face"))))
    (if (facep face) face nil)))

(defun powerline-evil-tag ()
  "Get customized tag value for current evil state."
  (let* ((visual-block (and (evil-visual-state-p)
                            (eq evil-visual-selection 'block)))
         (visual-line (and (evil-visual-state-p)
                           (eq evil-visual-selection 'line))))
    (cond ((eq powerline-evil-tag-style 'visual-expanded)
           (cond (visual-block " +V+ ")
                 (visual-line " -V- ")
                 (t evil-mode-line-tag)))
          ((eq powerline-evil-tag-style 'verbose)
           (upcase (concat (symbol-name evil-state)
                           (cond (visual-block " BLOCK")
                                 (visual-line " LINE")))))
          (t evil-mode-line-tag))))

(provide 'powerline-evil)
;;; powerline-evil.el ends here

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

(require 'powerline-evil)

;; (powerline-evil-center-color-theme)
;; (powerline-evil-vim-theme)
;; (powerline-evil-vim-color-theme)

;; (powerline-evil-center-katsue-color-theme)
;; (powerline-evil-vim-katsue-theme)
(powerline-evil-vim-katsue-color-theme)

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