2015-12-13 20:18:28 +00:00
|
|
|
;;; powerline-themes.el --- Themes for Powerline
|
|
|
|
|
|
|
|
;; Copyright (C) 2012-2013 Donald Ephraim Curtis
|
|
|
|
;; Copyright (C) 2013 Jason Milkins
|
|
|
|
;; Copyright (C) 2012 Nicolas Rougier
|
|
|
|
|
|
|
|
;; Author: Donald Ephraim Curtis <dcurtis@milkbox.net>
|
|
|
|
;; URL: http://github.com/milkypostman/powerline/
|
|
|
|
;; Version: 2.0
|
|
|
|
;; Keywords: mode-line
|
|
|
|
|
|
|
|
;;; Commentary:
|
|
|
|
;;
|
|
|
|
;; Themes for Powerline.
|
|
|
|
;; Included themes: default, center, center-evil, vim, and nano.
|
|
|
|
;;
|
|
|
|
|
|
|
|
;;; Code:
|
|
|
|
|
|
|
|
(require 'cl-lib)
|
|
|
|
|
|
|
|
(defface powerline-active3 '((t (:background "#afd700"
|
|
|
|
:foreground "#008700"
|
|
|
|
:inherit mode-line)))
|
|
|
|
"Powerline face 3."
|
|
|
|
:group 'powerline)
|
|
|
|
|
|
|
|
(defface powerline-inactive3 '((t (:foreground "grey90" :background "grey30" :inherit mode-line)))
|
|
|
|
"Powerline face 3."
|
|
|
|
:group 'powerline)
|
|
|
|
|
|
|
|
(defun check-in-list (list elems)
|
|
|
|
(catch 'tag
|
|
|
|
(dolist (elem elems)
|
|
|
|
(if (member elem list)
|
|
|
|
(throw 'tag elem)))))
|
|
|
|
|
|
|
|
;; Get a face for the current input mode and
|
|
|
|
;; desired feature. Defaults to "powerline-FEATURE-normal"
|
|
|
|
(defun pl/get-vim-face (face)
|
|
|
|
"Find whether or not FACE is a valid face,
|
2016-11-21 23:32:00 +00:00
|
|
|
and if not, try to get the corresponding
|
2015-12-13 20:18:28 +00:00
|
|
|
'-normal' face "
|
|
|
|
(let* ((face (replace-regexp-in-string "iedit-insert" "iedit" face))
|
|
|
|
(split-face-name nil) (concat-face-name nil) ; some variables we'll use later on
|
|
|
|
(report-wrong-prefix ; Our error reporter. Because we don't want to return nil.
|
|
|
|
(lambda () (let ((prefix (subseq (or split-face-name (split-string face "-")) 0 2)))
|
|
|
|
(error "There's no vim face with the prefix: %s"
|
|
|
|
(mapconcat 'identity prefix "-"))))))
|
2016-11-21 23:32:00 +00:00
|
|
|
|
2015-12-13 20:18:28 +00:00
|
|
|
(cond ((facep face) ; If our face is a FACE (even if it's not a powerline face)
|
|
|
|
(intern face)) ; just intern the string and send it back
|
|
|
|
|
|
|
|
;; Otherwise.
|
2016-11-21 23:32:00 +00:00
|
|
|
;; Are we a list of only three items?
|
|
|
|
;; Is the first item a string that is 'powerline'?
|
|
|
|
;; Is the last element not 'normal'? (If it was valid, it would have already passed)
|
2015-12-13 20:18:28 +00:00
|
|
|
((and (setf split-face-name (split-string face "-"))
|
|
|
|
(string-equal (cl-first split-face-name) "powerline")
|
|
|
|
(not (string-equal (cl-third split-face-name) "normal")))
|
|
|
|
|
|
|
|
;; If we passed all the tests above, then we try to create a valid
|
|
|
|
;; powerline-face symbol
|
|
|
|
(progn
|
|
|
|
(setf (cl-third split-face-name) "normal")
|
|
|
|
|
|
|
|
;; Re-build our string from the split pieces
|
|
|
|
(setf concat-face-name (mapconcat 'identity split-face-name "-"))
|
|
|
|
|
|
|
|
;; And do one final check to make sure it's a face
|
|
|
|
;; before sending it off
|
|
|
|
;; (message "Concatenated name: %s" concat-face-name)
|
|
|
|
(if (facep concat-face-name)
|
|
|
|
(intern concat-face-name)
|
|
|
|
(report-wrong-prefix))))
|
|
|
|
|
|
|
|
;; Always fallthrough to the error
|
|
|
|
(t (report-wrong-prefix)))))
|
|
|
|
|
|
|
|
|
|
|
|
(defmacro pl/vim-face (name state)
|
|
|
|
`(pl/get-vim-face (format "powerline-%s-%s" ,name ,state)))
|
|
|
|
|
|
|
|
(require 'vim-colors)
|
|
|
|
(defun powerline-vimish-theme ()
|
|
|
|
"Setup the default mode-line."
|
2016-11-21 23:32:00 +00:00
|
|
|
;; Populate our faces
|
2015-12-13 20:18:28 +00:00
|
|
|
(mapcar 'eval (powerline--generate-facedefs powerline-vim-colors-alist))
|
|
|
|
(set-face-attribute 'mode-line-inactive nil
|
|
|
|
:background (face-background (pl/vim-face "SPLIT" "inactive")) :underline nil
|
|
|
|
:overline nil :box nil)
|
|
|
|
(interactive)
|
|
|
|
(setq-default mode-line-format
|
|
|
|
'("%e"
|
|
|
|
(:eval
|
|
|
|
(let* ((active (powerline-selected-window-active))
|
|
|
|
(harddiv-left (intern (format "powerline-%s-%s"
|
|
|
|
(powerline-current-separator)
|
|
|
|
(car powerline-default-separator-dir))))
|
|
|
|
(harddiv-right (intern (format "powerline-%s-%s"
|
|
|
|
(powerline-current-separator)
|
|
|
|
(cdr powerline-default-separator-dir))))
|
|
|
|
(softdiv-left (cl-case powerline-default-separator
|
|
|
|
((utf-8 arrow) "")
|
|
|
|
((bar nil) "|")
|
|
|
|
(brace "}")
|
|
|
|
(t ">")))
|
|
|
|
(softdiv-right (cl-case powerline-default-separator
|
|
|
|
((utf-8 arrow) "")
|
|
|
|
((bar nil) "|")
|
|
|
|
(brace "{")
|
|
|
|
(t "<")))
|
|
|
|
(editor-state (cond ((and active (boundp 'evil-mode) evil-mode)
|
|
|
|
(symbol-name evil-state))
|
|
|
|
(active "active")
|
|
|
|
(t "inactive")))
|
|
|
|
(state-indicator-face (pl/vim-face "state_indicator" editor-state))
|
|
|
|
(vc-face (pl/vim-face "branch" editor-state))
|
|
|
|
(fileinfo-face (pl/vim-face "fileinfo" editor-state))
|
|
|
|
(split-face (pl/vim-face "SPLIT" editor-state))
|
|
|
|
|
|
|
|
(fileformat-face (pl/vim-face "fileformat" editor-state))
|
|
|
|
(fileencoding-face (pl/vim-face "fileencoding" editor-state))
|
|
|
|
(filetype-face (pl/vim-face "filetype" editor-state))
|
|
|
|
|
|
|
|
(scrollpercent-face (pl/vim-face "scrollpercent" editor-state))
|
|
|
|
(lineinfo-face (pl/vim-face "lineinfo" editor-state))
|
2016-11-21 23:32:00 +00:00
|
|
|
|
2015-12-13 20:18:28 +00:00
|
|
|
(input (split-string (symbol-name buffer-file-coding-system) "-"))
|
|
|
|
(platform (check-in-list input '("mac" "unix" "dos")))
|
|
|
|
(encoding (mapconcat 'identity (delete platform input) "-"))
|
2016-11-21 23:32:00 +00:00
|
|
|
|
2015-12-13 20:18:28 +00:00
|
|
|
;; Left hand side
|
|
|
|
(lhs (list
|
|
|
|
(powerline-raw (format " %s " (upcase editor-state)) state-indicator-face)
|
|
|
|
(funcall harddiv-left state-indicator-face vc-face)
|
|
|
|
(when (and (buffer-file-name (current-buffer)) vc-mode)
|
|
|
|
(concat
|
|
|
|
(powerline-raw (downcase (format-mode-line '(vc-mode vc-mode))) vc-face 'r)
|
|
|
|
(powerline-raw softdiv-left vc-face)))
|
|
|
|
(powerline-buffer-id fileinfo-face 'l)
|
|
|
|
(powerline-raw "%*" fileinfo-face 'lr)
|
|
|
|
(powerline-narrow fileinfo-face 'l)
|
|
|
|
(funcall harddiv-left fileinfo-face split-face)))
|
|
|
|
|
|
|
|
;; Right Hand Side
|
|
|
|
(rhs (list
|
|
|
|
(powerline-raw global-mode-string split-face 'r)
|
|
|
|
(funcall harddiv-right split-face fileformat-face)
|
|
|
|
(concat
|
|
|
|
(when (not (null platform))
|
|
|
|
(concat (powerline-raw platform fileformat-face 'r)
|
|
|
|
(powerline-raw softdiv-right fileformat-face)))
|
|
|
|
(powerline-raw encoding fileencoding-face 'lr)
|
|
|
|
(powerline-raw softdiv-right fileencoding-face))
|
|
|
|
(powerline-major-mode filetype-face 'lr)
|
|
|
|
(funcall harddiv-right filetype-face scrollpercent-face)
|
|
|
|
(powerline-raw "%p" scrollpercent-face 'lr)
|
|
|
|
(funcall harddiv-right scrollpercent-face lineinfo-face)
|
|
|
|
(powerline-raw "%l" lineinfo-face 'l)
|
|
|
|
(powerline-raw ":" lineinfo-face 'lr)
|
|
|
|
(powerline-raw "%c" lineinfo-face 'r))))
|
|
|
|
|
|
|
|
(when active
|
|
|
|
(set-face-attribute 'mode-line nil :underline nil :overline nil :box nil))
|
|
|
|
(if (and (null powerline-default-separator)
|
|
|
|
(null (face-attribute 'powerline-SPLIT-normal :overline)))
|
|
|
|
nil
|
|
|
|
nil)
|
|
|
|
(concat (powerline-render lhs)
|
|
|
|
(powerline-fill split-face (powerline-width rhs))
|
|
|
|
(powerline-render rhs)))))))
|
|
|
|
|
|
|
|
(provide 'vim-powerline-theme)
|
|
|
|
|
|
|
|
;;; powerline-themes.el ends here
|