#!/usr/bin/env sh

# Open an org-capture popup frame from the shell. This opens a temporary emacs
# daemon if emacs isn't already running.
#
# Usage: org-capture [-k KEY] [MESSAGE]
# Examples:
#   org-capture -k n "To the mind that is still, the whole universe surrenders."

set -e

cleanup() {
  emacsclient --eval '(let (kill-emacs-hook) (kill-emacs))'
}

# If emacs isn't running, we start a temporary daemon, solely for this window.
if ! emacsclient --suppress-output --eval nil 2>/dev/null; then
  echo "No Emacs daemon/server is available! Starting one..."
  emacs --daemon
  trap cleanup EXIT INT TERM
fi

# org-capture key mapped to argument flags
# keys=$(emacsclient -e "(+org-capture-available-keys)" | cut -d '"' -f2)
while getopts "hk:" opt; do
  key="\"$OPTARG\""
  break
done
shift $((OPTIND-1))

# use remaining args, else read from stdin if passed a single dash
str="$*"
case "$str" in
  -) str=$(cat) ;;
esac

# Fix incompatible terminals that cause odd 'not a valid terminal' errors
[ "$TERM" = "alacritty" ] && export TERM=xterm-256color

# Non-daemon servers flicker a lot if frames are created from terminal, so we do
# it internally instead.
emacsclient -a "" \
  -e "(+org-capture/open-frame \"$str\" ${key:-nil})"
