fix: tmux

This commit is contained in:
Chen Asraf
2023-06-19 23:15:38 +03:00
parent a7066e1530
commit 3096351eff
4 changed files with 115 additions and 68 deletions

View File

@@ -101,7 +101,7 @@ alias trm="tmux kill-session -t"
alias tks="tmux kill-server"
# tmux - workspaces
alias tn-general="tn-custom \$HOME/Dev -s general"
alias tn-general="tn-custom -d \$HOME/Dev -s general"
alias tn-df="tn-custom -d \$DOTFILES -s dotfiles ."
alias tn-tt="tn-custom -d \$HOME/.local/share/nvim/site/pack/packer/start/text-transform.nvim -s text-transform ."
alias tn-simple-scaffold="tn-prj simple-scaffold"

View File

@@ -85,3 +85,5 @@ if [[ -f ~/.fzf.zsh ]]; then source ~/.fzf.zsh; fi
if [[ -f /opt/homebrew/opt/chruby/share/chruby/chruby.sh ]]; then source /opt/homebrew/opt/chruby/share/chruby/chruby.sh; fi
if [[ -f $(which rbenv) ]]; then eval "$(rbenv init - zsh)"; fi
if [[ -f "$HOME/.dotfiles/_local.sh" ]]; then source "$HOME/.dotfiles/_local.sh"; fi
export SHELLCHECK_OPTS='--shell=bash'

View File

@@ -2,6 +2,7 @@
source $DOTFILES/autoload_completions.sh
source $DOTFILES/colors.sh
source $DOTFILES/tmux.sh
motd() {
out=$(run-parts $DOTFILES/synced/motd)
@@ -314,73 +315,6 @@ autoload _docker-volume-path
autoload _prj
autoload _src
tn-custom () {
parent="."
for arg in "$@"; do
case "$1" in
-d)
parent="$2"
winname=$(basename $parent)
winname="${winname%.*}"
shift 2
;;
-s)
winname="${2%.*}"
shift 2
;;
esac
done
tmux has-session -t $winname 2>/dev/null
if [[ "$?" == "0" ]]; then
echo_cyan "Attaching to existing session $winname"
tmux attach-session -t $winname
return 0
fi
dirs=("$@")
echo_cyan "Creating new session $winname on $parent with dirs: $dirs"
tmux -f ~/.config/.tmux.conf new-session -d -s $winname -n general -c $parent
for dir in ${dirs[@]}; do
dir="$parent/$dir"
tabname=$(basename $dir)
if [[ $tabname == "." ]]; then
tabname="$winname"
fi
# create new window
tmux new-window -n $tabname -c $dir
# open vim on main pane
tmux send-keys -t $winname:$tabname v Enter
# split window horizontally
tmux split-window -h -t $winname:$tabname -c $dir
# resize pane
tmux resize-pane -t 0 -x 90
# auto-select main pane
tmux select-pane -t 0
# zoom into main pane
tmux resize-pane -Z
done
# select first non-general window
tmux select-window -t $winname:1
# attach to session
tmux attach -t $winname
}
tn-prj() {
prj="$1"
shift
tn-custom -d "$HOME/Dev/$prj" -s "$prj" . $@
}
reload-zsh() {
source $HOME/.zshrc
}

111
tmux.sh Normal file
View File

@@ -0,0 +1,111 @@
#!/usr/bin/env zsh
tn-custom () {
parent="."
for arg in $@; do
case "$1" in
-d)
parent="$2"
winname=$(basename $parent)
winname="${winname%.*}"
shift 2
;;
-s)
winname="${2%.*}"
shift 2
;;
*)
;;
esac
done
tmux has-session -t $winname 2>/dev/null
if [[ "$?" == "0" ]]; then
echo_cyan "Attaching to existing session $winname"
tmux attach-session -t $winname
return 0
fi
dirs=("$@")
echo_cyan "Creating new session $winname on $parent with dirs: $dirs"
tmux -f ~/.config/.tmux.conf new-session -d -s $winname -n general -c $parent
for dir in ${dirs[@]}; do
dir="$parent/$dir"
tabname=$(basename $dir)
if [[ $tabname == "." ]]; then
tabname="$winname"
fi
# create new window
tmux new-window -n $tabname -c $dir
done
# attach to session
tmux attach -t $winname
}
tn-prj() {
prj="$1"
shift
parent="."
for arg in "$@"; do
case "$1" in
-d)
parent="$2"
winname=$(basename $parent)
winname="${winname%.*}"
shift 2
;;
-s)
winname="${2%.*}"
shift 2
;;
esac
done
tmux has-session -t $winname 2>/dev/null
if [[ "$?" == "0" ]]; then
echo_cyan "Attaching to existing session $winname"
tmux attach-session -t $winname
return 0
fi
dirs=("$@")
echo_cyan "Creating new session $winname on $parent with dirs: $dirs"
tmux -f ~/.config/.tmux.conf new-session -d -s $winname -n general -c $parent
for dir in ${dirs[@]}; do
dir="$parent/$dir"
tabname=$(basename $dir)
if [[ $tabname == "." ]]; then
tabname="$winname"
fi
# create new window
tmux new-window -n $tabname -c $dir
# open vim on main pane
tmux send-keys -t $winname:$tabname v Enter
# split window horizontally
tmux split-window -h -t $winname:$tabname -c $dir
# resize pane
tmux resize-pane -t 0 -x 90
# auto-select main pane
tmux select-pane -t 0
# zoom into main pane
tmux resize-pane -Z
done
# select first non-general window
tmux select-window -t $winname:1
# attach to session
tmux attach -t $winname
}