X-Git-Url: http://47.100.26.94:8080/?a=blobdiff_plain;ds=sidebyside;f=emacs.d%2Felisp%2Fmy-mode-line.el;h=6c528ce6fada5e70e7d90379ad72e85ae6bf609f;hb=41b08d2b3e7d178c3523529d7249d80e7a4fae3a;hp=5843635028f30934560a39750c1fd09291522a65;hpb=638594fecdc9353ba07ebe74320c0a619580cbd1;p=dotfiles.git diff --git a/emacs.d/elisp/my-mode-line.el b/emacs.d/elisp/my-mode-line.el index 5843635..6c528ce 100644 --- a/emacs.d/elisp/my-mode-line.el +++ b/emacs.d/elisp/my-mode-line.el @@ -64,7 +64,11 @@ 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) + +(defface my-powerline-ws-bg '((t (:background "blue" :foreground "black" :inherit mode-line))) "My Powerline face 1 based on powerline-active1." :group 'powerline) @@ -72,15 +76,47 @@ window type." "Return the name list of workspaces gotten from `perspeen-modestring' without the properties." (split-string (substring-no-properties (cadr perspeen-modestring)) "|")) +(defun my-get-selected-ws-name () + (let ((ret)) + (dolist (i (split-string (cadr perspeen-modestring) "|") ret) + (if (equal (car (text-properties-at 1 i)) + 'face) + (setq ret (substring-no-properties i)))))) + (defun my-build-left-below-mode-line (separator lface face1) - (let ((l)) + (let ((l) + (selected-name (my-get-selected-ws-name)) + (name-list (my-get-ws-name-list))) (setq l (list (powerline-raw " workspace " lface))) - (mapc (lambda (i) - (setq l (append l (list (powerline-raw i lface)))) - (setq l (append l (list (funcall separator lface face1))))) - (my-get-ws-name-list)) + (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))) + (dolist (i (cdr name-list)) + (nconc l (list (powerline-raw i face1) + (funcall separator face1 face1))))) + (nconc 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)))) + (nconc l (list (powerline-raw (car name-list) (if current-selected 'my-powerline-hl-ws face1)) + (funcall separator (if current-selected 'my-powerline-hl-ws face1) (if next-selected 'my-powerline-hl-ws face1))))) + (pop name-list))) l)) +(defun my-is-special-buffer () + ;; suppose all buffer name started with a star is a special buffer. + (string-match "\*" (buffer-name))) + +(defun my-get-buffer-name-face (orignal-face &optional active) + (cond + ((not 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 sd/powerline-center-theme_revised-2 () "Setup a mode-line with major and minor modes centered." @@ -91,65 +127,43 @@ window type." (let* ((window-type (my-get-window-type)) (active (powerline-selected-window-active)) (my-face1 'sd/powerline-active1 ) - ;; (my-face-buffer-modified (if (and (sd/buffer-is-eshel-or-scratch) (buffer-modified-p) (not buffer-read-only)) - ;; 'sd/buffer-modified-active1 - ;; (if buffer-read-only 'sd/buffer-view-active1 - ;; my-face1))) (face1 'powerline-active1) (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)))) - (lface (if (and (not active) (or (= window-type 3) (= window-type 6))) - face2 - my-face1)) + (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)))) + (lface (if (and (not active) (or (= window-type 3) (= window-type 6))) face2 my-face1)) (cface (if active my-face1 face2)) - (rface (if (and (not active) (or (= window-type 2) (= window-type 5))) - face2 - my-face1)) + (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) - ;; (list (powerline-raw "==wwww===" 'powerline-active1)) - ;; (list (powerline-raw " workspace " lface) - - ;; ;; workspaces - - - ;; (funcall separator-left lface 'my-powerline-hl-ws) - ;; (powerline-raw " ws1 " 'my-powerline-hl-ws) - ;; (funcall separator-left 'my-powerline-hl-ws lface) - ;; (powerline-raw " ws2 " lface) - ;; (funcall separator-left lface face1) - ;; ) - ) + (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 active) 'l) + (unless (my-is-special-buffer) + (powerline-raw "%* " (my-get-buffer-name-face lface active))) + (funcall separator-left (my-get-buffer-name-face lface active) face1 ))) (t nil))) - (center (if (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)) - nil) - ) + (center (cond ((or (= window-type 1) (= window-type 4)) + (list (powerline-raw " " face1) + (funcall separator-right face1 (my-get-buffer-name-face cface active)) + (unless (my-is-special-buffer) + (powerline-raw "%*" (my-get-buffer-name-face cface active))) + (powerline-buffer-id (my-get-buffer-name-face cface active) 'r) + (funcall separator-left (my-get-buffer-name-face cface active) face1))) + (t + nil))) (rhs (cond ((or (= window-type 1) (= window-type 3)) - (list (funcall separator-right face1 rface) - (powerline-raw (format-time-string " %I:%M %p ") rface 'r))) + (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 active)) + (unless (my-is-special-buffer) + (powerline-raw "%*" (my-get-buffer-name-face rface active))) + (powerline-buffer-id (my-get-buffer-name-face rface active) 'r) + (powerline-raw " " (my-get-buffer-name-face rface active)))) (t - nil)) - )) + nil)))) (concat (powerline-render lhs) (powerline-fill-center face1 (/ (powerline-width center) 2.0)) (powerline-render center) @@ -158,6 +172,9 @@ window type." (sd/powerline-center-theme_revised-2) + + + (provide 'my-mode-line) ;;; my-mode-line.el ends here