| @ -1,91 +0,0 @@ | |||||
| ;;; powerline-autoloads.el --- automatically extracted autoloads | |||||
| ;; | |||||
| ;;; Code: | |||||
| (add-to-list 'load-path (or (file-name-directory #$) (car load-path))) | |||||
| ;;;### (autoloads nil "powerline" "powerline.el" (21569 53234 0 0)) | |||||
| ;;; Generated autoloads from powerline.el | |||||
| (autoload 'powerline-hud "powerline" "\ | |||||
| Return an XPM of relative buffer location using FACE1 and FACE2 of optional WIDTH. | |||||
| \(fn FACE1 FACE2 &optional WIDTH)" nil nil) | |||||
| (autoload 'powerline-mouse "powerline" "\ | |||||
| Return mouse handler for CLICK-GROUP given CLICK-TYPE and STRING. | |||||
| \(fn CLICK-GROUP CLICK-TYPE STRING)" nil nil) | |||||
| (autoload 'powerline-concat "powerline" "\ | |||||
| Concatonate STRINGS and pad sides by spaces. | |||||
| \(fn &rest STRINGS)" nil nil) | |||||
| (autoload 'defpowerline "powerline" "\ | |||||
| Create function NAME by wrapping BODY with powerline padding an propetization. | |||||
| \(fn NAME BODY)" nil t) | |||||
| (autoload 'powerline-raw "powerline" "\ | |||||
| Render STR as mode-line data using FACE and optionally PAD import on left (l) or right (r). | |||||
| \(fn STR &optional FACE PAD)" nil nil) | |||||
| (autoload 'powerline-fill "powerline" "\ | |||||
| Return empty space using FACE and leaving RESERVE space on the right. | |||||
| \(fn FACE RESERVE)" nil nil) | |||||
| (defpowerline powerline-major-mode (propertize (format-mode-line mode-name) 'mouse-face 'mode-line-highlight 'help-echo "Major mode\nmouse-1: Display major mode menu\nmouse-2: Show help for major mode\nmouse-3: Toggle minor modes" 'local-map (let ((map (make-sparse-keymap))) (define-key map [mode-line down-mouse-1] `(menu-item ,(purecopy "Menu Bar") ignore :filter (lambda (_) (mouse-menu-major-mode-map)))) (define-key map [mode-line mouse-2] 'describe-mode) (define-key map [mode-line down-mouse-3] mode-line-mode-menu) map))) | |||||
| (defpowerline powerline-minor-modes (mapconcat (lambda (mm) (propertize mm 'mouse-face 'mode-line-highlight 'help-echo "Minor mode\n mouse-1: Display minor mode menu\n mouse-2: Show help for minor mode\n mouse-3: Toggle minor modes" 'local-map (let ((map (make-sparse-keymap))) (define-key map [mode-line down-mouse-1] (powerline-mouse 'minor 'menu mm)) (define-key map [mode-line mouse-2] (powerline-mouse 'minor 'help mm)) (define-key map [mode-line down-mouse-3] (powerline-mouse 'minor 'menu mm)) (define-key map [header-line down-mouse-3] (powerline-mouse 'minor 'menu mm)) map))) (split-string (format-mode-line minor-mode-alist)) (propertize " " 'face face))) | |||||
| (defpowerline powerline-narrow (let (real-point-min real-point-max) (save-excursion (save-restriction (widen) (setq real-point-min (point-min) real-point-max (point-max)))) (when (or (/= real-point-min (point-min)) (/= real-point-max (point-max))) (propertize "Narrow" 'mouse-face 'mode-line-highlight 'help-echo "mouse-1: Remove narrowing from the current buffer" 'local-map (make-mode-line-mouse-map 'mouse-1 'mode-line-widen))))) | |||||
| (defpowerline powerline-vc (when (and (buffer-file-name (current-buffer)) vc-mode) (format-mode-line '(vc-mode vc-mode)))) | |||||
| (defpowerline powerline-buffer-size (propertize (if powerline-buffer-size-suffix "%I" "%i") 'mouse-face 'mode-line-highlight 'local-map (make-mode-line-mouse-map 'mouse-1 (lambda nil (interactive) (setq powerline-buffer-size-suffix (not powerline-buffer-size-suffix)) (force-mode-line-update))))) | |||||
| (defpowerline powerline-buffer-id (format-mode-line mode-line-buffer-identification)) | |||||
| (defpowerline powerline-process (cond ((symbolp mode-line-process) (symbol-value mode-line-process)) ((listp mode-line-process) (format-mode-line mode-line-process)) (t mode-line-process))) | |||||
| ;;;*** | |||||
| ;;;### (autoloads nil "powerline-themes" "powerline-themes.el" (21569 | |||||
| ;;;;;; 53234 0 0)) | |||||
| ;;; Generated autoloads from powerline-themes.el | |||||
| (autoload 'powerline-default-theme "powerline-themes" "\ | |||||
| Setup the default mode-line. | |||||
| \(fn)" t nil) | |||||
| (autoload 'powerline-center-theme "powerline-themes" "\ | |||||
| Setup a mode-line with major and minor modes centered. | |||||
| \(fn)" t nil) | |||||
| (autoload 'powerline-vim-theme "powerline-themes" "\ | |||||
| Setup a Vim-like mode-line. | |||||
| \(fn)" t nil) | |||||
| (autoload 'powerline-nano-theme "powerline-themes" "\ | |||||
| Setup a nano-like mode-line. | |||||
| \(fn)" t nil) | |||||
| ;;;*** | |||||
| ;;;### (autoloads nil nil ("powerline-pkg.el" "powerline-separators.el") | |||||
| ;;;;;; (21569 53234 965340 0)) | |||||
| ;;;*** | |||||
| ;; Local Variables: | |||||
| ;; version-control: never | |||||
| ;; no-byte-compile: t | |||||
| ;; no-update-autoloads: t | |||||
| ;; End: | |||||
| ;;; powerline-autoloads.el ends here | |||||
| @ -1,7 +0,0 @@ | |||||
| (define-package "powerline" "20140516.2128" "Rewrite of Powerline" | |||||
| '((cl-lib "0.2")) | |||||
| :url "http://github.com/milkypostman/powerline/" :keywords | |||||
| '("mode-line")) | |||||
| ;; Local Variables: | |||||
| ;; no-byte-compile: t | |||||
| ;; End: | |||||
| @ -1,320 +0,0 @@ | |||||
| ;;; powerline-separators.el --- Separators 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: | |||||
| ;; | |||||
| ;; Separators for Powerline. | |||||
| ;; Included separators: alternate, arrow, arrow-fade, bar, box, brace, butt, | |||||
| ;; chamfer, contour, curve, rounded, roundstub, slant, wave, zigzag, and nil. | |||||
| ;; | |||||
| ;;; Code: | |||||
| (require 'cl-lib) | |||||
| (require 'color) | |||||
| (defun pl/interpolate (color1 color2) | |||||
| "Interpolate between COLOR1 and COLOR2. | |||||
| COLOR1 and COLOR2 must be supplied as hex strings with a leading #." | |||||
| (let* ((c1 (color-name-to-rgb color1)) | |||||
| (c2 (color-name-to-rgb color2)) | |||||
| (red (/ (+ (nth 0 c1) (nth 0 c2)) 2)) | |||||
| (green (/ (+ (nth 1 c1) (nth 1 c2)) 2)) | |||||
| (blue (/ (+ (nth 2 c1) (nth 2 c2)) 2))) | |||||
| (color-rgb-to-hex red green blue))) | |||||
| (defun pl/hex-color (color) | |||||
| "Get the hexadecimal value of COLOR." | |||||
| (when color | |||||
| (apply 'color-rgb-to-hex (color-name-to-rgb color)))) | |||||
| (defun pl/pattern (lst) | |||||
| "Turn LST into an infinite pattern." | |||||
| (when lst | |||||
| (let ((pattern (cl-copy-list lst))) | |||||
| (setcdr (last pattern) pattern)))) | |||||
| (defun pl/pattern-to-string (pattern) | |||||
| "Convert a PATTERN into a string that can be used in an XPM." | |||||
| (concat "\"" (mapconcat 'number-to-string pattern "") "\",")) | |||||
| (defun pl/reverse-pattern (pattern) | |||||
| "Reverse each line in PATTERN." | |||||
| (mapcar 'reverse pattern)) | |||||
| (defun pl/row-pattern (fill total &optional fade) | |||||
| "Make a list that has FILL 0s out of TOTAL 1s with FADE 2s to the right of the fill." | |||||
| (unless fade | |||||
| (setq fade 0)) | |||||
| (let ((fill (min fill total)) | |||||
| (fade (min fade (max (- total fill) 0)))) | |||||
| (append (make-list fill 0) | |||||
| (make-list fade 2) | |||||
| (make-list (- total fill fade) 1)))) | |||||
| (defun pl/pattern-defun (name dir width &rest patterns) | |||||
| "Create a powerline function of NAME in DIR with WIDTH for PATTERNS. | |||||
| PATTERNS is of the form (PATTERN HEADER FOOTER SECOND-PATTERN CENTER). | |||||
| PATTERN is required, all other components are optional. | |||||
| All generated functions generate the form: | |||||
| HEADER | |||||
| PATTERN ... | |||||
| CENTER | |||||
| SECOND-PATTERN ... | |||||
| FOOTER | |||||
| PATTERN and SECOND-PATTERN repeat infinitely to fill the space needed to generate a full height XPM. | |||||
| PATTERN, HEADER, FOOTER, SECOND-PATTERN, CENTER are of the form ((COLOR ...) (COLOR ...) ...). | |||||
| COLOR can be one of 0, 1, or 2, where 0 is the source color, 1 is the | |||||
| destination color, and 2 is the interpolated color between 0 and 1." | |||||
| (when (eq dir 'right) | |||||
| (setq patterns (mapcar 'pl/reverse-pattern patterns))) | |||||
| (let* ((pattern (pl/pattern (mapcar 'pl/pattern-to-string (car patterns)))) | |||||
| (header (mapcar 'pl/pattern-to-string (nth 1 patterns))) | |||||
| (footer (mapcar 'pl/pattern-to-string (nth 2 patterns))) | |||||
| (second-pattern (pl/pattern (mapcar 'pl/pattern-to-string (nth 3 patterns)))) | |||||
| (center (mapcar 'pl/pattern-to-string (nth 4 patterns))) | |||||
| (reserve (+ (length header) (length footer) (length center)))) | |||||
| (pl/wrap-defun name dir width | |||||
| `((pattern-height (max (- height ,reserve) 0)) | |||||
| (second-pattern-height (/ pattern-height 2)) | |||||
| (pattern-height ,(if second-pattern '(ceiling pattern-height 2) 'pattern-height))) | |||||
| `((mapconcat 'identity ',header "") | |||||
| (mapconcat 'identity (cl-subseq ',pattern 0 pattern-height) "") | |||||
| (mapconcat 'identity ',center "") | |||||
| (mapconcat 'identity (cl-subseq ',second-pattern 0 second-pattern-height) "") | |||||
| (mapconcat 'identity ',footer ""))))) | |||||
| (defun pl/wrap-defun (name dir width let-vars body) | |||||
| "Generate a powerline function of NAME in DIR with WIDTH using LET-VARS and BODY." | |||||
| (let* ((src-face (if (eq dir 'left) 'face1 'face2)) | |||||
| (dst-face (if (eq dir 'left) 'face2 'face1))) | |||||
| `(defun ,(intern (format "powerline-%s-%s" name (symbol-name dir))) | |||||
| (face1 face2 &optional height) | |||||
| (when window-system | |||||
| (unless height | |||||
| (setq height (pl/separator-height))) | |||||
| (let* ,(append `((color1 (when ,src-face | |||||
| (pl/hex-color (face-background ,src-face)))) | |||||
| (color2 (when ,dst-face | |||||
| (pl/hex-color (face-background ,dst-face)))) | |||||
| (colori (when (and color1 color2) (pl/interpolate color1 color2))) | |||||
| (color1 (or color1 "None")) | |||||
| (color2 (or color2 "None")) | |||||
| (colori (or colori "None"))) | |||||
| let-vars) | |||||
| (create-image ,(append `(concat (format "/* XPM */ static char * %s_%s[] = { \"%s %s 3 1\", \"0 c %s\", \"1 c %s\", \"2 c %s\"," | |||||
| ,(replace-regexp-in-string "-" "_" name) | |||||
| (symbol-name ',dir) | |||||
| ,width | |||||
| height | |||||
| color1 | |||||
| color2 | |||||
| colori)) | |||||
| body | |||||
| '("};")) | |||||
| 'xpm t | |||||
| :ascent 'center | |||||
| :face (when (and face1 face2) | |||||
| ,dst-face))))))) | |||||
| (defmacro pl/alternate (dir) | |||||
| "Generate an alternating pattern XPM function for DIR." | |||||
| (pl/pattern-defun "alternate" dir 4 | |||||
| '((2 2 1 1) | |||||
| (0 0 2 2)))) | |||||
| (defmacro pl/arrow (dir) | |||||
| "Generate an arrow XPM function for DIR." | |||||
| (let ((row-modifier (if (eq dir 'left) 'identity 'reverse))) | |||||
| (pl/wrap-defun "arrow" dir 'middle-width | |||||
| '((width (1- (/ height 2))) | |||||
| (middle-width (1- (ceiling height 2)))) | |||||
| `((cl-loop for i from 0 to width | |||||
| concat (pl/pattern-to-string (,row-modifier (pl/row-pattern i middle-width)))) | |||||
| (when (cl-oddp height) | |||||
| (pl/pattern-to-string (make-list middle-width 0))) | |||||
| (cl-loop for i from width downto 0 | |||||
| concat (pl/pattern-to-string (,row-modifier (pl/row-pattern i middle-width)))))))) | |||||
| (defmacro pl/arrow-fade (dir) | |||||
| "Generate an arrow-fade XPM function for DIR." | |||||
| (let* ((row-modifier (if (eq dir 'left) 'identity 'reverse))) | |||||
| (pl/wrap-defun "arrow-fade" dir 'middle-width | |||||
| '((width (1- (/ height 2))) | |||||
| (middle-width (1+ (ceiling height 2)))) | |||||
| `((cl-loop for i from 0 to width | |||||
| concat (pl/pattern-to-string (,row-modifier (pl/row-pattern i middle-width 2)))) | |||||
| (when (cl-oddp height) | |||||
| (pl/pattern-to-string (,row-modifier (pl/row-pattern (1+ width) middle-width 2)))) | |||||
| (cl-loop for i from width downto 0 | |||||
| concat (pl/pattern-to-string (,row-modifier (pl/row-pattern i middle-width 2)))))))) | |||||
| (defmacro pl/bar (dir) | |||||
| "Generate a bar XPM function for DIR." | |||||
| (pl/pattern-defun "bar" dir 2 | |||||
| '((2 2)))) | |||||
| (defmacro pl/box (dir) | |||||
| "Generate a box XPM function for DIR." | |||||
| (pl/pattern-defun "box" dir 2 | |||||
| '((0 0) | |||||
| (0 0) | |||||
| (1 1) | |||||
| (1 1)))) | |||||
| (defmacro pl/brace (dir) | |||||
| "Generate a brace XPM function for DIR." | |||||
| (pl/pattern-defun "brace" dir 4 | |||||
| '((0 1 1 1)) | |||||
| '((1 1 1 1) | |||||
| (2 1 1 1)) | |||||
| '((2 1 1 1) | |||||
| (1 1 1 1)) | |||||
| '((0 1 1 1)) | |||||
| '((0 2 1 1) | |||||
| (0 2 1 1) | |||||
| (0 0 2 1) | |||||
| (0 0 0 0) | |||||
| (0 0 2 1) | |||||
| (0 2 1 1) | |||||
| (0 2 1 1)))) | |||||
| (defmacro pl/butt (dir) | |||||
| "Generate a butt XPM function for DIR." | |||||
| (pl/pattern-defun "butt" dir 3 | |||||
| '((0 0 0)) | |||||
| '((1 1 1) | |||||
| (0 1 1) | |||||
| (0 0 1)) | |||||
| '((0 0 1) | |||||
| (0 1 1) | |||||
| (1 1 1)))) | |||||
| (defmacro pl/chamfer (dir) | |||||
| "Generate a chamfer XPM function for DIR." | |||||
| (pl/pattern-defun "chamfer" dir 3 | |||||
| '((0 0 0)) | |||||
| '((1 1 1) | |||||
| (0 1 1) | |||||
| (0 0 1)))) | |||||
| (defmacro pl/contour (dir) | |||||
| "Generate a contour XPM function for DIR." | |||||
| (pl/pattern-defun "contour" dir 10 | |||||
| '((0 0 0 0 0 1 1 1 1 1)) | |||||
| '((1 1 1 1 1 1 1 1 1 1) | |||||
| (0 2 1 1 1 1 1 1 1 1) | |||||
| (0 0 2 1 1 1 1 1 1 1) | |||||
| (0 0 0 2 1 1 1 1 1 1) | |||||
| (0 0 0 0 1 1 1 1 1 1) | |||||
| (0 0 0 0 2 1 1 1 1 1)) | |||||
| '((0 0 0 0 0 2 1 1 1 1) | |||||
| (0 0 0 0 0 0 1 1 1 1) | |||||
| (0 0 0 0 0 0 2 1 1 1) | |||||
| (0 0 0 0 0 0 0 2 1 1) | |||||
| (0 0 0 0 0 0 0 0 0 0)))) | |||||
| (defmacro pl/curve (dir) | |||||
| "Generate a curve XPM function for DIR." | |||||
| (pl/pattern-defun "curve" dir 4 | |||||
| '((0 0 0 0)) | |||||
| '((1 1 1 1) | |||||
| (2 1 1 1) | |||||
| (0 0 1 1) | |||||
| (0 0 2 1) | |||||
| (0 0 0 1) | |||||
| (0 0 0 2)) | |||||
| '((0 0 0 2) | |||||
| (0 0 0 1) | |||||
| (0 0 2 1) | |||||
| (0 0 1 1) | |||||
| (2 1 1 1) | |||||
| (1 1 1 1)))) | |||||
| (defmacro pl/rounded (dir) | |||||
| "Generate a rounded XPM function for DIR." | |||||
| (pl/pattern-defun "rounded" dir 6 | |||||
| '((0 0 0 0 0 0)) | |||||
| '((2 1 1 1 1 1) | |||||
| (0 0 2 1 1 1) | |||||
| (0 0 0 0 1 1) | |||||
| (0 0 0 0 2 1) | |||||
| (0 0 0 0 0 1) | |||||
| (0 0 0 0 0 2)))) | |||||
| (defmacro pl/roundstub (dir) | |||||
| "Generate a roundstub XPM function for DIR." | |||||
| (pl/pattern-defun "roundstub" dir 3 | |||||
| '((0 0 0)) | |||||
| '((1 1 1) | |||||
| (0 0 1) | |||||
| (0 0 2)) | |||||
| '((0 0 2) | |||||
| (0 0 1) | |||||
| (1 1 1)))) | |||||
| (defmacro pl/slant (dir) | |||||
| "Generate a slant XPM function for DIR." | |||||
| (let* ((row-modifier (if (eq dir 'left) 'identity 'reverse))) | |||||
| (pl/wrap-defun "slant" dir 'width | |||||
| '((width (1- (ceiling height 2)))) | |||||
| `((cl-loop for i from 0 to height | |||||
| concat (pl/pattern-to-string (,row-modifier (pl/row-pattern (/ i 2) width)))))))) | |||||
| (defmacro pl/wave (dir) | |||||
| "Generate a wave XPM function for DIR." | |||||
| (pl/pattern-defun "wave" dir 11 | |||||
| '((0 0 0 0 0 0 1 1 1 1 1)) | |||||
| '((2 1 1 1 1 1 1 1 1 1 1) | |||||
| (0 0 1 1 1 1 1 1 1 1 1) | |||||
| (0 0 0 1 1 1 1 1 1 1 1) | |||||
| (0 0 0 2 1 1 1 1 1 1 1) | |||||
| (0 0 0 0 1 1 1 1 1 1 1) | |||||
| (0 0 0 0 2 1 1 1 1 1 1) | |||||
| (0 0 0 0 0 1 1 1 1 1 1) | |||||
| (0 0 0 0 0 1 1 1 1 1 1) | |||||
| (0 0 0 0 0 2 1 1 1 1 1)) | |||||
| '((0 0 0 0 0 0 2 1 1 1 1) | |||||
| (0 0 0 0 0 0 0 1 1 1 1) | |||||
| (0 0 0 0 0 0 0 1 1 1 1) | |||||
| (0 0 0 0 0 0 0 2 1 1 1) | |||||
| (0 0 0 0 0 0 0 0 1 1 1) | |||||
| (0 0 0 0 0 0 0 0 2 1 1) | |||||
| (0 0 0 0 0 0 0 0 0 0 2)))) | |||||
| (defmacro pl/zigzag (dir) | |||||
| "Generate a zigzag pattern XPM function for DIR." | |||||
| (pl/pattern-defun "zigzag" dir 3 | |||||
| '((1 1 1) | |||||
| (0 1 1) | |||||
| (0 0 1) | |||||
| (0 0 0) | |||||
| (0 0 1) | |||||
| (0 1 1)))) | |||||
| (defmacro pl/nil (dir) | |||||
| "Generate a XPM function that returns nil for DIR." | |||||
| `(defun ,(intern (format "powerline-nil-%s" (symbol-name dir))) | |||||
| (face1 face2 &optional height) | |||||
| nil)) | |||||
| (provide 'powerline-separators) | |||||
| ;;; powerline-separators.el ends here | |||||
| @ -1,248 +0,0 @@ | |||||
| ;;; 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: | |||||
| ;;;###autoload | |||||
| (defun powerline-default-theme () | |||||
| "Setup the default mode-line." | |||||
| (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-default-separator | |||||
| (car powerline-default-separator-dir)))) | |||||
| (separator-right (intern (format "powerline-%s-%s" | |||||
| powerline-default-separator | |||||
| (cdr powerline-default-separator-dir)))) | |||||
| (lhs (list (powerline-raw "%*" nil 'l) | |||||
| (powerline-buffer-size nil 'l) | |||||
| (powerline-raw mode-line-mule-info nil 'l) | |||||
| (powerline-buffer-id nil 'l) | |||||
| (when (and (boundp 'which-func-mode) which-func-mode) | |||||
| (powerline-raw which-func-format nil 'l)) | |||||
| (powerline-raw " ") | |||||
| (funcall separator-left mode-line face1) | |||||
| (when (boundp 'erc-modified-channels-object) | |||||
| (powerline-raw erc-modified-channels-object face1 'l)) | |||||
| (powerline-major-mode face1 'l) | |||||
| (powerline-process face1) | |||||
| (powerline-minor-modes face1 'l) | |||||
| (powerline-narrow face1 'l) | |||||
| (powerline-raw " " face1) | |||||
| (funcall separator-left face1 face2) | |||||
| (powerline-vc face2 'r))) | |||||
| (rhs (list (powerline-raw global-mode-string face2 'r) | |||||
| (funcall separator-right face2 face1) | |||||
| (powerline-raw "%4l" face1 'l) | |||||
| (powerline-raw ":" face1 'l) | |||||
| (powerline-raw "%3c" face1 'r) | |||||
| (funcall separator-right face1 mode-line) | |||||
| (powerline-raw " ") | |||||
| (powerline-raw "%6p" nil 'r) | |||||
| (powerline-hud face2 face1)))) | |||||
| (concat (powerline-render lhs) | |||||
| (powerline-fill face2 (powerline-width rhs)) | |||||
| (powerline-render rhs))))))) | |||||
| ;;;###autoload | |||||
| (defun powerline-center-theme () | |||||
| "Setup a mode-line with major and minor modes centered." | |||||
| (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-default-separator | |||||
| (car powerline-default-separator-dir)))) | |||||
| (separator-right (intern (format "powerline-%s-%s" | |||||
| powerline-default-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 (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) | |||||
| (powerline-minor-modes face2 'l) | |||||
| (powerline-raw " " face2) | |||||
| (funcall separator-right face2 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))))))) | |||||
| (defun powerline-center-evil-theme () | |||||
| "Setup a mode-line with major, evil, and minor modes centered." | |||||
| (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-default-separator | |||||
| (car powerline-default-separator-dir)))) | |||||
| (separator-right (intern (format "powerline-%s-%s" | |||||
| powerline-default-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)) | |||||
| (if (split-string (format-mode-line minor-mode-alist)) | |||||
| (append (if evil-mode | |||||
| (list (funcall separator-right face2 face1) | |||||
| (powerline-raw evil-mode-line-tag face1 'l) | |||||
| (powerline-raw " " face1) | |||||
| (funcall separator-left face1 face2))) | |||||
| (list (powerline-minor-modes face2 'l) | |||||
| (powerline-raw " " face2) | |||||
| (funcall separator-right face2 face1))) | |||||
| (list (powerline-raw evil-mode-line-tag face2) | |||||
| (funcall separator-right face2 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-vim-theme () | |||||
| "Setup a Vim-like mode-line." | |||||
| (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-default-separator | |||||
| (car powerline-default-separator-dir)))) | |||||
| (separator-right (intern (format "powerline-%s-%s" | |||||
| powerline-default-separator | |||||
| (cdr powerline-default-separator-dir)))) | |||||
| (lhs (list (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-nano-theme () | |||||
| "Setup a nano-like mode-line." | |||||
| (interactive) | |||||
| (setq-default mode-line-format | |||||
| '("%e" | |||||
| (:eval | |||||
| (let* ((active (powerline-selected-window-active)) | |||||
| (lhs (list (powerline-raw (concat "GNU Emacs " | |||||
| (number-to-string | |||||
| emacs-major-version) | |||||
| "." | |||||
| (number-to-string | |||||
| emacs-minor-version)) | |||||
| nil 'l))) | |||||
| (rhs (list (if (buffer-modified-p) (powerline-raw "Modified" nil 'r)))) | |||||
| (center (list (powerline-raw "%b" nil)))) | |||||
| (concat (powerline-render lhs) | |||||
| (powerline-fill-center nil (/ (powerline-width center) 2.0)) | |||||
| (powerline-render center) | |||||
| (powerline-fill nil (powerline-width rhs)) | |||||
| (powerline-render rhs))))))) | |||||
| (provide 'powerline-themes) | |||||
| ;;; powerline-themes.el ends here | |||||
| @ -1,497 +0,0 @@ | |||||
| ;;; powerline.el --- Rewrite of 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.3 | |||||
| ;; Keywords: mode-line | |||||
| ;; Package-Requires: ((cl-lib "0.2")) | |||||
| ;;; Commentary: | |||||
| ;; | |||||
| ;; Powerline is a library for customizing the mode-line that is based on the Vim | |||||
| ;; Powerline. A collection of predefined themes comes with the package. | |||||
| ;; | |||||
| ;;; Code: | |||||
| (require 'powerline-themes) | |||||
| (require 'powerline-separators) | |||||
| (require 'cl-lib) | |||||
| (defface powerline-active1 '((t (:background "grey22" :inherit mode-line))) | |||||
| "Powerline face 1." | |||||
| :group 'powerline) | |||||
| (defface powerline-active2 '((t (:background "grey40" :inherit mode-line))) | |||||
| "Powerline face 2." | |||||
| :group 'powerline) | |||||
| (defface powerline-inactive1 | |||||
| '((t (:background "grey11" :inherit mode-line-inactive))) | |||||
| "Powerline face 1." | |||||
| :group 'powerline) | |||||
| (defface powerline-inactive2 | |||||
| '((t (:background "grey20" :inherit mode-line-inactive))) | |||||
| "Powerline face 2." | |||||
| :group 'powerline) | |||||
| (defcustom powerline-default-separator 'arrow | |||||
| "The separator to use for the default theme. | |||||
| Valid Values: arrow, slant, chamfer, wave, brace, roundstub, | |||||
| zigzag, butt, rounded, contour, curve" | |||||
| :group 'powerline | |||||
| :type '(choice (const alternate) | |||||
| (const arrow) | |||||
| (const arrow-fade) | |||||
| (const bar) | |||||
| (const box) | |||||
| (const brace) | |||||
| (const butt) | |||||
| (const chamfer) | |||||
| (const contour) | |||||
| (const curve) | |||||
| (const rounded) | |||||
| (const roundstub) | |||||
| (const slant) | |||||
| (const wave) | |||||
| (const zigzag) | |||||
| (const nil))) | |||||
| (defcustom powerline-default-separator-dir '(left . right) | |||||
| "The separator direction to use for the default theme. | |||||
| CONS of the form (DIR . DIR) denoting the lean of the | |||||
| separators for the left and right side of the powerline. | |||||
| DIR must be one of: left, right" | |||||
| :group 'powerline | |||||
| :type '(cons (choice :tag "Left Hand Side" (const left) (const right)) | |||||
| (choice :tag "Right Hand Side" (const left) (const right)))) | |||||
| (defcustom powerline-height nil | |||||
| "Override the mode-line height." | |||||
| :group 'powerline | |||||
| :type '(choice integer (const nil))) | |||||
| (defcustom powerline-text-scale-factor nil | |||||
| "Scale of mode-line font size to default text size. | |||||
| Smaller mode-line fonts will be a float value less that 1. | |||||
| Larger mode-line fonts require a float value greater than 1. | |||||
| This is needed to make sure that text is properly aligned." | |||||
| :group 'powerline | |||||
| :type '(choice float integer (const nil))) | |||||
| (defcustom powerline-buffer-size-suffix t | |||||
| "Display the buffer size suffix." | |||||
| :group 'powerline | |||||
| :type 'boolean) | |||||
| (defun pl/create-or-get-cache () | |||||
| "Return a frame-local hash table that acts as a memoization cache for powerline. Create one if the frame doesn't have one yet." | |||||
| (or (frame-parameter nil 'powerline-cache) | |||||
| (pl/reset-cache))) | |||||
| (defun pl/reset-cache () | |||||
| "Reset and return the frame-local hash table used for a memoization cache." | |||||
| (let ((table (make-hash-table :test 'equal))) | |||||
| ;; Store it as a frame-local variable | |||||
| (modify-frame-parameters nil `((powerline-cache . ,table))) | |||||
| table)) | |||||
| ;; from memoize.el @ http://nullprogram.com/blog/2010/07/26/ | |||||
| (defun pl/memoize (func) | |||||
| "Memoize FUNC. | |||||
| If argument is a symbol then install the memoized function over | |||||
| the original function. Use frame-local memoization." | |||||
| (cl-typecase func | |||||
| (symbol (fset func (pl/memoize-wrap-frame-local (symbol-function func))) func) | |||||
| (function (pl/memoize-wrap-frame-local func)))) | |||||
| (defun pl/memoize-wrap-frame-local (func) | |||||
| "Return the memoized version of FUNC. | |||||
| The memoization cache is frame-local." | |||||
| (let ((funcid (cl-gensym))) | |||||
| `(lambda (&rest args) | |||||
| ,(concat (documentation func) (format "\n(memoized function %s)" funcid)) | |||||
| (let* ((cache (pl/create-or-get-cache)) | |||||
| (key (cons ',funcid args)) | |||||
| (val (gethash key cache))) | |||||
| (if val | |||||
| val | |||||
| (puthash key (apply ,func args) cache)))))) | |||||
| (defun pl/separator-height () | |||||
| "Get default height for rendering separators." | |||||
| (or powerline-height (frame-char-height))) | |||||
| (defun powerline-reset () | |||||
| "Reset memoized functions." | |||||
| (interactive) | |||||
| (pl/memoize (pl/alternate left)) | |||||
| (pl/memoize (pl/alternate right)) | |||||
| (pl/memoize (pl/arrow left)) | |||||
| (pl/memoize (pl/arrow right)) | |||||
| (pl/memoize (pl/arrow-fade left)) | |||||
| (pl/memoize (pl/arrow-fade right)) | |||||
| (pl/memoize (pl/bar left)) | |||||
| (pl/memoize (pl/bar right)) | |||||
| (pl/memoize (pl/box left)) | |||||
| (pl/memoize (pl/box right)) | |||||
| (pl/memoize (pl/brace left)) | |||||
| (pl/memoize (pl/brace right)) | |||||
| (pl/memoize (pl/butt left)) | |||||
| (pl/memoize (pl/butt right)) | |||||
| (pl/memoize (pl/chamfer left)) | |||||
| (pl/memoize (pl/chamfer right)) | |||||
| (pl/memoize (pl/contour left)) | |||||
| (pl/memoize (pl/contour right)) | |||||
| (pl/memoize (pl/curve left)) | |||||
| (pl/memoize (pl/curve right)) | |||||
| (pl/memoize (pl/rounded left)) | |||||
| (pl/memoize (pl/rounded right)) | |||||
| (pl/memoize (pl/roundstub left)) | |||||
| (pl/memoize (pl/roundstub right)) | |||||
| (pl/memoize (pl/slant left)) | |||||
| (pl/memoize (pl/slant right)) | |||||
| (pl/memoize (pl/wave left)) | |||||
| (pl/memoize (pl/wave right)) | |||||
| (pl/memoize (pl/zigzag left)) | |||||
| (pl/memoize (pl/zigzag right)) | |||||
| (pl/memoize (pl/nil left)) | |||||
| (pl/memoize (pl/nil right)) | |||||
| (pl/reset-cache)) | |||||
| (powerline-reset) | |||||
| (defun pl/make-xpm (name color1 color2 data) | |||||
| "Return an XPM image with NAME using COLOR1 for enabled and COLOR2 for disabled bits specified in DATA." | |||||
| (when window-system | |||||
| (create-image | |||||
| (concat | |||||
| (format "/* XPM */ | |||||
| static char * %s[] = { | |||||
| \"%i %i 2 1\", | |||||
| \". c %s\", | |||||
| \" c %s\", | |||||
| " | |||||
| (downcase (replace-regexp-in-string " " "_" name)) | |||||
| (length (car data)) | |||||
| (length data) | |||||
| (or (pl/hex-color color1) "None") | |||||
| (or (pl/hex-color color2) "None")) | |||||
| (let ((len (length data)) | |||||
| (idx 0)) | |||||
| (apply 'concat | |||||
| (mapcar #'(lambda (dl) | |||||
| (setq idx (+ idx 1)) | |||||
| (concat | |||||
| "\"" | |||||
| (concat | |||||
| (mapcar #'(lambda (d) | |||||
| (if (eq d 0) | |||||
| (string-to-char " ") | |||||
| (string-to-char "."))) | |||||
| dl)) | |||||
| (if (eq idx len) | |||||
| "\"};" | |||||
| "\",\n"))) | |||||
| data)))) | |||||
| 'xpm t :ascent 'center))) | |||||
| (defun pl/percent-xpm | |||||
| (height pmax pmin winend winstart width color1 color2) | |||||
| "Generate percentage xpm of HEIGHT for PMAX to PMIN given WINEND and WINSTART with WIDTH and COLOR1 and COLOR2." | |||||
| (let* ((height- (1- height)) | |||||
| (fillstart (round (* height- (/ (float winstart) (float pmax))))) | |||||
| (fillend (round (* height- (/ (float winend) (float pmax))))) | |||||
| (data nil) | |||||
| (i 0)) | |||||
| (while (< i height) | |||||
| (setq data (cons | |||||
| (if (and (<= fillstart i) | |||||
| (<= i fillend)) | |||||
| (append (make-list width 1)) | |||||
| (append (make-list width 0))) | |||||
| data)) | |||||
| (setq i (+ i 1))) | |||||
| (pl/make-xpm "percent" color1 color2 (reverse data)))) | |||||
| (pl/memoize 'pl/percent-xpm) | |||||
| ;;;###autoload | |||||
| (defun powerline-hud (face1 face2 &optional width) | |||||
| "Return an XPM of relative buffer location using FACE1 and FACE2 of optional WIDTH." | |||||
| (unless width (setq width 2)) | |||||
| (let ((color1 (if face1 (face-background face1) "None")) | |||||
| (color2 (if face2 (face-background face2) "None")) | |||||
| (height (or powerline-height (frame-char-height))) | |||||
| pmax | |||||
| pmin | |||||
| (ws (window-start)) | |||||
| (we (window-end))) | |||||
| (save-restriction | |||||
| (widen) | |||||
| (setq pmax (point-max)) | |||||
| (setq pmin (point-min))) | |||||
| (pl/percent-xpm height pmax pmin we ws | |||||
| (* (frame-char-width) width) color1 color2))) | |||||
| ;;;###autoload | |||||
| (defun powerline-mouse (click-group click-type string) | |||||
| "Return mouse handler for CLICK-GROUP given CLICK-TYPE and STRING." | |||||
| (cond ((eq click-group 'minor) | |||||
| (cond ((eq click-type 'menu) | |||||
| `(lambda (event) | |||||
| (interactive "@e") | |||||
| (minor-mode-menu-from-indicator ,string))) | |||||
| ((eq click-type 'help) | |||||
| `(lambda (event) | |||||
| (interactive "@e") | |||||
| (describe-minor-mode-from-indicator ,string))) | |||||
| (t | |||||
| `(lambda (event) | |||||
| (interactive "@e") | |||||
| nil)))) | |||||
| (t | |||||
| `(lambda (event) | |||||
| (interactive "@e") | |||||
| nil)))) | |||||
| ;;;###autoload | |||||
| (defun powerline-concat (&rest strings) | |||||
| "Concatonate STRINGS and pad sides by spaces." | |||||
| (concat | |||||
| " " | |||||
| (mapconcat 'identity (delq nil strings) " ") | |||||
| " ")) | |||||
| ;;;###autoload | |||||
| (defmacro defpowerline (name body) | |||||
| "Create function NAME by wrapping BODY with powerline padding an propetization." | |||||
| `(defun ,name | |||||
| (&optional face pad) | |||||
| (powerline-raw ,body face pad))) | |||||
| (defun pl/property-substrings (str prop) | |||||
| "Return a list of substrings of STR when PROP change." | |||||
| (let ((beg 0) (end 0) | |||||
| (len (length str)) | |||||
| (out)) | |||||
| (while (< end (length str)) | |||||
| (setq end (or (next-single-property-change beg prop str) len)) | |||||
| (setq out (append out (list (substring str beg (setq beg end)))))) | |||||
| out)) | |||||
| (defun pl/assure-list (item) | |||||
| "Assure that ITEM is a list." | |||||
| (if (listp item) | |||||
| item | |||||
| (list item))) | |||||
| (defun pl/add-text-property (str prop val) | |||||
| (mapconcat | |||||
| (lambda (mm) | |||||
| (let ((cur (pl/assure-list (get-text-property 0 'face mm)))) | |||||
| (propertize mm 'face (append cur (list val))))) | |||||
| (pl/property-substrings str prop) | |||||
| "")) | |||||
| ;;;###autoload | |||||
| (defun powerline-raw (str &optional face pad) | |||||
| "Render STR as mode-line data using FACE and optionally PAD import on left (l) or right (r)." | |||||
| (when str | |||||
| (let* ((rendered-str (format-mode-line str)) | |||||
| (padded-str (concat | |||||
| (when (and (> (length rendered-str) 0) (eq pad 'l)) " ") | |||||
| (if (listp str) rendered-str str) | |||||
| (when (and (> (length rendered-str) 0) (eq pad 'r)) " ")))) | |||||
| (if face | |||||
| (pl/add-text-property padded-str 'face face) | |||||
| padded-str)))) | |||||
| ;;;###autoload | |||||
| (defun powerline-fill (face reserve) | |||||
| "Return empty space using FACE and leaving RESERVE space on the right." | |||||
| (unless reserve | |||||
| (setq reserve 20)) | |||||
| (when powerline-text-scale-factor | |||||
| (setq reserve (* powerline-text-scale-factor reserve))) | |||||
| (when (and window-system (eq 'right (get-scroll-bar-mode))) | |||||
| (setq reserve (- reserve 3))) | |||||
| (propertize " " | |||||
| 'display `((space :align-to (- (+ right right-fringe right-margin) ,reserve))) | |||||
| 'face face)) | |||||
| (defun powerline-fill-center (face reserve) | |||||
| "Return empty space using FACE to the center of remaining space leaving RESERVE space on the right." | |||||
| (unless reserve | |||||
| (setq reserve 20)) | |||||
| (when powerline-text-scale-factor | |||||
| (setq reserve (* powerline-text-scale-factor reserve))) | |||||
| (propertize " " | |||||
| 'display `((space :align-to (- (+ center (.5 . right-margin)) ,reserve | |||||
| (.5 . left-margin)))) | |||||
| 'face face)) | |||||
| ;;;###autoload | |||||
| (defpowerline powerline-major-mode | |||||
| (propertize (format-mode-line mode-name) | |||||
| 'mouse-face 'mode-line-highlight | |||||
| 'help-echo "Major mode\n\ mouse-1: Display major mode menu\n\ mouse-2: Show help for major mode\n\ mouse-3: Toggle minor modes" | |||||
| 'local-map (let ((map (make-sparse-keymap))) | |||||
| (define-key map [mode-line down-mouse-1] | |||||
| `(menu-item ,(purecopy "Menu Bar") ignore | |||||
| :filter (lambda (_) (mouse-menu-major-mode-map)))) | |||||
| (define-key map [mode-line mouse-2] 'describe-mode) | |||||
| (define-key map [mode-line down-mouse-3] mode-line-mode-menu) | |||||
| map))) | |||||
| ;;;###autoload | |||||
| (defpowerline powerline-minor-modes | |||||
| (mapconcat (lambda (mm) | |||||
| (propertize mm | |||||
| 'mouse-face 'mode-line-highlight | |||||
| 'help-echo "Minor mode\n mouse-1: Display minor mode menu\n mouse-2: Show help for minor mode\n mouse-3: Toggle minor modes" | |||||
| 'local-map (let ((map (make-sparse-keymap))) | |||||
| (define-key map | |||||
| [mode-line down-mouse-1] | |||||
| (powerline-mouse 'minor 'menu mm)) | |||||
| (define-key map | |||||
| [mode-line mouse-2] | |||||
| (powerline-mouse 'minor 'help mm)) | |||||
| (define-key map | |||||
| [mode-line down-mouse-3] | |||||
| (powerline-mouse 'minor 'menu mm)) | |||||
| (define-key map | |||||
| [header-line down-mouse-3] | |||||
| (powerline-mouse 'minor 'menu mm)) | |||||
| map))) | |||||
| (split-string (format-mode-line minor-mode-alist)) | |||||
| (propertize " " 'face face))) | |||||
| ;;;###autoload | |||||
| (defpowerline powerline-narrow | |||||
| (let (real-point-min real-point-max) | |||||
| (save-excursion | |||||
| (save-restriction | |||||
| (widen) | |||||
| (setq real-point-min (point-min) real-point-max (point-max)))) | |||||
| (when (or (/= real-point-min (point-min)) | |||||
| (/= real-point-max (point-max))) | |||||
| (propertize "Narrow" | |||||
| 'mouse-face 'mode-line-highlight | |||||
| 'help-echo "mouse-1: Remove narrowing from the current buffer" | |||||
| 'local-map (make-mode-line-mouse-map | |||||
| 'mouse-1 'mode-line-widen))))) | |||||
| ;;;###autoload | |||||
| (defpowerline powerline-vc | |||||
| (when (and (buffer-file-name (current-buffer)) | |||||
| vc-mode) | |||||
| (format-mode-line '(vc-mode vc-mode)))) | |||||
| ;;;###autoload | |||||
| (defpowerline powerline-buffer-size | |||||
| (propertize | |||||
| (if powerline-buffer-size-suffix | |||||
| "%I" | |||||
| "%i") | |||||
| 'mouse-face 'mode-line-highlight | |||||
| 'local-map (make-mode-line-mouse-map | |||||
| 'mouse-1 (lambda () (interactive) | |||||
| (setq powerline-buffer-size-suffix | |||||
| (not powerline-buffer-size-suffix)) | |||||
| (force-mode-line-update))))) | |||||
| ;;;###autoload | |||||
| (defpowerline powerline-buffer-id | |||||
| (format-mode-line mode-line-buffer-identification)) | |||||
| ;;;###autoload | |||||
| (defpowerline powerline-process | |||||
| (cond | |||||
| ((symbolp mode-line-process) (symbol-value mode-line-process)) | |||||
| ((listp mode-line-process) (format-mode-line mode-line-process)) | |||||
| (t mode-line-process))) | |||||
| (defvar pl/default-mode-line mode-line-format) | |||||
| (defvar pl/minibuffer-selected-window-list '()) | |||||
| (defun pl/minibuffer-selected-window () | |||||
| "Return the selected window when entereing the minibuffer." | |||||
| (when pl/minibuffer-selected-window-list | |||||
| (car pl/minibuffer-selected-window-list))) | |||||
| (defun pl/minibuffer-setup () | |||||
| "Save the `minibuffer-selected-window' to `pl/minibuffer-selected-window'." | |||||
| (push (minibuffer-selected-window) pl/minibuffer-selected-window-list)) | |||||
| (add-hook 'minibuffer-setup-hook 'pl/minibuffer-setup) | |||||
| (defun pl/minibuffer-exit () | |||||
| "Set `pl/minibuffer-selected-window' to nil." | |||||
| (pop pl/minibuffer-selected-window-list)) | |||||
| (add-hook 'minibuffer-exit-hook 'pl/minibuffer-exit) | |||||
| (defun powerline-set-selected-window () | |||||
| "sets the variable `powerline-selected-window` appropriately" | |||||
| (when (not (minibuffer-window-active-p (frame-selected-window))) | |||||
| (setq powerline-selected-window (frame-selected-window)))) | |||||
| (add-hook 'window-configuration-change-hook 'powerline-set-selected-window) | |||||
| (add-hook 'focus-in-hook 'powerline-set-selected-window) | |||||
| (add-hook 'focus-out-hook 'powerline-set-selected-window) | |||||
| (defadvice select-window (after powerline-select-window activate) | |||||
| "makes powerline aware of window changes" | |||||
| (powerline-set-selected-window)) | |||||
| (defun powerline-selected-window-active () | |||||
| "Return whether the current window is active." | |||||
| (eq powerline-selected-window (selected-window))) | |||||
| (defun powerline-revert () | |||||
| "Revert to the default Emacs mode-line." | |||||
| (interactive) | |||||
| (setq-default mode-line-format pl/default-mode-line)) | |||||
| (defun pl/render (item) | |||||
| "Render a powerline ITEM." | |||||
| (cond | |||||
| ((and (listp item) (eq 'image (car item))) | |||||
| (propertize " " 'display item | |||||
| 'face (plist-get (cdr item) :face))) | |||||
| (item item))) | |||||
| (defun powerline-render (values) | |||||
| "Render a list of powerline VALUES." | |||||
| (mapconcat 'pl/render values "")) | |||||
| (defun powerline-width (values) | |||||
| "Get the length of VALUES." | |||||
| (if values | |||||
| (let ((val (car values))) | |||||
| (+ (cond | |||||
| ((stringp val) (length (format-mode-line val))) | |||||
| ((and (listp val) (eq 'image (car val))) | |||||
| (car (image-size val))) | |||||
| (t 0)) | |||||
| (powerline-width (cdr values)))) | |||||
| 0)) | |||||
| (provide 'powerline) | |||||
| ;;; powerline.el ends here | |||||