diff options
| author | bh <qn+git@epicurus.dev> | 2026-03-30 15:32:02 +0800 |
|---|---|---|
| committer | bh <qn+git@epicurus.dev> | 2026-03-30 15:32:02 +0800 |
| commit | cb778001429dd3e3585d7fc7113487fd03076521 (patch) | |
| tree | 4fa217b606095894ae0ef59b64fe644a9aad4037 /scripts/Scripts | |
| parent | 195b2f20d6332483d73711ad736be4fc0b8f9186 (diff) | |
rofi: add image support
Diffstat (limited to 'scripts/Scripts')
| -rwxr-xr-x | scripts/Scripts/clipboard | 53 |
1 files changed, 34 insertions, 19 deletions
diff --git a/scripts/Scripts/clipboard b/scripts/Scripts/clipboard index 93789a0..ae5c9dc 100755 --- a/scripts/Scripts/clipboard +++ b/scripts/Scripts/clipboard @@ -1,29 +1,44 @@ #!/usr/bin/env bash +tmp_dir="/tmp/cliphist-rofi" + clipboard_mode() { - if [ "$ROFI_RETV" = "0" ]; then - cliphist list | while IFS= read -r line; do - id="${line%% *}" - content="${line#* }" - - if [[ "$content" == *"[[ binary data"* ]]; then - printf ' IMAGE: %s\0info\x1f%s\n' "$id" "$id" - else - printf '%s\0info\x1f%s\n' "$content" "$id" - fi - done - else - cliphist decode "$ROFI_INFO" | wl-copy - exit 0 - fi + if [ "$ROFI_RETV" = "0" ]; then + rm -rf "$tmp_dir" + mkdir -p "$tmp_dir" + + cliphist list | while IFS=$'\t' read -r id content; do + if [[ "$content" == *"[[ binary data"* ]]; then + ext="png" + + if [[ "$content" =~ image/(jpeg|jpg|png|bmp|gif|webp) ]]; then + ext="${BASH_REMATCH[1]}" + fi + + if [[ "$ext" == "jpeg" ]]; then + ext="jpg" + fi + + imgfile="$tmp_dir/$id.$ext" + printf '%s' "$id" | cliphist decode > "$imgfile" + printf ' IMAGE: %s\0icon\x1fthumbnail://%s\0info\x1f%s\n' "$id" "$imgfile" "$id" + else + printf '%s\0info\x1f%s\n' "$content" "$id" + fi + done + else + printf '%s' "$ROFI_INFO" | cliphist decode | wl-copy + exit 0 + fi } export -f clipboard_mode if [ -z "$ROFI_RETV" ]; then - rofi -modi "clipboard:$0" \ - -show clipboard \ - -theme ~/.config/rofi/clipboard.rasi + rofi -modi "clipboard:$0" \ + -show clipboard \ + -show-icons \ + -theme ~/.config/rofi/clipboard.rasi else - clipboard_mode "$@" + clipboard_mode "$@" fi |
