]> git.madduck.net Git - etc/zsh.git/blob - .zsh/zshrc/20-tempfile+dir_functions

madduck's git repository

Every one of the projects in this repository is available at the canonical URL git://git.madduck.net/madduck/pub/<projectpath> — see each project's metadata for the exact URL.

All patches and comments are welcome. Please squash your changes to logical commits before using git-format-patch and git-send-email to patches@git.madduck.net. If you'd read over the Git project's submission guidelines and adhered to them, I'd be especially grateful.

SSH access, as well as push access can be individually arranged.

If you use my repositories frequently, consider adding the following snippet to ~/.gitconfig and using the third clone URL listed for each project:

[url "git://git.madduck.net/madduck/"]
  insteadOf = madduck:

move Git prompt handling to theme
[etc/zsh.git] / .zsh / zshrc / 20-tempfile+dir_functions
1 #
2 # Helper functions for temporary files, directories, and pastebining
3 #
4 # Copyright © 1994–2017 martin f. krafft <madduck@madduck.net>
5 # Released under the terms of the Artistic Licence 2.0
6 #
7 # Source repository: http://git.madduck.net/v/etc/zsh.git
8 #
9
10 cdt() {
11   emulate -L zsh
12   REPLY=$(mktemp -td ${1:-cdt}.XXXXXX)
13   builtin cd $REPLY
14   rm -f ${TMPDIR:-/tmp}/cdt.latest
15   ln -s $REPLY ${TMPDIR:-/tmp}/cdt.latest
16 }
17
18 _cdt() {
19   cdt "$@"
20   zle reset-prompt
21   zle -M "$REPLY"
22 }
23 zle -N _cdt
24 bindkey '\ed' _cdt
25
26 vit() {
27   emulate -L zsh
28   local prefix i
29   for i in "$@"; do
30     case "$i" in
31       -) local stdin=1; shift;;
32       *) if [ -z "${prefix:-}" ]; then
33            prefix="$i"; shift
34          else
35            zwarn "prefix $prefix already specified, skipping: $i"
36          fi
37          ;;
38     esac
39   done
40   REPLY=$(mktemp -t ${prefix:-vit}-XXXXXX.txt)
41   [ -n "$stdin" ] && cat >| $REPLY
42   sensible-editor +start $REPLY </dev/tty >/dev/tty
43   ln -sf $REPLY ${TMPDIR:-/tmp}/vit.latest
44   echo "$REPLY"
45 }
46 _vit() {
47   vit "$@" >/dev/null
48   zle reset-prompt
49   zle -M "$REPLY"
50 }
51 zle -N _vit
52 bindkey '\ef' _vit
53
54 pastebin() {
55   local target="${(%):-"%D{%F-%H%M%S}"}-${1##*/}"
56   pub "${1}==${target}" 2>&1
57 }
58
59 _pastebinit() {
60   emulate -L zsh
61   [[ -f "$REPLY" ]] || vit paste
62   read -q "yesno?\rShould I paste the file $REPLY? [yN] "
63   zle reset-prompt
64   if [[ ${yesno:-n} == y ]]; then
65     zle -cR "pasting $REPLY …"
66     REPLY=$(pastebin "${REPLY}")
67     zle -M "$REPLY"
68   fi
69 }
70 zle -N _pastebinit
71 bindkey '\ep' _pastebinit
72
73 _copy_reply() {
74   if [[ -n "$REPLY" ]]; then
75     if (( $+commands[xclip] )); then
76       echo -En "$REPLY" | xclip -in
77       zle -M "Copied to primary clipboard: $REPLY"
78     else
79       zle -M "Cannot copy to clipboard, xclip command not found"
80     fi
81   else
82     zle -M "Nothing to copy, \$REPLY is empty"
83   fi
84 }
85 zle -N _copy_reply
86 bindkey '\ec' _copy_reply
87
88 TS() {
89   local topic ts ret script
90   topic="${(j:_:)@}"
91   ts=${(%):-%D{%Y-%m-%d-%H%M}}
92   script="${TMPDIR:-/tmp}/$ts.$$.${topic:-$LOGNAME}.typescript"
93   PS1="
94 %# " RPS1= script -qe -c "zsh -f" -f "$script"
95   ret=$?
96   zinfo "typescript is in $script ."
97   typeset -g REPLY
98   REPLY="$script"
99   if command -v unterm >/dev/null; then
100     REPLY="${script}.txt"
101     unterm "$script" > "$REPLY"
102   zinfo "plain text transcript is in $REPLY ."
103   fi
104   return $ret
105 }
106
107 # vim:ft=zsh