Wayland support
The clipboard= configuration file determines what clipboard manager should be used, if xclip or wl-copy/wl-paste. The variable defaults to the value of XDG_SESSION_TYPE which is considered a reliable method to determine what graphical session is currently being used[1] [1] https://unix.stackexchange.com/a/355476
This commit is contained in:
parent
da20b17526
commit
86fbb6daba
109
imgbb
109
imgbb
@ -45,6 +45,8 @@ filepath=""
|
|||||||
expire_seconds="7200" # 2h - Set to "" for no expiry. or use flag -e 0, never or none.
|
expire_seconds="7200" # 2h - Set to "" for no expiry. or use flag -e 0, never or none.
|
||||||
custom_name=""
|
custom_name=""
|
||||||
markdown_mode="false"
|
markdown_mode="false"
|
||||||
|
clipboard="$XDG_SESSION_TYPE"
|
||||||
|
|
||||||
[ ! -e "$config_file" ] || . "$config_file"
|
[ ! -e "$config_file" ] || . "$config_file"
|
||||||
|
|
||||||
print_usage() {
|
print_usage() {
|
||||||
@ -194,12 +196,70 @@ fi
|
|||||||
# Now check other dependencies.
|
# Now check other dependencies.
|
||||||
check_command curl
|
check_command curl
|
||||||
check_command jq
|
check_command jq
|
||||||
# Only check xclip if we plan to use the clipboard.
|
# Only check the clipboard command if we plan to use the clipboard.
|
||||||
if [ -z "$filepath" ]; then
|
if [ -z "$filepath" ]; then
|
||||||
|
case "$clipboard" in
|
||||||
|
x11)
|
||||||
check_command xclip
|
check_command xclip
|
||||||
|
;;
|
||||||
|
wayland)
|
||||||
|
check_command wl-paste
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
die "Unsupported clipboard: $clipboard"
|
||||||
|
esac
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# === Main Logic. ===
|
# === Main Logic. ===
|
||||||
|
paste_x11() {
|
||||||
|
declare tmp
|
||||||
|
|
||||||
|
tmp_img="$(mktemp)" || die "Could not create temp file."
|
||||||
|
|
||||||
|
xclip -selection clipboard -t image/png -o >"$tmp_img" 2>/dev/null
|
||||||
|
if [ -s "$tmp_img" ]; then
|
||||||
|
mv "$tmp_img" "$tmp_img.png"
|
||||||
|
printf "%s\n" "$tmp_img.png"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
xclip -selection clipboard -t image/jpeg -o >"$tmp_img" 2>/dev/null
|
||||||
|
if [ -s "$tmp_img" ]; then
|
||||||
|
mv "$tmp_img" "$tmp_img.jpeg"
|
||||||
|
printf "%s\n" "$tmp_img.jpeg"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
rm -f "$tmp_img"
|
||||||
|
die "Could not get PNG or JPEG image data from clipboard."
|
||||||
|
}
|
||||||
|
|
||||||
|
paste_wl() {
|
||||||
|
declare tmp_img
|
||||||
|
declare format
|
||||||
|
|
||||||
|
format="$(wl-paste -l | grep -m1 -F -e image/png -e image/jpeg)" ||
|
||||||
|
die "Invalid file type in clipboard."
|
||||||
|
|
||||||
|
tmp_img="$(mktemp)" || die "Could not create temp file."
|
||||||
|
|
||||||
|
if wl-paste -t "$format" >"$tmp_img" 2>/dev/null; then
|
||||||
|
mv "$tmp_img" "$tmp_img.${format##image/}"
|
||||||
|
printf "%s\n" "$tmp_img.${format##image/}"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
rm -f "$tmp_img"
|
||||||
|
die "Could not get PNG or JPEG image data from clipboard."
|
||||||
|
}
|
||||||
|
|
||||||
|
yank_x11() {
|
||||||
|
xclip -selection clipboard
|
||||||
|
}
|
||||||
|
|
||||||
|
yank_wl() {
|
||||||
|
wl-copy
|
||||||
|
}
|
||||||
|
|
||||||
TMP_IMG="" # Path to the image file to upload.
|
TMP_IMG="" # Path to the image file to upload.
|
||||||
image_source_description=""
|
image_source_description=""
|
||||||
@ -207,32 +267,13 @@ image_source_description=""
|
|||||||
if [ -z "$filepath" ]; then
|
if [ -z "$filepath" ]; then
|
||||||
# === Clipboard Input Mode. ===
|
# === Clipboard Input Mode. ===
|
||||||
image_source_description="clipboard"
|
image_source_description="clipboard"
|
||||||
# Create temporary file(s).
|
TMP_IMG="$(
|
||||||
TMP_IMG_PNG=$(mktemp --suffix=.png)
|
case "$clipboard" in
|
||||||
TMP_IMG_JPEG=$(mktemp --suffix=.jpg)
|
x11) paste_x11;;
|
||||||
# Ensure temporary files are cleaned up on script exit.
|
wayland) paste_wl;;
|
||||||
trap 'echo "Cleaning up temp files..."; rm -f "$TMP_IMG_PNG" "$TMP_IMG_JPEG"' EXIT
|
esac
|
||||||
|
)" || exit
|
||||||
# Try extracting PNG image from clipboard.
|
trap 'rm -f "$TMP_IMG"' EXIT
|
||||||
notify_cmd "ImgBB Uploader" "Getting image from clipboard..."
|
|
||||||
if xclip -selection clipboard -t image/png -o > "$TMP_IMG_PNG" 2>/dev/null && [ -s "$TMP_IMG_PNG" ]; then
|
|
||||||
echo "Retrieved PNG image from clipboard."
|
|
||||||
TMP_IMG="$TMP_IMG_PNG"
|
|
||||||
rm -f "$TMP_IMG_JPEG" # Remove unused JPEG temp file.
|
|
||||||
else
|
|
||||||
# If PNG fails or is empty, try JPEG.
|
|
||||||
echo "PNG failed or empty, trying JPEG..."
|
|
||||||
if xclip -selection clipboard -t image/jpeg -o > "$TMP_IMG_JPEG" 2>/dev/null && [ -s "$TMP_IMG_JPEG" ]; then
|
|
||||||
echo "Retrieved JPEG image from clipboard."
|
|
||||||
TMP_IMG="$TMP_IMG_JPEG"
|
|
||||||
rm -f "$TMP_IMG_PNG" # Remove unused PNG temp file.
|
|
||||||
else
|
|
||||||
# If both fail or are empty.
|
|
||||||
notify_cmd -u critical "ImgBB Upload Error" "Could not get PNG or JPEG image data from clipboard."
|
|
||||||
echo "Error: Could not get PNG or JPEG image data from clipboard." >&2
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
else
|
else
|
||||||
# === File Input Mode. ===
|
# === File Input Mode. ===
|
||||||
image_source_description="file '$filepath'"
|
image_source_description="file '$filepath'"
|
||||||
@ -299,14 +340,14 @@ fi
|
|||||||
# Output the URL to terminal and copy to clipboard.
|
# Output the URL to terminal and copy to clipboard.
|
||||||
echo "Image URL:"
|
echo "Image URL:"
|
||||||
echo "$output_url"
|
echo "$output_url"
|
||||||
# Use xclip only if we determined we are not uploading from file (i.e., we used clipboard input)
|
# Copy URL only if we determined we are not uploading from file (i.e., we used clipboard input)
|
||||||
# Or always copy? Let's always copy for now.
|
# Or always copy? Let's always copy for now.
|
||||||
if command -v xclip &> /dev/null; then
|
|
||||||
echo "$output_url" | xclip -selection clipboard
|
case "$clipboard" in
|
||||||
notify_cmd "ImgBB Uploader" "Success! URL copied: $output_url"
|
x11) printf "%s\n" "$output_url" | yank_x11;;
|
||||||
else
|
wayland) printf "%s\n" "$output_url" | yank_wl;;
|
||||||
notify_cmd "ImgBB Uploader" "Success! URL: $output_url"
|
esac
|
||||||
fi
|
notify_cmd "ImgBB Uploader" "Success! URL copied: $output_url"
|
||||||
|
|
||||||
# Temporary files are removed automatically by the 'trap' command on exit if they were created.
|
# Temporary files are removed automatically by the 'trap' command on exit if they were created.
|
||||||
exit 0
|
exit 0
|
||||||
|
Loading…
Reference in New Issue
Block a user