56 lines
1 KiB
Bash
Executable file
56 lines
1 KiB
Bash
Executable file
#!/bin/bash
|
|
set -euo pipefail
|
|
|
|
sniplet_dir="${HOME}/.config/sniplet"
|
|
tmpdir=$(mktemp -d)
|
|
|
|
function cleanup() {
|
|
rm -rf ${tmpdir}
|
|
}
|
|
trap cleanup EXIT
|
|
|
|
# In case the directory does not exist create it
|
|
[ -d "${sniplet_dir}" ] || {
|
|
mkdir "${sniplet_dir}"
|
|
}
|
|
|
|
# Find sniplet files
|
|
names=$(find "${sniplet_dir}" -type f | sed "s|${sniplet_dir}||" | sort)
|
|
|
|
# Let the user select one of them
|
|
name=$(
|
|
zenity \
|
|
--list \
|
|
--title="Sniplet" \
|
|
--width=275 \
|
|
--height=400 \
|
|
--column=Sniplet \
|
|
${names}
|
|
)
|
|
sniplet="${sniplet_dir}/${name}"
|
|
|
|
# Check presence of the sniplet
|
|
[ -f "${sniplet}" ] || {
|
|
zenity --error --text="Sniplet has gone away"
|
|
exit 1
|
|
}
|
|
|
|
# Store clipboard away
|
|
xsel -b -o >"${tmpdir}/b"
|
|
xsel -p -o >"${tmpdir}/p"
|
|
|
|
# Render the sniplet using korvike for templating
|
|
korvike -i "${sniplet}" -o "${tmpdir}/s"
|
|
|
|
# Set clipboard with sniplet
|
|
xsel -b -i <"${tmpdir}/s"
|
|
xsel -p -i <"${tmpdir}/s"
|
|
|
|
# Do the paste magic
|
|
sleep 0.3
|
|
xdotool key shift+Insert
|
|
sleep 0.5
|
|
|
|
# Restore clipboard
|
|
xsel -b -i <"${tmpdir}/b"
|
|
xsel -p -i <"${tmpdir}/p"
|