43 lines
1.1 KiB
Bash
Executable file
43 lines
1.1 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
|
|
# Open an org-capture popup frame from the shell. This opens a temporary emacs
|
|
# daemon if emacs isn't already running.
|
|
#
|
|
# Usage: org-capture [key] [message...]
|
|
# Examples:
|
|
# org-capture n "To the mind that is still, the whole universe surrenders."
|
|
|
|
set -e
|
|
|
|
cleanup() {
|
|
emacsclient --eval '(kill-emacs)'
|
|
}
|
|
|
|
# If emacs isn't running, we start a temporary daemon, solely for this window.
|
|
daemon=
|
|
if ! pgrep emacs >/dev/null; then
|
|
emacs --daemon
|
|
trap cleanup EXIT INT TERM
|
|
daemon=1
|
|
fi
|
|
|
|
# org-capture key mapped to argument flags
|
|
keys=$(emacsclient -e "(+org-capture-available-keys)" | cut -d '"' -f2)
|
|
while getopts $keys opt; do
|
|
key="\"$opt\""
|
|
break
|
|
done
|
|
shift $((OPTIND-1))
|
|
|
|
[ -t 0 ] && str="$*" || str=$(cat)
|
|
|
|
if [[ $daemon ]]; then
|
|
emacsclient -a "" \
|
|
-c -F '((name . "org-capture") (width . 70) (height . 25))' \
|
|
-e "(+org-capture/open-frame \"$str\" ${key:-nil})"
|
|
else
|
|
# 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})"
|
|
fi
|