summaryrefslogtreecommitdiff
path: root/.config/emacs/modules/bd--modeline.el
blob: f2979237591a0f278b55e317a89e9eabac600aeb (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
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
;; -*- 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 m") '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.")


;;;; notification-server
(use-package ednc
  :init
  (defun get-num-notifications ()
    "Return number of active notifcations as a string."
    (format "%s" (length (ednc-notifications))))

  (defvar-local bd/notify-mode-line
      '(:eval (when (and (ednc-notifications) (mode-line-window-selected-p))
                (format " %s %s" (all-the-icons-material "notifications_active")
                        (propertize (get-num-notifications) 'face 'error))))
    "Formats the notification number.")
  (ednc-mode))


;;;; buffer name
(defun modeline-buffer-name ()
  "Return 'buffer-name' with proper spacing and icon."
  (format " %s %s" (all-the-icons-icon-for-file (buffer-name)) (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/notify-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/notify-mode-line
               bd/vc-mode-line
               "      "
               bd/emms-mode-line
               (mode-line-fill 34)
               bd/line-position
               "  "
               bd/time-mode-line))


(provide 'bd--modeline)