From 72b7e3d535f189e51917a6a0cfda6ccc31df421c Mon Sep 17 00:00:00 2001 From: Tom Ryder Date: Mon, 14 Apr 2014 01:55:02 +1200 Subject: Move vis function into its own file --- bash/bashrc.d/vis.bash | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 bash/bashrc.d/vis.bash (limited to 'bash/bashrc.d/vis.bash') diff --git a/bash/bashrc.d/vis.bash b/bash/bashrc.d/vis.bash new file mode 100644 index 00000000..bf1129a1 --- /dev/null +++ b/bash/bashrc.d/vis.bash @@ -0,0 +1,39 @@ +# Create or edit a script in $PATH, creating in $HOME/.local/bin +vis() { + local arg cmd file endopts + local -a opts cmds files + + # Distinguish options from file arguments + endopts=0 + for arg in "${@:?}" ; do + if [[ $arg == -- ]] ; then + endopts=1 + elif [[ $arg == -* ]] && ! ((endopts)) ; then + opts=("${opts[@]}" "$arg") + else + cmds=("${cmds[@]}" "$arg") + fi + done + + # Check all the commands, if they don't exist, we'll create them + for cmd in "${cmds[@]}" ; do + file=$(type -p "${cmd##*/}") + if [[ ! $file ]] ; then + if ! mkdir -p "$HOME"/.local/bin ; then + exit + fi + file="$HOME"/.local/bin/"${cmd##*/}" + fi + files=("${files[@]}" "$file") + done + + # Run editor with all the options and full path file arguments + command vim "${opts[@]}" -- "${files[@]}" + + # Attempt to make the new files executable by us + chmod -f -- u+x "${files[@]}" +} + +# Complete the vis function with command names +complete -A command vis + -- cgit v1.2.3