sip
Interactive Wayland screen-region selector with slurp-compatible output and a
small footprint. sip draws a wlr-layer-shell overlay on every output, lets
the user drag out a rectangle (or, alternatively, pick from a set of predefined
boxes), and reports the result. It is usable both as a library and through the
bundled sip binary. With its goal to be a modern slurp replacement, Sip
features:
- Pure-Rust rendering. Fills, borders, crosshairs, and the dimensions
readout are drawn with
tiny-skia; glyphs come fromfontdue, with fonts discovered viafontdb. There is no cairo/pango dependency :) - Dependency on modern protocols only. Logical geometry comes from
xdg-output; the crosshair cursor usescursor-shape-v1. Backwards compatibility with compositors lacking these is explicitly not a goal. - Event-driven. A single
wayland-clientevent queue drives per-output overlays, seat input (pointer, keyboard via xkb, touch), and frame-callback damage tracking.
and retains full feature (but not API!) parity with slurp. See supported features:
| Feature | Status |
|---|---|
| Drag-to-select region | Supported |
Single-point selection (-p) |
Supported |
| Predefined choice boxes (stdin) | Supported |
Box per output (-o) |
Supported |
Restrict to boxes (-r) |
Supported |
Fixed aspect ratio (-a) |
Supported |
| Shift = 1:1 aspect | Supported |
| Space = move anchor | Supported |
| Escape = cancel | Supported |
Fullscreen crosshairs (-x) |
Supported |
Dimensions readout (-d) |
Supported |
| Themeable colors / border weight | Supported |
Format string output (-f) |
Supported |
| Multi-output, fractional scale | Supported |
| Touch input | Supported |
| Single-instance lock | Supported |
Library usage
let selection = select_region?;
println!;
Building
The crate links libxkbcommon and libwayland-client; everything else is pure
Rust.
# Build in release mode
License
This project is made available under European Union Public Licence (EUPL) version 1.2. See LICENSE for more details on the exact conditions. An online copy is provided here.