X-Git-Url: http://47.100.26.94:8080/?a=blobdiff_plain;f=emacs.d%2Felisp%2Fmy-mode-line.el;h=aeaeb8aa15e8012b92acc2a108aea5b09df640ac;hb=9b8cac2b92c8741b094b68b95a84de170fbf77d3;hp=ffc03f5d4ebfd02398dec67f58939f9dc9c77723;hpb=8e7c89a4fef858c7e05609149b3f1a945dd7ae7c;p=dotfiles.git diff --git a/emacs.d/elisp/my-mode-line.el b/emacs.d/elisp/my-mode-line.el index ffc03f5..aeaeb8a 100644 --- a/emacs.d/elisp/my-mode-line.el +++ b/emacs.d/elisp/my-mode-line.el @@ -26,9 +26,32 @@ ;; A windows may have six kinds different mode-line ;; type = 1. +;; Left - workspace list +;; Right - Showing Time +;; Center - buffer , as no windows in its left or right. ;; ----------------------------- ;; |>>> O <<<| ;; ----------------------------- +;; type = 2. +;; ----------------------------- +;; |>>> O| +;; ----------------------------- +;; type = 3. +;; ----------------------------- +;; |O <<<| +;; ----------------------------- +;; type = 4. +;; ----------------------------- +;; | O | +;; ----------------------------- +;; type = 5. +;; ----------------------------- +;; | O| +;; ----------------------------- +;; type = 6. +;; ----------------------------- +;; |O | +;; ----------------------------- (defun my-below-winow-has-effect-window () "Return true when its below has no active window or @@ -64,7 +87,7 @@ window type." (t 4))) -(defface my-powerline-hl-ws '((t (:background "red" :foreground "black" :inherit mode-line))) +(defface my-powerline-hl-ws '((t (:background "blue" :foreground "black" :inherit mode-line))) "My Powerline face 1 based on powerline-active1." :group 'powerline) @@ -72,6 +95,27 @@ window type." "My Powerline face 1 based on powerline-active1." :group 'powerline) + +(defface my-evil-mode-tag '((t (:foreground "black" :inherit mode-line))) + "My evil mode line" + :group 'powerline) + +(defface my-powerline-evil-normal '((t (:background "green" :foreground "black" :inherit mode-line))) + "My Powerline face 1 based on powerline-active1." + :group 'powerline) + +(defface my-powerline-evil-emacs '((t (:background "red" :foreground "black" :inherit mode-line))) + "My Powerline face 1 based on powerline-active1." + :group 'powerline) + +(defface my-powerline-evil-insert '((t (:background "orange" :foreground "black" :inherit mode-line))) + "My Powerline face 1 based on powerline-active1." + :group 'powerline) + +(defface my-powerline-evil-visual '((t (:background "orange" :foreground "black" :inherit mode-line))) + "My Powerline face 1 based on powerline-active1." + :group 'powerline) + (defun my-get-ws-name-list () "Return the name list of workspaces gotten from `perspeen-modestring' without the properties." (split-string (substring-no-properties (cadr perspeen-modestring)) "|")) @@ -83,20 +127,20 @@ window type." 'face) (setq ret (substring-no-properties i)))))) + (defun my-build-left-below-mode-line (separator lface face1) (let ((l) (selected-name (my-get-selected-ws-name)) (name-list (my-get-ws-name-list))) - (setq l (list (powerline-raw " workspace " lface))) (if (string= selected-name (car name-list)) (progn - (nconc l (list (funcall separator lface 'my-powerline-hl-ws) - (powerline-raw (car name-list) 'my-powerline-hl-ws) - (funcall separator 'my-powerline-hl-ws face1))) + (setq l (list (funcall separator lface 'my-powerline-hl-ws) + (powerline-raw (car name-list) 'my-powerline-hl-ws) + (funcall separator 'my-powerline-hl-ws face1))) (dolist (i (cdr name-list)) (nconc l (list (powerline-raw i face1) (funcall separator face1 face1))))) - (nconc l (list (funcall separator lface face1))) + (setq l (list (funcall separator lface face1))) (while name-list (let ((current-selected (string= selected-name (car name-list))) (next-selected (string= selected-name (cadr name-list)))) @@ -107,19 +151,23 @@ window type." (defun my-is-special-buffer () ;; suppose all buffer name started with a star is a special buffer. - (string-match "\*" (buffer-name)) - ;; (or (string-match "*scratch*" (buffer-name)) - ;; (string-match "*Message*" (buffer-name)) - - ;; (equal major-mode 'eshell-mode)) - ) - -(defun my-get-buffer-name-face (active-face, changed-face, readonly-face) - (cond ((and buffer-read-only (not (my-is-special-buffer))) - readonly-face) - ((and (buffer-modified-p) (not (my-is-special-buffer))) - changed-face) - (t active-face))) + (string-match "\*" (buffer-name))) + +(defun my-get-buffer-name-face (orignal-face) + (cond + ((not (powerline-selected-window-active)) orignal-face) + (buffer-read-only + 'sd/buffer-view-active1) + ((and (buffer-modified-p) (not (my-is-special-buffer))) + 'sd/buffer-modified-active1) + (t orignal-face))) + +(defun get-active-window-evil-tag () + (dolist (i (window-list) ret) + (with-selected-window i + (when (powerline-selected-window-active) + (setq ret (with-current-buffer (window-buffer) + evil-mode-line-tag)))))) (defun sd/powerline-center-theme_revised-2 () "Setup a mode-line with major and minor modes centered." @@ -131,6 +179,7 @@ window type." (active (powerline-selected-window-active)) (my-face1 'sd/powerline-active1 ) (face1 'powerline-active1) + ;; (face1 'mode-line-inactive) (face2 'powerline-active2) (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)))) @@ -138,29 +187,36 @@ window type." (cface (if active my-face1 face2)) (rface (if (and (not active) (or (= window-type 2) (= window-type 5))) face2 my-face1)) (lhs (cond ((or (= window-type 1) (= window-type 2)) - (my-build-left-below-mode-line separator-left lface face1)) + (append (list (powerline-raw (when evil-mode (get-active-window-evil-tag)) 'my-powerline-evil-normal) + (powerline-raw " WS " lface)) + (append + (my-build-left-below-mode-line separator-left lface face1)))) ((or (= window-type 3) (= window-type 6)) - (list (powerline-buffer-id lface 'l) - (powerline-raw "%* " lface) - (funcall separator-left lface face1 ))) + (list (powerline-buffer-id (my-get-buffer-name-face lface) 'l) + (unless (my-is-special-buffer) + (powerline-raw "%* " (my-get-buffer-name-face lface))) + (funcall separator-left (my-get-buffer-name-face lface) face1 ))) (t nil))) (center (cond ((or (= window-type 1) (= window-type 4)) (list (powerline-raw " " face1) - (funcall separator-right face1 cface) - (powerline-raw "%*" cface) - (powerline-buffer-id cface 'r) - (funcall separator-left cface face1))) + (funcall separator-right face1 (my-get-buffer-name-face cface)) + (unless (my-is-special-buffer) + (powerline-raw "%*" (my-get-buffer-name-face cface))) + (powerline-buffer-id (my-get-buffer-name-face cface) 'r) + (funcall separator-left (my-get-buffer-name-face cface) face1))) (t nil))) (rhs (cond ((or (= window-type 1) (= window-type 3)) - (list (funcall separator-right face1 rface) + (list (powerline-raw (format-time-string "%Y-%m-%d %a") face1 'r) + (funcall separator-right face1 rface) (powerline-raw (format-time-string " %I:%M %p ") rface 'r))) ((or (= window-type 2) (= window-type 5)) - (list (funcall separator-right face1 rface) - (powerline-raw "%*" rface) - (powerline-buffer-id rface 'r) - (powerline-raw " " rface))) + (list (funcall separator-right face1 (my-get-buffer-name-face rface)) + (unless (my-is-special-buffer) + (powerline-raw "%*" (my-get-buffer-name-face rface))) + (powerline-buffer-id (my-get-buffer-name-face rface) 'r) + (powerline-raw " " (my-get-buffer-name-face rface)))) (t nil)))) (concat (powerline-render lhs) @@ -171,6 +227,9 @@ window type." (sd/powerline-center-theme_revised-2) + + + (provide 'my-mode-line) ;;; my-mode-line.el ends here