204 lines
4.9 KiB
Bash
204 lines
4.9 KiB
Bash
# 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() {
|
|
current_dir=$PWD
|
|
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
|
|
cd $current_dir
|
|
}
|
|
|
|
# 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
|
|
|