aboutsummaryrefslogtreecommitdiffstats
path: root/mowedline
diff options
context:
space:
mode:
authorGravatar Tom Willemse2016-11-11 15:36:26 +0100
committerGravatar Tom Willemse2016-11-11 15:36:26 +0100
commit067430319865c7cee1eec588d0c6317aee6d2276 (patch)
tree060074b5362137d00cdd76c3b5eec322e3ff807d /mowedline
parent180cd7bd876ad21b353c50839c1e57f0661abbd4 (diff)
downloadnew-dotfiles-067430319865c7cee1eec588d0c6317aee6d2276.tar.gz
new-dotfiles-067430319865c7cee1eec588d0c6317aee6d2276.zip
Add email widget to mowedline
Diffstat (limited to 'mowedline')
-rw-r--r--mowedline/.config/mowedline/init.org173
-rw-r--r--mowedline/GNUmakefile1
2 files changed, 115 insertions, 59 deletions
diff --git a/mowedline/.config/mowedline/init.org b/mowedline/.config/mowedline/init.org
index 623353e..b89e225 100644
--- a/mowedline/.config/mowedline/init.org
+++ b/mowedline/.config/mowedline/init.org
@@ -1,3 +1,5 @@
+#+TITLE: Mowedline init
+
Load the =matchable= module so I can use =match-lambda=.
#+BEGIN_SRC scheme
@@ -11,74 +13,127 @@ Set the default font and color to something nicer.
(text-widget-color "#ededed")
#+END_SRC
-This formatter will parse the herbstluftwm tag status line, which
-looks like this:
-
-#+BEGIN_EXAMPLE
- #1 -2 :3 :4 :5 .6 .7 .8 .9
-#+END_EXAMPLE
-
-And turn it into something more useful. The symbols before the tag
-names (numbers) have the following meaning:
-
-- =#= :: This tag is currently active.
-- =-= :: This tag is visible on another monitor.
-- =:= :: This tag isn't displayed, but has windows on it.
-- =.= :: This tag isn't displayed and is empty.
-- =!= :: This tag has an urgent window on it.
-
-First the tag line has to be split into separate parts. Each tag
-status/name pair is split by a tab character and each status is only
-one character. So I split the whole string on tabs and then make a
-list out of each individual part, for easy access to the status
-character. So we end up with something like:
-
-#+BEGIN_EXAMPLE
- ((#\# #\1) (#\- #\2) (#\: #\3) ...)
-#+END_EXAMPLE
+Define a convenience function to check if a formatter's argument is
+not some text.
#+BEGIN_SRC scheme
- (define (split-tag-list str)
- (map string->list (string-split str "\t")))
+ (define (not-text? text)
+ (or (null? text) (and (not (pair? text)) (string-null? text))))
#+END_SRC
-Next we turn each part into something practical for display in
-mowedline.
+Define a convenience function that adds spaces around its argument if
+its argument is text.
#+BEGIN_SRC scheme
- (define tag-display
- (match-lambda
- ((#\# . name-list)
- (list '(color "#ececec" font "FontAwesome-10" "")
- (string-append " " (list->string name-list) " ")))
- ((#\- . _) '((color "#bfbfbf" font "FontAwesome-10" "") " "))
- ((#\: . _) '((color "#969696" font "FontAwesome-10" "") " "))
- ((#\! . _) '((color "#a85454" font "FontAwesome-10" "") " "))
- (_ '())))
-
- (define (tag-list-display tag-list)
- (map tag-display tag-list))
+ (define (text-maybe-pad-both text)
+ (if (not-text? text)
+ text
+ (list " " text " ")))
#+END_SRC
-Finally, bring it all together in a function that can be used as a
-mowedline text formatter.
+Define a convenience function to add a Font Awesome icon to a widget.
#+BEGIN_SRC scheme
- (define (tag-list-formatter text)
- (tag-list-display (split-tag-list text)))
+ (define (add-fa-icon icon)
+ (lambda (text)
+ (if (not-text? text)
+ text
+ (list (list 'font "FontAwesome-10"
+ (string-append " " icon " "))
+ text))))
#+END_SRC
-Create a mowedline window, put it at the bottom.
-
-#+BEGIN_SRC scheme
- (window #:position 'bottom
- #:width 1843
- #:margin-bottom 15
- #:margin-left 46
- #:margin-right 15
- #:background 'transparent
-
- (widget:text #:name "taglist" #:format tag-list-formatter)
- (widget:spacer #:flex 1)
- (widget:clock))
-#+END_SRC
+* Tag list
+
+ This formatter will parse the herbstluftwm tag status line, which
+ looks like this:
+
+ #+BEGIN_EXAMPLE
+ #1 -2 :3 :4 :5 .6 .7 .8 .9
+ #+END_EXAMPLE
+
+ And turn it into something more useful. The symbols before the tag
+ names (numbers) have the following meaning:
+
+ - =#= :: This tag is currently active.
+ - =-= :: This tag is visible on another monitor.
+ - =:= :: This tag isn't displayed, but has windows on it.
+ - =.= :: This tag isn't displayed and is empty.
+ - =!= :: This tag has an urgent window on it.
+
+ First the tag line has to be split into separate parts. Each tag
+ status/name pair is split by a tab character and each status is only
+ one character. So I split the whole string on tabs and then make a
+ list out of each individual part, for easy access to the status
+ character. So we end up with something like:
+
+ #+BEGIN_EXAMPLE
+ ((#\# #\1) (#\- #\2) (#\: #\3) ...)
+ #+END_EXAMPLE
+
+ #+BEGIN_SRC scheme
+ (define (split-tag-list str)
+ (map string->list (string-split str "\t")))
+ #+END_SRC
+
+ Next we turn each part into something practical for display in
+ mowedline.
+
+ #+BEGIN_SRC scheme
+ (define tag-display
+ (match-lambda
+ ((#\# . name-list)
+ (list '(color "#ececec" font "FontAwesome-10" "")
+ (string-append " " (list->string name-list) " ")))
+ ((#\- . _) '((color "#bfbfbf" font "FontAwesome-10" "") " "))
+ ((#\: . _) '((color "#969696" font "FontAwesome-10" "") " "))
+ ((#\! . _) '((color "#a85454" font "FontAwesome-10" "") " "))
+ (_ '())))
+
+ (define (tag-list-display tag-list)
+ (map tag-display tag-list))
+ #+END_SRC
+
+ Finally, bring it all together in a function that can be used as a
+ mowedline text formatter.
+
+ #+BEGIN_SRC scheme
+ (define (tag-list-formatter text)
+ (tag-list-display (split-tag-list text)))
+ #+END_SRC
+
+ Define the widget to be used in the window.
+
+ #+BEGIN_SRC scheme
+ (define taglist-widget
+ (widget:text #:name "taglist" #:format tag-list-formatter))
+ #+END_SRC
+
+* Email
+
+ Define a widget to show email notifications in.
+
+ #+BEGIN_SRC scheme
+ (define email-widget
+ (widget:text
+ #:name "email"
+ #:format (compose text-maybe-pad-both (add-fa-icon ""))))
+ #+END_SRC
+
+* The window
+
+ Create a mowedline window, put it at the bottom.
+
+ #+BEGIN_SRC scheme
+ (window #:position 'bottom
+ #:width 1843
+ #:margin-bottom 15
+ #:margin-left 46
+ #:margin-right 15
+ #:background 'transparent
+
+ taglist-widget
+ (widget:spacer #:flex 1)
+ email-widget
+ (widget:clock))
+ #+END_SRC
diff --git a/mowedline/GNUmakefile b/mowedline/GNUmakefile
index e393a0b..ee829e6 100644
--- a/mowedline/GNUmakefile
+++ b/mowedline/GNUmakefile
@@ -2,5 +2,6 @@ include ../dotfiles.mk
all: .config/mowedline/init.scm
+%.scm: SCHEME_IMPLEMENTATION = chicken
%.scm: %.org
$(call tangle,scheme)