These two have been sitting in a broken state for quite a while but I findally RTFM and realised that the escape characters in the escape sequence need to be doubled up in order for tmux to properly pass through the escape sequence.
114 lines
3.4 KiB
Bash
114 lines
3.4 KiB
Bash
# A collection of various shell utilities.
|
|
|
|
autoload colors && colors
|
|
|
|
# Abstract different ways to copy to the clipboard.
|
|
if [ -n "$SSH_CONNECTION" ] ; then
|
|
# Use OSC-52 to set the clipboard
|
|
alias copy='base64 | xargs -0 printf "\033]52;c;%s\a"'
|
|
elif [ "`uname`" = "Darwin" ]; then
|
|
# Use pbcopy to set the clipboard
|
|
alias copy='pbcopy'
|
|
elif which xclip &> /dev/null; then
|
|
# Use xclip to set the clipboard
|
|
alias copy='xclip -selection c'
|
|
fi
|
|
|
|
# Abstract different ways to paste from the clipboard.
|
|
# TODO: Use OSC-52 to get the clipboard, not widely supported though
|
|
if [ "`uname`" = "Darwin" ]; then
|
|
# Use pbpaste to get the clipboard
|
|
alias paste='pbpaste'
|
|
elif which xclip &> /dev/null; then
|
|
# Use xclip to get the clipboard
|
|
alias paste='xclip -selection c -o'
|
|
fi
|
|
|
|
# Passthrough an escape sequences tmux doesn't know about.
|
|
tmux-dcs-passthrough() {
|
|
local escape_sequence=$1
|
|
if [ -n "$TMUX" ]; then
|
|
# Replace single \x1b or \033 with two, this is required for tmux to
|
|
# properly pass-through the escape sequence.
|
|
escape_sequence=${escape_sequence//\\x1b/\\x1b\\x1b}
|
|
escape_sequence=${escape_sequence//\\033/\\x1b\\x1b}
|
|
printf '\x1bPtmux;\x1b'"$escape_sequence"'\x1b\\'
|
|
else
|
|
printf "$escape_sequence"
|
|
fi
|
|
}
|
|
|
|
# OSC 9 - Post a notification - supported by iTerm2, kitty, maybe others?
|
|
notify() {
|
|
tmux-dcs-passthrough '\x1b]9;'"$*"'\x7'
|
|
}
|
|
|
|
# Detect the type and extract an archive file.
|
|
extract() {
|
|
if [ -f $1 ]; then
|
|
case $1 in
|
|
*.tar.bz2) tar xvjf $1 ;;
|
|
*.tar.gz) tar xvzf $1 ;;
|
|
*.tar.xz) [ `"uname"` = "Darwin" ] && tar xvJf $1 || tar xf $1 ;;
|
|
*.bz2) bunzip2 $1 ;;
|
|
*.rar) unrar x $1 ;;
|
|
*.gz) gunzip $1 ;;
|
|
*.tar) tar xvf $1 ;;
|
|
*.tbz2) tar xvjf $1 ;;
|
|
*.tgz) tar xvzf $1 ;;
|
|
*.zip) unzip $1 ;;
|
|
*.Z) uncompress $1 ;;
|
|
*.7z) 7zr x $1 ;;
|
|
*) echo "$fg[red]error:$reset_color unable to extract '$1'" ;;
|
|
esac
|
|
else
|
|
echo "$fg[red]error:$reset_color file not found '$1'"
|
|
fi
|
|
}
|
|
|
|
if which bat &> /dev/null; then
|
|
# Wrap bat to specify a theme, always enable color, pipe the output to less.
|
|
# Both --theme and --color can be specified multiple times and will override
|
|
# these defaults.
|
|
bat() {
|
|
command bat --theme='TwoDark' --color always --paging auto "$@"
|
|
}
|
|
elif which batcat &> /dev/null; then
|
|
bat() {
|
|
command batcat --theme='TwoDark' --color always --paging auto "$@"
|
|
}
|
|
fi
|
|
|
|
if which docker-machine &> /dev/null; then
|
|
# Wrap the docker command to print a message if a docker-machine is not
|
|
# running, rather than just stating it can not find it's socket.
|
|
docker() {
|
|
command docker "$@"
|
|
if ! docker-machine active &> /dev/null; then
|
|
echo "$fg[red]error:$reset_color no active host found, run:" \
|
|
"docker-machine start <machine>"
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
# Wrap the docker-machine command to automatically update the environment.
|
|
# When a machine is started, set the environment variables provided by
|
|
# docker-machine env <machine>. When a machine is stopped, unset the same
|
|
# variables.
|
|
docker-machine() {
|
|
command docker-machine "$@"
|
|
if [ "start" = "$1" ]; then
|
|
eval `docker-machine env $2`
|
|
elif [ "stop" = "$1" ]; then
|
|
unset DOCKER_MACHINE_NAME
|
|
unset DOCKER_CERT_PATH
|
|
unset DOCKER_HOST
|
|
unset DOCKER_TLS_VERIFY
|
|
fi
|
|
}
|
|
fi
|
|
|
|
ls-iommu() {
|
|
$HOME/.config/zsh/ls-iommu.sh | sort -n
|
|
}
|