neXromancers / hacksaw

hacksaw (Select Operation)
Mozilla Public License 2.0
97 stars 7 forks source link

hacksaw lets you select areas of your screen

(on x11)

screencast

Installation

Dependencies

Before installing, make sure you have the following libraries installed (this list is non-exhaustive):

On systems with apt, you should be able to run:

apt install libxcb-shape0-dev libxcb-xkb-dev

Once you have the dependencies

Simply run cargo install hacksaw to install from crates.io.

Manual installation alternative

Clone this repo, cd into it, and run cargo install --path .

Nixpkgs

hacksaw is in the NUR under nexromancers as nur.repos.nexromancers.pkgs.hacksaw.

Examples

Take a screenshot (with shotgun) of a selection/window and copy to clipboard

selection=$(hacksaw)  # add hacksaw arguments inside as you wish
shotgun -g "$selection" - | xclip -t 'image/png' -selection clipboard

Take a screenshot of a selection/window and save to a file

selection=$(hacksaw)  # add hacksaw arguments inside as you wish
shotgun -g "$selection" screenshot.png

Record an area of the screen with ffmpeg

#!/bin/sh
#
# record - record an area of the screen

dir=~/medias/videos/records
current=$(date +%F_%H-%M-%S)

mkdir -p "$dir"

hacksaw -n | {
    IFS=+x read -r w h x y

    w=$((w + w % 2))
    h=$((h + h % 2))

    ffmpeg               \
        -v 16            \
        -r 30            \
        -f x11grab       \
        -s "${w}x${h}"   \
        -i ":0.0+$x,$y"  \
        -preset slow     \
        -c:v h264        \
        -pix_fmt yuv420p \
        -crf 20          \
        "$dir/$current.mp4"
}

Also: open a terminal with the selected size and shape (on bspwm)

Features

Stability

Usage

USAGE:
    hacksaw [FLAGS] [OPTIONS]

FLAGS:
    -h, --help         Prints help information
    -n, --no-guides    Disable fighter pilot guide lines
    -V, --version      Prints version information

OPTIONS:
    -f, --format <format>
            Output format. You can use:
                  %x for x-coordinate,
                  %y for y-coordinate,
                  %w for width,
                  %h for height,
                  %i for selected window id,
                  %g as a shorthand for %wx%h+%x+%y (X geometry),
                  %% for a literal '%'.
            Other %-codes will cause an error. [default: %g]
    -g, --guide-thickness <guide-thickness>          Thickness of fighter pilot guide lines [default: 1]
    -c, --colour <line-colour>
            Hex colour of the lines (RGB or RGBA), '#' optional [default: #7f7f7f]

    -r, --remove-decorations <remove-decorations>
            Number of (nested) window manager frames to try and remove [default: 0]

    -s, --select-thickness <select-thickness>        Thickness of selection box lines [default: 1]