44 lines
1.1 KiB
Text
44 lines
1.1 KiB
Text
|
#!/usr/bin/env zsh
|
||
|
zmodload zsh/mapfile
|
||
|
PREVIEW_TENTHS=7
|
||
|
IMG=$1
|
||
|
|
||
|
DESC_FILE=$XDG_RUNTIME_DIR/videsc-${IMG:t:r}.txt
|
||
|
WINDOW_ID=0
|
||
|
|
||
|
if [[ -z $XDG_RUNTIME_DIR ]]; then
|
||
|
echo "videsc requires XDG_RUNTIME_DIR to be set." >&2
|
||
|
exit 2
|
||
|
fi
|
||
|
|
||
|
if [[ -f $DESC_FILE ]]; then
|
||
|
echo That image may already be in an active videsc session. >&2
|
||
|
echo "If you're sure it isn't, remove $DESC_FILE and try again." >&2
|
||
|
exit 1
|
||
|
fi
|
||
|
|
||
|
videsc() {
|
||
|
exiftool -b -Description $IMG > $DESC_FILE || return $?
|
||
|
cp -p $DESC_FILE $DESC_FILE.stamp || return $?
|
||
|
|
||
|
local IMG_PREVIEW_HEIGHT=$((LINES * PREVIEW_TENTHS / 10))
|
||
|
kitty @ goto-layout fat:bias=$((10 * PREVIEW_TENTHS)) || return $?
|
||
|
WINDOW_ID=$(kitty @ launch --cwd current --location before --keep-focus kitten icat --place ${COLUMNS}x${IMG_PREVIEW_HEIGHT}@0x0 --hold $IMG || return $?)
|
||
|
|
||
|
${EDITOR:-vim} $DESC_FILE || return $?
|
||
|
|
||
|
if [[ $DESC_FILE -nt $DESC_FILE.stamp ]]; then
|
||
|
pbcopy < $DESC_FILE
|
||
|
exiftool -P -Description="$mapfile[$DESC_FILE]" $IMG
|
||
|
else
|
||
|
echo 'no changes detected, not writing updated description.' >&2
|
||
|
fi
|
||
|
}
|
||
|
|
||
|
{
|
||
|
videsc
|
||
|
} always {
|
||
|
(( $WINDOW_ID )) && kitty @ close-window -m id:$WINDOW_ID
|
||
|
rm -f $DESC_FILE $DESC_FILE.stamp
|
||
|
}
|