#!/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) (transient . t))' \ -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