swappy/README.md

167 lines
4.9 KiB
Markdown
Raw Normal View History

2019-11-19 08:21:06 +03:00
# swappy
2019-12-15 21:59:06 +03:00
A Wayland native snapshot and editor tool, inspired by [Snappy] on macOS. Works great with [grim], [slurp] and [sway]. But can easily work with other screen copy tools that can output a final PNG image to `stdout`. See [below](#example-usage).
2019-12-29 03:50:47 +03:00
2019-12-30 08:44:42 +03:00
## Screenshot
2019-12-15 21:59:06 +03:00
![Swappy Screenshot](docs/images/screenshot-1.0.0.png)
2019-12-15 21:59:06 +03:00
2019-12-28 03:56:05 +03:00
## Example usage
2019-12-15 21:59:06 +03:00
2019-12-30 08:44:42 +03:00
Output of `grim` (or any tool outputing a PNG file):
```sh
grim -g "$(slurp)" - | swappy -f -
```
Swappshot a PNG file:
2019-12-30 08:44:42 +03:00
```sh
swappy -f "~/Desktop/my-gnome-saved-file.png"
```
Print final surface to stdout (useful to pipe with other tools):
```sh
grim -g "$(slurp)" - | swappy -f - -o - | pngquant -
```
2019-12-28 03:56:05 +03:00
Grab a swappshot from a specific window under Sway, using `swaymsg` and `jq`:
```sh
2019-12-30 08:44:42 +03:00
grim -g "$(swaymsg -t get_tree | jq -r '.. | select(.pid? and .visible?) | .rect | "\(.x),\(.y) \(.width)x\(.height)"' | slurp)" - | swappy -f -
2019-12-15 21:59:06 +03:00
```
2019-12-28 03:56:05 +03:00
## Config
The config file is located at `$XDG_CONFIG_HOME/swappy/config` or at `$HOME/.config/swappy/config`.
The file follows the GLib `conf` format. See the `man` page for details. There is example config file [here](example/config).
The following lines can be used as swappy's default:
```
[Default]
save_dir=$HOME/Desktop
save_filename_format=swappy-%Y%m%d-%H%M%S.png
show_panel=false
line_size=5
text_size=20
text_font=sans-serif
```
- `save_dir` is where swappshots will be saved, can contain env variables and must exist in your filesystem
- `save_filename_format`: is the filename template, if it contains a date format, this will be parsed into a timestamp. Format is detailed in [strftime(3)](https://linux.die.net/man/3/strftime). If this date format is missing, filename will have no timestamp
- `show_panel` is used to toggle the paint panel on or off upon startup
- `line_size` is the default line size (must be between 1 and 50)
- `text_size` is the default text size (must be between 10 and 50)
- `text_font` is the font used to render text, its format is pango friendly
2019-12-29 03:50:47 +03:00
## Keyboard Shortcuts
- `Ctrl+b`: Toggle Paint Panel
2019-12-29 03:50:47 +03:00
<hr>
2019-12-29 03:50:47 +03:00
- `b`: Switch to Brush
- `t`: Switch to Text
- `r`: Switch to Rectangle
- `o`: Switch to Ellipse
- `a`: Switch to Arrow
- `d`: Switch to Blur (`d` stands for droplet)
2019-12-29 03:50:47 +03:00
<hr>
2019-12-29 03:50:47 +03:00
- `R`: Use Red Color
- `G`: Use Green Color
- `B`: Use Blue Color
- `C`: Use Custom Color
- `Minus`: Reduce Stroke Size
- `Plus`: Increase Stroke Size
- `Equal`: Reset Stroke Size
- `k`: Clear Paints (cannot be undone)
2019-12-29 03:50:47 +03:00
<hr>
2019-12-29 03:50:47 +03:00
- `Ctrl`: Center Shape (Rectangle & Ellipse) based on draw start
<hr>
- `Ctrl+z`: Undo
- `Ctrl+Shift+z` or `Ctrl+y`: Redo
- `Ctrl+s`: Save to file (see man page)
- `Ctrl+c`: Copy to clipboard
- `Escape` or `q` or `Ctrl+w`: Quit swappy
2019-12-29 03:50:47 +03:00
## Limitations
- **Copy**: If you don't have [wl-clipboard] installed, copy to clipboard won't work if you close swappy (the content of the clipboard is lost). This because GTK 3.24 [has not implemented persistent storage on wayland backend yet](https://gitlab.gnome.org/GNOME/gtk/blob/3.24.13/gdk/wayland/gdkdisplay-wayland.c#L857). We need to do it on the [Wayland level](https://github.com/swaywm/wlr-protocols/blob/master/unstable/wlr-data-control-unstable-v1.xml), or wait for GTK 4. For now, we use `wl-copy` if installed and revert to `gtk` clipboard if not found.
- **Fonts**: Swappy relies on Font Awesome 5 being present to properly render the icons. On Arch you can simply install those with: `sudo pacman -S otf-font-awesome`
2019-12-29 03:50:47 +03:00
2019-12-29 01:46:35 +03:00
## Installation
2019-12-28 03:56:05 +03:00
- [Arch Linux](https://aur.archlinux.org/packages/swappy)
- [Arch Linux (git)](https://aur.archlinux.org/packages/swappy-git)
- [Fedora 31/32](https://copr.fedorainfracloud.org/coprs/wef/swappy)
- [openSUSE](https://build.opensuse.org/package/show/X11:Wayland/swappy)
- [Void Linux](https://github.com/void-linux/void-packages/tree/master/srcpkgs/swappy)
2019-12-28 03:56:05 +03:00
## Building from source
Install dependencies (on Arch, name can vary for other distros):
2019-12-28 03:56:05 +03:00
- meson
- ninja
- cairo
- pango
- gtk
- glib2
- scdoc
2019-12-28 03:56:05 +03:00
Optional dependencies:
- `wl-clipboard` (to make sure the copy is saved if you close swappy)
- `otf-font-awesome` (to draw the paint icons properly)
2019-12-28 03:56:05 +03:00
Then run:
```sh
meson build
ninja -C build
2019-12-15 21:59:06 +03:00
```
2019-12-28 03:56:05 +03:00
### i18n
To build the translation files:
```sh
ninja -C build swappy-pot
```
2019-12-28 03:56:05 +03:00
## Contributing
Pull requests are welcome. This project uses [conventional commits](https://www.conventionalcommits.org/en/v1.0.0/) to automate changelog generation.
2021-02-21 02:31:57 +03:00
## Release
2021-02-21 02:31:57 +03:00
We rely on [standard-version](https://github.com/conventional-changelog/standard-version) which is part of the JavaScript ecosystem but works well with any project.
```
npx standard-version --sign
git push --follow-tags
# Do the release on Github with manual steps, then:
./script/sign-post-release
```
2019-12-28 03:56:05 +03:00
2021-02-21 02:31:57 +03:00
Release tarballs are signed with this PGP key: `F44D05A50F6C9EB5C81BCF966A6B35DBE9442683`
2019-12-28 03:56:05 +03:00
## License
MIT
2019-12-30 08:44:42 +03:00
[snappy]: http://snappy-app.com/
2019-12-28 03:56:05 +03:00
[slurp]: https://github.com/emersion/slurp
[grim]: https://github.com/emersion/grim
[sway]: https://github.com/swaywm/sway
[wl-clipboard]: https://github.com/bugaevc/wl-clipboard