#!/usr/bin/env sh # Description: Send files or folders to your Android device using kdeconnect-cli. # kdeconnect must be configured on the Android device and the PC. # # Usage: # - Hover over a file or a folder and call the plugin. # - Alternatively, select the files and folders you would like to send, and activate the plugin. # # Shell: POSIX compliant # Author: juacq97, raffaem, N-R-K # If you want system notification, put this equal to 1 notify=0 note() { if [ $notify = 1 ]; then notify-send -a "Kdeconnect" "$1" else echo "[Kdeconnect] $1" fi } # kdeconnect doesn't cope with non-files filter_files() { xargs -0 -I{} sh -c ' if [ -f "{}" ]; then printf "%s\0" "{}"; else printf "Error: not a regular file: %s\n" "{}" >&2; fi;' } send() { filter_files | xargs -0 -I{} kdeconnect-cli --name "$devname" --share {} note "Files sent" } # Select paired device names=$(kdeconnect-cli --list-available --name-only 2>/dev/null) if [ -z "$names" ]; then note "No devices paired and available" exit fi ndevs=$(printf "%s" "$names" | awk 'END{print NR}') if [ "$ndevs" -eq 1 ]; then devname="$names" else printf "%s" "$names" | awk '{ print NR ". " $0 }' printf "Pick a device: " read -r pick if [ -n "$pick" ] && [ "$pick" -eq "$pick" ]; then devname=$(printf '%s' "$names" | awk "NR==$pick") fi fi selection=${NNN_SEL:-${XDG_CONFIG_HOME:-$HOME/.config}/nnn/.selection} if [ -s "$selection" ]; then send < "$selection" [ -p "$NNN_PIPE" ] && printf "-" > "$NNN_PIPE" # clear selection elif [ -n "$1" ]; then printf "%s" "$1" | send else note "No selection and no hovered file" fi