/i3-match

Main repo: https://gitlab.com/ferreum/i3-match

Primary LanguageCMIT LicenseMIT

I3-MATCH(1)                     i3-match Manual                    I3-MATCH(1)

NAME
       i3-match - match and query i3/sway window properties and events

SYNOPSIS
       i3-match [-S] [option|filter]...  [-o field...]

       swaymatch [-S] [option|filter]...  [-o field...]

DESCRIPTION
       i3-match provides command-line access to i3 window manager's IPC inter‐
       face. Also works with sway(1); See SWAY MODE below and sway-ipc(7).

       i3-match has two modes of operation: match-mode and subscribe-mode.  In
       both modes, filters are used to select nodes.

       Match-mode  is  the  default, where nodes are containers/windows in the
       tree.

       The -S option enables subscribe-mode, where i3-match listens for events
       via  the  subscribe  IPC feature. Each event is matched as a node.  See
       also the -m option.

OPTIONS
       -W     Enable sway mode. Default when invoked as swaymatch.   Overrides
              a previous -I option. See SWAY MODE below.

       -I     Disable  sway mode. See SWAY MODE below. Overrides a previous -W
              option.

       -a     Print unmatched nodes too. Output the :match field or specify -h
              to  highlight  matches.   If  specified  twice in subscribe mode
              ("almost all"), events not  matching  filters  for  the  :evtype
              field are left out.

       -d delimiter
              Set the delimiter. Default is space (" ").

       -e field op value
              Specify a filter with three following arguments. See FILTERS be‐
              low.

       -h     Highlight matches. Useful with -a.

       -i file
              Read json tree from file instead of querying via i3 IPC. If file
              is a single dash ("-") read from stdin. Match-mode only.

       -l num Consider  success  after  num  matches. Default is 1. Match-mode
              only (see also -n).

       -m     Keep monitoring for events infinitely. Specifying -n after  this
              option  overrides  this  effect.  Sets printed fields to :evtype
              change current/name container/name binding/command  payload  in‐
              put/identifier id unless -o is given.  Subscribe-mode only.

       -n num In  match-mode:  Exit  after  printing  num  nodes. If no output
              fields are selected, this option is ignored (you may want -l in‐
              stead).  In subscribe-mode: exit after matching num nodes.

       -o field...
              Print  the values of given fields for each matched node. Printed
              values are separated by the delimiter (see -d).   All  arguments
              following this option are treated as field names.

       -S     Enter  subscribe-mode. This may not be specified after mode-spe‐
              cific options.

       -s path
              Specify the path of the i3 socket to use. By default,  uses  the
              socket of the i3 instance of the current display.

       -t     Same  as -o :itree name.  If both -t and -o are given, :itree is
              added before the first specified output field. Match-mode only.

FILTERS
       Filters are conditions applied to each node to choose  which  nodes  to
       select.  All filters need to match to a node for it to be selected.

       Filters  are specified with the syntax field op value in a single argu‐
       ment without delimiting characters or by specifying  the  arguments  -e
       field  op  value.   field  is the name of any field (see FIELDS below).
       value is the string to match against.  op is one of the following oper‐
       ators:

       =      Matches when the value of field is exactly value.

       *=     Matches when the value of field contains value.

       ^=     Matches when the value of field starts with value.

       $=     Matches when the value of field ends with value.

       The meaning of any operator can be inverted by prefixing it with an ex‐
       clamation mark ("!").

