summaryrefslogtreecommitdiff
path: root/scripts/Scripts
diff options
context:
space:
mode:
authorbh <qn+git@epicurus.dev>2026-03-30 15:32:02 +0800
committerbh <qn+git@epicurus.dev>2026-03-30 15:32:02 +0800
commitcb778001429dd3e3585d7fc7113487fd03076521 (patch)
tree4fa217b606095894ae0ef59b64fe644a9aad4037 /scripts/Scripts
parent195b2f20d6332483d73711ad736be4fc0b8f9186 (diff)
rofi: add image support
Diffstat (limited to 'scripts/Scripts')
-rwxr-xr-xscripts/Scripts/clipboard53
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