diff options
-rw-r--r-- | doc/compiling.org | 102 | ||||
-rw-r--r-- | doc/plugins.org | 1892 | ||||
-rw-r--r-- | doc/quick-start.org | 554 | ||||
-rw-r--r-- | doc/using-haskell.org | 2 | ||||
-rw-r--r-- | doc/window-managers.org | 482 |
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 |