conf-powerline.el 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. ;;; Code:
  2. (require 'powerline)
  3. (defvar which-func-current)
  4. (defvar which-func-keymap)
  5. ;; Basic
  6. (setq powerline-default-separator 'wave)
  7. (defun distopico:cycle-powerline-separators (&optional reverse)
  8. "Set Powerline separators in turn. If REVERSE is not nil, go backwards."
  9. (interactive)
  10. (let* ((fn (if reverse 'reverse 'identity))
  11. (separators (funcall fn '("arrow" "arrow-fade" "slant"
  12. "chamfer" "wave" "brace" "roundstub" "zigzag"
  13. "butt" "rounded" "contour" "curve")))
  14. (found nil))
  15. (while (not found)
  16. (progn (setq separators (append (cdr separators) (list (car separators))))
  17. (when (string= (car separators) powerline-default-separator)
  18. (progn (setq powerline-default-separator (cadr separators))
  19. (setq found t)
  20. (redraw-display)))))))
  21. (defun distopico:vc-modeline ()
  22. "Version control information."
  23. (when vc-mode
  24. (s-trim
  25. (concat vc-mode " "
  26. (when (buffer-file-name)
  27. (pcase (vc-state (buffer-file-name))
  28. (`up-to-date "")
  29. (`edited "*")
  30. (`added "➕")
  31. (`unregistered "?")
  32. (`removed "➖")
  33. (`needs-merge "⇆")
  34. (`needs-update "↥")
  35. (`ignored "∅")
  36. (_ " Unk"))) " "))))
  37. (defun distopico:which-function-modeline ()
  38. (when (and (boundp 'which-func-mode) which-func-mode)
  39. (let* ((current (format-mode-line which-func-current)))
  40. (when (string-match "{\\(.*\\)}" current)
  41. (setq current (match-string 1 current)))
  42. (propertize (concat "► " current)
  43. 'local-map which-func-keymap
  44. 'face 'which-func
  45. 'mouse-face 'mode-line-highlight
  46. 'help-echo "mouse-1: go to beginning\n\ mouse-2: toggle rest visibility\n\ mouse-3: go to end"))))
  47. (defun distopico:setup-powerline-theme ()
  48. "Setup custom theme mode-line."
  49. (interactive)
  50. (setq-default mode-line-format (distopico:powerline-theme)))
  51. (defun distopico:powerline-theme ()
  52. "Custom theme mode-line."
  53. '("%e"
  54. (:eval
  55. (let* ((active (powerline-selected-window-active))
  56. (mode-line-buffer-id (if active 'mode-line-buffer-id 'mode-line-buffer-id-inactive))
  57. (mode-line (if active 'mode-line 'mode-line-inactive))
  58. (face0 (if active 'powerline-active0 'powerline-inactive0))
  59. (face1 (if active 'powerline-active1 'powerline-inactive1))
  60. (face2 (if active 'powerline-active2 'powerline-inactive2))
  61. (separator-left (intern (format "powerline-%s-%s"
  62. powerline-default-separator
  63. (car powerline-default-separator-dir))))
  64. (separator-right (intern (format "powerline-%s-%s"
  65. powerline-default-separator
  66. (cdr powerline-default-separator-dir))))
  67. (lhs (list (powerline-raw "%*" face0 'l)
  68. ;; (powerline-buffer-size nil 'l)
  69. ;; (powerline-buffer-id nil 'l)
  70. (when powerline-display-mule-info
  71. (powerline-raw mode-line-mule-info face0 'l))
  72. (powerline-raw '(:eval
  73. (propertize
  74. "%b " 'help-echo
  75. (if (eq major-mode 'erc-mode)
  76. (powerline-raw mode-line-buffer-identification face0 'l)
  77. (buffer-file-name))))
  78. face0 'l)
  79. (powerline-raw "" face0)
  80. (funcall separator-left mode-line face1)
  81. (powerline-major-mode face1 'l)
  82. (powerline-process face1)
  83. ;; (powerline-minor-modes face1 'l)
  84. (powerline-narrow face1 'l)
  85. (powerline-raw " " face1)
  86. (funcall separator-left face1 face2)
  87. (when (and (boundp 'projectile-project-name)
  88. (not (string= "-" (projectile-project-name))))
  89. (powerline-raw '(:eval
  90. (format " Proj[%s]" (projectile-project-name)))
  91. face2 'r))
  92. (powerline-raw (distopico:vc-modeline) face2 'r)
  93. (when (and (boundp 'flymake-mode) flymake-mode)
  94. (powerline-raw '(:eval flymake-mode-line-format) face2 'r))
  95. (when (and (boundp 'multiple-cursors-mode) multiple-cursors-mode)
  96. (powerline-raw mc/mode-line face2 'r))
  97. (powerline-raw (distopico:which-function-modeline) face2 'l)))
  98. (rhs (list (when (eq major-mode 'jabber-chat-mode)
  99. (powerline-raw distopico:jabber-mode-line-format face2 'r))
  100. (when (and (boundp 'erc-track-minor-mode) erc-track-minor-mode)
  101. (powerline-raw erc-modified-channels-object face1 'l))
  102. (when (eq major-mode 'erc-mode)
  103. (powerline-raw '(:eval (distopico:erc-mode-line)) face2 'l))
  104. (when (eq major-mode 'gnu-social-mode)
  105. (powerline-raw '(:eval
  106. (format "%s " (gnu-social-mode-line-buffer-identification)))
  107. face2 'l))
  108. (when (and (boundp 'distopico:mu4e-mode-line-format) distopico:mu4e-mode-line-format)
  109. (powerline-raw distopico:mu4e-mode-line-format face2 'r))
  110. (when (and (boundp 'distopico:elfeed-mode-line-format) distopico:elfeed-mode-line-format)
  111. (powerline-raw distopico:elfeed-mode-line-format face2 'r))
  112. (powerline-raw "•" face2 'r)
  113. (powerline-raw global-mode-string face2 'r)
  114. (funcall separator-right face2 face1)
  115. (unless window-system
  116. (powerline-raw (char-to-string #xe0a1) face1 'l))
  117. (powerline-raw "%2l" face1 'l)
  118. (powerline-raw "•" face1 'l)
  119. (powerline-raw '(:eval
  120. (propertize "%3c" 'face
  121. (if (> (current-column) fill-column)
  122. 'font-lock-warning-face 'nil)))
  123. face1 'r)
  124. (funcall separator-right face1 face0)
  125. (powerline-raw " " face0)
  126. (powerline-raw "%4p" face0 'r)
  127. (when powerline-display-hud
  128. (powerline-hud face1 face2)))))
  129. (concat (powerline-render lhs)
  130. (powerline-fill face2 (powerline-width rhs))
  131. (powerline-render rhs))))))
  132. ;; Run
  133. (distopico:setup-powerline-theme)
  134. (provide 'conf-powerline)
  135. ;;; conf-powerline.el ends here