# wmfocus - Visually focus windows by label [![CI](https://github.com/svenstaro/wmfocus/workflows/CI/badge.svg)](https://github.com/svenstaro/wmfocus/actions) [![Crates.io](https://img.shields.io/crates/v/wmfocus.svg)](https://crates.io/crates/wmfocus) [![license](http://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/svenstaro/wmfocus/blob/master/LICENSE) [![Stars](https://img.shields.io/github/stars/svenstaro/wmfocus.svg)](https://github.com/svenstaro/wmfocus/stargazers) [![Lines of Code](https://tokei.rs/b1/github/svenstaro/wmfocus)](https://github.com/svenstaro/wmfocus) This tool that allows you to rapidly choose a specific window directly without having to use the mouse or directional keyboard navigation. ![Screen cast](cast.apng) Thanks to cairo, it should work on all kinds of screens and automatically display at the correct size according to your DPI. ## Installation Packaging status **On Arch Linux**: `pacman -S wmfocus` **With Cargo**: `cargo install --features i3 wmfocus` ## Usage Draw labels on the upper-left corner of all windows: wmfocus Completely fill out windows and draw the label in the middle (try it with transparency!): wmfocus --fill Use a different font (as provided by fontconfig): wmfocus -f "Droid Sans":100 Change up the default colors: wmfocus --textcolor red --textcoloralt "#eeeeee" --bgcolor "rgba(50, 50, 200, 0.5)" wmfocus will make use of a compositor to get real transparency. ## Full help ``` wmfocus 1.5.0 Sven-Hendrik Haase Visually focus windows by label USAGE: wmfocus [OPTIONS] OPTIONS: --textcolor Text color (CSS notation) [default: #dddddd] --textcoloralt Text color alternate (CSS notation) [default: #666666] --bgcolor Background color (CSS notation) [default: "rgba(30, 30, 30, 0.9)"] --textcolorcurrent Text color current window (CSS notation) [default: #333333] --textcolorcurrentalt Text color current window alternate (CSS notation) [default: #999999] --bgcolorcurrent Background color current window (CSS notation) [default: "rgba(200, 200, 200, 0.9)"] --halign Horizontal alignment of the box inside the window [default: left] [possible values: left, center, right] --valign Vertical alignment of the box inside the window [default: top] [possible values: top, center, bottom] --fill Completely fill out windows -c, --chars Define a set of possbile values to use as hint characters [default: sadfjklewcmpgh] -e, --exit-keys ... List of keys to exit application, sequences separator is space, key separator is '+', eg Control_L+g Shift_L+f -f, --font Use a specific TrueType font with this format: family:size [default: Mono:72] -h, --help Print help information -m, --margin Add an additional margin around the text box (value is a factor of the box size) [default: 0.2] -o, --offset Offset box from edge of window relative to alignment (x,y) [default: 0,0] -p, --print-only Print the window id only but don't change focus -V, --version Print version information ``` ## Troubleshooting If there's some funky stuff, you can try to track it down by running `wmfocus` with `RUST_LOG=trace`: RUST_LOG=trace wmfocus This will print quite some useful debugging info. ## Compiling You need to have recent versions of `rust`, `cargo`, `xcb-util-keysyms`, `libxkbcommon-x11` and `cairo` installed. Then, just clone it like usual and `cargo run` to get output: git clone https://github.com/svenstaro/wmfocus.git cd wmfocus cargo run --features i3 ## Window manager support While this tool is window manager-independent, an implementation for your favorite window manager might not yet be available. Current support: - i3 - sway (partial, accepting PRs) If you want to implement support for more window managers, have a look at the [i3 implementation](https://github.com/svenstaro/wmfocus/blob/master/src/wm_i3.rs). This tool is heavily inspired by [i3-easyfocus](https://github.com/cornerman/i3-easyfocus). ## Releasing This is mostly a note for me on how to release this thing: - `cargo release` - `cargo release --execute` - Release will automatically be deployed by GitHub Actions. - Update Arch package.