From 60052659b98832c78c902e4f27ecee2663d8e913 Mon Sep 17 00:00:00 2001 From: Sebastiano Tronto Date: Wed, 6 May 2026 08:30:49 +0200 Subject: Added scripts --- scripts/clip | 63 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100755 scripts/clip (limited to 'scripts/clip') diff --git a/scripts/clip b/scripts/clip new file mode 100755 index 0000000..b7bab10 --- /dev/null +++ b/scripts/clip @@ -0,0 +1,63 @@ +#!/bin/sh + +# A primitive clipboard manager. Saves the current selection and clipboard +# to a temporary file and shows all saved selections in dmenu for the user +# to select one. Duplicate selections are avoided. + +# Bugs (wontfix): the program fails if it can't create the temporary +# directory with the designated name. + +# Usage: clip [-m menu] + +# Requires: xsel, dmenu (or similar) + +menu="dmenu -i -l 25" + +usage() { + echo "Usage: clip [-m MENU]" +} + +while getopts "m:" opt; do + case "$opt" in + m) + menu="$OPTARG" + ;; + *) + usage + exit 1 + ;; + esac +done +shift "$((OPTIND - 1))" + +dir="/tmp/clipdir" +mkdir -p "$dir" + +file1="$(mktemp -p "$dir" "$(date +%s)".XXXXXX)" +file2="$(mktemp -p "$dir" "$(date +%s)"b.XXXXX)" +echo "created $file1" +echo "created $file2" +xsel > "$file1" +xsel -b > "$file2" + +# Avoid duplicates +for f in "$dir"/*; do + [ "$f" != "$file1" ] && if diff "$f" "$file1"; then rm "$file1"; fi + [ "$f" != "$file2" ] && if diff "$f" "$file2"; then rm "$file2"; fi +done + +list="$(mktemp)" +ls "$dir" > "$list"; + +lines="$(mktemp)" +for f in "$dir"/*; do + nlines="$(wc -l "$f" | awk '{print $1}')" + fclean="$(echo "$f" | sed "s|$dir\/||")" + printf '%s (%s) | %s\n' \ + "$fclean" "$((1+nlines))" "$(head -n 1 "$f")" >> "$lines" +done + +selected=$(sort -r "$lines" | $menu | awk '{print $1}') +if [ -n "$selected" ]; then + xsel -ib < "$dir/$selected" +fi -- cgit v1.3