diff options
| author | Mike Vink <59492084+ivi-vink@users.noreply.github.com> | 2025-01-31 19:21:13 +0000 |
|---|---|---|
| committer | Mike Vink <59492084+ivi-vink@users.noreply.github.com> | 2025-01-31 19:21:13 +0000 |
| commit | a18029250a4744749debd6ea0a39c4a53cbe820c (patch) | |
| tree | d98e2e01d77ed1774a224718c8fadd8ea8783631 | |
| parent | a92cc18f6c4961441f2381dd9a1a70fff1356536 (diff) | |
add patched vis-clipboard
| -rwxr-xr-x | mut/bin/vis-clipboard | 192 |
1 files changed, 192 insertions, 0 deletions
diff --git a/mut/bin/vis-clipboard b/mut/bin/vis-clipboard new file mode 100755 index 0000000..ccb9237 --- /dev/null +++ b/mut/bin/vis-clipboard @@ -0,0 +1,192 @@ +#!/bin/sh +# Copyright (C) 2016 Richard Burke, ISC licensed +# shellcheck disable=SC2317 +set -e + +vc_fatal() { + echo "$@" >&2 + exit 1 +} + +vc_usage() { + vc_fatal "Usage: $(basename "$0") [--selection sel] [--usable|--copy|--paste] + +Copy/paste clipboard interface with support on all provided platforms. + +Options: + --copy copy text from standard input + --paste paste text to standard output + --usable silently exit with a status code indicating if a supported + clipboard implementation was found + --selection take input from sel. valid options: clipboard, primary" +} + +vc_determine_command() { + if [ -n "$WAYLAND_DISPLAY" ]; then + for c in wl-copy wl-paste; do + if command -v "$c" >/dev/null 2>&1; then + echo "wlclipboard" + return 0 + fi + done + + for c in waycopy waypaste; do + if command -v "$c" >/dev/null 2>&1; then + echo "wayclip" + return 0 + fi + done + fi + + if [ -n "$DISPLAY" ]; then + for c in xclip xsel; do + if command -v "$c" >/dev/null 2>&1; then + echo "$c" + return 0 + fi + done + fi + + if command -v osc >/dev/null 2>&1; then + echo 'osc' + return 0 + fi + + if command -v pbcopy >/dev/null 2>&1; then + echo 'mac' + return 0 + fi + + if [ -c /dev/clipboard ]; then + echo 'cygwin' + return 0 + fi + + return 1 +} + +vc_usable() { + if vc_determine_command >/dev/null 2>&1; then + exit 0 + fi + + exit 1 +} + +vc_copy() { + COPY_CMD="$(vc_determine_command 2>/dev/null)" + + # shellcheck disable=SC2181 + if [ $? -ne 0 ] || [ -z "$COPY_CMD" ]; then + vc_fatal 'System clipboard not supported' + fi + + "vc_${COPY_CMD}_copy" + + exit $? +} + +vc_paste() { + PASTE_CMD="$(vc_determine_command 2>/dev/null)" + + # shellcheck disable=SC2181 + if [ $? -ne 0 ] || [ -z "$PASTE_CMD" ]; then + vc_fatal 'System clipboard not supported' + fi + + "vc_${PASTE_CMD}_paste" + + exit $? +} + +vc_wlclipboard_copy() { + if [ "$sel" = "primary" ]; then + wl-copy --primary -t TEXT 2>/dev/null + else + wl-copy -t TEXT 2>/dev/null + fi +} + +vc_wlclipboard_paste() { + if [ "$sel" = "primary" ]; then + wl-paste --no-newline --primary -t text + else + wl-paste --no-newline -t text + fi +} + +vc_wayclip_copy() { + if [ "$sel" = "primary" ]; then + waycopy -p + else + waycopy + fi +} + +vc_wayclip_paste() { + if [ "$sel" = "primary" ]; then + waypaste -p + else + waypaste + fi +} + +vc_xsel_copy() { + xsel --"$sel" -i +} + +vc_xsel_paste() { + xsel --"$sel" -o +} + +vc_xclip_copy() { + xclip -selection "$sel" -i >/dev/null 2>&1 +} + +vc_xclip_paste() { + xclip -selection "$sel" -o +} + +vc_osc_copy() { + osc copy +} + +vc_osc_paste() { + osc paste +} + +vc_mac_copy() { + pbcopy +} + +vc_mac_paste() { + pbpaste +} + +vc_cygwin_copy() { + cat >/dev/clipboard +} + +vc_cygwin_paste() { + cat /dev/clipboard +} + +while [ $# -gt 0 ]; do + case "$1" in + --usable) fn=vc_usable;; + --copy) fn=vc_copy;; + --paste) fn=vc_paste;; + --selection) + shift + if [ "$1" != "clipboard" ] && [ "$1" != "primary" ]; then + vc_fatal "Invalid selection: $1\nValid options are 'clipboard' or 'primary'" + fi + sel="$1";; + *) vc_usage;; + esac + shift +done + +sel=${sel:-"clipboard"} $fn + +vc_usage |
