summaryrefslogtreecommitdiff
path: root/.config/emacs/modules/bd--modeline.el
blob: 59001737ae7788a4aa3928f4edab53a61b934c1e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
;; -*- lexical-binding: t; -*-


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Highly customized modeline. Note this currently requires        ;;
;; many of the previous modules to be loaded to function properly. ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(defun mode-line-fill (reserve)
  "Return empty space, leaving RESERVE space on the right."
  (unless reserve
    (setq reserve 20))
  (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)))))


;;;; remove mode-line-clutter
(define-minor-mode minor-mode-blackout-mode
  "Hides minor modes from the mode line."
  t)

(catch 'done
  (mapc (lambda (x)
          (when (and (consp x)
                     (equal (cadr x) '("" minor-mode-alist)))
            (let ((original (copy-sequence x)))
              (setcar x 'minor-mode-blackout-mode)
              (setcdr x (list "" original)))
            (throw 'done t)))
        mode-line-modes))

(global-set-key (kbd "C-c ,") 'minor-mode-blackout-mode)


;;;; time and date
(setq display-time-format "%m/%d/%y %H:%M (%a)"
      display-time-default-load-average nil)
(display-time)

(defvar-local bd/time-mode-line
    '(:eval
      (when (mode-line-window-selected-p)
        display-time-string))
  "displays current time and date in selected window.")


;;;; buffer name
(defun modeline-buffer-name ()
  "Return 'buffer-name' with proper spacing and icon."
  (format " %s %s" (all-the-icons-icon-for-mode major-mode) (buffer-name)))

(defvar-local bd/buffer-identification-mode-line
    '(:eval (format "%s" (modeline-buffer-name)))
  "Formats the modeline-buffer-name.")

;;;; pos
(defvar-local bd/line-position
    '(:eval
      (when (mode-line-window-selected-p)
        mode-line-position)))

;;;; git
(defun git-vc-modeline ()
  (let ((branch (mapconcat 'concat (cdr (split-string vc-mode "[:-]")) "-")))
    (concat
     (propertize (format " %s" (all-the-icons-octicon "git-branch"))
                 'face `(:height 1 :family ,(all-the-icons-octicon-family))
                 'display '(raise 0))
     (propertize (format " %s" branch))
     (propertize "  "))))

(defvar-local bd/vc-mode-line
    '(:eval (when (and vc-mode (not (eq major-mode 'magit-status-mode))) ; temp fix to avoid bug which occurs in magit buffer
              (format "%s"
                      (propertize (git-vc-modeline) 'face 'shadow))))
  "Formats the checked out git repository.")


;;;; emms
(setq emms-mode-line-icon-before-format (format "%s" (all-the-icons-fileicon "owl"))
      emms-mode-line-icon-enabled-p t)
(defvar-local bd/emms-mode-line
    '(:eval (when (and (mode-line-window-selected-p) emms-mode-line-string)
              (format "%s %s" emms-mode-line-string
                      emms-playing-time-string)))
  "Formats the currently playing emms track.")


(dolist (construct '(bd/time-mode-line
                     bd/buffer-identification-mode-line
                     bd/vc-mode-line
                     bd/emms-mode-line))
  (put construct 'risky-local-variable t))


(setq-default mode-line-format
              (list
               mode-line-front-space
               ;; mode-line-mule-info
               ;; mode-line-frame-identification
               bd/buffer-identification-mode-line
               " "
               mode-line-modes
               " "
               mode-line-modified
               bd/vc-mode-line
               "      "
               bd/emms-mode-line
               (mode-line-fill 34)
               bd/line-position
               "  "
               bd/time-mode-line))


(provide 'bd--modeline)