FIELDS
       Fields contain values for each node. They are accessed via their  names
       in the json-structure of each node.

       Hierarchies of json objects are accessed using slashes ("/") as separa‐
       tor.

       Fields not found for a node are empty. There is no check for whether  a
       field name is valid.

       See  i3  IPC  documentation  (https://i3wm.org/docs/ipc.html)  and  the
       EVENTS section in sway-ipc(7) for a list of fields.

   Pseudo fields
       i3-match provides additional information for each  node.  Pseudo-fields
       access this information. All pseudo-fields start with colon (":").

       :match 1,  if  this node is a match. 0 otherwise. 0 when used in a fil‐
              ter.

       :level Nesting level of this node in i3's layout tree. 0 for  the  root
              node.  0 in subscribe-mode.

       :floating
              1,  if  this node is contained in a floating_nodes array. Incre‐
              ments by 1 for each nesting level inside such a node. 0 in  sub‐
              scribe-mode.

       :scratch
              1,  if this node's scratchpad_state is not none. Increments by 1
              for each nesting level inside such a node. 0 in subscribe-mode.

       :workspace
              Name of the workspace containing this node. Empty if  this  node
              is not contained by a workspace. Empty in subscribe-mode.

       :output
              Name  of the output (screen) containing this node. Empty if this
              node is not contained by an output. Empty in subscribe-mode.

       :sibi  Index of this node within the current list of  siblings.   0  in
              subscribe-mode.

       :sibc  Number of siblings of this node. 0 in subscribe-mode.

       :childc
              Number of children of this node. 0 in subscribe-mode.

       :indent
              Outputs  an  indented hierarchy tree. Matched nodes are indented
              with two dashes ("--") other nodes with two spaces  ("   ")  per
              level. Only useful in match-mode.

       :itree Outputs  an indented hierarchy resembling the output of tree(1).
              Only useful in match-mode.

       :evtype
              Event type in subscribe-mode. One of  workspace,  output,  mode,
              window, barconfig_update, binding, shutdown, tick.

              In  sway mode, one of workspace, mode, window, barconfig_update,
              binding, shutdown, tick, bar_state_update, input.

              This field is special when used in  filters  in  subscribe-mode:
              Filters  on  this  field are used to decide which events to sub‐
              scribe for. This is an optimization and only makes a visual dif‐
              ference when specifying -a twice.

              If  filters  are  specified  such  that  no  event  types match,
              i3-match exits with an error message.

              none in match-mode.

       :nodei Index of this node.

       :matchc
              Number of matches up to this point. This is incremented after  a
              node is matched and before processing output.

       :json  Json representation of this node formatted without newlines.

       :json:field
              Json  representation  of  field  formatted without newlines. See
              FIELDS above for field.  Pseudo fields are not available here.

ENVIRONMENT VARIABLES
       I3SOCK If not in sway mode and -s is not given, this variable  is  used
              to  determine  the path of i3's IPC socket, overriding the usual
              lookup.

       SWAYSOCK
              If set to a non-empty value and the -I option is not  specified,
              sway mode is enabled.

              In  sway mode, this variable is used instead of I3SOCK. See SWAY
              MODE blow.

EXIT STATUS
       The exit status is 0 on success, 1 if success condition was not met and
       2  if an error occurred.  In match-mode success means that at least one
       node was selected. If -l was specified, the exit status is according to
       that  option.  In subscribe-mode i3-match exits on success, so the exit
       status is always 0 unless an error occurred.

SWAY MODE
       If the -W option is enabled, or the program is invoked as swaymatch, or
       the  SWAYSOCK  environment  variable is set to a non-empty string, sway
       mode is enabled unless the -I option is in effect.  Sway  mode  enables
       full compatibility with the sway(1) compositor.

       Sway mode has the following effects:

           The  set  of events in subscribe mode is changed to those supported
           by sway(1). See the :evtype FIELD above.  See  also  the  SUBSCRIBE
           message and EVENTS section in sway-ipc(7).

           The  SWAYSOCK  environment variable is used to find the socket path
           instead of I3SOCK. See ENVIRONMENT VARIABLES above.

           The command sway --get-socketpath is used instead of i3 --get-sock‐
           etpath as the last resort method to find the socket path. Note that
           since sway also uses the SWAYSOCK environment variable,  this  will
           likely fail, as of sway version 1.7.

EXAMPLES
       i3-match -t
              Print a simple hierarchy tree with names for each container.

       i3-match 'name*=Firefox' -l 2 && echo true
              Print  "true" when there are at least two containers with titles
              containing "Firefox".

       i3-match focused=true -a -h -o :itree rect/{width,height} name
              Print width, height and title for  each  window  and  container.
              Highlight the focused window.

       i3-match focused=true -ahto rect/{width,height} name
              Same as above.

       i3-match -S :evtype=window change=new
              Wait for a window to be created, then exit.

       i3-match -Sm :evtype=window container/focused=true -o container/name
              Print the name of the focused window every time it changes.

SEE ALSO
       i3(1) sway(1) sway-ipc(7)

i3-match                          2022-05-11                       I3-MATCH(1)