summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--doc/compiling.org102
-rw-r--r--doc/plugins.org1892
-rw-r--r--doc/quick-start.org554
-rw-r--r--doc/using-haskell.org2
-rw-r--r--doc/window-managers.org482
5 files changed, 1516 insertions, 1516 deletions
diff --git a/doc/compiling.org b/doc/compiling.org
index 9a97967..e262ba0 100644
--- a/doc/compiling.org
+++ b/doc/compiling.org
@@ -37,74 +37,74 @@ them to =stack= directly:
stack install --flag xmobar:all_extensions
#+end_src
-*** Optional features
+** Optional features
- You can configure xmobar to include some optional plugins and
- features, which are not compiled by default. To that end, you need
- to add one or more flags to either the cabal install command or
- the configure setup step, as shown in the examples above.
+ You can configure xmobar to include some optional plugins and
+ features, which are not compiled by default. To that end, you need
+ to add one or more flags to either the cabal install command or
+ the configure setup step, as shown in the examples above.
- Extensions need additional libraries (listed below) that will be
- automatically downloaded and installed if you're using cabal
- install. Otherwise, you'll need to install them yourself.
+ Extensions need additional libraries (listed below) that will be
+ automatically downloaded and installed if you're using cabal
+ install. Otherwise, you'll need to install them yourself.
- - =with_dbus= Enables support for DBUS by making xmobar to publish a
- service on the session bus. Requires the [[http://hackage.haskell.org/package/dbus][dbus]] package.
+ - =with_dbus= Enables support for DBUS by making xmobar to publish a
+ service on the session bus. Requires the [[http://hackage.haskell.org/package/dbus][dbus]] package.
- - =with_threaded= Uses GHC's threaded runtime. Use this option if xmobar
- enters a high-CPU regime right after starting.
+ - =with_threaded= Uses GHC's threaded runtime. Use this option if xmobar
+ enters a high-CPU regime right after starting.
- - =with_utf8= UTF-8 support. Requires the [[http://hackage.haskell.org/package/utf8-string/][utf8-string]] package.
+ - =with_utf8= UTF-8 support. Requires the [[http://hackage.haskell.org/package/utf8-string/][utf8-string]] package.
- - =with_xft= Antialiased fonts. Requires the [[http://hackage.haskell.org/package/X11-xft/][X11-xft]] package. This
- option automatically enables UTF-8. To use XFT fonts you need to use
- the =xft:= prefix in the =font= configuration option. For instance:
+ - =with_xft= Antialiased fonts. Requires the [[http://hackage.haskell.org/package/X11-xft/][X11-xft]] package. This
+ option automatically enables UTF-8. To use XFT fonts you need to use
+ the =xft:= prefix in the =font= configuration option. For instance:
- #+begin_src haskell
- font = "xft:Times New Roman-10:italic"
- #+end_src
+ #+begin_src haskell
+ font = "xft:Times New Roman-10:italic"
+ #+end_src
- Or to have fallback fonts, just separate them by commas:
+ Or to have fallback fonts, just separate them by commas:
- #+begin_src haskell
- font = "xft:Open Sans:size=9,WenQuanYi Zen Hei:size=9"
- #+end_src
+ #+begin_src haskell
+ font = "xft:Open Sans:size=9,WenQuanYi Zen Hei:size=9"
+ #+end_src
- - =with_mpd= Enables support for the [[http://mpd.wikia.com/][MPD]] daemon. Requires the [[http://hackage.haskell.org/package/libmpd/][libmpd]]
- package.
+ - =with_mpd= Enables support for the [[http://mpd.wikia.com/][MPD]] daemon. Requires the [[http://hackage.haskell.org/package/libmpd/][libmpd]]
+ package.
- - =with_mpris= Enables support for MPRIS v1/v2 protocol. Requires the
- [[http://hackage.haskell.org/package/dbus][dbus]] and [[http://hackage.haskell.org/package/text][text]] packages.
+ - =with_mpris= Enables support for MPRIS v1/v2 protocol. Requires the
+ [[http://hackage.haskell.org/package/dbus][dbus]] and [[http://hackage.haskell.org/package/text][text]] packages.
- - =with_inotify= Support for inotify in modern Linux kernels. This
- option is needed for the MBox and Mail plugins to work. Requires the
- [[http://hackage.haskell.org/package/hinotify/][hinotify]] package.
+ - =with_inotify= Support for inotify in modern Linux kernels. This
+ option is needed for the MBox and Mail plugins to work. Requires the
+ [[http://hackage.haskell.org/package/hinotify/][hinotify]] package.
- - =with_nl80211= Support for wireless cards on Linux via nl80211 (all
- upstream drivers). Enables the Wireless plugin. Requires [netlink] and
- [cereal] packages.
+ - =with_nl80211= Support for wireless cards on Linux via nl80211 (all
+ upstream drivers). Enables the Wireless plugin. Requires [netlink] and
+ [cereal] packages.
- - =with_iwlib= Support for wireless cards via Wext ioctls (deprecated).
- Enables the Wireless plugin. No Haskell library is required, but you
- will need the [[http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/Tools.html][iwlib]] C library and headers in your system (e.g.,
- install =libiw-dev= in Debian-based systems or =wireless_tools= on
- Arch Linux). Conflicts with =with_nl80211=.
+ - =with_iwlib= Support for wireless cards via Wext ioctls (deprecated).
+ Enables the Wireless plugin. No Haskell library is required, but you
+ will need the [[http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/Tools.html][iwlib]] C library and headers in your system (e.g.,
+ install =libiw-dev= in Debian-based systems or =wireless_tools= on
+ Arch Linux). Conflicts with =with_nl80211=.
- - =with_alsa= Support for ALSA sound cards. Enables the Volume plugin.
- Requires the [[http://hackage.haskell.org/package/alsa-mixer][alsa-mixer]] package. To install the latter, you'll need
- the [[http://packages.debian.org/stable/libasound2-dev][libasound]] C library and headers in your system (e.g., install
- =libasound2-dev= in Debian-based systems).
+ - =with_alsa= Support for ALSA sound cards. Enables the Volume plugin.
+ Requires the [[http://hackage.haskell.org/package/alsa-mixer][alsa-mixer]] package. To install the latter, you'll need
+ the [[http://packages.debian.org/stable/libasound2-dev][libasound]] C library and headers in your system (e.g., install
+ =libasound2-dev= in Debian-based systems).
- - =with_datezone= Support for other timezones. Enables the DateZone
- plugin. Requires [[http://hackage.haskell.org/package/timezone-olson][timezone-olson]] and [[http://hackage.haskell.org/package/timezone-series][timezone-series]] package.
+ - =with_datezone= Support for other timezones. Enables the DateZone
+ plugin. Requires [[http://hackage.haskell.org/package/timezone-olson][timezone-olson]] and [[http://hackage.haskell.org/package/timezone-series][timezone-series]] package.
- - =with_xpm= Support for xpm image file format. This will allow loading
- .xpm files in =<icon>=. Requires the [[http://cgit.freedesktop.org/xorg/lib/libXpm][libXpm]] C library.
+ - =with_xpm= Support for xpm image file format. This will allow loading
+ .xpm files in =<icon>=. Requires the [[http://cgit.freedesktop.org/xorg/lib/libXpm][libXpm]] C library.
- - =with_uvmeter= Enables UVMeter plugin. The plugin shows UV data for
- Australia.
+ - =with_uvmeter= Enables UVMeter plugin. The plugin shows UV data for
+ Australia.
- - =with_weather= Support to display weather information. Enables Weather
- plugin.
+ - =with_weather= Support to display weather information. Enables Weather
+ plugin.
- - =all_extensions= Enables all the extensions above.
+ - =all_extensions= Enables all the extensions above.
diff --git a/doc/plugins.org b/doc/plugins.org
index 4923b11..45c024c 100644
--- a/doc/plugins.org
+++ b/doc/plugins.org
@@ -39,1117 +39,1117 @@
plugins that let you interact and control xmobar from window
managers.
-*** Icon Patterns
+** Icon Patterns
- Some monitors allow usage of strings that depend on some integer
- value from 0 to 8 by replacing all occurrences of =%%= with it
- (i.e. =<icon=/path/to/icon_%%.xpm/>= will be interpreted as
- =<icon=/path/to/icon_3.xpm/>= when the value is =3=, also =%= is
- interpreted as =%=, =%%= as =3=, =%%%= as =3%=, =%%%%= as =33= and so
- on). Essentially it allows to replace vertical bars with custom
- icons. For example,
+ Some monitors allow usage of strings that depend on some integer
+ value from 0 to 8 by replacing all occurrences of =%%= with it
+ (i.e. =<icon=/path/to/icon_%%.xpm/>= will be interpreted as
+ =<icon=/path/to/icon_3.xpm/>= when the value is =3=, also =%= is
+ interpreted as =%=, =%%= as =3=, =%%%= as =3%=, =%%%%= as =33= and so
+ on). Essentially it allows to replace vertical bars with custom
+ icons. For example,
- #+begin_src haskell
- Run Brightness
- [ "-t", "<ipat>"
- , "--"
- , "--brightness-icon-pattern", "<icon=bright_%%.xpm/>"
- ] 30
- #+end_src
+ #+begin_src haskell
+ Run Brightness
+ [ "-t", "<ipat>"
+ , "--"
+ , "--brightness-icon-pattern", "<icon=bright_%%.xpm/>"
+ ] 30
+ #+end_src
- Will display =bright_0.xpm= to =bright_8.xpm= depending on current
- brightness value.
+ Will display =bright_0.xpm= to =bright_8.xpm= depending on current
+ brightness value.
-*** Default Monitor Arguments
+** Default Monitor Arguments
- These are the options available for all monitors:
+ These are the options available for all monitors:
- - =-t= /string/ Output template
+ - =-t= /string/ Output template
- - Template for the monitor output. Field names must be enclosed
- between pointy brackets (=<foo>=) and will be substituted by the
- computed values. You can also specify the foreground (and
- optionally, background) color for a region by bracketing it between
- =<fc=fgcolor>= (or =<fc=fgcolor,bgcolor>=) and =</fc>=. The rest of
- the template is output verbatim.
- - Long option: =--template=
- - Default value: per monitor (see above).
+ - Template for the monitor output. Field names must be enclosed
+ between pointy brackets (=<foo>=) and will be substituted by the
+ computed values. You can also specify the foreground (and
+ optionally, background) color for a region by bracketing it between
+ =<fc=fgcolor>= (or =<fc=fgcolor,bgcolor>=) and =</fc>=. The rest of
+ the template is output verbatim.
+ - Long option: =--template=
+ - Default value: per monitor (see above).
- - =-H= /number/ The high threshold.
+ - =-H= /number/ The high threshold.
- - Numerical values higher than /number/ will be displayed with the
- color specified by =-h= (see below).
- - Long option: =--High=
- - Default value: 66
+ - Numerical values higher than /number/ will be displayed with the
+ color specified by =-h= (see below).
+ - Long option: =--High=
+ - Default value: 66
- - =-L= /number/ The low threshold.
+ - =-L= /number/ The low threshold.
- - Numerical values higher than /number/ and lower than the high
- threshold will be displayed with the color specified by =-n= (see
- below). Values lower than /number/ will use the =-l= color.
- - Long option: =--Low=
- - Default value: 33
+ - Numerical values higher than /number/ and lower than the high
+ threshold will be displayed with the color specified by =-n= (see
+ below). Values lower than /number/ will use the =-l= color.
+ - Long option: =--Low=
+ - Default value: 33
- - =-h= /color/ High threshold color.
+ - =-h= /color/ High threshold color.
- - Color for displaying values above the high threshold. /color/ can be
- either a name (e.g. "blue") or an hexadecimal RGB (e.g. "#FF0000").
- - Long option: =--high=
- - Default: none (use the default foreground).
+ - Color for displaying values above the high threshold. /color/ can be
+ either a name (e.g. "blue") or an hexadecimal RGB (e.g. "#FF0000").
+ - Long option: =--high=
+ - Default: none (use the default foreground).
- - =-n= /color/ Color for 'normal' values
+ - =-n= /color/ Color for 'normal' values
- - Color used for values greater than the low threshold but lower than
- the high one.
- - Long option: =--normal=
- - Default: none (use the default foreground).
+ - Color used for values greater than the low threshold but lower than
+ the high one.
+ - Long option: =--normal=
+ - Default: none (use the default foreground).
- - =-l= /color/ The low threshold color
+ - =-l= /color/ The low threshold color
- - Color for displaying values below the low threshold.
- - Long option: =--low=
- - Default: none (use the default foreground).
+ - Color for displaying values below the low threshold.
+ - Long option: =--low=
+ - Default: none (use the default foreground).
- - =-S= /boolean/ Display optional suffixes
+ - =-S= /boolean/ Display optional suffixes
- - When set to a true designator ("True", "Yes" or "On"), optional
- value suffixes such as the '%' symbol or optional units will be
- displayed.
- - Long option: =--suffix=
- - Default: False.
+ - When set to a true designator ("True", "Yes" or "On"), optional
+ value suffixes such as the '%' symbol or optional units will be
+ displayed.
+ - Long option: =--suffix=
+ - Default: False.
- - =-p= /number/ Percentages padding
+ - =-p= /number/ Percentages padding
- - Width, in number of digits, for quantities representing percentages.
- For instance =-p 3= means that all percentages in the monitor will
- be represented using 3 digits.
- - Long option: =--ppad=
- - Default value: 0 (don't pad)
+ - Width, in number of digits, for quantities representing percentages.
+ For instance =-p 3= means that all percentages in the monitor will
+ be represented using 3 digits.
+ - Long option: =--ppad=
+ - Default value: 0 (don't pad)
- - =-d= /number/ Decimal digits
+ - =-d= /number/ Decimal digits
- - Number of digits after the decimal period to use in float values.
- - Long option: =--ddigits=
- - Default value: 0 (display only integer part)
+ - Number of digits after the decimal period to use in float values.
+ - Long option: =--ddigits=
+ - Default value: 0 (display only integer part)
- - =-m= /number/ Minimum field width
+ - =-m= /number/ Minimum field width
- - Minimum width, in number of characters, of the fields in the monitor
- template. Values whose printed representation is shorter than this
- value will be padded using the padding characters given by the =-c=
- option with the alignment specified by =-a= (see below).
- - Long option: =--minwidth=
- - Default: 0
+ - Minimum width, in number of characters, of the fields in the monitor
+ template. Values whose printed representation is shorter than this
+ value will be padded using the padding characters given by the =-c=
+ option with the alignment specified by =-a= (see below).
+ - Long option: =--minwidth=
+ - Default: 0
- - =-M= /number/ Maximum field width
+ - =-M= /number/ Maximum field width
- - Maximum width, in number of characters, of the fields in the monitor
- template. Values whose printed representation is longer than this
- value will be truncated.
- - Long option: =--maxwidth=
- - Default: 0 (no maximum width)
+ - Maximum width, in number of characters, of the fields in the monitor
+ template. Values whose printed representation is longer than this
+ value will be truncated.
+ - Long option: =--maxwidth=
+ - Default: 0 (no maximum width)
- - =-e= /string/ Maximum width ellipsis
+ - =-e= /string/ Maximum width ellipsis
- - Ellipsis to be added to the field when it has reached its max width.
- - Long option: =--maxwidthellipsis=
- - Default: "" (no ellipsis)
+ - Ellipsis to be added to the field when it has reached its max width.
+ - Long option: =--maxwidthellipsis=
+ - Default: "" (no ellipsis)
- - =-w= /number/ Fixed field width
+ - =-w= /number/ Fixed field width
- - All fields will be set to this width, padding or truncating as
- needed.
- - Long option: =--width=
- - Default: 0 (variable width)
+ - All fields will be set to this width, padding or truncating as
+ needed.
+ - Long option: =--width=
+ - Default: 0 (variable width)
- - =-T= /number/ Maximum total width
+ - =-T= /number/ Maximum total width
- - Maximum total width of the text.
- - Long option: =--maxtwidth=
- - Default: 0 (no limit)
+ - Maximum total width of the text.
+ - Long option: =--maxtwidth=
+ - Default: 0 (no limit)
- - =-E= /string/ Maximum total width ellipsis
+ - =-E= /string/ Maximum total width ellipsis
- - Ellipsis to be added to the total text when it has reached its max
- width.
- - Long option: =--maxtwidthellipsis=
- - Default: "" (no ellipsis)
+ - Ellipsis to be added to the total text when it has reached its max
+ width.
+ - Long option: =--maxtwidthellipsis=
+ - Default: "" (no ellipsis)
- - =-c= /string/
+ - =-c= /string/
- - Characters used for padding. The characters of /string/ are used
- cyclically. E.g., with =-P +- -w 6=, a field with value "foo" will
- be represented as "+-+foo".
- - Long option: =--padchars=
- - Default value: " "
+ - Characters used for padding. The characters of /string/ are used
+ cyclically. E.g., with =-P +- -w 6=, a field with value "foo" will
+ be represented as "+-+foo".
+ - Long option: =--padchars=
+ - Default value: " "
- - =-a= r|l Field alignment
+ - =-a= r|l Field alignment
- - Whether to use right (r) or left (l) alignment of field values when
- padding.
- - Long option: =--align=
- - Default value: r (padding to the left)
+ - Whether to use right (r) or left (l) alignment of field values when
+ padding.
+ - Long option: =--align=
+ - Default value: r (padding to the left)
- - =-b= /string/ Bar background
+ - =-b= /string/ Bar background
- - Characters used, cyclically, to draw the background of bars. For
- instance, if you set this option to "·.", an empty bar will look
- like this: =·.·.·.·.·.=
- - Long option: =--bback=
- - Default value: ":"
+ - Characters used, cyclically, to draw the background of bars. For
+ instance, if you set this option to "·.", an empty bar will look
+ like this: =·.·.·.·.·.=
+ - Long option: =--bback=
+ - Default value: ":"
- - =-f= /string/ Bar foreground
+ - =-f= /string/ Bar foreground
- - Characters used, cyclically, to draw the foreground of bars.
- - Long option: =--bfore=
- - Default value: "#"
+ - Characters used, cyclically, to draw the foreground of bars.
+ - Long option: =--bfore=
+ - Default value: "#"
- - =-W= /number/ Bar width
+ - =-W= /number/ Bar width
- - Total number of characters used to draw bars.
- - Long option: =--bwidth=
- - Default value: 10
- - Special value: 0. When this parameter is 0, the percentage to
- display is interpreted as a position in the bar foreground string
- (given by =-f=), and the character at that position is displayed.
+ - Total number of characters used to draw bars.
+ - Long option: =--bwidth=
+ - Default value: 10
+ - Special value: 0. When this parameter is 0, the percentage to
+ display is interpreted as a position in the bar foreground string
+ (given by =-f=), and the character at that position is displayed.
- - =-x= /string/ N/A string
+ - =-x= /string/ N/A string
- - String to be used when the monitor is not available
- - Long option: =--nastring=
- - Default value: "N/A"
+ - String to be used when the monitor is not available
+ - Long option: =--nastring=
+ - Default value: "N/A"
- Commands' arguments must be set as a list. E.g.:
+ Commands' arguments must be set as a list. E.g.:
- #+begin_src haskell
- Run Weather "EGPF" ["-t", "<station>: <tempC>C"] 36000
- #+end_src
+ #+begin_src haskell
+ Run Weather "EGPF" ["-t", "<station>: <tempC>C"] 36000
+ #+end_src
+
+ In this case xmobar will run the weather monitor, getting information
+ for the weather station ID EGPF (Glasgow Airport, as a homage to GHC)
+ every hour (36000 tenth of seconds), with a template that will output
+ something like:
- In this case xmobar will run the weather monitor, getting information
- for the weather station ID EGPF (Glasgow Airport, as a homage to GHC)
- every hour (36000 tenth of seconds), with a template that will output
- something like:
+ #+begin_src shell
+ Glasgow Airport: 16.0C
+ #+end_src
- #+begin_src shell
- Glasgow Airport: 16.0C
+** Battery Monitors
+*** =Battery Args RefreshRate=
+
+ Same as
+
+ #+begin_src haskell
+ BatteryP ["BAT", "BAT0", "BAT1", "BAT2"] Args RefreshRate
#+end_src
-*** Battery Monitors
-***** =Battery Args RefreshRate=
+*** =BatteryP Dirs Args RefreshRate=
+ :PROPERTIES:
+ :CUSTOM_ID: batteryp-dirs-args-refreshrate
+ :END:
- Same as
+ - Aliases to =battery=
+
+ - Dirs: list of directories in =/sys/class/power_supply/= where to look
+ for the ACPI files of each battery. Example: =["BAT0","BAT1","BAT2"]=.
+ Only up to 3 existing directories will be searched.
+
+ - Args: default monitor arguments, plus the following specific ones
+ (these options, being specific to the monitor, are to be specified
+ after a =--= in the argument list):
+
+ - =-O=: string for AC "on" status (default: "On")
+ - =-i=: string for AC "idle" status (default: "On")
+ - =-o=: string for AC "off" status (default: "Off")
+ - =-L=: low power (=watts=) threshold (default: 10)
+ - =-H=: high power threshold (default: 12)
+ - =-l=: color to display power lower than the =-L= threshold
+ - =-m=: color to display power lower than the =-H= threshold
+ - =-h=: color to display power higher than the =-H= threshold
+ - =-p=: color to display positive power (battery charging)
+ - =-f=: file in =/sys/class/power_supply= with AC info (default:
+ "AC/online")
+ - =-A=: a number between 0 and 100, threshold below which the action
+ given by =-a=, if any, is performed (default: 5)
+ - =-a=: a string with a system command that is run when the percentage
+ left in the battery is less or equal than the threshold given by the
+ =-A= option. If not present, no action is undertaken.
+ - =-P=: to include a percentage symbol in =left=.
+ - =--on-icon-pattern=: dynamic string for current battery charge when
+ AC is "on" in =leftipat=.
+ - =--off-icon-pattern=: dynamic string for current battery charge when
+ AC is "off" in =leftipat=.
+ - =--idle-icon-pattern=: dynamic string for current battery charge
+ when AC is "idle" in =leftipat=.
+ - =--lows=: string for AC "off" status and power lower than the =-L=
+ threshold (default: "")
+ - =--mediums=: string for AC "off" status and power lower than the
+ =-H= threshold (default: "")
+ - =--highs=: string for AC "off" status and power higher than the =-H=
+ threshold (default: "")
+
+ - Variables that can be used with the =-t/--template= argument:
+ =left=, =leftbar=, =leftvbar=, =leftipat=, =timeleft=, =watts=,
+ =acstatus=
+
+ - Default template: =Batt: <watts>, <left>% / <timeleft>=
+
+ - Example (note that you need "--" to separate regular monitor options
+ from Battery's specific ones):
#+begin_src haskell
- BatteryP ["BAT", "BAT0", "BAT1", "BAT2"] Args RefreshRate
+ Run BatteryP ["BAT0"]
+ ["-t", "<acstatus><watts> (<left>%)",
+ "-L", "10", "-H", "80", "-p", "3",
+ "--", "-O", "<fc=green>On</fc> - ", "-i", "",
+ "-L", "-15", "-H", "-5",
+ "-l", "red", "-m", "blue", "-h", "green",
+ "-a", "notify-send -u critical 'Battery running out!!'",
+ "-A", "3"]
+ 600
#+end_src
-***** =BatteryP Dirs Args RefreshRate=
- :PROPERTIES:
- :CUSTOM_ID: batteryp-dirs-args-refreshrate
- :END:
-
- - Aliases to =battery=
-
- - Dirs: list of directories in =/sys/class/power_supply/= where to look
- for the ACPI files of each battery. Example: =["BAT0","BAT1","BAT2"]=.
- Only up to 3 existing directories will be searched.
-
- - Args: default monitor arguments, plus the following specific ones
- (these options, being specific to the monitor, are to be specified
- after a =--= in the argument list):
-
- - =-O=: string for AC "on" status (default: "On")
- - =-i=: string for AC "idle" status (default: "On")
- - =-o=: string for AC "off" status (default: "Off")
- - =-L=: low power (=watts=) threshold (default: 10)
- - =-H=: high power threshold (default: 12)
- - =-l=: color to display power lower than the =-L= threshold
- - =-m=: color to display power lower than the =-H= threshold
- - =-h=: color to display power higher than the =-H= threshold
- - =-p=: color to display positive power (battery charging)
- - =-f=: file in =/sys/class/power_supply= with AC info (default:
- "AC/online")
- - =-A=: a number between 0 and 100, threshold below which the action
- given by =-a=, if any, is performed (default: 5)
- - =-a=: a string with a system command that is run when the percentage
- left in the battery is less or equal than the threshold given by the
- =-A= option. If not present, no action is undertaken.
- - =-P=: to include a percentage symbol in =left=.
- - =--on-icon-pattern=: dynamic string for current battery charge when
- AC is "on" in =leftipat=.
- - =--off-icon-pattern=: dynamic string for current battery charge when
- AC is "off" in =leftipat=.
- - =--idle-icon-pattern=: dynamic string for current battery charge
- when AC is "idle" in =leftipat=.
- - =--lows=: string for AC "off" status and power lower than the =-L=
- threshold (default: "")
- - =--mediums=: string for AC "off" status and power lower than the
- =-H= threshold (default: "")
- - =--highs=: string for AC "off" status and power higher than the =-H=
- threshold (default: "")
-
- - Variables that can be used with the =-t/--template= argument:
- =left=, =leftbar=, =leftvbar=, =leftipat=, =timeleft=, =watts=,
- =acstatus=
-
- - Default template: =Batt: <watts>, <left>% / <timeleft>=
-
- - Example (note that you need "--" to separate regular monitor options
- from Battery's specific ones):
+ In the above example, the thresholds before the =--= separator affect
+ only the =<left>= and =<leftbar>= fields, while those after the
+ separator affect how =<watts>= is displayed. For this monitor, neither
+ the generic nor the specific options have any effect on =<timeleft>=.
+ We are also telling the monitor to execute the unix command
+ =notify-send= when the percentage left in the battery reaches 6%.
- #+begin_src haskell
- Run BatteryP ["BAT0"]
- ["-t", "<acstatus><watts> (<left>%)",
- "-L", "10", "-H", "80", "-p", "3",
- "--", "-O", "<fc=green>On</fc> - ", "-i", "",
- "-L", "-15", "-H", "-5",
- "-l", "red", "-m", "blue", "-h", "green",
- "-a", "notify-send -u critical 'Battery running out!!'",
- "-A", "3"]
- 600
- #+end_src
+ It is also possible to specify template variables in the =-O= and =-o=
+ switches, as in the following example:
- In the above example, the thresholds before the =--= separator affect
- only the =<left>= and =<leftbar>= fields, while those after the
- separator affect how =<watts>= is displayed. For this monitor, neither
- the generic nor the specific options have any effect on =<timeleft>=.
- We are also telling the monitor to execute the unix command
- =notify-send= when the percentage left in the battery reaches 6%.
-
- It is also possible to specify template variables in the =-O= and =-o=
- switches, as in the following example:
+ #+begin_src haskell
+ Run BatteryP ["BAT0"]
+ ["-t", "<acstatus>"
+ , "-L", "10", "-H", "80"
+ , "-l", "red", "-h", "green"
+ , "--", "-O", "Charging", "-o", "Battery: <left>%"
+ ] 10
+ #+end_src
- #+begin_src haskell
- Run BatteryP ["BAT0"]
- ["-t", "<acstatus>"
- , "-L", "10", "-H", "80"
- , "-l", "red", "-h", "green"
- , "--", "-O", "Charging", "-o", "Battery: <left>%"
- ] 10
- #+end_src
+ - The "idle" AC state is selected whenever the AC power entering the
+ battery is zero.
- - The "idle" AC state is selected whenever the AC power entering the
- battery is zero.
+*** =BatteryN Dirs Args RefreshRate Alias=
-***** =BatteryN Dirs Args RefreshRate Alias=
+ Works like =BatteryP=, but lets you specify an alias for the
+ monitor other than "battery". Useful in case you one separate
+ monitors for more than one battery.
+** Cpu and Memory Monitors
+*** =Cpu Args RefreshRate=
- Works like =BatteryP=, but lets you specify an alias for the
- monitor other than "battery". Useful in case you one separate
- monitors for more than one battery.
-*** Cpu and Memory Monitors
-***** =Cpu Args RefreshRate=
+ - Aliases to =cpu=
+ - Args: default monitor arguments, plus:
- - Aliases to =cpu=
- - Args: default monitor arguments, plus:
+ - =--load-icon-pattern=: dynamic string for cpu load in =ipat=
- - =--load-icon-pattern=: dynamic string for cpu load in =ipat=
+ - Thresholds refer to percentage of CPU load
+ - Variables that can be used with the =-t/--template= argument:
+ =total=, =bar=, =vbar=, =ipat=, =user=, =nice=, =system=, =idle=,
+ =iowait=
+ - Default template: =Cpu: <total>%=
- - Thresholds refer to percentage of CPU load
- - Variables that can be used with the =-t/--template= argument:
- =total=, =bar=, =vbar=, =ipat=, =user=, =nice=, =system=, =idle=,
- =iowait=
- - Default template: =Cpu: <total>%=
+*** =MultiCpu Args RefreshRate=
-***** =MultiCpu Args RefreshRate=
+ - Aliases to =multicpu=
+ - Args: default monitor arguments, plus:
- - Aliases to =multicpu=
- - Args: default monitor arguments, plus:
+ - =--load-icon-pattern=: dynamic string for overall cpu load in
+ =ipat=.
+ - =--load-icon-patterns=: dynamic string for each cpu load in
+ =autoipat=, =ipat{i}=. This option can be specified several times.
+ nth option corresponds to nth cpu.
+ - =--fallback-icon-pattern=: dynamic string used by =autoipat= and
+ =ipat{i}= when no =--load-icon-patterns= has been provided for
+ =cpu{i}=
+ - =--contiguous-icons=: flag (no value needs to be provided) that
+ causes the load icons to be drawn without padding.
- - =--load-icon-pattern=: dynamic string for overall cpu load in
- =ipat=.
- - =--load-icon-patterns=: dynamic string for each cpu load in
- =autoipat=, =ipat{i}=. This option can be specified several times.
- nth option corresponds to nth cpu.
- - =--fallback-icon-pattern=: dynamic string used by =autoipat= and
- =ipat{i}= when no =--load-icon-patterns= has been provided for
- =cpu{i}=
- - =--contiguous-icons=: flag (no value needs to be provided) that
- causes the load icons to be drawn without padding.
+ - Thresholds refer to percentage of CPU load
+ - Variables that can be used with the =-t/--template= argument:
+ =autototal=, =autobar=, =autovbar=, =autoipat=, =autouser=,
+ =autonice=, =autosystem=, =autoidle=, =total=, =bar=, =vbar=, =ipat=,
+ =user=, =nice=, =system=, =idle=, =total0=, =bar0=, =vbar0=, =ipat0=,
+ =user0=, =nice0=, =system0=, =idle0=, ... The auto* variables
+ automatically detect the number of CPUs on the system and display one
+ entry for each.
+ - Default template: =Cpu: <total>%=
- - Thresholds refer to percentage of CPU load
- - Variables that can be used with the =-t/--template= argument:
- =autototal=, =autobar=, =autovbar=, =autoipat=, =autouser=,
- =autonice=, =autosystem=, =autoidle=, =total=, =bar=, =vbar=, =ipat=,
- =user=, =nice=, =system=, =idle=, =total0=, =bar0=, =vbar0=, =ipat0=,
- =user0=, =nice0=, =system0=, =idle0=, ... The auto* variables
- automatically detect the number of CPUs on the system and display one
- entry for each.
- - Default template: =Cpu: <total>%=
+*** =CpuFreq Args RefreshRate=
-***** =CpuFreq Args RefreshRate=
+ - Aliases to =cpufreq=
- - Aliases to =cpufreq=
+ - Args: default monitor arguments
- - Args: default monitor arguments
+ - Thresholds refer to frequency in GHz
- - Thresholds refer to frequency in GHz
+ - Variables that can be used with the =-t/--template= argument:
+ =cpu0=, =cpu1=, .., =cpuN=, give the current frequency of the
+ respective CPU core, and =max=, =min= and =avg= the maximum, minimum
+ and average frequency over all available cores.
- - Variables that can be used with the =-t/--template= argument:
- =cpu0=, =cpu1=, .., =cpuN=, give the current frequency of the
- respective CPU core, and =max=, =min= and =avg= the maximum, minimum
- and average frequency over all available cores.
+ - Default template: =Freq: <cpu0>GHz=
- - Default template: =Freq: <cpu0>GHz=
+ - This monitor requires acpi_cpufreq module to be loaded in kernel
- - This monitor requires acpi_cpufreq module to be loaded in kernel
+ - Example:
- - Example:
+ #+begin_src haskell
+ Run CpuFreq ["-t", "Freq:<cpu0>|<cpu1>GHz", "-L", "0", "-H", "2",
+ "-l", "lightblue", "-n","white", "-h", "red"] 50
- #+begin_src haskell
- Run CpuFreq ["-t", "Freq:<cpu0>|<cpu1>GHz", "-L", "0", "-H", "2",
- "-l", "lightblue", "-n","white", "-h", "red"] 50
+ Run CpuFreq ["-t", "Freq:<avg> GHz", "-L", "0", "-H", "2",
+ "-l", "lightblue", "-n","white", "-h", "red"] 50
+ #+end_src
- Run CpuFreq ["-t", "Freq:<avg> GHz", "-L", "0", "-H", "2",
- "-l", "lightblue", "-n","white", "-h", "red"] 50
- #+end_src
+*** =CoreTemp Args RefreshRate=
-***** =CoreTemp Args RefreshRate=
+ - Aliases to =coretemp=
- - Aliases to =coretemp=
+ - Args: default monitor arguments
- - Args: default monitor arguments
+ - Thresholds refer to temperature in degrees
- - Thresholds refer to temperature in degrees
+ - Variables that can be used with the =-t/--template= argument:
+ =core0=, =core1=, .., =coreN=
- - Variables that can be used with the =-t/--template= argument:
- =core0=, =core1=, .., =coreN=
+ - Default template: =Temp: <core0>C=
- - Default template: =Temp: <core0>C=
+ - This monitor requires coretemp module to be loaded in kernel
- - This monitor requires coretemp module to be loaded in kernel
+ - Example:
- - Example:
+ #+begin_src haskell
+ Run CoreTemp ["-t", "Temp:<core0>|<core1>C",
+ "-L", "40", "-H", "60",
+ "-l", "lightblue", "-n", "gray90", "-h", "red"] 50
+ #+end_src
- #+begin_src haskell
- Run CoreTemp ["-t", "Temp:<core0>|<core1>C",
- "-L", "40", "-H", "60",
- "-l", "lightblue", "-n", "gray90", "-h", "red"] 50
- #+end_src
+*** =MultiCoreTemp Args RefreshRate=
-***** =MultiCoreTemp Args RefreshRate=
+ - Aliases to =multicoretemp=
- - Aliases to =multicoretemp=
+ - Args: default monitor arguments, plus:
- - Args: default monitor arguments, plus:
+ - =--max-icon-pattern=: dynamic string for overall cpu load in
+ =maxipat=.
+ - =--avg-icon-pattern=: dynamic string for overall cpu load in
+ =avgipat=.
+ - =--mintemp=: temperature in degree Celsius, that sets the lower
+ limit for percentage calculation.
+ - =--maxtemp=: temperature in degree Celsius, that sets the upper
+ limit for percentage calculation.
+ - =--hwmon-path=: this monitor tries to find coretemp devices by
+ looking for them in directories following the pattern
+ =/sys/bus/platform/devices/coretemp.*/hwmon/hwmon*=, but some
+ processors (notably Ryzen) might expose those files in a different
+ tree (e.g., Ryzen) puts them somewhere in "/sys/class/hwmon/hwmon*",
+ and the lookup is most costly. With this option, it is possible to
+ explicitly specify the full path to the directory where the
+ =tempN_label= and =tempN_input= files are located.
- - =--max-icon-pattern=: dynamic string for overall cpu load in
- =maxipat=.
- - =--avg-icon-pattern=: dynamic string for overall cpu load in
- =avgipat=.
- - =--mintemp=: temperature in degree Celsius, that sets the lower
- limit for percentage calculation.
- - =--maxtemp=: temperature in degree Celsius, that sets the upper
- limit for percentage calculation.
- - =--hwmon-path=: this monitor tries to find coretemp devices by
- looking for them in directories following the pattern
- =/sys/bus/platform/devices/coretemp.*/hwmon/hwmon*=, but some
- processors (notably Ryzen) might expose those files in a different
- tree (e.g., Ryzen) puts them somewhere in "/sys/class/hwmon/hwmon*",
- and the lookup is most costly. With this option, it is possible to
- explicitly specify the full path to the directory where the
- =tempN_label= and =tempN_input= files are located.
+ - Thresholds refer to temperature in degree Celsius
- - Thresholds refer to temperature in degree Celsius
+ - Variables that can be used with the =-t/--template= argument: =max=,
+ =maxpc=, =maxbar=, =maxvbar=, =maxipat=, =avg=, =avgpc=, =avgbar=,
+ =avgvbar=, =avgipat=, =core0=, =core1=, ..., =coreN=
- - Variables that can be used with the =-t/--template= argument: =max=,
- =maxpc=, =maxbar=, =maxvbar=, =maxipat=, =avg=, =avgpc=, =avgbar=,
- =avgvbar=, =avgipat=, =core0=, =core1=, ..., =coreN=
+ The /pc, /bar, /vbar and /ipat variables are showing percentages on
+ the scale defined by =--mintemp= and =--maxtemp=. The max* and avg*
+ variables to the highest and the average core temperature.
- The /pc, /bar, /vbar and /ipat variables are showing percentages on
- the scale defined by =--mintemp= and =--maxtemp=. The max* and avg*
- variables to the highest and the average core temperature.
+ - Default template: =Temp: <max>°C - <maxpc>%=
- - Default template: =Temp: <max>°C - <maxpc>%=
+ - This monitor requires coretemp module to be loaded in kernel
- - This monitor requires coretemp module to be loaded in kernel
+ - Example:
- - Example:
+ #+begin_src haskell
+ Run MultiCoreTemp ["-t", "Temp: <avg>°C | <avgpc>%",
+ "-L", "60", "-H", "80",
+ "-l", "green", "-n", "yellow", "-h", "red",
+ "--", "--mintemp", "20", "--maxtemp", "100"] 50
+ #+end_src
- #+begin_src haskell
- Run MultiCoreTemp ["-t", "Temp: <avg>°C | <avgpc>%",
- "-L", "60", "-H", "80",
- "-l", "green", "-n", "yellow", "-h", "red",
- "--", "--mintemp", "20", "--maxtemp", "100"] 50
- #+end_src
+*** =K10Temp Slot Args RefreshRate=
-***** =K10Temp Slot Args RefreshRate=
+ - Aliases to =k10temp=
- - Aliases to =k10temp=
+ - Slot: The PCI slot address of the k10temp device as a string. You
+ can find it as a subdirectory in =/sys/bus/pci/drivers/k10temp/=.
- - Slot: The PCI slot address of the k10temp device as a string. You
- can find it as a subdirectory in =/sys/bus/pci/drivers/k10temp/=.
+ - Args: default monitor arguments
- - Args: default monitor arguments
+ - Thresholds refer to temperature in degrees
- - Thresholds refer to temperature in degrees
+ - Variables that can be used with the =-t/--template= argument:
+ =Tctl=, =Tdie=, =Tccd1=, .., =Tccd8=
- - Variables that can be used with the =-t/--template= argument:
- =Tctl=, =Tdie=, =Tccd1=, .., =Tccd8=
+ - Default template: =Temp: <Tdie>C=
- - Default template: =Temp: <Tdie>C=
+ - This monitor requires k10temp module to be loaded in kernel
- - This monitor requires k10temp module to be loaded in kernel
+ - It is important to note that not all measurements are available
+ on on all models of processor. Of particular importance - Tdie
+ (used in the default template) may not be present on processors
+ prior to Zen (17h). Tctl, however, may be offset from the real
+ temperature and so is not used by default.
- - It is important to note that not all measurements are available
- on on all models of processor. Of particular importance - Tdie
- (used in the default template) may not be present on processors
- prior to Zen (17h). Tctl, however, may be offset from the real
- temperature and so is not used by default.
+ - Example:
- - Example:
+ #+begin_src haskell
+ Run K10Temp "0000:00:18.3"
+ ["-t", "Temp: <Tdie>C|<Tccd1>C",
+ "-L", "40", "-H", "60",
+ "-l", "lightblue", "-n", "gray90", "-h", "red"]
+ 50
+ #+end_src
- #+begin_src haskell
- Run K10Temp "0000:00:18.3"
- ["-t", "Temp: <Tdie>C|<Tccd1>C",
- "-L", "40", "-H", "60",
- "-l", "lightblue", "-n", "gray90", "-h", "red"]
- 50
- #+end_src
+*** =Memory Args RefreshRate=
-***** =Memory Args RefreshRate=
+ - Aliases to =memory=
+ - Args: default monitor arguments, plus:
- - Aliases to =memory=
- - Args: default monitor arguments, plus:
+ - =--used-icon-pattern=: dynamic string for used memory ratio in
+ =usedipat=.
+ - =--free-icon-pattern=: dynamic string for free memory ratio in
+ =freeipat=.
+ - =--available-icon-pattern=: dynamic string for available memory
+ ratio in =availableipat=.
+ - =--scale=: sizes (total, free, etc.) are reported in units of
+ ~Mb/scale~, with scale defaulting to 1.0. So, for
+ instance, to get sizes reported in Gb, set this parameter
+ to 1024.
- - =--used-icon-pattern=: dynamic string for used memory ratio in
- =usedipat=.
- - =--free-icon-pattern=: dynamic string for free memory ratio in
- =freeipat=.
- - =--available-icon-pattern=: dynamic string for available memory
- ratio in =availableipat=.
- - =--scale=: sizes (total, free, etc.) are reported in units of
- ~Mb/scale~, with scale defaulting to 1.0. So, for
- instance, to get sizes reported in Gb, set this parameter
- to 1024.
+ - Thresholds refer to percentage of used memory
+ - Variables that can be used with the =-t/--template= argument:
+ =total=, =free=, =buffer=, =cache=, =available=, =used=, =usedratio=,
+ =usedbar=, =usedvbar=, =usedipat=, =freeratio=, =freebar=, =freevbar=,
+ =freeipat=, =availableratio=, =availablebar=, =availablevbar=,
+ =availableipat=
- - Thresholds refer to percentage of used memory
- - Variables that can be used with the =-t/--template= argument:
- =total=, =free=, =buffer=, =cache=, =available=, =used=, =usedratio=,
- =usedbar=, =usedvbar=, =usedipat=, =freeratio=, =freebar=, =freevbar=,
- =freeipat=, =availableratio=, =availablebar=, =availablevbar=,
- =availableipat=
+ - Default template: =Mem: <usedratio>% (<cache>M)=
- - Default template: =Mem: <usedratio>% (<cache>M)=
+ - Examples:
- - Examples:
+ #+begin_src haskell
+ -- A monitor reporting memory used in Gb
+ Memory [ "-t", "<used> Gb", "--", "--scale", "1024"] 20
+ -- As above, but using one decimal digit to print numbers
+ Memory [ "-t", "<used> Gb", "-d", "1", "--", "--scale", "1024"] 20
+ #+end_src
- #+begin_src haskell
- -- A monitor reporting memory used in Gb
- Memory [ "-t", "<used> Gb", "--", "--scale", "1024"] 20
- -- As above, but using one decimal digit to print numbers
- Memory [ "-t", "<used> Gb", "-d", "1", "--", "--scale", "1024"] 20
- #+end_src
+*** =Swap Args RefreshRate=
-***** =Swap Args RefreshRate=
+ - Aliases to =swap=
+ - Args: default monitor arguments
+ - Thresholds refer to percentage of used swap
+ - Variables that can be used with the =-t/--template= argument:
+ =total=, =used=, =free=, =usedratio=
+ - Default template: =Swap: <usedratio>%=
- - Aliases to =swap=
- - Args: default monitor arguments
- - Thresholds refer to percentage of used swap
- - Variables that can be used with the =-t/--template= argument:
- =total=, =used=, =free=, =usedratio=
- - Default template: =Swap: <usedratio>%=
+** Date Monitors
+*** =Date Format Alias RefreshRate=
-*** Date Monitors
-***** =Date Format Alias RefreshRate=
+ - Format is a time format string, as accepted by the standard ISO C
+ =strftime= function (or Haskell's =formatCalendarTime=). Basically,
+ if =date +"my-string"= works with your command then =Date= will handle
+ it correctly.
- - Format is a time format string, as accepted by the standard ISO C
- =strftime= function (or Haskell's =formatCalendarTime=). Basically,
- if =date +"my-string"= works with your command then =Date= will handle
- it correctly.
+ - Timezone changes are picked up automatically every minute.
- - Timezone changes are picked up automatically every minute.
+ - Sample usage:
- - Sample usage:
+ #+begin_src haskell
+ Run Date "%a %b %_d %Y <fc=#ee9a00>%H:%M:%S</fc>" "date" 10
+ #+end_src
- #+begin_src haskell
- Run Date "%a %b %_d %Y <fc=#ee9a00>%H:%M:%S</fc>" "date" 10
- #+end_src
+*** =DateZone Format Locale Zone Alias RefreshRate=
-***** =DateZone Format Locale Zone Alias RefreshRate=
+ A variant of the =Date= monitor where one is able to explicitly set the
+ time-zone, as well as the locale.
- A variant of the =Date= monitor where one is able to explicitly set the
- time-zone, as well as the locale.
+ - The format of =DateZone= is exactly the same as =Date=.
- - The format of =DateZone= is exactly the same as =Date=.
+ - If =Locale= is =""= (the empty string) the default locale of the
+ system is used, otherwise use the given locale. If there are more
+ instances of =DateZone=, using the empty string as input for =Locale=
+ is not recommended.
- - If =Locale= is =""= (the empty string) the default locale of the
- system is used, otherwise use the given locale. If there are more
- instances of =DateZone=, using the empty string as input for =Locale=
- is not recommended.
+ - =Zone= is the name of the =TimeZone=. It is assumed that the time-zone
+ database is stored in =/usr/share/zoneinfo/=. If the empty string is
+ given as =Zone=, the default system time is used.
- - =Zone= is the name of the =TimeZone=. It is assumed that the time-zone
- database is stored in =/usr/share/zoneinfo/=. If the empty string is
- given as =Zone=, the default system time is used.
+ - Sample usage:
- - Sample usage:
+ #+begin_src haskell
+ Run DateZone "%a %H:%M:%S" "de_DE.UTF-8" "Europe/Vienna" "viennaTime" 10
+ #+end_src
+** Disk Monitors
+*** =DiskU Disks Args RefreshRate=
- #+begin_src haskell
- Run DateZone "%a %H:%M:%S" "de_DE.UTF-8" "Europe/Vienna" "viennaTime" 10
- #+end_src
-*** Disk Monitors
-***** =DiskU Disks Args RefreshRate=
+ - Aliases to =disku=
- - Aliases to =disku=
+ - Disks: list of pairs of the form (device or mount point, template),
+ where the template can contain =<size>=, =<free>=, =<used>=, =<freep>=
+ or =<usedp>=, =<freebar>=, =<freevbar>=, =<freeipat>=, =<usedbar>=,
+ =<usedvbar>= or =<usedipat>= for total, free, used, free percentage
+ and used percentage of the given file system capacity.
- - Disks: list of pairs of the form (device or mount point, template),
- where the template can contain =<size>=, =<free>=, =<used>=, =<freep>=
- or =<usedp>=, =<freebar>=, =<freevbar>=, =<freeipat>=, =<usedbar>=,
- =<usedvbar>= or =<usedipat>= for total, free, used, free percentage
- and used percentage of the given file system capacity.
+ - Thresholds refer to usage percentage.
- - Thresholds refer to usage percentage.
+ - Args: default monitor arguments. =-t/--template= is ignored. Plus
- - Args: default monitor arguments. =-t/--template= is ignored. Plus
+ - =--free-icon-pattern=: dynamic string for free disk space in
+ =freeipat=.
+ - =--used-icon-pattern=: dynamic string for used disk space in
+ =usedipat=.
- - =--free-icon-pattern=: dynamic string for free disk space in
- =freeipat=.
- - =--used-icon-pattern=: dynamic string for used disk space in
- =usedipat=.
+ - Default template: none (you must specify a template for each file
+ system).
- - Default template: none (you must specify a template for each file
- system).
+ - Example:
- - Example:
+ #+begin_src haskell
+ DiskU [("/", "<used>/<size>"), ("sdb1", "<usedbar>")]
+ ["-L", "20", "-H", "50", "-m", "1", "-p", "3"]
+ 20
+ #+end_src
- #+begin_src haskell
- DiskU [("/", "<used>/<size>"), ("sdb1", "<usedbar>")]
- ["-L", "20", "-H", "50", "-m", "1", "-p", "3"]
- 20
- #+end_src
+*** =DiskIO Disks Args RefreshRate=
-***** =DiskIO Disks Args RefreshRate=
+ - Aliases to =diskio=
- - Aliases to =diskio=
+ - Disks: list of pairs of the form (device or mount point, template),
+ where the template can contain =<total>=, =<read>=, =<write>= for
+ total, read and write speed, respectively, as well as =<totalb>=,
+ =<readb>=, =<writeb>=, which report number of bytes during the last
+ refresh period rather than speed. There are also bar versions of each:
+ =<totalbar>=, =<totalvbar>=, =<totalipat>=, =<readbar>=, =<readvbar>=,
+ =<readipat>=, =<writebar>=, =<writevbar>=, and =<writeipat>=; and
+ their "bytes" counterparts: =<totalbbar>=, =<totalbvbar>=,
+ =<totalbipat>=, =<readbbar>=, =<readbvbar>=, =<readbipat>=,
+ =<writebbar>=, =<writebvbar>=, and =<writebipat>=.
- - Disks: list of pairs of the form (device or mount point, template),
- where the template can contain =<total>=, =<read>=, =<write>= for
- total, read and write speed, respectively, as well as =<totalb>=,
- =<readb>=, =<writeb>=, which report number of bytes during the last
- refresh period rather than speed. There are also bar versions of each:
- =<totalbar>=, =<totalvbar>=, =<totalipat>=, =<readbar>=, =<readvbar>=,
- =<readipat>=, =<writebar>=, =<writevbar>=, and =<writeipat>=; and
- their "bytes" counterparts: =<totalbbar>=, =<totalbvbar>=,
- =<totalbipat>=, =<readbbar>=, =<readbvbar>=, =<readbipat>=,
- =<writebbar>=, =<writebvbar>=, and =<writebipat>=.
+ - Thresholds refer to speed in b/s
- - Thresholds refer to speed in b/s
+ - Args: default monitor arguments. =-t/--template= is ignored. Plus
- - Args: default monitor arguments. =-t/--template= is ignored. Plus
+ - =--total-icon-pattern=: dynamic string for total disk I/O in
+ =<totalipat>=.
+ - =--write-icon-pattern=: dynamic string for write disk I/O in
+ =<writeipat>=.
+ - =--read-icon-pattern=: dynamic string for read disk I/O in
+ =<readipat>=.
- - =--total-icon-pattern=: dynamic string for total disk I/O in
- =<totalipat>=.
- - =--write-icon-pattern=: dynamic string for write disk I/O in
- =<writeipat>=.
- - =--read-icon-pattern=: dynamic string for read disk I/O in
- =<readipat>=.
+ - Default template: none (you must specify a template for each file
+ system).
- - Default template: none (you must specify a template for each file
- system).
+ - Example:
- - Example:
+ #+begin_src haskell
+ DiskIO [("/", "<read> <write>"), ("sdb1", "<total>")] [] 10
+ #+end_src
- #+begin_src haskell
- DiskIO [("/", "<read> <write>"), ("sdb1", "<total>")] [] 10
- #+end_src
+** Keyboard Monitors
+*** =Kbd Opts=
-*** Keyboard Monitors
-***** =Kbd Opts=
+ - Registers to XKB/X11-Events and output the currently active keyboard
+ layout. Supports replacement of layout names.
- - Registers to XKB/X11-Events and output the currently active keyboard
- layout. Supports replacement of layout names.
+ - Aliases to =kbd=
- - Aliases to =kbd=
+ - Opts is a list of tuples:
- - Opts is a list of tuples:
+ - first element of the tuple is the search string
+ - second element of the tuple is the corresponding replacement
- - first element of the tuple is the search string
- - second element of the tuple is the corresponding replacement
+ - Example:
- - Example:
+ #+begin_src haskell
+ Run Kbd [("us(dvorak)", "DV"), ("us", "US")]
+ #+end_src
- #+begin_src haskell
- Run Kbd [("us(dvorak)", "DV"), ("us", "US")]
- #+end_src
+*** =Locks=
-***** =Locks=
+ - Displays the status of Caps Lock, Num Lock and Scroll Lock.
- - Displays the status of Caps Lock, Num Lock and Scroll Lock.
+ - Aliases to =locks=
- - Aliases to =locks=
+ - Example:
- - Example:
+ #+begin_src haskell
+ Run Locks
+ #+end_src
- #+begin_src haskell
- Run Locks
- #+end_src
+** Load and Process Monitors
+*** =Load Args RefreshRate=
-*** Load and Process Monitors
-***** =Load Args RefreshRate=
+ - Aliases to =load=
- - Aliases to =load=
+ - Args: default monitor arguments. The low and high thresholds
+ (=-L= and =-H=) refer to load average values.
- - Args: default monitor arguments. The low and high thresholds
- (=-L= and =-H=) refer to load average values.
+ - Variables that can be used with the =-t/--template= argument:
+ =load1=, =load5=, =load15=.
- - Variables that can be used with the =-t/--template= argument:
- =load1=, =load5=, =load15=.
+ - Default template: =Load: <load1>=.
- - Default template: =Load: <load1>=.
+ - Displays load averages for the last 1, 5 or 15 minutes as
+ reported by, e.g., ~uptime(1)~. The displayed values are float,
+ so that the ~"-d"~ option will control how many decimal digits
+ are shown (zero by default).
- - Displays load averages for the last 1, 5 or 15 minutes as
- reported by, e.g., ~uptime(1)~. The displayed values are float,
- so that the ~"-d"~ option will control how many decimal digits
- are shown (zero by default).
+ - Example: to have 2 decimal digits displayed, with a low
+ threshold at 1.0 and a high one at 3, you'd write something
+ like:
- - Example: to have 2 decimal digits displayed, with a low
- threshold at 1.0 and a high one at 3, you'd write something
- like:
+ #+begin_src haskell
+ Run Load ["-t" , "<load1> <load5> <load15>"
+ , "-L", "1", "-H", "3", "-d", "2"]) 300
+ #+end_src
- #+begin_src haskell
- Run Load ["-t" , "<load1> <load5> <load15>"
- , "-L", "1", "-H", "3", "-d", "2"]) 300
- #+end_src
+*** =TopProc Args RefreshRate=
-***** =TopProc Args RefreshRate=
+ - Aliases to =top=
+ - Args: default monitor arguments. The low and high thresholds (=-L= and
+ =-H=) denote, for memory entries, the percent of the process memory
+ over the total amount of memory currently in use and, for cpu entries,
+ the activity percentage (i.e., the value of =cpuN=, which takes values
+ between 0 and 100).
+ - Variables that can be used with the =-t/--template= argument: =no=,
+ =name1=, =cpu1=, =both1=, =mname1=, =mem1=, =mboth1=, =name2=, =cpu2=,
+ =both2=, =mname2=, =mem2=, =mboth2=, ...
+ - Default template: =<both1>=
+ - Displays the name and cpu/mem usage of running processes (=bothn= and
+ =mboth= display both, and is useful to specify an overall maximum
+ and/or minimum width, using the =-m/-M= arguments. =no= gives the
+ total number of processes.
- - Aliases to =top=
- - Args: default monitor arguments. The low and high thresholds (=-L= and
- =-H=) denote, for memory entries, the percent of the process memory
- over the total amount of memory currently in use and, for cpu entries,
- the activity percentage (i.e., the value of =cpuN=, which takes values
- between 0 and 100).
- - Variables that can be used with the =-t/--template= argument: =no=,
- =name1=, =cpu1=, =both1=, =mname1=, =mem1=, =mboth1=, =name2=, =cpu2=,
- =both2=, =mname2=, =mem2=, =mboth2=, ...
- - Default template: =<both1>=
- - Displays the name and cpu/mem usage of running processes (=bothn= and
- =mboth= display both, and is useful to specify an overall maximum
- and/or minimum width, using the =-m/-M= arguments. =no= gives the
- total number of processes.
+*** =TopMem Args RefreshRate=
-***** =TopMem Args RefreshRate=
+ - Aliases to =topmem=
+ - Args: default monitor arguments. The low and high thresholds (=-L= and
+ =-H=) denote the percent of the process memory over the total amount
+ of memory currently in use.
+ - Variables that can be used with the =-t/--template= argument:
+ =name1=, =mem1=, =both1=, =name2=, =mem2=, =both2=, ...
+ - Default template: =<both1>=
+ - Displays the name and RSS (resident memory size) of running processes
+ (=bothn= displays both, and is useful to specify an overall maximum
+ and/or minimum width, using the =-m/-M= arguments.
- - Aliases to =topmem=
- - Args: default monitor arguments. The low and high thresholds (=-L= and
- =-H=) denote the percent of the process memory over the total amount
- of memory currently in use.
- - Variables that can be used with the =-t/--template= argument:
- =name1=, =mem1=, =both1=, =name2=, =mem2=, =both2=, ...
- - Default template: =<both1>=
- - Displays the name and RSS (resident memory size) of running processes
- (=bothn= displays both, and is useful to specify an overall maximum
- and/or minimum width, using the =-m/-M= arguments.
+** Thermal Monitors
+*** =ThermalZone Number Args RefreshRate=
-*** Thermal Monitors
-***** =ThermalZone Number Args RefreshRate=
+ - Aliases to "thermaln": so =ThermalZone 0 []= can be used in template
+ as =%thermal0%=
- - Aliases to "thermaln": so =ThermalZone 0 []= can be used in template
- as =%thermal0%=
+ - Thresholds refer to temperature in degrees
- - Thresholds refer to temperature in degrees
+ - Args: default monitor arguments
- - Args: default monitor arguments
+ - Variables that can be used with the =-t/--template= argument: =temp=
- - Variables that can be used with the =-t/--template= argument: =temp=
+ - Default template: =<temp>C=
- - Default template: =<temp>C=
+ - This plugin works only on systems with devices having thermal zone.
+ Check directories in =/sys/class/thermal= for possible values of the
+ zone number (e.g., 0 corresponds to =thermal_zone0= in that
+ directory).
- - This plugin works only on systems with devices having thermal zone.
- Check directories in =/sys/class/thermal= for possible values of the
- zone number (e.g., 0 corresponds to =thermal_zone0= in that
- directory).
+ - Example:
- - Example:
+ #+begin_src haskell
+ Run ThermalZone 0 ["-t","<id>: <temp>C"] 30
+ #+end_src
- #+begin_src haskell
- Run ThermalZone 0 ["-t","<id>: <temp>C"] 30
- #+end_src
+*** =Thermal Zone Args RefreshRate=
-***** =Thermal Zone Args RefreshRate=
+ - *This plugin is deprecated. Use =ThermalZone= instead.*
- - *This plugin is deprecated. Use =ThermalZone= instead.*
+ - Aliases to the Zone: so =Thermal "THRM" []= can be used in template as
+ =%THRM%=
- - Aliases to the Zone: so =Thermal "THRM" []= can be used in template as
- =%THRM%=
+ - Args: default monitor arguments
- - Args: default monitor arguments
+ - Thresholds refer to temperature in degrees
- - Thresholds refer to temperature in degrees
+ - Variables that can be used with the =-t/--template= argument: =temp=
- - Variables that can be used with the =-t/--template= argument: =temp=
+ - Default template: =Thm: <temp>C=
- - Default template: =Thm: <temp>C=
+ - This plugin works only on systems with devices having thermal zone.
+ Check directories in /proc/acpi/thermal_zone for possible values.
- - This plugin works only on systems with devices having thermal zone.
- Check directories in /proc/acpi/thermal_zone for possible values.
+ - Example:
- - Example:
+ #+begin_src haskell
+ Run Thermal "THRM" ["-t","iwl4965-temp: <temp>C"] 50
+ #+end_src
- #+begin_src haskell
- Run Thermal "THRM" ["-t","iwl4965-temp: <temp>C"] 50
- #+end_src
+** Volume Monitors
+*** =Volume Mixer Element Args RefreshRate=
-*** Volume Monitors
-***** =Volume Mixer Element Args RefreshRate=
+ - Aliases to the mixer name and element name separated by a
+ colon. Thus, =Volume "default" "Master" [] 10= can be used as
+ =%default:Master%=.
+ - Args: default monitor arguments. Also accepts:
- - Aliases to the mixer name and element name separated by a
- colon. Thus, =Volume "default" "Master" [] 10= can be used as
- =%default:Master%=.
- - Args: default monitor arguments. Also accepts:
+ - =-O= /string/ On string
- - =-O= /string/ On string
+ - The string used in place of =<status>= when the mixer element is
+ on. Defaults to "[on]".
+ - Long option: =--on=
- - The string used in place of =<status>= when the mixer element is
- on. Defaults to "[on]".
- - Long option: =--on=
+ - =-o= /string/ Off string
- - =-o= /string/ Off string
+ - The string used in place of =<status>= when the mixer element is
+ off. Defaults to "[off]".
+ - Long option: =--off=
- - The string used in place of =<status>= when the mixer element is
- off. Defaults to "[off]".
- - Long option: =--off=
+ - =-C= /color/ On color
- - =-C= /color/ On color
+ - The color to be used for =<status>= when the mixer element is on.
+ Defaults to "green".
+ - Long option: =--onc=
- - The color to be used for =<status>= when the mixer element is on.
- Defaults to "green".
- - Long option: =--onc=
+ - =-c= /color/ Off color
- - =-c= /color/ Off color
+ - The color to be used for =<status>= when the mixer element is off.
+ Defaults to "red".
+ - Long option: =--offc=
- - The color to be used for =<status>= when the mixer element is off.
- Defaults to "red".
- - Long option: =--offc=
+ - =--highd= /number/ High threshold for dB. Defaults to -5.0.
+ - =--lowd= /number/ Low threshold for dB. Defaults to -30.0.
+ - =--volume-icon-pattern= /string/ dynamic string for current volume
+ in =volumeipat=.
+ - =-H= /number/ High threshold for volume (in %). Defaults to 60.0.
- - =--highd= /number/ High threshold for dB. Defaults to -5.0.
- - =--lowd= /number/ Low threshold for dB. Defaults to -30.0.
- - =--volume-icon-pattern= /string/ dynamic string for current volume
- in =volumeipat=.
- - =-H= /number/ High threshold for volume (in %). Defaults to 60.0.
+ - Long option: =--highv=
- - Long option: =--highv=
+ - =-L= /number/ Low threshold for volume (in %). Defaults to 20.0.
- - =-L= /number/ Low threshold for volume (in %). Defaults to 20.0.
+ - Long option: =--lowv=
- - Long option: =--lowv=
+ - =-h=: /string/ High string
- - =-h=: /string/ High string
+ - The string added in front of =<status>= when the mixer element is
+ on and the volume percentage is higher than the =-H= threshold.
+ Defaults to "".
+ - Long option: =--highs=
- - The string added in front of =<status>= when the mixer element is
- on and the volume percentage is higher than the =-H= threshold.
- Defaults to "".
- - Long option: =--highs=
+ - =-m=: /string/ Medium string
- - =-m=: /string/ Medium string
+ - The string added in front of =<status>= when the mixer element is
+ on and the volume percentage is lower than the =-H= threshold.
+ Defaults to "".
+ - Long option: =--mediums=
- - The string added in front of =<status>= when the mixer element is
- on and the volume percentage is lower than the =-H= threshold.
- Defaults to "".
- - Long option: =--mediums=
+ - =-l=: /string/ Low string
- - =-l=: /string/ Low string
+ - The string added in front of =<status>= when the mixer element is
+ on and the volume percentage is lower than the =-L= threshold.
+ Defaults to "".
+ - Long option: =--lows=
- - The string added in front of =<status>= when the mixer element is
- on and the volume percentage is lower than the =-L= threshold.
- Defaults to "".
- - Long option: =--lows=
+ - Variables that can be used with the =-t/--template= argument:
+ =volume=, =volumebar=, =volumevbar=, =volumeipat=, =dB=, =status=,
+ =volumestatus=
+ - Note that =dB= might only return 0 on your system. This is known to
+ happen on systems with a pulseaudio backend.
+ - Default template: =Vol: <volume>% <status>=
+ - Requires the package [[http://hackage.haskell.org/package/alsa-core][alsa-core]] and [[http://hackage.haskell.org/package/alsa-mixer][alsa-mixer]] installed in your
+ system. In addition, to activate this plugin you must pass the
+ =with_alsa= flag during compilation.
- - Variables that can be used with the =-t/--template= argument:
- =volume=, =volumebar=, =volumevbar=, =volumeipat=, =dB=, =status=,
- =volumestatus=
- - Note that =dB= might only return 0 on your system. This is known to
- happen on systems with a pulseaudio backend.
- - Default template: =Vol: <volume>% <status>=
- - Requires the package [[http://hackage.haskell.org/package/alsa-core][alsa-core]] and [[http://hackage.haskell.org/package/alsa-mixer][alsa-mixer]] installed in your
- system. In addition, to activate this plugin you must pass the
- =with_alsa= flag during compilation.
+*** =Alsa Mixer Element Args=
-***** =Alsa Mixer Element Args=
+ Like [[=Volume Mixer Element Args RefreshRate=][Volume]] but with the following differences:
- Like [[=Volume Mixer Element Args RefreshRate=][Volume]] but with the following differences:
+ - Uses event-based refreshing via =alsactl monitor= instead of polling,
+ so it will refresh instantly when there's a volume change, and won't
+ use CPU until a change happens.
+ - Aliases to =alsa:= followed by the mixer name and element name
+ separated by a colon. Thus, =Alsa "default" "Master" []= can be used
+ as =%alsa:default:Master%=.
+ - Additional options (after the =--=):
+ - =--alsactl=/path/to/alsactl=: If this option is not specified,
+ =alsactl= will be sought in your =PATH= first, and failing that, at
+ =/usr/sbin/alsactl= (this is its location on Debian systems.
+ =alsactl monitor= works as a non-root user despite living in
+ =/usr/sbin=.).
+ - =stdbuf= (from coreutils) must be (and most probably already is) in
+ your =PATH=.
- - Uses event-based refreshing via =alsactl monitor= instead of polling,
- so it will refresh instantly when there's a volume change, and won't
- use CPU until a change happens.
- - Aliases to =alsa:= followed by the mixer name and element name
- separated by a colon. Thus, =Alsa "default" "Master" []= can be used
- as =%alsa:default:Master%=.
- - Additional options (after the =--=):
- - =--alsactl=/path/to/alsactl=: If this option is not specified,
- =alsactl= will be sought in your =PATH= first, and failing that, at
- =/usr/sbin/alsactl= (this is its location on Debian systems.
- =alsactl monitor= works as a non-root user despite living in
- =/usr/sbin=.).
- - =stdbuf= (from coreutils) must be (and most probably already is) in
- your =PATH=.
+** Mail Monitors
+*** =Mail Args Alias=
-*** Mail Monitors
-***** =Mail Args Alias=
+ - Args: list of maildirs in form =[("name1","path1"),...]=. Paths may
+ start with a '~' to expand to the user's home directory.
- - Args: list of maildirs in form =[("name1","path1"),...]=. Paths may
- start with a '~' to expand to the user's home directory.
+ - This plugin requires inotify support in your Linux kernel and the
+ [[http://hackage.haskell.org/package/hinotify/][hinotify]] package. To activate, pass the =with_inotify= flag during
+ compilation.
- - This plugin requires inotify support in your Linux kernel and the
- [[http://hackage.haskell.org/package/hinotify/][hinotify]] package. To activate, pass the =with_inotify= flag during
- compilation.
+ - Example:
- - Example:
+ #+begin_src haskell
+ Run Mail [("inbox", "~/var/mail/inbox"),
+ ("lists", "~/var/mail/lists")]
+ "mail"
+ #+end_src
- #+begin_src haskell
- Run Mail [("inbox", "~/var/mail/inbox"),
- ("lists", "~/var/mail/lists")]
- "mail"
- #+end_src
+*** =MailX Args Opts Alias=
-***** =MailX Args Opts Alias=
+ - Args: list of maildirs in form =[("name1","path1","color1"),...]=.
+ Paths may start with a '~' to expand to the user's home directory.
+ When mails are present, counts are displayed with the given name and
+ color.
- - Args: list of maildirs in form =[("name1","path1","color1"),...]=.
- Paths may start with a '~' to expand to the user's home directory.
- When mails are present, counts are displayed with the given name and
- color.
+ - Opts is a possibly empty list of options, as flags. Possible values:
+ -d dir --dir dir a string giving the base directory where maildir
+ files with a relative path live. -p prefix --prefix prefix a string
+ giving a prefix for the list of displayed mail counts -s suffix
+ --suffix suffix a string giving a suffix for the list of displayed
+ mail counts
- - Opts is a possibly empty list of options, as flags. Possible values:
- -d dir --dir dir a string giving the base directory where maildir
- files with a relative path live. -p prefix --prefix prefix a string
- giving a prefix for the list of displayed mail counts -s suffix
- --suffix suffix a string giving a suffix for the list of displayed
- mail counts
+ - This plugin requires inotify support in your Linux kernel and the
+ [[http://hackage.haskell.org/package/hinotify/][hinotify]] package. To activate, pass the =with_inotify= flag during
+ compilation.
- - This plugin requires inotify support in your Linux kernel and the
- [[http://hackage.haskell.org/package/hinotify/][hinotify]] package. To activate, pass the =with_inotify= flag during
- compilation.
+ - Example:
- - Example:
+ #+begin_src haskell
+ Run MailX [("I", "inbox", "green"),
+ ("L", "lists", "orange")]
+ ["-d", "~/var/mail", "-p", " ", "-s", " "]
+ "mail"
+ #+end_src
- #+begin_src haskell
- Run MailX [("I", "inbox", "green"),
- ("L", "lists", "orange")]
- ["-d", "~/var/mail", "-p", " ", "-s", " "]
- "mail"
- #+end_src
+*** =MBox Mboxes Opts Alias=
-***** =MBox Mboxes Opts Alias=
+ - Mboxes a list of mbox files of the form =[("name", "path", "color")]=,
+ where name is the displayed name, path the absolute or relative (to
+ BaseDir) path of the mbox file, and color the color to use to display
+ the mail count (use an empty string for the default).
- - Mboxes a list of mbox files of the form =[("name", "path", "color")]=,
- where name is the displayed name, path the absolute or relative (to
- BaseDir) path of the mbox file, and color the color to use to display
- the mail count (use an empty string for the default).
+ - Opts is a possibly empty list of options, as flags. Possible values:
+ -a --all (no arg) Show all mailboxes, even if empty. -u (no arg) Show
+ only the mailboxes' names, sans counts. -d dir --dir dir a string
+ giving the base directory where mbox files with a relative path live.
+ -p prefix --prefix prefix a string giving a prefix for the list of
+ displayed mail counts -s suffix --suffix suffix a string giving a
+ suffix for the list of displayed mail counts
- - Opts is a possibly empty list of options, as flags. Possible values:
- -a --all (no arg) Show all mailboxes, even if empty. -u (no arg) Show
- only the mailboxes' names, sans counts. -d dir --dir dir a string
- giving the base directory where mbox files with a relative path live.
- -p prefix --prefix prefix a string giving a prefix for the list of
- displayed mail counts -s suffix --suffix suffix a string giving a
- suffix for the list of displayed mail counts
+ - Paths may start with a '~' to expand to the user's home directory.
- - Paths may start with a '~' to expand to the user's home directory.
+ - This plugin requires inotify support in your Linux kernel and the
+ [[http://hackage.haskell.org/package/hinotify/][hinotify]] package. To activate, pass the =with_inotify= flag during
+ compilation.
- - This plugin requires inotify support in your Linux kernel and the
- [[http://hackage.haskell.org/package/hinotify/][hinotify]] package. To activate, pass the =with_inotify= flag during
- compilation.
+ - Example. The following command look for mails in =/var/mail/inbox= and
+ =~/foo/mbox=, and will put a space in front of the printed string
+ (when it's not empty); it can be used in the template with the alias
+ =mbox=:
- - Example. The following command look for mails in =/var/mail/inbox= and
- =~/foo/mbox=, and will put a space in front of the printed string
- (when it's not empty); it can be used in the template with the alias
- =mbox=:
+ #+begin_src haskell
+ Run MBox [("I ", "inbox", "red"), ("O ", "~/foo/mbox", "")]
+ ["-d", "/var/mail/", "-p", " "] "mbox"
+ #+end_src
- #+begin_src haskell
- Run MBox [("I ", "inbox", "red"), ("O ", "~/foo/mbox", "")]
- ["-d", "/var/mail/", "-p", " "] "mbox"
- #+end_src
+*** =NotmuchMail Alias Args Rate=
-***** =NotmuchMail Alias Args Rate=
+ This plugin checks for new mail, provided that this mail is indexed by
+ =notmuch=. In the =notmuch= spirit, this plugin checks for new *threads*
+ and not new individual messages.
- This plugin checks for new mail, provided that this mail is indexed by
- =notmuch=. In the =notmuch= spirit, this plugin checks for new *threads*
- and not new individual messages.
+ - Alias: What name the plugin should have in your template string.
- - Alias: What name the plugin should have in your template string.
+ - Args: A list of =MailItem= s of the form
- - Args: A list of =MailItem= s of the form
+ #+begin_src haskell
+ [ MailItem "name" "address" "query"
+ ...
+ ]
+ #+end_src
- #+begin_src haskell
- [ MailItem "name" "address" "query"
- ...
- ]
- #+end_src
+ where
- where
+ - =name= is what gets printed in the status bar before the number of
+ new threads.
+ - =address= is the e-mail address of the recipient, i.e. we only query
+ mail that was send to this particular address (in more concrete
+ terms, we pass the address to the =to:= constructor when performing
+ the search). If =address= is empty, we search through all unread
+ mail, regardless of whom it was sent to.
+ - =query= is funneled to =notmuch search= verbatim. For the general
+ query syntax, consult =notmuch search --help=, as well as
+ =notmuch-search-terms(7)=. Note that the =unread= tag is *always*
+ added in front of the query and composed with it via an *and*.
- - =name= is what gets printed in the status bar before the number of
- new threads.
- - =address= is the e-mail address of the recipient, i.e. we only query
- mail that was send to this particular address (in more concrete
- terms, we pass the address to the =to:= constructor when performing
- the search). If =address= is empty, we search through all unread
- mail, regardless of whom it was sent to.
- - =query= is funneled to =notmuch search= verbatim. For the general
- query syntax, consult =notmuch search --help=, as well as
- =notmuch-search-terms(7)=. Note that the =unread= tag is *always*
- added in front of the query and composed with it via an *and*.
+ - Rate: Rate with which to update the plugin (in deciseconds).
- - Rate: Rate with which to update the plugin (in deciseconds).
+ - Example:
- - Example:
+ - A single =MailItem= that displays all unread threads from the given
+ address:
- - A single =MailItem= that displays all unread threads from the given
- address:
+ #+begin_src haskell
+ MailItem "mbs:" "soliditsallgood@mailbox.org" ""
+ #+end_src
- #+begin_src haskell
- MailItem "mbs:" "soliditsallgood@mailbox.org" ""
- #+end_src
+ - A single =MailItem= that displays all unread threads with
+ "[My-Subject]" somewhere in the title:
- - A single =MailItem= that displays all unread threads with
- "[My-Subject]" somewhere in the title:
+ #+begin_src haskell
+ MailItem "S:" "" "subject:[My-Subject]"
+ #+end_src
- #+begin_src haskell
- MailItem "S:" "" "subject:[My-Subject]"
- #+end_src
+ - A full example of a =NotmuchMail= configuration:
- - A full example of a =NotmuchMail= configuration:
+ #+begin_src haskell
+ Run NotmuchMail "mail" -- name for the template string
+ [ -- All unread mail to the below address, but nothing that's tagged
+ -- with @lists@ or @haskell@.
+ MailItem "mbs:"
+ "soliditsallgood@mailbox.org"
+ "not tag:lists and not tag:haskell"
+
+ -- All unread mail that has @[Haskell-Cafe]@ in the subject line.
+ , MailItem "C:" "" "subject:[Haskell-Cafe]"
+
+ -- All unread mail that's tagged as @lists@, but not @haskell@.
+ , MailItem "H:" "" "tag:lists and not tag:haskell"
+ ]
+ 600 -- update every 60 seconds
+ #+end_src
- #+begin_src haskell
- Run NotmuchMail "mail" -- name for the template string
- [ -- All unread mail to the below address, but nothing that's tagged
- -- with @lists@ or @haskell@.
- MailItem "mbs:"
- "soliditsallgood@mailbox.org"
- "not tag:lists and not tag:haskell"
+** Music Monitors
+*** =MPD Args RefreshRate=
- -- All unread mail that has @[Haskell-Cafe]@ in the subject line.
- , MailItem "C:" "" "subject:[Haskell-Cafe]"
+ - This monitor will only be compiled if you ask for it using the
+ =with_mpd= flag. It needs [[http://hackage.haskell.org/package/libmpd/][libmpd]] 5.0 or later (available on Hackage).
- -- All unread mail that's tagged as @lists@, but not @haskell@.
- , MailItem "H:" "" "tag:lists and not tag:haskell"
- ]
- 600 -- update every 60 seconds
- #+end_src
+ - Aliases to =mpd=
-*** Music Monitors
-***** =MPD Args RefreshRate=
+ - Args: default monitor arguments. In addition you can provide =-P=,
+ =-S= and =-Z=, with an string argument, to represent the playing,
+ stopped and paused states in the =statei= template field. The
+ environment variables =MPD_HOST= and =MPD_PORT= are used to configure
+ the mpd server to communicate with, unless given in the additional
+ arguments =-p= (=--port=) and =-h= (=--host=). Also available:
- - This monitor will only be compiled if you ask for it using the
- =with_mpd= flag. It needs [[http://hackage.haskell.org/package/libmpd/][libmpd]] 5.0 or later (available on Hackage).
+ - =lapsed-icon-pattern=: dynamic string for current track position in
+ =ipat=.
- - Aliases to =mpd=
+ - Variables that can be used with the =-t/--template= argument: =bar=,
+ =vbar=, =ipat=, =state=, =statei=, =volume=, =length=, =lapsed=,
+ =remaining=, =plength= (playlist length), =ppos= (playlist position),
+ =flags= (ncmpcpp-style playback mode), =name=, =artist=, =composer=,
+ =performer=, =album=, =title=, =track=, =file=, =genre=, =date=
- - Args: default monitor arguments. In addition you can provide =-P=,
- =-S= and =-Z=, with an string argument, to represent the playing,
- stopped and paused states in the =statei= template field. The
- environment variables =MPD_HOST= and =MPD_PORT= are used to configure
- the mpd server to communicate with, unless given in the additional
- arguments =-p= (=--port=) and =-h= (=--host=). Also available:
+ - Default template: =MPD: <state>=
- - =lapsed-icon-pattern=: dynamic string for current track position in
- =ipat=.
+ - Example (note that you need "--" to separate regular monitor options
+ from MPD's specific ones):
- - Variables that can be used with the =-t/--template= argument: =bar=,
- =vbar=, =ipat=, =state=, =statei=, =volume=, =length=, =lapsed=,
- =remaining=, =plength= (playlist length), =ppos= (playlist position),
- =flags= (ncmpcpp-style playback mode), =name=, =artist=, =composer=,
- =performer=, =album=, =title=, =track=, =file=, =genre=, =date=
+ #+begin_src haskell
+ Run MPD ["-t",
+ "<composer> <title> (<album>) <track>/<plength> <statei> [<flags>]",
+ "--", "-P", ">>", "-Z", "|", "-S", "><"] 10
+ #+end_src
- - Default template: =MPD: <state>=
+*** =MPDX Args RefreshRate Alias=
- - Example (note that you need "--" to separate regular monitor options
- from MPD's specific ones):
+ Like =MPD= but uses as alias its last argument instead of "mpd".
- #+begin_src haskell
- Run MPD ["-t",
- "<composer> <title> (<album>) <track>/<plength> <statei> [<flags>]",
- "--", "-P", ">>", "-Z", "|", "-S", "><"] 10
- #+end_src
+*** =Mpris1 PlayerName Args RefreshRate=
-***** =MPDX Args RefreshRate Alias=
+ - Aliases to =mpris1=
- Like =MPD= but uses as alias its last argument instead of "mpd".
+ - Requires [[http://hackage.haskell.org/package/dbus][dbus]] and [[http://hackage.haskell.org/package/text][text]] packages. To activate, pass the =with_mpris=
+ flag during compilation.
-***** =Mpris1 PlayerName Args RefreshRate=
+ - PlayerName: player supporting MPRIS v1 protocol. Some players need
+ this to be an all lowercase name (e.g. "spotify"), but some others
+ don't.
- - Aliases to =mpris1=
+ - Args: default monitor arguments.
- - Requires [[http://hackage.haskell.org/package/dbus][dbus]] and [[http://hackage.haskell.org/package/text][text]] packages. To activate, pass the =with_mpris=
- flag during compilation.
+ - Variables that can be used with the =-t/--template= argument:
+ =album=, =artist=, =arturl=, =length=, =title=, =tracknumber=
- - PlayerName: player supporting MPRIS v1 protocol. Some players need
- this to be an all lowercase name (e.g. "spotify"), but some others
- don't.
+ - Default template: =<artist> - <title>=
- - Args: default monitor arguments.
+ - Example:
- - Variables that can be used with the =-t/--template= argument:
- =album=, =artist=, =arturl=, =length=, =title=, =tracknumber=
+ #+begin_src haskell
+ Run Mpris1 "clementine" ["-t", "<artist> - [<tracknumber>] <title>"] 10
+ #+end_src
- - Default template: =<artist> - <title>=
+*** =Mpris2 PlayerName Args RefreshRate=
- - Example:
+ - Aliases to =mpris2=
- #+begin_src haskell
- Run Mpris1 "clementine" ["-t", "<artist> - [<tracknumber>] <title>"] 10
- #+end_src
+ - Requires [[http://hackage.haskell.org/package/dbus][dbus]] and [[http://hackage.haskell.org/package/text][text]] packages. To activate, pass the =with_mpris=
+ flag during compilation.
-***** =Mpris2 PlayerName Args RefreshRate=
+ - PlayerName: player supporting MPRIS v2 protocol. Some players need
+ this to be an all lowercase name (e.g. "spotify"), but some others
+ don't.
- - Aliases to =mpris2=
+ - Args: default monitor arguments.
- - Requires [[http://hackage.haskell.org/package/dbus][dbus]] and [[http://hackage.haskell.org/package/text][text]] packages. To activate, pass the =with_mpris=
- flag during compilation.
+ - Variables that can be used with the =-t/--template= argument:
+ =album=, =artist=, =arturl=, =length=, =title=, =tracknumber=,
+ =composer=, =genre=
- - PlayerName: player supporting MPRIS v2 protocol. Some players need
- this to be an all lowercase name (e.g. "spotify"), but some others
- don't.
+ - Default template: =<artist> - <title>=
- - Args: default monitor arguments.
+ - Example:
- - Variables that can be used with the =-t/--template= argument:
- =album=, =artist=, =arturl=, =length=, =title=, =tracknumber=,
- =composer=, =genre=
+ #+begin_src haskell
+ Run Mpris2 "spotify" ["-t", "<artist> - [<composer>] <title>"] 10
+ #+end_src
- - Default template: =<artist> - <title>=
+** Network Monitors
+*** =Network Interface Args RefreshRate=
- - Example:
+ - Aliases to the interface name: so =Network "eth0" []= can be used as
+ =%eth0%=
+ - Thresholds refer to velocities expressed in B/s
+ - Args: default monitor arguments, plus:
- #+begin_src haskell
- Run Mpris2 "spotify" ["-t", "<artist> - [<composer>] <title>"] 10
- #+end_src
+ - =--rx-icon-pattern=: dynamic string for reception rate in =rxipat=.
+ - =--tx-icon-pattern=: dynamic string for transmission rate in
+ =txipat=.
+ - =--up=: string used for the =up= variable value when the interface
+ is up.
-*** Network Monitors
-***** =Network Interface Args RefreshRate=
-
- - Aliases to the interface name: so =Network "eth0" []= can be used as
- =%eth0%=
- - Thresholds refer to velocities expressed in B/s
- - Args: default monitor arguments, plus:
-
- - =--rx-icon-pattern=: dynamic string for reception rate in =rxipat=.
- - =--tx-icon-pattern=: dynamic string for transmission rate in
- =txipat=.
- - =--up=: string used for the =up= variable value when the interface
- is up.
-
- - Variables that can be used with the =-t=/=--template= argument: =dev=,
- =rx=, =tx=, =rxbar=, =rxvbar=, =rxipat=, =txbar=, =txvbar=, =txipat=,
- =up=. Reception and transmission rates (=rx= and =tx=) are displayed
- by default as KB/s, without any suffixes, but you can set the =-S= to
- "True" to make them displayed with adaptive units (KB/s, MB/s, etc.).
- - Default template: =<dev>: <rx>KB|<tx>KB=
+ - Variables that can be used with the =-t=/=--template= argument: =dev=,
+ =rx=, =tx=, =rxbar=, =rxvbar=, =rxipat=, =txbar=, =txvbar=, =txipat=,
+ =up=. Reception and transmission rates (=rx= and =tx=) are displayed
+ by default as KB/s, without any suffixes, but you can set the =-S= to
+ "True" to make them displayed with adaptive units (KB/s, MB/s, etc.).
+ - Default template: =<dev>: <rx>KB|<tx>KB=
-***** =DynNetwork Args RefreshRate=
+*** =DynNetwork Args RefreshRate=
- - Active interface is detected automatically
- - Aliases to "dynnetwork"
- - Thresholds are expressed in B/s
- - Args: default monitor arguments, plus:
+ - Active interface is detected automatically
+ - Aliases to "dynnetwork"
+ - Thresholds are expressed in B/s
+ - Args: default monitor arguments, plus:
- - =--rx-icon-pattern=: dynamic string for reception rate in =rxipat=.
- - =--tx-icon-pattern=: dynamic string for transmission rate in =txipat=
- - =--devices=: comma-separated list of devices to show.
+ - =--rx-icon-pattern=: dynamic string for reception rate in =rxipat=.
+ - =--tx-icon-pattern=: dynamic string for transmission rate in =txipat=
+ - =--devices=: comma-separated list of devices to show.
- - Variables that can be used with the =-t=/=--template= argument:
- =dev=, =rx=, =tx=, =rxbar=, =rxvbar=, =rxipat=, =txbar=, =txvbar=,
- =txipat=.
+ - Variables that can be used with the =-t=/=--template= argument:
+ =dev=, =rx=, =tx=, =rxbar=, =rxvbar=, =rxipat=, =txbar=, =txvbar=,
+ =txipat=.
Reception and transmission rates (=rx= and =tx=) are displayed in Kbytes
per second, and you can set the =-S= to "True" to make them displayed
@@ -1157,73 +1157,73 @@
- Default template: =<dev>: <rx>KB|<tx>KB=
- Example of usage of =--devices= option:
- =["--", "--devices", "wlp2s0,enp0s20f41"]=
-
-***** =Wireless Interface Args RefreshRate=
-
- - If set to "", first suitable wireless interface is used.
- - Aliases to the interface name with the suffix "wi": thus,
- =Wireless "wlan0" []= can be used as =%wlan0wi%=, and
- =Wireless "" []= as =%wi%=.
- - Args: default monitor arguments, plus:
-
- - =--quality-icon-pattern=: dynamic string for connection quality in
- =qualityipat=.
-
- - Variables that can be used with the =-t=/=--template= argument:
- =ssid=, =signal=, =quality=, =qualitybar=, =qualityvbar=,
- =qualityipat=
- - Thresholds refer to link quality on a =[0, 100]= scale. Note that
- =quality= is calculated from =signal= (in dBm) by a possibly lossy
- conversion. It is also not taking into account many factors such as
- noise level, air busy time, transcievers' capabilities and the others
- which can have drastic impact on the link performance.
- - Default template: =<ssid> <quality>=
- - To activate this plugin you must pass the =with_nl80211= or the
- =with_iwlib= flag during compilation.
-
-*** Weather Monitors
- :PROPERTIES:
- :CUSTOM_ID: weather-monitors
- :END:
-***** =Weather StationID Args RefreshRate=
-
- - Aliases to the Station ID: so =Weather "LIPB" []= can be used in
- template as =%LIPB%=
- - Thresholds refer to temperature in the selected units
- - Args: default monitor arguments, plus:
-
- - =--weathers= /string/ : display a default string when the =weather=
- variable is not reported.
-
- - short option: =-w=
- - Default: ""
-
- - =--useManager= /bool/ : Whether to use one single manager per
- monitor for managing network connections or create a new one every
- time a connection is made.
-
- - Short option: =-m=
- - Default: True
-
- - Variables that can be used with the =-t/--template= argument:
- =station=, =stationState=, =year=, =month=, =day=, =hour=,
- =windCardinal=, =windAzimuth=, =windMph=, =windKnots=, =windMs=,
- =windKmh= =visibility=, =skyCondition=, =weather=, =tempC=, =tempF=,
- =dewPointC=, =dewPointF=, =rh=, =pressure=
- - Default template: =<station>: <tempC>C, rh <rh>% (<hour>)=
- - Retrieves weather information from http://tgftp.nws.noaa.gov. Here is
- an [[https://tgftp.nws.noaa.gov/data/observations/metar/decoded/CYLD.TXT][example]], also showcasing the kind of information that may be
- extracted. Here is [[https://weather.rap.ucar.edu/surface/stations.txt][a sample list of station IDs]].
-
-***** =WeatherX StationID SkyConditions Args RefreshRate=
-
- - Works in the same way as =Weather=, but takes an additional argument,
- a list of pairs from sky conditions to their replacement (typically a
- unicode string or an icon specification).
- - Use the variable =skyConditionS= to display the replacement of the
- corresponding sky condition. All other =Weather= template variables
- are available as well.
+ =["--", "--devices", "wlp2s0,enp0s20f41"]=
+
+*** =Wireless Interface Args RefreshRate=
+
+ - If set to "", first suitable wireless interface is used.
+ - Aliases to the interface name with the suffix "wi": thus,
+ =Wireless "wlan0" []= can be used as =%wlan0wi%=, and
+ =Wireless "" []= as =%wi%=.
+ - Args: default monitor arguments, plus:
+
+ - =--quality-icon-pattern=: dynamic string for connection quality in
+ =qualityipat=.
+
+ - Variables that can be used with the =-t=/=--template= argument:
+ =ssid=, =signal=, =quality=, =qualitybar=, =qualityvbar=,
+ =qualityipat=
+ - Thresholds refer to link quality on a =[0, 100]= scale. Note that
+ =quality= is calculated from =signal= (in dBm) by a possibly lossy
+ conversion. It is also not taking into account many factors such as
+ noise level, air busy time, transcievers' capabilities and the others
+ which can have drastic impact on the link performance.
+ - Default template: =<ssid> <quality>=
+ - To activate this plugin you must pass the =with_nl80211= or the
+ =with_iwlib= flag during compilation.
+
+** Weather Monitors
+ :PROPERTIES:
+ :CUSTOM_ID: weather-monitors
+ :END:
+*** =Weather StationID Args RefreshRate=
+
+ - Aliases to the Station ID: so =Weather "LIPB" []= can be used in
+ template as =%LIPB%=
+ - Thresholds refer to temperature in the selected units
+ - Args: default monitor arguments, plus:
+
+ - =--weathers= /string/ : display a default string when the =weather=
+ variable is not reported.
+
+ - short option: =-w=
+ - Default: ""
+
+ - =--useManager= /bool/ : Whether to use one single manager per
+ monitor for managing network connections or create a new one every
+ time a connection is made.
+
+ - Short option: =-m=
+ - Default: True
+
+ - Variables that can be used with the =-t/--template= argument:
+ =station=, =stationState=, =year=, =month=, =day=, =hour=,
+ =windCardinal=, =windAzimuth=, =windMph=, =windKnots=, =windMs=,
+ =windKmh= =visibility=, =skyCondition=, =weather=, =tempC=, =tempF=,
+ =dewPointC=, =dewPointF=, =rh=, =pressure=
+ - Default template: =<station>: <tempC>C, rh <rh>% (<hour>)=
+ - Retrieves weather information from http://tgftp.nws.noaa.gov. Here is
+ an [[https://tgftp.nws.noaa.gov/data/observations/metar/decoded/CYLD.TXT][example]], also showcasing the kind of information that may be
+ extracted. Here is [[https://weather.rap.ucar.edu/surface/stations.txt][a sample list of station IDs]].
+
+*** =WeatherX StationID SkyConditions Args RefreshRate=
+
+ - Works in the same way as =Weather=, but takes an additional argument,
+ a list of pairs from sky conditions to their replacement (typically a
+ unicode string or an icon specification).
+ - Use the variable =skyConditionS= to display the replacement of the
+ corresponding sky condition. All other =Weather= template variables
+ are available as well.
For example:
@@ -1249,85 +1249,85 @@
As mentioned, the replacement string can also be an icon specification,
such as =("clear", "<icon=weather-clear.xbm/>")=.
-*** Other Monitors
-***** =Brightness Args RefreshRate=
+** Other Monitors
+*** =Brightness Args RefreshRate=
- - Aliases to =bright=
+ - Aliases to =bright=
- - Args: default monitor arguments, plus the following specif ones:
+ - Args: default monitor arguments, plus the following specif ones:
- - =-D=: directory in =/sys/class/backlight/= with files in it
- (default: "acpi_video0")
- - =-C=: file with the current brightness (default: actual_brightness)
- - =-M=: file with the maximum brightness (default: max_brightness)
- - =--brightness-icon-pattern=: dynamic string for current brightness
- in =ipat=.
+ - =-D=: directory in =/sys/class/backlight/= with files in it
+ (default: "acpi_video0")
+ - =-C=: file with the current brightness (default: actual_brightness)
+ - =-M=: file with the maximum brightness (default: max_brightness)
+ - =--brightness-icon-pattern=: dynamic string for current brightness
+ in =ipat=.
- - Variables that can be used with the =-t/--template= argument:
- =vbar=, =percent=, =bar=, =ipat=
+ - Variables that can be used with the =-t/--template= argument:
+ =vbar=, =percent=, =bar=, =ipat=
- - Default template: =<percent>=
+ - Default template: =<percent>=
- - Example:
+ - Example:
- #+begin_src haskell
- Run Brightness ["-t", "<bar>"] 60
- #+end_src
+ #+begin_src haskell
+ Run Brightness ["-t", "<bar>"] 60
+ #+end_src
-***** =CatInt n filename=
+*** =CatInt n filename=
- - Reads and displays an integer from the file whose path is =filename=
- (especially useful with files in =/sys=).
+ - Reads and displays an integer from the file whose path is =filename=
+ (especially useful with files in =/sys=).
- - Aliases as =catn= (e.g. =Cat 0= as =cat0=, etc.) so you can have
- several.
+ - Aliases as =catn= (e.g. =Cat 0= as =cat0=, etc.) so you can have
+ several.
- - Example:
+ - Example:
- #+begin_src haskell
- Run CatInt 0 "/sys/devices/platform/thinkpad_hwmon/fan1_input" [] 50
- #+end_src
+ #+begin_src haskell
+ Run CatInt 0 "/sys/devices/platform/thinkpad_hwmon/fan1_input" [] 50
+ #+end_src
-***** =CommandReader "/path/to/program" Alias=
+*** =CommandReader "/path/to/program" Alias=
- - Runs the given program, and displays its standard output.
+ - Runs the given program, and displays its standard output.
-***** =Uptime Args RefreshRate=
+*** =Uptime Args RefreshRate=
- - Aliases to =uptime=
- - Args: default monitor arguments. The low and high thresholds refer to
- the number of days.
- - Variables that can be used with the =-t/--template= argument: =days=,
- =hours=, =minutes=, =seconds=. The total uptime is the sum of all
- those fields. You can set the =-S= argument to =True= to add units to
- the display of those numeric fields.
- - Default template: =Up: <days>d <hours>h <minutes>m=
+ - Aliases to =uptime=
+ - Args: default monitor arguments. The low and high thresholds refer to
+ the number of days.
+ - Variables that can be used with the =-t/--template= argument: =days=,
+ =hours=, =minutes=, =seconds=. The total uptime is the sum of all
+ those fields. You can set the =-S= argument to =True= to add units to
+ the display of those numeric fields.
+ - Default template: =Up: <days>d <hours>h <minutes>m=
-***** =UVMeter=
+*** =UVMeter=
- - Aliases to "uv" + station id. For example: =%uv Brisbane%= or
- =%uv Alice Springs%=
+ - Aliases to "uv" + station id. For example: =%uv Brisbane%= or
+ =%uv Alice Springs%=
- - Args: default monitor arguments, plus:
+ - Args: default monitor arguments, plus:
- - =--useManager= /bool/ : Whether to use one single manager per
- monitor for managing network connections or create a new one every
- time a connection is made.
+ - =--useManager= /bool/ : Whether to use one single manager per
+ monitor for managing network connections or create a new one every
+ time a connection is made.
- - Short option: =-m=
- - Default: True
+ - Short option: =-m=
+ - Default: True
- - /Reminder:/ Keep the refresh rate high, to avoid making unnecessary
- requests every time the plug-in is run.
+ - /Reminder:/ Keep the refresh rate high, to avoid making unnecessary
+ requests every time the plug-in is run.
- - Station IDs can be found here:
- http://www.arpansa.gov.au/uvindex/realtime/xml/uvvalues.xml
+ - Station IDs can be found here:
+ http://www.arpansa.gov.au/uvindex/realtime/xml/uvvalues.xml
- - Example:
+ - Example:
- #+begin_src haskell
- Run UVMeter "Brisbane" ["-H", "3", "-L", "3", "--low", "green", "--high", "red"] 900
- #+end_src
+ #+begin_src haskell
+ Run UVMeter "Brisbane" ["-H", "3", "-L", "3", "--low", "green", "--high", "red"] 900
+ #+end_src
* Executing External Commands
@@ -1365,7 +1365,7 @@
error, or you might want to display a custom message in that
case. To that end, you can use the =ComX= variant:
- =ComX ProgramName Args ExitMessage Alias RefreshRate=
+ =ComX ProgramName Args ExitMessage Alias RefreshRate=
Works like =Com=, but displaying =ExitMessage= (a string) if the
execution fails. For instance:
diff --git a/doc/quick-start.org b/doc/quick-start.org
index a853578..2557295 100644
--- a/doc/quick-start.org
+++ b/doc/quick-start.org
@@ -26,21 +26,21 @@ available [[https://codeberg.org/xmobar/xmobar/src/branch/master/examples/xmobar
#+begin_src shell
Usage: xmobar [OPTION...] [FILE]
Options:
- -h, -? --help This help
- -v --verbose Emit verbose debugging messages
- -r --recompile Force recompilation
- -V --version Show version information
- -f font name --font=font name Font name
- -N font name --add-font=font name Add to the list of additional fonts
- -w class --wmclass=class X11 WM_CLASS property
- -n name --wmname=name X11 WM_NAME property
- -B bg color --bgcolor=bg color The background color. Default black
- -F fg color --fgcolor=fg color The foreground color. Default grey
- -i path --iconroot=path Root directory for icon pattern paths. Default '.'
- -A alpha --alpha=alpha Transparency: 0 is transparent, 255 is opaque. Default: 255
- -o --top Place xmobar at the top of the screen
- -b --bottom Place xmobar at the bottom of the screen
- -d --dock Don't override redirect from WM and function as a dock
+ -h, -? --help This help
+ -v --verbose Emit verbose debugging messages
+ -r --recompile Force recompilation
+ -V --version Show version information
+ -f font name --font=font name Font name
+ -N font name --add-font=font name Add to the list of additional fonts
+ -w class --wmclass=class X11 WM_CLASS property
+ -n name --wmname=name X11 WM_NAME property
+ -B bg color --bgcolor=bg color The background color. Default black
+ -F fg color --fgcolor=fg color The foreground color. Default grey
+ -i path --iconroot=path Root directory for icon pattern paths. Default '.'
+ -A alpha --alpha=alpha Transparency: 0 is transparent, 255 is opaque. Default: 255
+ -o --top Place xmobar at the top of the screen
+ -b --bottom Place xmobar at the bottom of the screen
+ -d --dock Don't override redirect from WM and function as a dock
-a alignsep --alignsep=alignsep Separators for left, center and right text
alignment. Default: '}{'
-s char --sepchar=char Character used to separate commands in
@@ -58,375 +58,375 @@ available [[https://codeberg.org/xmobar/xmobar/src/branch/master/examples/xmobar
:PROPERTIES:
:CUSTOM_ID: configuration-options
:END:
-*** Global options
- Here are all the global configuration options that you can set within
- the =Config= block in your configuration.
+** Global options
+ Here are all the global configuration options that you can set within
+ the =Config= block in your configuration.
- - =font= Name of the font to be used. Use the =xft:= prefix for XFT
- fonts.
+ - =font= Name of the font to be used. Use the =xft:= prefix for XFT
+ fonts.
- - =additionalFonts= Haskell-style list of fonts to be used with the
- =fn=-template. Use the =xft:= prefix for XFT fonts. See also
- =textOffsets= below. For example:
+ - =additionalFonts= Haskell-style list of fonts to be used with the
+ =fn=-template. Use the =xft:= prefix for XFT fonts. See also
+ =textOffsets= below. For example:
- #+begin_src haskell
- additionalFonts = [iconFont, altIconFont]
- #+end_src
+ #+begin_src haskell
+ additionalFonts = [iconFont, altIconFont]
+ #+end_src
- - =bgColor= Background color.
+ - =bgColor= Background color.
- - =fgColor= Default font color.
+ - =fgColor= Default font color.
- - =alpha= The transparency. 0 is transparent, 255 is opaque.
+ - =alpha= The transparency. 0 is transparent, 255 is opaque.
- - =position= Top, TopH, TopP, TopW, TopSize, Bottom, BottomH,
- BottomP, BottomW, BottomSize or Static (with x, y, width and height).
+ - =position= Top, TopH, TopP, TopW, TopSize, Bottom, BottomH,
+ BottomP, BottomW, BottomSize or Static (with x, y, width and height).
- TopP and BottomP take 2 arguments: left padding and right padding.
+ TopP and BottomP take 2 arguments: left padding and right padding.
- TopW and BottomW take 2 arguments: an alignment parameter (L for left,
- C for centered, R for Right) and an integer for the percentage width
- xmobar window will have in respect to the screen width.
+ TopW and BottomW take 2 arguments: an alignment parameter (L for left,
+ C for centered, R for Right) and an integer for the percentage width
+ xmobar window will have in respect to the screen width.
- TopSize and BottomSize take 3 arguments: an alignment parameter, an
- integer for the percentage width, and an integer for the minimum pixel
- height that the xmobar window will have.
+ TopSize and BottomSize take 3 arguments: an alignment parameter, an
+ integer for the percentage width, and an integer for the minimum pixel
+ height that the xmobar window will have.
- TopH and BottomH take one argument (Int) which adjusts the bar height.
+ TopH and BottomH take one argument (Int) which adjusts the bar height.
- For example:
+ For example:
- #+begin_src haskell
- position = TopH 30
- #+end_src
+ #+begin_src haskell
+ position = TopH 30
+ #+end_src
- to make a 30 tall bar on the top, or
+ to make a 30 tall bar on the top, or
- #+begin_src haskell
- position = BottomH 30
- #+end_src
+ #+begin_src haskell
+ position = BottomH 30
+ #+end_src
- to make a 30 tall bar on the bottom of the screen.
+ to make a 30 tall bar on the bottom of the screen.
- #+begin_src haskell
- position = BottomW C 75
- #+end_src
+ #+begin_src haskell
+ position = BottomW C 75
+ #+end_src
- to place xmobar at the bottom, centered with the 75% of the screen
- width. Or
+ to place xmobar at the bottom, centered with the 75% of the screen
+ width. Or
- #+begin_src haskell
- position = BottomP 120 0
- #+end_src
+ #+begin_src haskell
+ position = BottomP 120 0
+ #+end_src
- to place xmobar at the bottom, with 120 pixel indent of the left. Or
+ to place xmobar at the bottom, with 120 pixel indent of the left. Or
- #+begin_src haskell
- position = Static { xpos = 0 , ypos = 0, width = 1024, height = 15 }
- #+end_src
+ #+begin_src haskell
+ position = Static { xpos = 0 , ypos = 0, width = 1024, height = 15 }
+ #+end_src
- or
+ or
- #+begin_src haskell
- position = Top
- #+end_src
+ #+begin_src haskell
+ position = Top
+ #+end_src
- - =textOffset= The vertical offset, in pixels, for the text baseline. If
- negative or not given, xmobar will try to center text vertically.
+ - =textOffset= The vertical offset, in pixels, for the text baseline. If
+ negative or not given, xmobar will try to center text vertically.
- - =textOffsets= A list of vertical offsets, in pixels, for the text
- baseline, to be used with the each of the fonts in =additionalFonts=
- (if any). If negative or not given, xmobar will try to center text
- vertically for that font.
+ - =textOffsets= A list of vertical offsets, in pixels, for the text
+ baseline, to be used with the each of the fonts in =additionalFonts=
+ (if any). If negative or not given, xmobar will try to center text
+ vertically for that font.
- - =iconOffset= The vertical offset, in pixels, for icons bottom line. If
- negative or not given, xmobar will try to center icons vertically.
+ - =iconOffset= The vertical offset, in pixels, for icons bottom line. If
+ negative or not given, xmobar will try to center icons vertically.
- - =lowerOnStart= When True the window is sent the bottom of the window
- stack initially.
+ - =lowerOnStart= When True the window is sent the bottom of the window
+ stack initially.
- - =hideOnStart= When set to True the window is initially not mapped,
- i.e. hidden. It then can be toggled manually (for example using the
- dbus interface) or automatically (by a plugin) to make it reappear.
+ - =hideOnStart= When set to True the window is initially not mapped,
+ i.e. hidden. It then can be toggled manually (for example using the
+ dbus interface) or automatically (by a plugin) to make it reappear.
- - =allDesktops= When set to True (the default), xmobar will tell the
- window manager explicitly to be shown in all desktops, by setting
- =_NET_WM_DESKTOP= to 0xffffffff.
+ - =allDesktops= When set to True (the default), xmobar will tell the
+ window manager explicitly to be shown in all desktops, by setting
+ =_NET_WM_DESKTOP= to 0xffffffff.
- - =overrideRedirect= If you're running xmobar in a tiling window
- manager, you might need to set this option to =False= so that it
- behaves as a docked application. Defaults to =True=.
+ - =overrideRedirect= If you're running xmobar in a tiling window
+ manager, you might need to set this option to =False= so that it
+ behaves as a docked application. Defaults to =True=.
- - =pickBroadest= When multiple displays are available, xmobar will
- choose by default the first one to place itself. With this flag set to
- =True= (the default is =False=) it will choose the broadest one
- instead.
+ - =pickBroadest= When multiple displays are available, xmobar will
+ choose by default the first one to place itself. With this flag set to
+ =True= (the default is =False=) it will choose the broadest one
+ instead.
- - =persistent= When True the window status is fixed i.e. hiding or
- revealing is not possible. This option can be toggled at runtime.
- Defaults to False.
+ - =persistent= When True the window status is fixed i.e. hiding or
+ revealing is not possible. This option can be toggled at runtime.
+ Defaults to False.
- - =border= TopB, TopBM, BottomB, BottomBM, FullB, FullBM or NoBorder
- (default).
+ - =border= TopB, TopBM, BottomB, BottomBM, FullB, FullBM or NoBorder
+ (default).
- TopB, BottomB, FullB take no arguments, and request drawing a border
- at the top, bottom or around xmobar's window, respectively.
+ TopB, BottomB, FullB take no arguments, and request drawing a border
+ at the top, bottom or around xmobar's window, respectively.
- TopBM, BottomBM, FullBM take an integer argument, which is the margin,
- in pixels, between the border of the window and the drawn border.
+ TopBM, BottomBM, FullBM take an integer argument, which is the margin,
+ in pixels, between the border of the window and the drawn border.
- - =borderColor= Border color.
+ - =borderColor= Border color.
- - =borderWidth= Border width in pixels.
+ - =borderWidth= Border width in pixels.
- - =iconRoot= Root folder where icons are stored. For =<icon=path/>= if
- path start with =/=, =./= or =../= it is interpreted as it is.
- Otherwise it will have
+ - =iconRoot= Root folder where icons are stored. For =<icon=path/>= if
+ path start with =/=, =./= or =../= it is interpreted as it is.
+ Otherwise it will have
- #+begin_src haskell
- iconRoot ++ "/"
- #+end_src
+ #+begin_src haskell
+ iconRoot ++ "/"
+ #+end_src
- prepended to it. Default is =.=.
+ prepended to it. Default is =.=.
- - =commands= For setting the options of the programs to run (optional).
+ - =commands= For setting the options of the programs to run (optional).
- - =sepChar= The character to be used for indicating commands in the
- output template (default '%').
+ - =sepChar= The character to be used for indicating commands in the
+ output template (default '%').
- - =alignSep= a 2 character string for aligning text in the output
- template. The text before the first character will be align to left,
- the text in between the 2 characters will be centered, and the text
- after the second character will be align to the right.
+ - =alignSep= a 2 character string for aligning text in the output
+ template. The text before the first character will be align to left,
+ the text in between the 2 characters will be centered, and the text
+ after the second character will be align to the right.
- - =template= The output template.
+ - =template= The output template.
- - =wmClass= The value for the window's X11 ~WM_CLASS~ property. Defaults
- to "xmobar".
+ - =wmClass= The value for the window's X11 ~WM_CLASS~ property. Defaults
+ to "xmobar".
- - =wmName= The value for the window's X11 ~WM_NAME~ property. Defaults to
- "xmobar".
+ - =wmName= The value for the window's X11 ~WM_NAME~ property. Defaults to
+ "xmobar".
- - =textOutput= When True, instead of running as an X11 application,
- write output to stdout, with optional color escape sequences. In
- this mode, icon and action specifications are ignored. Default is
- False.
+ - =textOutput= When True, instead of running as an X11 application,
+ write output to stdout, with optional color escape sequences. In
+ this mode, icon and action specifications are ignored. Default is
+ False.
- - =textOutputFormat= Plain, Ansi or Pango, to emit, when in text
- mode, escape color sequences using ANSI controls (for terminals) or
- pango markup. Default is Plain.
+ - =textOutputFormat= Plain, Ansi or Pango, to emit, when in text
+ mode, escape color sequences using ANSI controls (for terminals) or
+ pango markup. Default is Plain.
-*** The output =template=
+** The output =template=
- The output template is how xmobar will end up printing all of your
- configured commands. It must contain at least one command. Xmobar
- will parse the template and search for the command to be executed
- in the =commands= configuration option. First an =alias= will be
- searched (some plugins, such as =Weather= or =Network=, have default
- aliases, see the [[./plugins.org][plugin documentation]]). After that, the command
- name will be tried. If a command is found, the arguments specified
- in the =commands= list will be used.
+ The output template is how xmobar will end up printing all of your
+ configured commands. It must contain at least one command. Xmobar
+ will parse the template and search for the command to be executed
+ in the =commands= configuration option. First an =alias= will be
+ searched (some plugins, such as =Weather= or =Network=, have default
+ aliases, see the [[./plugins.org][plugin documentation]]). After that, the command
+ name will be tried. If a command is found, the arguments specified
+ in the =commands= list will be used.
- If no command is found in the =commands= list, xmobar will ask the
- operating system to execute a program with the name found in the
- template. If the execution is not successful an error will be
- reported.
+ If no command is found in the =commands= list, xmobar will ask the
+ operating system to execute a program with the name found in the
+ template. If the execution is not successful an error will be
+ reported.
-***** Template syntax
+*** Template syntax
- The syntax for the output template is as follows:
+ The syntax for the output template is as follows:
- - =%command%= will execute command and print the output. The output may
- contain markups to change the characters' color.
+ - =%command%= will execute command and print the output. The output may
+ contain markups to change the characters' color.
- - =<fc=#FF0000>string</fc>= will print =string= with =#FF0000= color
- (red). =<fc=#FF0000,#000000>string</fc>= will print =string= in red
- with a black background (=#000000=). Background absolute offsets can
- be specified for XFT fonts. =<fc=#FF0000,#000000:0>string</fc>= will
- have a background matching the bar's height.
+ - =<fc=#FF0000>string</fc>= will print =string= with =#FF0000= color
+ (red). =<fc=#FF0000,#000000>string</fc>= will print =string= in red
+ with a black background (=#000000=). Background absolute offsets can
+ be specified for XFT fonts. =<fc=#FF0000,#000000:0>string</fc>= will
+ have a background matching the bar's height.
- - =<fn=1>string</fn>= will print =string= with the first font from
- =additionalFonts=. The index =0= corresponds to the standard font.
+ - =<fn=1>string</fn>= will print =string= with the first font from
+ =additionalFonts=. The index =0= corresponds to the standard font.
- - =<hspace=X/>= will insert a blank horizontal space of =X= pixels.
- For example, to add a blank horizontal space of 123 pixels,
- =<hspace=123/>= may be used.
+ - =<hspace=X/>= will insert a blank horizontal space of =X= pixels.
+ For example, to add a blank horizontal space of 123 pixels,
+ =<hspace=123/>= may be used.
- - =<box>string</box>= will print string surrounded by a box in the
- foreground color. The =box= tag accepts several optional arguments to
- tailor its looks: see next section.
+ - =<box>string</box>= will print string surrounded by a box in the
+ foreground color. The =box= tag accepts several optional arguments to
+ tailor its looks: see next section.
- - =<icon=/path/to/icon.xbm/>= will insert the given bitmap. XPM image
- format is also supported when compiled with the =with_xpm= flag.
+ - =<icon=/path/to/icon.xbm/>= will insert the given bitmap. XPM image
+ format is also supported when compiled with the =with_xpm= flag.
- - =<action=`command` button=12345>= will execute given command when
- clicked with specified buttons. If not specified, button is equal to 1
- (left mouse button). Using old syntax (without backticks surrounding
- =command=) will result in =button= attribute being ignored.
+ - =<action=`command` button=12345>= will execute given command when
+ clicked with specified buttons. If not specified, button is equal to 1
+ (left mouse button). Using old syntax (without backticks surrounding
+ =command=) will result in =button= attribute being ignored.
- - =<raw=len:str/>= allows the encapsulation of arbitrary text =str=
- (which must be =len= =Char=s long, where =len= is encoded as a decimal
- sequence). Careful use of this and =UnsafeStdinReader=, for example,
- permits window managers to feed xmobar strings with =<action>= tags
- mixed with un-trusted content (e.g. window titles). For example, if
- xmobar is invoked as
+ - =<raw=len:str/>= allows the encapsulation of arbitrary text =str=
+ (which must be =len= =Char=s long, where =len= is encoded as a decimal
+ sequence). Careful use of this and =UnsafeStdinReader=, for example,
+ permits window managers to feed xmobar strings with =<action>= tags
+ mixed with un-trusted content (e.g. window titles). For example, if
+ xmobar is invoked as
- #+begin_src shell
- xmobar -c "[Run UnsafeStdinReader]" -t "%UnsafeStdinReader%"
- #+end_src
+ #+begin_src shell
+ xmobar -c "[Run UnsafeStdinReader]" -t "%UnsafeStdinReader%"
+ #+end_src
- and receives on standard input the line
+ and receives on standard input the line
- #+begin_src shell
- <action=`echo test` button=1><raw=41:<action=`echo mooo` button=1>foo</action>/></action>`
- #+end_src
+ #+begin_src shell
+ <action=`echo test` button=1><raw=41:<action=`echo mooo` button=1>foo</action>/></action>`
+ #+end_src
- then it will display the text
- =<action=`echo mooo` button=1>foo</action>=, which, when clicked, will
- cause =test= to be echoed.
+ then it will display the text
+ =<action=`echo mooo` button=1>foo</action>=, which, when clicked, will
+ cause =test= to be echoed.
- See the subsections below for more information on ~<box/>~,
- ~<icon/>~ and ~<action/>~.
+ See the subsections below for more information on ~<box/>~,
+ ~<icon/>~ and ~<action/>~.
-***** Boxes around text
+*** Boxes around text
- - =<box>string</box>= will print string surrounded by a box in the
- foreground color. The =box= tag accepts several optional arguments to
- tailor its looks:
+ - =<box>string</box>= will print string surrounded by a box in the
+ foreground color. The =box= tag accepts several optional arguments to
+ tailor its looks:
- - =type=: =Top=, =Bottom=, =VBoth= (a single line above or below
- string, or both), =Left=, =Right=, =HBoth= (single vertical lines),
- =Full= (a rectangle, the default).
- - =color=: the color of the box lines.
- - =width=: the width of the box lines.
- - =offset=: an alignment char (L, C or R) followed by the amount of
- pixels to offset the box lines; the alignment denotes the position
- of the resulting line, with L/R meaning top/bottom for the vertical
- lines, and left/right for horizontal ones.
- - =mt=, =mb=, =ml=, =mr= specify margins to be added at the top,
- bottom, left and right lines.
+ - =type=: =Top=, =Bottom=, =VBoth= (a single line above or below
+ string, or both), =Left=, =Right=, =HBoth= (single vertical lines),
+ =Full= (a rectangle, the default).
+ - =color=: the color of the box lines.
+ - =width=: the width of the box lines.
+ - =offset=: an alignment char (L, C or R) followed by the amount of
+ pixels to offset the box lines; the alignment denotes the position
+ of the resulting line, with L/R meaning top/bottom for the vertical
+ lines, and left/right for horizontal ones.
+ - =mt=, =mb=, =ml=, =mr= specify margins to be added at the top,
+ bottom, left and right lines.
- For example, a box underlining its text with a red line of width 2:
+ For example, a box underlining its text with a red line of width 2:
- #+begin_src shell
- <box type=Bottom width=2 color=red>string</box>
- #+end_src
+ #+begin_src shell
+ <box type=Bottom width=2 color=red>string</box>
+ #+end_src
- and if you wanted an underline and an overline with a margin of 2
- pixels either side:
+ and if you wanted an underline and an overline with a margin of 2
+ pixels either side:
- #+begin_src shell
- <box type=VBoth mt=2 mb=2>string</box>
- #+end_src
+ #+begin_src shell
+ <box type=VBoth mt=2 mb=2>string</box>
+ #+end_src
- When xmobar is run in text mode with output format swaybar, box
- types, colors and widths are valid too, but margins and offsets
- are ignored.
+ When xmobar is run in text mode with output format swaybar, box
+ types, colors and widths are valid too, but margins and offsets
+ are ignored.
-***** Bitmap Icons
+*** Bitmap Icons
- It's possible to insert in the global templates icon directives of the
- form:
+ It's possible to insert in the global templates icon directives of the
+ form:
- prepended to it. Default is =.=.
+ prepended to it. Default is =.=.
- #+begin_src shell
- <icon=/path/to/bitmap.xbm/>
- #+end_src
+ #+begin_src shell
+ <icon=/path/to/bitmap.xbm/>
+ #+end_src
- which will produce the expected result. Accepted image formats are XBM
- and XPM (when =with_xpm= flag is enabled). If path does not start with
- =/=, =./=, =../= it will have
+ which will produce the expected result. Accepted image formats are XBM
+ and XPM (when =with_xpm= flag is enabled). If path does not start with
+ =/=, =./=, =../= it will have
- #+begin_src haskell
- iconRoot ++ "/"
- #+end_src
+ #+begin_src haskell
+ iconRoot ++ "/"
+ #+end_src
- prepended to it.
+ prepended to it.
- Icons are ignored when xmobar is run in text output mode.
+ Icons are ignored when xmobar is run in text output mode.
-***** Action Directives
+*** Action Directives
- It's also possible to use action directives of the form:
+ It's also possible to use action directives of the form:
- #+begin_src shell
- <action=`command` button=12345>
- #+end_src
+ #+begin_src shell
+ <action=`command` button=12345>
+ #+end_src
- which will be executed when clicked on with specified mouse
- buttons. This tag can be nested, allowing different commands to
- be run depending on button clicked.
+ which will be executed when clicked on with specified mouse
+ buttons. This tag can be nested, allowing different commands to
+ be run depending on button clicked.
- Actions work also when xmobar is run in text mode and used as
- the status command of swaybar.
+ Actions work also when xmobar is run in text mode and used as
+ the status command of swaybar.
-*** The =commands= configuration option
+** The =commands= configuration option
- The =commands= configuration option is a list of commands information
- and arguments to be used by xmobar when parsing the output template.
- Each member of the list consists in a command prefixed by the =Run=
- keyword. Each command has arguments to control the way xmobar is going
- to execute it.
+ The =commands= configuration option is a list of commands information
+ and arguments to be used by xmobar when parsing the output template.
+ Each member of the list consists in a command prefixed by the =Run=
+ keyword. Each command has arguments to control the way xmobar is going
+ to execute it.
- The option consists in a list of commands separated by a comma and
- enclosed by square parenthesis.
+ The option consists in a list of commands separated by a comma and
+ enclosed by square parenthesis.
- Example:
+ Example:
- #+begin_src haskell
- [Run Memory ["-t","Mem: <usedratio>%"] 10, Run Swap [] 10]
- #+end_src
+ #+begin_src haskell
+ [Run Memory ["-t","Mem: <usedratio>%"] 10, Run Swap [] 10]
+ #+end_src
- to run the Memory monitor plugin with the specified template, and the
- swap monitor plugin, with default options, every second. And here's an
- example of a template for the commands above using an icon:
+ to run the Memory monitor plugin with the specified template, and the
+ swap monitor plugin, with default options, every second. And here's an
+ example of a template for the commands above using an icon:
- #+begin_src haskell
- template = "<icon=/home/jao/.xmobar/mem.xbm/><memory> <swap>"
- #+end_src
+ #+begin_src haskell
+ template = "<icon=/home/jao/.xmobar/mem.xbm/><memory> <swap>"
+ #+end_src
- This example will run "xclock" command when date is clicked:
+ This example will run "xclock" command when date is clicked:
- #+begin_src haskell
- template = "<action=`xclock`>%date%</action>"
- #+end_src
+ #+begin_src haskell
+ template = "<action=`xclock`>%date%</action>"
+ #+end_src
- The only internal available command is =Com= (see below Executing
- External Commands). All other commands are provided by plugins. xmobar
- comes with some plugins, providing a set of system monitors, a standard
- input reader, an Unix named pipe reader, a configurable date plugin, and
- much more: we list all available plugins below.
+ The only internal available command is =Com= (see below Executing
+ External Commands). All other commands are provided by plugins. xmobar
+ comes with some plugins, providing a set of system monitors, a standard
+ input reader, an Unix named pipe reader, a configurable date plugin, and
+ much more: we list all available plugins below.
- Other commands can be created as plugins with the Plugin infrastructure.
- See below.
+ Other commands can be created as plugins with the Plugin infrastructure.
+ See below.
* Runtime behaviour
-*** Running xmobar with =i3status=
+** Running xmobar with =i3status=
- xmobar can be used to display information generated by [[http://i3wm.org/i3status/][i3status]], a small
- program that gathers system information and outputs it in formats
- suitable for being displayed by the dzen2 status bar, wmii's status bar
- or xmobar's =StdinReader=. See [[http://i3wm.org/i3status/manpage.html#_using_i3status_with_xmobar][i3status manual]] for further details.
+ xmobar can be used to display information generated by [[http://i3wm.org/i3status/][i3status]], a small
+ program that gathers system information and outputs it in formats
+ suitable for being displayed by the dzen2 status bar, wmii's status bar
+ or xmobar's =StdinReader=. See [[http://i3wm.org/i3status/manpage.html#_using_i3status_with_xmobar][i3status manual]] for further details.
-*** Dynamically sizing xmobar
+** Dynamically sizing xmobar
- See [[https://codeberg.org/xmobar/xmobar/issues/239#issuecomment-233206552][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
- [[../examples/padding-icon.sh][examples/padding-icon.sh]].
+ See [[https://codeberg.org/xmobar/xmobar/issues/239#issuecomment-233206552][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
+ [[../examples/padding-icon.sh][examples/padding-icon.sh]].
-*** Signal Handling
+** Signal Handling
- xmobar reacts to ~SIGUSR1~ and ~SIGUSR2~:
+ xmobar reacts to ~SIGUSR1~ and ~SIGUSR2~:
- - After receiving ~SIGUSR1~ xmobar moves its position to the next screen.
+ - After receiving ~SIGUSR1~ xmobar moves its position to the next screen.
- - After receiving ~SIGUSR2~ xmobar repositions itself on the current
- screen.
+ - After receiving ~SIGUSR2~ xmobar repositions itself on the current
+ screen.
* The DBus Interface
When compiled with the optional =with_dbus= flag, xmobar can be controlled
@@ -446,7 +446,7 @@ available [[https://codeberg.org/xmobar/xmobar/src/branch/master/examples/xmobar
An example using the =dbus-send= command line utility:
#+begin_src shell
- dbus-send \
+ dbus-send \
--session \
--dest=org.Xmobar.Control \
--type=method_call \
@@ -461,7 +461,7 @@ available [[https://codeberg.org/xmobar/xmobar/src/branch/master/examples/xmobar
#+begin_src shell
# send to another screen, reveal and toggle the persistent flag
dbus-send [..] \
- "string:ChangeScreen 0" "string:Reveal 0" "string:TogglePersistent"
+ "string:ChangeScreen 0" "string:Reveal 0" "string:TogglePersistent"
#+end_src
The =Toggle=, =Reveal=, and =Hide= signals take an additional integer
diff --git a/doc/using-haskell.org b/doc/using-haskell.org
index 5c48c06..1cbe82c 100644
--- a/doc/using-haskell.org
+++ b/doc/using-haskell.org
@@ -110,7 +110,7 @@
=run*= functions in [[../src/Xmobar/Plugins/Monitors/Common/Run.hs][Xmobar.Plugins.Monitors.Run]] in order to define
=start=. The =Exec= instance should then live in [[../src/Xmobar/Plugins/Monitors.hs][Xmobar.Plugins.Monitors]].
-* Using a Plugin
+* Using a plugin
To use your new plugin, you just need to use a pure Haskell configuration
for xmobar (as explained [[#xmobar-in-haskell][above]]) and load your definitions in your =xmobar.hs=
diff --git a/doc/window-managers.org b/doc/window-managers.org
index ea3aeea..db8207c 100644
--- a/doc/window-managers.org
+++ b/doc/window-managers.org
@@ -3,284 +3,284 @@
Listed below are ways to interface xmobar with your window manager of
choice.
-*** Property-based Logging
-***** =XMonadLog=
-
- - Aliases to XMonadLog
-
- - Displays information from xmonad's =_XMONAD_LOG=. You can use
- this by using functions from the [[https://hackage.haskell.org/package/xmonad-contrib-0.16/docs/XMonad-Hooks-DynamicLog.html][XMonad.Hooks.DynamicLog]]
- module. By using the =xmonadPropLog= function in your logHook,
- you can write the the above property. The following shows a
- minimal xmonad configuration that spawns xmobar and then
- writes to the =_XMONAD_LOG= property.
+* Property-based Logging
+** =XMonadLog=
+
+ - Aliases to XMonadLog
+
+ - Displays information from xmonad's =_XMONAD_LOG=. You can use
+ this by using functions from the [[https://hackage.haskell.org/package/xmonad-contrib-0.16/docs/XMonad-Hooks-DynamicLog.html][XMonad.Hooks.DynamicLog]]
+ module. By using the =xmonadPropLog= function in your logHook,
+ you can write the the above property. The following shows a
+ minimal xmonad configuration that spawns xmobar and then
+ writes to the =_XMONAD_LOG= property.
- #+begin_src haskell
- main = do
- spawn "xmobar"
- xmonad $ def
- { logHook = dynamicLogString defaultPP >>= xmonadPropLog
- }
- #+end_src
+ #+begin_src haskell
+ main = do
+ spawn "xmobar"
+ xmonad $ def
+ { logHook = dynamicLogString defaultPP >>= xmonadPropLog
+ }
+ #+end_src
- This plugin can be used as a sometimes more convenient
- alternative to =StdinReader=. For instance, it allows you to
- (re)start xmobar outside xmonad.
+ This plugin can be used as a sometimes more convenient
+ alternative to =StdinReader=. For instance, it allows you to
+ (re)start xmobar outside xmonad.
-***** =UnsafeXMonadLog=
+** =UnsafeXMonadLog=
- - Aliases to UnsafeXMonadLog
- - Displays any text received by xmobar on the =_XMONAD_LOG= atom.
- - Will not do anything to the text received. This means you can pass
- xmobar dynamic actions. Be careful to escape (using =<raw=…>=) or
- remove tags from dynamic text that you pipe through to xmobar in this
- way.
+ - Aliases to UnsafeXMonadLog
+ - Displays any text received by xmobar on the =_XMONAD_LOG= atom.
+ - Will not do anything to the text received. This means you can pass
+ xmobar dynamic actions. Be careful to escape (using =<raw=…>=) or
+ remove tags from dynamic text that you pipe through to xmobar in this
+ way.
- - Sample usage: Send the list of your workspaces, enclosed by actions
- tags, to xmobar. This enables you to switch to a workspace when you
- click on it in xmobar!
+ - Sample usage: Send the list of your workspaces, enclosed by actions
+ tags, to xmobar. This enables you to switch to a workspace when you
+ click on it in xmobar!
- #+begin_src shell
- <action=`xdotool key alt+1`>ws1</action> <action=`xdotool key alt+1`>ws2</action>
- #+end_src
+ #+begin_src shell
+ <action=`xdotool key alt+1`>ws1</action> <action=`xdotool key alt+1`>ws2</action>
+ #+end_src
- - If you use xmonad, It is advised that you still use =xmobarStrip= for
- the =ppTitle= in your logHook:
+ - If you use xmonad, It is advised that you still use =xmobarStrip= for
+ the =ppTitle= in your logHook:
- #+begin_src haskell
- myPP = defaultPP { ppTitle = xmobarStrip }
- main = xmonad $ def
- { logHook = dynamicLogString myPP >>= xmonadPropLog
- }
- #+end_src
+ #+begin_src haskell
+ myPP = defaultPP { ppTitle = xmobarStrip }
+ main = xmonad $ def
+ { logHook = dynamicLogString myPP >>= xmonadPropLog
+ }
+ #+end_src
-***** =XPropertyLog PropName=
+** =XPropertyLog PropName=
- - Aliases to =PropName=
- - Reads the X property named by =PropName= (a string) and displays its
- value. The [[../examples/xmonadpropwrite.hs][examples/xmonadpropwrite.hs script]] in xmobar's distribution
- can be used to set the given property from the output of any other
- program or script.
+ - Aliases to =PropName=
+ - Reads the X property named by =PropName= (a string) and displays its
+ value. The [[../examples/xmonadpropwrite.hs][examples/xmonadpropwrite.hs script]] in xmobar's distribution
+ can be used to set the given property from the output of any other
+ program or script.
-***** =UnsafeXPropertyLog PropName=
+** =UnsafeXPropertyLog PropName=
- - Aliases to =PropName=
- - Same as =XPropertyLog= but the input is not filtered to avoid
- injection of actions (cf. =UnsafeXMonadLog=). The program writing the
- value of the read property is responsible of performing any needed
- cleanups.
+ - Aliases to =PropName=
+ - Same as =XPropertyLog= but the input is not filtered to avoid
+ injection of actions (cf. =UnsafeXMonadLog=). The program writing the
+ value of the read property is responsible of performing any needed
+ cleanups.
-***** =NamedXPropertyLog PropName Alias=
+** =NamedXPropertyLog PropName Alias=
- - Aliases to =Alias=
- - Same as =XPropertyLog= but a custom alias can be specified.
+ - Aliases to =Alias=
+ - Same as =XPropertyLog= but a custom alias can be specified.
-***** =UnsafeNamedXPropertyLog PropName Alias=
+** =UnsafeNamedXPropertyLog PropName Alias=
- - Aliases to =Alias=
- - Same as =UnsafeXPropertyLog=, but a custom alias can be specified.
+ - Aliases to =Alias=
+ - Same as =UnsafeXPropertyLog=, but a custom alias can be specified.
-*** Logging via Stdin
-***** =StdinReader=
+* Logging via Stdin
+** =StdinReader=
- - Aliases to StdinReader
- - Displays any text received by xmobar on its standard input.
- - Strips actions from the text received. This means you can't pass
- dynamic actions via stdin. This is safer than =UnsafeStdinReader=
- because there is no need to escape the content before passing it to
- xmobar's standard input.
+ - Aliases to StdinReader
+ - Displays any text received by xmobar on its standard input.
+ - Strips actions from the text received. This means you can't pass
+ dynamic actions via stdin. This is safer than =UnsafeStdinReader=
+ because there is no need to escape the content before passing it to
+ xmobar's standard input.
-***** =UnsafeStdinReader=
+** =UnsafeStdinReader=
- - Aliases to UnsafeStdinReader
- - Displays any text received by xmobar on its standard input.
- - Similar to [[=UnsafeXMonadLog=][UnsafeXMonadLog]], in the sense that it does not strip any
- actions from the received text, only using =stdin= and not a property
- atom of the root window. Please be equally carefully when using this
- as when using =UnsafeXMonadLog=!
+ - Aliases to UnsafeStdinReader
+ - Displays any text received by xmobar on its standard input.
+ - Similar to [[=UnsafeXMonadLog=][UnsafeXMonadLog]], in the sense that it does not strip any
+ actions from the received text, only using =stdin= and not a property
+ atom of the root window. Please be equally carefully when using this
+ as when using =UnsafeXMonadLog=!
-*** Pipe-based Logging
-***** =PipeReader "default text:/path/to/pipe" Alias=
+* Pipe-based Logging
+** =PipeReader "default text:/path/to/pipe" Alias=
- - Reads its displayed output from the given pipe.
- - Prefix an optional default text separated by a colon
- - Expands environment variables in the first argument of syntax =${VAR}=
- or =$VAR=
+ - Reads its displayed output from the given pipe.
+ - Prefix an optional default text separated by a colon
+ - Expands environment variables in the first argument of syntax =${VAR}=
+ or =$VAR=
-***** =MarqueePipeReader "default text:/path/to/pipe" (length, rate, sep) Alias=
+** =MarqueePipeReader "default text:/path/to/pipe" (length, rate, sep) Alias=
- - Generally equivalent to PipeReader
+ - Generally equivalent to PipeReader
- - Text is displayed as marquee with the specified length, rate in 10th
- seconds and separator when it wraps around
+ - Text is displayed as marquee with the specified length, rate in 10th
+ seconds and separator when it wraps around
- #+begin_src haskell
- Run MarqueePipeReader "/tmp/testpipe" (10, 7, "+") "mpipe"
- #+end_src
+ #+begin_src haskell
+ Run MarqueePipeReader "/tmp/testpipe" (10, 7, "+") "mpipe"
+ #+end_src
- - Expands environment variables in the first argument
+ - Expands environment variables in the first argument
-***** =BufferedPipeReader Alias [(Timeout, Bool, "/path/to/pipe1"), ..]=
+** =BufferedPipeReader Alias [(Timeout, Bool, "/path/to/pipe1"), ..]=
- - Display data from multiple pipes.
+ - Display data from multiple pipes.
- - Timeout (in tenth of seconds) is the value after which the
- previous content is restored i.e. if there was already
- something from a previous pipe it will be put on display
- again, overwriting the current status.
+ - Timeout (in tenth of seconds) is the value after which the
+ previous content is restored i.e. if there was already
+ something from a previous pipe it will be put on display
+ again, overwriting the current status.
- - A pipe with Timeout of 0 will be displayed permanently, just
- like =PipeReader=
+ - A pipe with Timeout of 0 will be displayed permanently, just
+ like =PipeReader=
- - The boolean option indicates whether new data for this pipe
- should make xmobar appear (unhide, reveal). In this case, the
- Timeout additionally specifies when the window should be
- hidden again. The output is restored in any case.
+ - The boolean option indicates whether new data for this pipe
+ should make xmobar appear (unhide, reveal). In this case, the
+ Timeout additionally specifies when the window should be
+ hidden again. The output is restored in any case.
- - Use it for OSD-like status bars e.g. for setting the volume or
- brightness:
+ - Use it for OSD-like status bars e.g. for setting the volume or
+ brightness:
- #+begin_src haskell
- Run BufferedPipeReader "bpr"
- [ ( 0, False, "/tmp/xmobar_window" )
- , ( 15, True, "/tmp/xmobar_status" )
- ]
- #+end_src
+ #+begin_src haskell
+ Run BufferedPipeReader "bpr"
+ [ ( 0, False, "/tmp/xmobar_window" )
+ , ( 15, True, "/tmp/xmobar_status" )
+ ]
+ #+end_src
- Have your window manager send window titles to
- =/tmp/xmobar_window=. They will always be shown and not reveal
- your xmobar. Sending some status information to
- =/tmp/xmobar_status= will reveal xmonad for 1.5 seconds and
- temporarily overwrite the window titles.
+ Have your window manager send window titles to
+ =/tmp/xmobar_window=. They will always be shown and not reveal
+ your xmobar. Sending some status information to
+ =/tmp/xmobar_status= will reveal xmonad for 1.5 seconds and
+ temporarily overwrite the window titles.
- - Take a look at [[../examples/status.sh][examples/status.sh]]
+ - Take a look at [[../examples/status.sh][examples/status.sh]]
- - Expands environment variables for the pipe path
+ - Expands environment variables for the pipe path
-*** Handle-based Logging
-***** =HandleReader Handle Alias=
+* Handle-based Logging
+** =HandleReader Handle Alias=
- - Display data from a Haskell =Handle=
+ - Display data from a Haskell =Handle=
- - This plugin is only useful if you are running xmobar from another
- Haskell program like XMonad.
-
- - You can use =System.Process.createPipe= to create a pair of =read= &
- =write= Handles. Pass the =read= Handle to HandleReader and write your
- output to the =write= Handle:
-
- #+begin_src haskell
- (readHandle, writeHandle) <- createPipe
- xmobarProcess <- forkProcess $ xmobar myConfig
- { commands =
- Run (HandleReader readHandle "handle") : commands myConfig
- }
- hPutStr writeHandle "Hello World"
- #+end_src
-
-*** Software Transactional Memory
-
- When invoking xmobar from other Haskell code it can be easier and
- more performant to use shared memory. The following plugins
- leverage =Control.Concurrent.STM= to realize these gains for xmobar.
-
-***** =QueueReader (TQueue a) (a -> String) String=
-
- - Display data from a Haskell =TQueue a=.
-
- - This plugin is only useful if you are running xmobar from another
- haskell program like xmonad.
-
- - You should make an =IO= safe =TQueue a= with
- =Control.Concurrent.STM.newTQueueIO=. Write to it from the user
- code with =writeTQueue=, and read with =readTQueue=. A common use
- is to overwite =ppOutput= from =XMonad.Hooks.DynamicLog= as shown
- below.
-
- #+begin_src haskell
- main :: IO ()
- main = do
- initThreads
- q <- STM.newTQueueIO @String
- bar <- forkOS $ xmobar myConf
- { commands = Run (QueueReader q id "XMonadLog") : commands myConf }
- xmonad $ def { logHook = logWorkspacesToQueue q }
-
- logWorkspacesToQueue :: STM.TQueue String -> X ()
- logWorkspacesToQueue q =
- dynamicLogWithPP def { ppOutput = STM.atomically . STM.writeTQueue q }
- #+end_src
-
- Note that xmonad uses blocking Xlib calls in its event loop and isn't
- normally compiled with
- [[https://downloads.haskell.org/~ghc/latest/docs/html/users_guide/using-concurrent.html][the threaded RTS]]
- so an xmobar thread running inside xmonad will suffer from delayed
- updates. It is thus necessary to enable =-threaded= when compiling
- xmonad configuration (=xmonad.hs=), e.g. by using a custom
- =~/.xmonad/build= script.
-
-*** Example of using the DBus IPC interface with XMonad
-
- Bind the key which should {,un}map xmobar to a dummy value. This is
- necessary for {,un}grabKey in xmonad.
-
- #+begin_src haskell
- ((0, xK_Alt_L), pure ())
- #+end_src
-
- Also, install =avoidStruts= layout modifier from
- =XMonad.Hooks.ManageDocks=
-
- Finally, install these two event hooks (=handleEventHook= in =XConfig=)
- =myDocksEventHook= is a replacement for =docksEventHook= which reacts
- on unmap events as well (which =docksEventHook= doesn't).
-
- #+begin_src haskell
- import qualified XMonad.Util.ExtensibleState as XS
-
- data DockToggleTime = DTT { lastTime :: Time } deriving (Eq, Show, Typeable)
-
- instance ExtensionClass DockToggleTime where
- initialValue = DTT 0
-
- toggleDocksHook :: Int -> KeySym -> Event -> X All
- toggleDocksHook to ks ( KeyEvent { ev_event_display = d
- , ev_event_type = et
- , ev_keycode = ekc
- , ev_time = etime
- } ) =
- io (keysymToKeycode d ks) >>= toggleDocks >> return (All True)
- where
- toggleDocks kc
- | ekc == kc && et == keyPress = do
- safeSendSignal ["Reveal 0", "TogglePersistent"]
- XS.put ( DTT etime )
- | ekc == kc && et == keyRelease = do
- gap <- XS.gets ( (-) etime . lastTime )
- safeSendSignal [ "TogglePersistent"
- , "Hide " ++ show (if gap < 400 then to else 0)
- ]
- | otherwise = return ()
-
- safeSendSignal s = catchX (io $ sendSignal s) (return ())
- sendSignal = withSession . callSignal
- withSession mc = connectSession >>= \c -> callNoReply c mc >> disconnect c
- callSignal :: [String] -> MethodCall
- callSignal s = ( methodCall
- ( objectPath_ "/org/Xmobar/Control" )
- ( interfaceName_ "org.Xmobar.Control" )
- ( memberName_ "SendSignal" )
- ) { methodCallDestination = Just $ busName_ "org.Xmobar.Control"
- , methodCallBody = map toVariant s
- }
-
- toggleDocksHook _ _ _ = return (All True)
-
- myDocksEventHook :: Event -> X All
- myDocksEventHook e = do
- when (et == mapNotify || et == unmapNotify) $
- whenX ((not `fmap` (isClient w)) <&&> runQuery checkDock w) refresh
- return (All True)
- where w = ev_window e
- et = ev_event_type e
- #+end_src
+ - This plugin is only useful if you are running xmobar from another
+ Haskell program like XMonad.
+
+ - You can use =System.Process.createPipe= to create a pair of =read= &
+ =write= Handles. Pass the =read= Handle to HandleReader and write your
+ output to the =write= Handle:
+
+ #+begin_src haskell
+ (readHandle, writeHandle) <- createPipe
+ xmobarProcess <- forkProcess $ xmobar myConfig
+ { commands =
+ Run (HandleReader readHandle "handle") : commands myConfig
+ }
+ hPutStr writeHandle "Hello World"
+ #+end_src
+
+* Software Transactional Memory
+
+ When invoking xmobar from other Haskell code it can be easier and more
+ performant to use shared memory. The following plugins leverage
+ =Control.Concurrent.STM= to realize these gains for xmobar.
+
+** =QueueReader (TQueue a) (a -> String) String=
+
+ - Display data from a Haskell =TQueue a=.
+
+ - This plugin is only useful if you are running xmobar from another
+ haskell program like xmonad.
+
+ - You should make an =IO= safe =TQueue a= with
+ =Control.Concurrent.STM.newTQueueIO=. Write to it from the user
+ code with =writeTQueue=, and read with =readTQueue=. A common use
+ is to overwite =ppOutput= from =XMonad.Hooks.DynamicLog= as shown
+ below.
+
+ #+begin_src haskell
+ main :: IO ()
+ main = do
+ initThreads
+ q <- STM.newTQueueIO @String
+ bar <- forkOS $ xmobar myConf
+ { commands = Run (QueueReader q id "XMonadLog") : commands myConf }
+ xmonad $ def { logHook = logWorkspacesToQueue q }
+
+ logWorkspacesToQueue :: STM.TQueue String -> X ()
+ logWorkspacesToQueue q =
+ dynamicLogWithPP def { ppOutput = STM.atomically . STM.writeTQueue q }
+ #+end_src
+
+ Note that xmonad uses blocking Xlib calls in its event loop and isn't
+ normally compiled with
+ [[https://downloads.haskell.org/~ghc/latest/docs/html/users_guide/using-concurrent.html][the threaded RTS]]
+ so an xmobar thread running inside xmonad will suffer from delayed
+ updates. It is thus necessary to enable =-threaded= when compiling
+ xmonad configuration (=xmonad.hs=), e.g. by using a custom
+ =~/.xmonad/build= script.
+
+* Example of using the DBus IPC interface with XMonad
+
+ Bind the key which should {,un}map xmobar to a dummy value. This is
+ necessary for {,un}grabKey in xmonad.
+
+ #+begin_src haskell
+ ((0, xK_Alt_L), pure ())
+ #+end_src
+
+ Also, install =avoidStruts= layout modifier from
+ =XMonad.Hooks.ManageDocks=
+
+ Finally, install these two event hooks (=handleEventHook= in =XConfig=)
+ =myDocksEventHook= is a replacement for =docksEventHook= which reacts
+ on unmap events as well (which =docksEventHook= doesn't).
+
+ #+begin_src haskell
+ import qualified XMonad.Util.ExtensibleState as XS
+
+ data DockToggleTime = DTT { lastTime :: Time } deriving (Eq, Show, Typeable)
+
+ instance ExtensionClass DockToggleTime where
+ initialValue = DTT 0
+
+ toggleDocksHook :: Int -> KeySym -> Event -> X All
+ toggleDocksHook to ks ( KeyEvent { ev_event_display = d
+ , ev_event_type = et
+ , ev_keycode = ekc
+ , ev_time = etime
+ } ) =
+ io (keysymToKeycode d ks) >>= toggleDocks >> return (All True)
+ where
+ toggleDocks kc
+ | ekc == kc && et == keyPress = do
+ safeSendSignal ["Reveal 0", "TogglePersistent"]
+ XS.put ( DTT etime )
+ | ekc == kc && et == keyRelease = do
+ gap <- XS.gets ( (-) etime . lastTime )
+ safeSendSignal [ "TogglePersistent"
+ , "Hide " ++ show (if gap < 400 then to else 0)
+ ]
+ | otherwise = return ()
+
+ safeSendSignal s = catchX (io $ sendSignal s) (return ())
+ sendSignal = withSession . callSignal
+ withSession mc = connectSession >>= \c -> callNoReply c mc >> disconnect c
+ callSignal :: [String] -> MethodCall
+ callSignal s = ( methodCall
+ ( objectPath_ "/org/Xmobar/Control" )
+ ( interfaceName_ "org.Xmobar.Control" )
+ ( memberName_ "SendSignal" )
+ ) { methodCallDestination = Just $ busName_ "org.Xmobar.Control"
+ , methodCallBody = map toVariant s
+ }
+
+ toggleDocksHook _ _ _ = return (All True)
+
+ myDocksEventHook :: Event -> X All
+ myDocksEventHook e = do
+ when (et == mapNotify || et == unmapNotify) $
+ whenX ((not `fmap` (isClient w)) <&&> runQuery checkDock w) refresh
+ return (All True)
+ where w = ev_window e
+ et = ev_event_type e
+ #+end_src