diff options
Diffstat (limited to '')
| -rwxr-xr-x | clip | 31 |
1 files changed, 21 insertions, 10 deletions
| @@ -13,40 +13,51 @@ | |||
| 13 | 13 | ||
| 14 | menu="dmenu -i -l 25" | 14 | menu="dmenu -i -l 25" |
| 15 | 15 | ||
| 16 | usage() { | ||
| 17 | echo "Usage: clip [-m MENU]" | ||
| 18 | } | ||
| 19 | |||
| 16 | while getopts "m:" opt; do | 20 | while getopts "m:" opt; do |
| 17 | case "$opt" in | 21 | case "$opt" in |
| 18 | m) | 22 | m) |
| 19 | menu="$OPTARG" | 23 | menu="$OPTARG" |
| 20 | ;; | 24 | ;; |
| 25 | *) | ||
| 26 | usage | ||
| 27 | exit 1 | ||
| 28 | ;; | ||
| 21 | esac | 29 | esac |
| 22 | done | 30 | done |
| 23 | shift `expr $OPTIND - 1` | 31 | shift "$((OPTIND - 1))" |
| 24 | 32 | ||
| 25 | dir="/tmp/clipdir" | 33 | dir="/tmp/clipdir" |
| 26 | mkdir -p "$dir" | 34 | mkdir -p "$dir" |
| 27 | 35 | ||
| 28 | file1="$(mktemp -p $dir $(date +%s).XXXXX)" | 36 | file1="$(mktemp -p "$dir" "$(date +%s)".XXXXX)" |
| 29 | file2="$(mktemp -p $dir $(date +%s)b.XXXX)" | 37 | file2="$(mktemp -p "$dir" "$(date +%s)"b.XXXX)" |
| 38 | echo "created $file1" | ||
| 39 | echo "created $file2" | ||
| 30 | xsel > "$file1" | 40 | xsel > "$file1" |
| 31 | xsel -b > "$file2" | 41 | xsel -b > "$file2" |
| 32 | 42 | ||
| 33 | # Avoid duplicates | 43 | # Avoid duplicates |
| 34 | for f in $dir/*; do | 44 | for f in "$dir"/*; do |
| 35 | [ "$f" != "$file1" ] && if diff "$f" "$file1"; then rm "$file1"; fi | 45 | [ "$f" != "$file1" ] && if diff "$f" "$file1"; then rm "$file1"; fi |
| 36 | [ "$f" != "$file2" ] && if diff "$f" "$file2"; then rm "$file2"; fi | 46 | [ "$f" != "$file2" ] && if diff "$f" "$file2"; then rm "$file2"; fi |
| 37 | done | 47 | done |
| 38 | 48 | ||
| 39 | list="$(mktemp)" | 49 | list="$(mktemp)" |
| 40 | ls $dir > $list; | 50 | ls "$dir" > "$list"; |
| 41 | 51 | ||
| 42 | lines="$(mktemp)" | 52 | lines="$(mktemp)" |
| 43 | for f in $dir/*; do | 53 | for f in "$dir"/*; do |
| 44 | nlines=$(expr 1 + "$(wc -l $f | awk '{print $1}')") | 54 | nlines="$(wc -l "$f" | awk '{print $1}')" |
| 45 | fclean=$(echo $f | sed "s|$dir\/||") | 55 | fclean="$(echo "$f" | sed "s|$dir\/||")" |
| 46 | printf "$fclean ($nlines) | $(head -n 1 $f)\n" >> "$lines" | 56 | printf '%s (%s) | %s\n' \ |
| 57 | "$fclean" "$((1+nlines))" "$(head -n 1 "$f")" >> "$lines" | ||
| 47 | done | 58 | done |
| 48 | 59 | ||
| 49 | selected=$(sort -r $lines | $menu | awk '{print $1}') | 60 | selected=$(sort -r "$lines" | $menu | awk '{print $1}') |
| 50 | if [ -n "$selected" ]; then | 61 | if [ -n "$selected" ]; then |
| 51 | xsel -ib < "$dir/$selected" | 62 | xsel -ib < "$dir/$selected" |
| 52 | fi | 63 | fi |
