diff options
Diffstat (limited to 'doc')
| -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 | 
