# Some helping functions ### File manipulation ### # Copy to clipboard copy() { if [ $# -eq 0 ]; then xclip -selection c else file_type=$(file -b --mime-type "$1") xclip -selection c -t $file_type < $1 fi } # Swap files swap() { local tmp=`mktemp` mv "$1" "$tmp" mv "$2" "$1" mv "$tmp" "$2" } # mkdir && cd mkcd() { mkdir $1 && cd $1 } ### Vim helpers ### vclass() { v src/"$1".cpp -c ":vs include/$1.hpp" } vide() { v $1 -c ":NERDTree" } vs() { v $1 -c ":vs $2" } sp() { v $1 -c ":sp $2" } vfind() { v `find . -name "$1"` } ### Others ### pull-dotfiles() { pushd > /dev/null 2>&1 echo Pulling dotfiles... cd ~/.config/dotfiles && git pull echo Pulling scripts... cd ~/.scripts && git pull echo Pulling oh-my-zsh cd ~/.config/oh-my-zsh && git pull popd > /dev/null 2>&1 } # Recover a vim backup recover() { if [ -f $1 ]; then echo >&2 Cannot recover an existing file... exit 1 fi BACKUP_PATH=~/.vim/backups/`echo $PWD/$1 | tr '/' '%'` if [ ! -f "$BACKUP_PATH" ]; then echo >&2 Backup not found... exit 2 fi cp $BACKUP_PATH $1 } # colors for the man pages man() { env LESS_TERMCAP_mb=$(printf "\e[1;31m") \ LESS_TERMCAP_md=$(printf "\e[1;31m") \ LESS_TERMCAP_me=$(printf "\e[0m") \ LESS_TERMCAP_se=$(printf "\e[0m") \ LESS_TERMCAP_so=$(printf "\e[1;44;33m") \ LESS_TERMCAP_ue=$(printf "\e[0m") \ LESS_TERMCAP_us=$(printf "\e[1;32m") \ man "$@" } # Better svn log svn() { case $* in log ) shift 1; command svn log "$@" | less ;; * ) command svn "$@" ;; esac } # Clears resolv.conf with Cloudflare/APNIC's dns resolv() { echo 'nameserver 1.1.1.1' | sudo tee /etc/resolv.conf > /dev/null } # Generate a standard LaTeX maefile makelatex() { cp /home/thomas/.script/classgen/Makefile.latex ./Makefile } # cdg : cd to a git repo if [ -d "$GCLONE_PATH" ]; then gclone() { # Check if cloning via HTTP(S) or SSH if [[ $1 == http* ]]; then server=`echo $1 | rev | cut -d '/' -f 3- | rev | cut -d '/' -f 3` name=`echo $1 | rev | cut -d '/' -f -2 | rev` else server=`echo $1 | cut -d ':' -f 1 | cut -d '@' -f 2-` name=`echo $1 | cut -d ':' -f 2-` fi user=`echo $name | cut -d '/' -f 1` repo=`echo $name | cut -d '/' -f 2-` if [[ $repo == *.git ]]; then repo=${repo%.*} fi # Final path to the repo repo_path=$GCLONE_PATH/$server/$user/$repo mkdir -p $repo_path git clone $1 $repo_path } cdg() { if [ $# -ne 1 ]; then echo "This function expects a single parameter" return 1 else found_dirs=`find $GCLONE_PATH -maxdepth 3 -name $1 | sort` total=`echo $found_dirs | wc -l` if [[ "" == "$found_dirs" ]]; then echo "$1 not found" return 2 elif [ $total -gt 1 ]; then counter=0 echo "Multiple entries for $1 found:" echo $found_dirs | while read found_dir; do counter=$(($counter+1)) echo "["$counter"]" $found_dir done read choice if [[ "$choice" == "" ]]; then cd `echo $found_dirs | head -1 | tail -1` elif [[ "$choice" =~ '^[0-9]+$' ]] && [ $choice -le $total ] && [ $choice -gt 0 ]; then cd `echo $found_dirs | head -$choice | tail -1` else echo "I expected a number that was less than the max..." return 3 fi return 3 else cd $found_dirs fi fi } _cdg() { _arguments "1: :($(find $GCLONE_PATH -maxdepth 3 -exec basename {} \;))" } compdef _cdg cdg fi # Music things command -v music-server > /dev/null 2>&1 if [ $? -eq 0 ]; then # If music-server is installed, check if awesome is running with screenfetch command -v screenfetch > /dev/null 2>&1 if [ $? -eq 0 ]; then screenfetch -d wm -nN | grep "Awesome" > /dev/null 2>&1 if [ $? -eq 0 ]; then # User is running awesome, music-client will go through awesome-client music-client() { command=$1 if [ $# -eq 1 ]; then echo "require('music').execute_command(\"$command\")" | awesome-client else library_path=$(realpath $2 | cut -d '/' -f 5-) awesome_command="require('music').execute_command(\"$command\",\"$library_path\")" echo $awesome_command | awesome-client fi } alias mcf="music-client file" fi fi fi