summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--readme.md10
-rwxr-xr-xsamples/padding-icon.sh56
2 files changed, 66 insertions, 0 deletions
diff --git a/readme.md b/readme.md
index 0cff8bf..fb10c3f 100644
--- a/readme.md
+++ b/readme.md
@@ -342,6 +342,16 @@ formats suitable for being displayed by the dzen2 status bar, wmii's
status bar or xmobar's `StdinReader`. See [i3status manual] for
further details.
+### Dynamically sizing xmobar
+
+See [this idea] by Jonas Camillus Jeppensen for a way of adapting
+dynamically xmobar's size and run it alongside a system tray widget
+such as trayer or stalonetray (although the idea is not limited to
+trays, really). For your convenience, there is a version of Jonas'
+script in [samples/padding-icon.sh](./samples/padding-icon.sh).
+
+[this idea]: https://github.com/jaor/xmobar/issues/239#issuecomment-233206552
+
## Command Line Options
xmobar can be either configured with a configuration file or with
diff --git a/samples/padding-icon.sh b/samples/padding-icon.sh
new file mode 100755
index 0000000..31f5eeb
--- /dev/null
+++ b/samples/padding-icon.sh
@@ -0,0 +1,56 @@
+#!/bin/bash
+
+# Detects the width of running window with name given as first
+# argument (xprop name '$1') and creates an XPM icon of that width,
+# 1px height, and transparent. Outputs an <icon>-tag for use in
+# xmobar to display the generated XPM icon.
+#
+# Run script from xmobar and trayer:
+# `Run Com "/where/ever/padding-icon.sh" ["panel"] "trayerpad" 10`
+# and use `%trayerpad%` in your template.
+# or, if you're using for instance stalonetray:
+# `Run Com "/where/ever/padding-icon.sh" ["stalonetray"] "tray" 10`
+
+# Very heavily based on Jonas Camillus Jeppensen code
+# https://github.com/jaor/xmobar/issues/239#issuecomment-233206552
+
+# Function to create a transparent Wx1 px XPM icon
+create_xpm_icon () {
+timestamp=$(date)
+pixels=$(for i in `seq $1`; do echo -n "."; done)
+
+cat << EOF > "$2"
+/* XPM *
+static char * trayer_pad_xpm[] = {
+/* This XPM icon is used for padding in xmobar to */
+/* leave room for trayer-srg. It is dynamically */
+/* updated by by trayer-pad-icon.sh which is run */
+/* by xmobar. */
+/* Created: ${timestamp} */
+/* <w/cols> <h/rows> <colors> <chars per pixel> */
+"$1 1 1 1",
+/* Colors (none: transparent) */
+". c none",
+/* Pixels */
+"$pixels"
+};
+EOF
+}
+
+# panel window name
+pname=${1:-panel}
+
+# Width of the trayer window
+width=$(xprop -name $pname | grep 'program specified minimum size' | cut -d ' ' -f 5)
+
+# Icon file name
+iconfile="/tmp/$pname-padding-${width:-0}px.xpm"
+
+# If the desired icon does not exist create it
+if [ ! -f $iconfile ]
+then
+ create_xpm_icon $width $iconfile
+fi
+
+# Output the icon tag for xmobar
+echo "<icon=${iconfile}/>"