1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#!/usr/bin/env bash

set -euo pipefail
if [[ "${TRACE-0}" == "1" ]]; then
    set -o xtrace
fi

cleanup() {
    if [[ -n "${tmp:-}" ]]; then
        rm -f "$tmp"
    fi
}
trap cleanup EXIT

main() {
    tmp=$(mktemp -t vipe.XXXXXX)

    if [[ -t 0 ]]; then
        pbpaste > "$tmp"
    else
        cat > "$tmp"
    fi

    local editor=${VISUAL:-${EDITOR:-vi}}
    # shellcheck disable=SC2086
    $editor "$tmp" </dev/tty >/dev/tty

    if [[ -t 1 ]]; then
        pbcopy < "$tmp"
    else
        cat "$tmp"
    fi
}

main "$@"