diff --git a/README.md b/README.md index 593112f..6857ed0 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Swayr is a window switcher (and more) for sway +# Swayr & Swayrbar [![builds.sr.ht status](https://builds.sr.ht/~tsdh/swayr.svg)](https://builds.sr.ht/~tsdh/swayr?) [![latest release](https://img.shields.io/crates/v/swayr.svg)](https://crates.io/crates/swayr) @@ -6,12 +6,31 @@ [![dependency status](https://deps.rs/repo/sourcehut/~tsdh/swayr/status.svg)](https://deps.rs/repo/sourcehut/~tsdh/swayr) [![Hits-of-Code](https://hitsofcode.com/sourcehut/~tsdh/swayr?branch=main)](https://hitsofcode.com/sourcehut/~tsdh/swayr/view?branch=main) +## Table of Contents + +* [Swayr](#swayr) +* [Swayrbar](#swayrbar) +* [Questions and patches](#questions-and-patches) +* [Bugs](#bugs) +* [Build status](#build-status) +* [License](#license) + +## Swayr, a window-switcher & more for [sway](https://swaywm.org/) + Swayr consists of a demon, and a client. The demon `swayrd` records window/workspace creations, deletions, and focus changes using sway's JSON IPC interface. The client `swayr` offers subcommands, see `swayr --help`, and sends them to the demon which executes them. -Right now, there are these subcommands: +### Swayr commands + +The `swayr` binary provides many subcommands of different categories. + +#### Non-menu switchers + +Those are just commands that toggle between windows without spawning the menu +program. + * `switch-to-urgent-or-lru-window` switches to the next window with urgency hint (if any) or to the last recently used window. * `switch-to-app-or-urgent-or-lru-window` switches to a specific window matched @@ -25,6 +44,12 @@ Right now, there are these subcommands: a "browser" mark to your browser window (using a standard sway `for_window` rule). Then you can provide "browser" as argument to this command to have a convenient browser <-> last-recently-used window toggle. + +#### Menu switchers + +Those spawn a menu program where you can select a window (or workspace, or +output, etc.) and act on that. + * `switch-window` displays all windows in the order urgent first, then last-recently-used, focused last and focuses the selected. * `switch-workspace` displays all workspaces in LRU order and switches to the @@ -55,6 +80,29 @@ Right now, there are these subcommands: like with `move-focused-to-workspace`. * `swap-focused-with` swaps the currently focused window or container with the one selected from the menu program. + +##### Menu shortcuts for non-matching input + +All menu switching commands (`switch-window`, `switch-workspace`, and +`switch-workspace-or-window`) now handle non-matching input instead of doing +nothing. The input should start with any number of `#` (in order to be able to +force a non-match), a shortcut followed by a colon, and some string as required +by the shortcut. The following shortcuts are supported. +- `w:`: Switches to a possibly non-existing workspace. + `` must be a digit, a name or `:`. The + `:` format is explained in `man 5 sway`. If that format is + given, `swayr` will create the workspace using `workspace number + :`. If just a digit or name is given, the `number` argument is + not used. +- `s:`: Executes the sway command `` using `swaymsg`. +- Any other input is assumed to be a workspace name and thus handled as + `w:` would do. + + +#### Cycling commands + +Those commands cycle through (a subset of windows) in last-recently-used order. + * `next-window (all-workspaces|current-workspace)` & `prev-window (all-workspaces|current-workspace)` focus the next/previous window in depth-first iteration order of the tree. The argument `all-workspaces` or @@ -74,6 +122,11 @@ Right now, there are these subcommands: stacked container, it is like `next-tiled-window` / `prev-tiled-window` if the current windows is in a tiled container, and is like `next-window` / `prev-window` otherwise. + +#### Layout modification commands + +These commands change the layout of the current workspace. + * `tile-workspace exclude-floating|include-floating` tiles all windows on the current workspace (excluding or including floating ones). That's done by moving all windows away to some special workspace, setting the current @@ -97,6 +150,9 @@ Right now, there are these subcommands: between a tabbed and tiled layout, i.e., it calls `shuffle-tile-workspace` if it is currently tabbed, and calls `shuffle-tile-workspace` if it is currently tiled. + +#### Miscellaneous commands + * `configure-outputs` lets you repeatedly issue output configuration commands until you abort the menu program. * `execute-swaymsg-command` displays most swaymsg which don't require @@ -107,24 +163,7 @@ Right now, there are these subcommands: one. (This is useful for accessing swayr commands which are not bound to a key.) -### Menu shortcuts for non-matching input - -All menu switching commands (`switch-window`, `switch-workspace`, and -`switch-workspace-or-window`) now handle non-matching input instead of doing -nothing. The input should start with any number of `#` (in order to be able to -force a non-match), a shortcut followed by a colon, and some string as required -by the shortcut. The following shortcuts are supported. -- `w:`: Switches to a possibly non-existing workspace. - `` must be a digit, a name or `:`. The - `:` format is explained in `man 5 sway`. If that format is - given, `swayr` will create the workspace using `workspace number - :`. If just a digit or name is given, the `number` argument is - not used. -- `s:`: Executes the sway command `` using `swaymsg`. -- Any other input is assumed to be a workspace name and thus handled as - `w:` would do. - -## Screenshots +### Screenshots ![A screenshot of swayr switch-window](misc/switch-window.png "swayr switch-window") @@ -133,13 +172,13 @@ switch-window") switch-workspace-or-window](misc/switch-workspace-or-window.png "swayr switch-workspace-or-window") -## Installation +### Installation Some distros have packaged swayr so that you can install it using your distro's package manager. Alternatively, it's easy to build and install it yourself using `cargo`. -### Distro packages +#### Distro packages The following GNU/Linux and BSD distros package swayr. Thanks a lot to the respective package maintainers! Refer to the [repology @@ -148,7 +187,7 @@ site](https://repology.org/project/swayr/versions) for details. [![Packaging status](https://repology.org/badge/vertical-allrepos/swayr.svg)](https://repology.org/project/swayr/versions) [![AUR swayr-git package status](https://repology.org/badge/version-for-repo/aur/swayr.svg?allow_ignored=yes&header=AUR%20swayr-git)](https://repology.org/project/swayr/versions) -### Building with cargo +#### Building with cargo You'll need to install the current stable rust toolchain using the one-liner shown at the [official rust installation @@ -171,7 +210,7 @@ cargo install-update --all cargo install-update -- swayr ``` -## Usage +### Usage You need to start the swayr demon `swayrd` in your sway config (`~/.config/sway/config`) like so: @@ -220,7 +259,7 @@ bindsym $mod+Shift+c exec env RUST_BACKTRACE=1 \ Of course, configure the keys to your liking. Again, enabling rust backtraces and logging are optional. -## Configuration +### Configuration Swayr can be configured using the `~/.config/swayr/config.toml` or `/etc/xdg/swayr/config.toml` config file. @@ -288,14 +327,14 @@ auto_tile_min_window_width_per_output_width = [ In the following, all sections are explained. -### The menu section +#### The menu section In the `[menu]` section, you can specify the menu program using the `executable` name or full path and the `args` (flags and options) it should get passed. If some argument contains the placeholder `{prompt}`, it is replaced with a prompt such as "Switch to window" depending on context. -### The format section +#### The format section In the `[format]` section, format strings are specified defining how selection choices are to be layed out. `wofi` supports [pango @@ -370,7 +409,7 @@ processed whereas for double-quoted strings (so-called basic strings) escape-sequences are processed. `rofi` requires a null character and a PARAGRAPH SEPARATOR for image sequences. -### The layout section +#### The layout section In the `[layout]` section, you can enable auto-tiling by setting `auto_tile` to `true` (the default is `false`). The option @@ -403,29 +442,33 @@ over IPC. Therefore, auto-tiling is triggered by new-window events, close-events, move-events, floating-events, and also focus-events. The latter are a workaround and wouldn't be required if there were resize-events. -## Version Changes +### Version Changes -Since version 0.8.0, I've started writing a [NEWS](NEWS.md) file listing the +Since version 0.8.0, I've started writing a [NEWS](swayr/NEWS.md) file listing the news, and changes to `swayr` commands or configuration options. If something doesn't seem to work as expected after an update, please consult this file to check if there has been some (possibly incompatible) change requiring an update of your config. -## Questions & Patches +## Swayrbar + +TODO: Write docs! + +## Questions & Patches For asking questions, sending feedback, or patches, refer to [my public inbox (mailinglist)](https://lists.sr.ht/~tsdh/public-inbox). Please mention the project you are referring to in the subject. -## Bugs +## Bugs Bugs and requests can be reported [here](https://todo.sr.ht/~tsdh/swayr). -## Build status +## Build status [![builds.sr.ht status](https://builds.sr.ht/~tsdh/swayr.svg)](https://builds.sr.ht/~tsdh/swayr?) -## License +## License -Swayr is licensed under the +Swayr & Swarybar are licensed under the [GPLv3](https://www.gnu.org/licenses/gpl-3.0.en.html) (or later).