summaryrefslogtreecommitdiff
path: root/mut/bin
diff options
context:
space:
mode:
authorMike Vink <59492084+ivi-vink@users.noreply.github.com>2025-01-31 19:21:13 +0000
committerMike Vink <59492084+ivi-vink@users.noreply.github.com>2025-01-31 19:21:13 +0000
commita18029250a4744749debd6ea0a39c4a53cbe820c (patch)
treed98e2e01d77ed1774a224718c8fadd8ea8783631 /mut/bin
parenta92cc18f6c4961441f2381dd9a1a70fff1356536 (diff)
add patched vis-clipboard
Diffstat (limited to 'mut/bin')
-rwxr-xr-xmut/bin/vis-clipboard192
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