vim9script

# Add and uncomment following lines to your .tmux.conf:
# bind -n M-h if "[ $(tmux display -p '#{pane_current_command}') = vim ]" "send-keys M-h" "select-pane -L"
# bind -n M-j if "[ $(tmux display -p '#{pane_current_command}') = vim ]" "send-keys M-j" "select-pane -D"
# bind -n M-k if "[ $(tmux display -p '#{pane_current_command}') = vim ]" "send-keys M-k" "select-pane -U"
# bind -n M-l if "[ $(tmux display -p '#{pane_current_command}') = vim ]" "send-keys M-l" "select-pane -R"

if !has("gui_running")
    set <M-h>=h
    set <M-j>=j
    set <M-k>=k
    set <M-l>=l
endif

if empty($TMUX)
    noremap <M-h> <scriptcmd>wincmd h<CR>
    noremap <M-j> <scriptcmd>wincmd j<CR>
    noremap <M-k> <scriptcmd>wincmd k<CR>
    noremap <M-l> <scriptcmd>wincmd l<CR>
    inoremap <M-h> <scriptcmd>wincmd h<CR>
    inoremap <M-j> <scriptcmd>wincmd j<CR>
    inoremap <M-k> <scriptcmd>wincmd k<CR>
    inoremap <M-l> <scriptcmd>wincmd l<CR>
    tnoremap <M-h> <scriptcmd>wincmd h<CR>
    tnoremap <M-j> <scriptcmd>wincmd j<CR>
    tnoremap <M-k> <scriptcmd>wincmd k<CR>
    tnoremap <M-l> <scriptcmd>wincmd l<CR>
    finish
endif

var tmuxSocket = split($TMUX, ',')[0]

def TmuxCommand(cmd: string): string
    return trim(system($"tmux -S {tmuxSocket} {cmd}"))
enddef

def TmuxVimNavigate(direction: string)
    var winnr = winnr()
    exe "wincmd" direction
    if winnr == winnr() && TmuxCommand("display-message -p '#{window_zoomed_flag}'") != "1"
        TmuxCommand($'select-pane -{tr(direction, "hjkl", "LDUR")}')
    endif
enddef

noremap <M-h> <scriptcmd>TmuxVimNavigate("h")<CR>
noremap <M-j> <scriptcmd>TmuxVimNavigate("j")<CR>
noremap <M-k> <scriptcmd>TmuxVimNavigate("k")<CR>
noremap <M-l> <scriptcmd>TmuxVimNavigate("l")<CR>
inoremap <M-h> <scriptcmd>TmuxVimNavigate("h")<CR>
inoremap <M-j> <scriptcmd>TmuxVimNavigate("j")<CR>
inoremap <M-k> <scriptcmd>TmuxVimNavigate("k")<CR>
inoremap <M-l> <scriptcmd>TmuxVimNavigate("l")<CR>
tnoremap <M-h> <scriptcmd>TmuxVimNavigate("h")<CR>
tnoremap <M-j> <scriptcmd>TmuxVimNavigate("j")<CR>
tnoremap <M-k> <scriptcmd>TmuxVimNavigate("k")<CR>
tnoremap <M-l> <scriptcmd>TmuxVimNavigate("l")<CR>