typeset -a __yank_buffer __cut_buffer fyank() { __yank_buffer=() for i in "$@"; do __yank_buffer+=("${i:a}") done } fcut() { __cut_buffer=() for i in "$@"; do __cut_buffer+=("${i:a}") done } fyankadd() { for i in "$@"; do __yank_buffer+=("${i:a}") done } fcutadd() { for i in "$@"; do __cut_buffer+=("${i:a}") done } fpasteclear() { __yank_buffer=() __cut_buffer=() } fpastelist() { if [[ -n $__yank_buffer ]]; then echo "Copying ${#__yank_buffer[@]} files:" printf " %s\n" ${__yank_buffer[@]} fi if [[ -n $__cut_buffer ]]; then echo "Moving ${#__cut_buffer[@]} files" printf " %s\n" ${__cut_buffer[@]} fi } fpaste() { if [[ -n $__yank_buffer ]]; then echo "Copying ${#__yank_buffer[@]} files" fi if [[ -n $__cut_buffer ]]; then echo "Moving ${#__cut_buffer[@]} files" fi if [[ -n $__cut_buffer || -n $__yank_buffer ]]; then echo -n "Continue? [y/N] " read -q || return else echo "Error: No files to paste. Use fyank or fcut first" return 1 fi local target=${1:-$PWD} for file in "${__yank_buffer[@]}"; do cp -r "$file" "$target" done for file in "${__cut_buffer[@]}"; do mv "$file" "$target" done fpasteclear } # vim: set ft=zsh: