# # Helper functions for temporary files, directories, and pastebining # # Copyright © 1994–2017 martin f. krafft # Released under the terms of the Artistic Licence 2.0 # # Source repository: http://git.madduck.net/v/etc/zsh.git # cdt() { emulate -L zsh REPLY=$(mktemp -td ${1:-cdt}.XXXXXX) builtin cd $REPLY rm -f ${TMPDIR:-/tmp}/cdt.latest ln -s $REPLY ${TMPDIR:-/tmp}/cdt.latest } _cdt() { cdt "$@" zle reset-prompt zle -M "$REPLY" } zle -N _cdt bindkey '\ed' _cdt vit() { emulate -L zsh local prefix i for i in "$@"; do case "$i" in -) local stdin=1; shift;; *) if [ -z "${prefix:-}" ]; then prefix="$i"; shift else zwarn "prefix $prefix already specified, skipping: $i" fi ;; esac done REPLY=$(mktemp -t ${prefix:-vit}-XXXXXX.txt) [ -n "$stdin" ] && cat >| $REPLY sensible-editor +start $REPLY /dev/tty ln -sf $REPLY ${TMPDIR:-/tmp}/vit.latest echo "$REPLY" } _vit() { vit "$@" >/dev/null zle reset-prompt zle -M "$REPLY" } zle -N _vit bindkey '\ef' _vit pastebin() { local target="${(%):-"%D{%F-%H%M%S}"}-${1##*/}" pub "${1}==${target}" 2>&1 } _pastebinit() { emulate -L zsh [[ -f "$REPLY" ]] || vit paste read -q "yesno? Should I paste the file $REPLY? [yN] " zle reset-prompt if [[ ${yesno:-n} == y ]]; then zle -cR "pasting $REPLY …" REPLY=$(pastebin "${REPLY}") zle -M "$REPLY" fi } zle -N _pastebinit bindkey '\ep' _pastebinit _copy_reply() { if [[ -n "$REPLY" ]]; then if (( $+commands[xclip] )); then echo -En "$REPLY" | xclip -in zle -M "Copied to primary clipboard: $REPLY" else zle -M "Cannot copy to clipboard, xclip command not found" fi else zle -M "Nothing to copy, \$REPLY is empty" fi } zle -N _copy_reply bindkey '\ec' _copy_reply TS() { local topic ts ret script topic="${(j:_:)@}" ts=${(%):-%D{%Y-%m-%d-%H%M}} script="${TMPDIR:-/tmp}/$ts.$$.${topic:-$LOGNAME}.typescript" PS1=" %# " RPS1= script -qe -c "zsh -f" -f "$script" ret=$? zinfo "typescript is in $script ." typeset -g REPLY REPLY="$script" if command -v unterm >/dev/null; then REPLY="${script}.txt" unterm "$script" > "$REPLY" zinfo "plain text transcript is in $REPLY ." fi return $ret } # vim:ft=zsh