From 3096351eff69a6cbe0e5170b1695741e0dce7a81 Mon Sep 17 00:00:00 2001 From: Chen Asraf Date: Mon, 19 Jun 2023 23:15:38 +0300 Subject: [PATCH] fix: tmux --- aliases.sh | 2 +- exports.sh | 2 + functions.sh | 68 +------------------------------ tmux.sh | 111 +++++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 115 insertions(+), 68 deletions(-) create mode 100644 tmux.sh diff --git a/aliases.sh b/aliases.sh index 7c9cdf4f..7d4b3d3d 100755 --- a/aliases.sh +++ b/aliases.sh @@ -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" diff --git a/exports.sh b/exports.sh index c2e7acbb..861ba6e3 100755 --- a/exports.sh +++ b/exports.sh @@ -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' diff --git a/functions.sh b/functions.sh index 7d7a3166..e84794d1 100755 --- a/functions.sh +++ b/functions.sh @@ -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 } diff --git a/tmux.sh b/tmux.sh new file mode 100644 index 00000000..1fb9b584 --- /dev/null +++ b/tmux.sh @@ -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 +}