diff --git a/src/.config/tmux/tmux.conf b/src/.config/tmux/tmux.conf index 4110b1e..d2a0836 100644 --- a/src/.config/tmux/tmux.conf +++ b/src/.config/tmux/tmux.conf @@ -2,16 +2,47 @@ unbind C-b set-option -g prefix C-a bind-key C-a send-prefix -bind u split-window -h -bind i split-window -v -unbind '"' -unbind % - -bind h select-pane -L -bind l select-pane -R -bind j select-pane -D -bind k select-pane -U - set -g status off set escape-time 20 + +# https://github.com/saysjonathan/dwm.tmux +# dwm-like binds for tmux +setenv -g tmuxdwm_version 0.1.0 +setenv -g killlast 0 # Toggle killing last pane +setenv -g mfact 50 # Main pane area factor + +set -g command-alias[100] newpane='run-shell "dwm.tmux newpane"' +set -g command-alias[101] newpanecurdir='run-shell "dwm.tmux newpanecurdir"' +set -g command-alias[102] killpane='run-shell "dwm.tmux killpane"' +set -g command-alias[103] nextpane='run-shell "dwm.tmux nextpane"' +set -g command-alias[104] prevpane='run-shell "dwm.tmux prevpane"' +set -g command-alias[105] rotateccw='run-shell "dwm.tmux rotateccw"' +set -g command-alias[106] rotatecw='run-shell "dwm.tmux rotatecw"' +set -g command-alias[107] zoom='run-shell "dwm.tmux zoom"' +set -g command-alias[108] layouttile='run-shell "dwm.tmux layouttile"' +set -g command-alias[109] float='run-shell "dwm.tmux float"' +set -g command-alias[110] incmfact='run-shell "dwm.tmux incmfact"' +set -g command-alias[111] decmfact='run-shell "dwm.tmux decmfact"' +set -g command-alias[112] window0='run-shell "dwm.tmux window 0"' +set -g command-alias[113] window1='run-shell "dwm.tmux window 1"' +set -g command-alias[114] window2='run-shell "dwm.tmux window 2"' +set -g command-alias[115] window3='run-shell "dwm.tmux window 3"' +set -g command-alias[116] window4='run-shell "dwm.tmux window 4"' +set -g command-alias[117] window5='run-shell "dwm.tmux window 5"' +set -g command-alias[118] window6='run-shell "dwm.tmux window 6"' +set -g command-alias[119] window7='run-shell "dwm.tmux window 7"' +set -g command-alias[120] window8='run-shell "dwm.tmux window 8"' +set -g command-alias[121] window9='run-shell "dwm.tmux window 9"' + +set-hook -g pane-exited 'run-shell "dwm.tmux layouttile"' + +# these keybinds are odd because vim already has ctrl-hjkl for buffers +bind -n C-e newpane +bind -n C-w newpanecurdir +bind -n C-c killpane +bind -n C-u nextpane +bind -n C-i prevpane +bind -n C-Enter zoom +bind h decmfact +bind l incmfact diff --git a/src/.local/bin/dwm.tmux b/src/.local/bin/dwm.tmux new file mode 100755 index 0000000..0156b9f --- /dev/null +++ b/src/.local/bin/dwm.tmux @@ -0,0 +1,114 @@ +#!/bin/sh +# https://github.com/saysjonathan/dwm.tmux + +window_panes= +killlast= +mfact= + +newpane() { + tmux \ + split-window -t :.0\; \ + swap-pane -s :.0 -t :.1\; \ + select-layout main-vertical\; \ + resize-pane -t :.0 -x ${mfact}% +} + +newpanecurdir() { + tmux \ + split-window -t :.0 -c "#{pane_current_path}"\; \ + swap-pane -s :.0 -t :.1\; \ + select-layout main-vertical\; \ + resize-pane -t :.0 -x ${mfact}% +} + +killpane() { + if [ $window_panes -gt 1 ]; then + tmux kill-pane -t :.\; \ + select-layout main-vertical\; \ + resize-pane -t :.0 -x ${mfact}% + else + if [ $killlast -ne 0 ]; then + tmux kill-window + fi + fi +} + +nextpane() { + tmux select-pane -t :.+ +} + +prevpane() { + tmux select-pane -t :.- +} + +rotateccw() { + tmux rotate-window -U\; select-pane -t 0 +} + +rotatecw() { + tmux rotate-window -D\; select-pane -t 0 +} + +zoom() { + tmux swap-pane -s :. -t :.0\; select-pane -t :.0 +} + +layouttile() { + tmux select-layout main-vertical\; resize-pane -t :.0 -x ${mfact}% +} + +float() { + tmux resize-pane -Z +} + +incmfact() { + fact=$((mfact + 5)) + if [ $fact -le 95 ]; then + tmux \ + setenv mfact $fact\; \ + resize-pane -t :.0 -x ${fact}% + fi +} + +decmfact() { + fact=$((mfact - 5)) + if [ $fact -ge 5 ]; then + tmux \ + setenv mfact $fact\; \ + resize-pane -t :.0 -x ${fact}% + fi +} + +window() { + window=$1 + tmux selectw -t $window +} + +if [ $# -lt 1 ]; then + echo "dwm.tmux.sh [command]" + exit +fi + +command=$1;shift +args=$* +set -- $(echo $(tmux display -p "#{window_panes}\n#{killlast}\n#{mfact}")) +window_panes=$1 +killlast=$2 +mfact=$3 + +case $command in + newpane) newpane;; + newpanecurdir) newpanecurdir;; + killpane) killpane;; + nextpane) nextpane;; + prevpane) prevpane;; + rotateccw) rotateccw;; + rotatecw) rotatecw;; + zoom) zoom;; + layouttile) layouttile;; + float) float;; + incmfact) incmfact;; + decmfact) decmfact;; + window) window $args;; + *) echo "unknown command"; exit 1;; +esac