diff options
Diffstat (limited to 'scripts/tmux_open_filename_in_vim.sh')
-rwxr-xr-x | scripts/tmux_open_filename_in_vim.sh | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/scripts/tmux_open_filename_in_vim.sh b/scripts/tmux_open_filename_in_vim.sh new file mode 100755 index 0000000..6a799e4 --- /dev/null +++ b/scripts/tmux_open_filename_in_vim.sh @@ -0,0 +1,64 @@ +#!/bin/bash +# +# Author: Cody Hiar +# Date: 2017-04-22 +# +# Purpose: The purpose of this script is to accept a file name then find a tmux +# pane that is currently running either vim or neovim and tell that pane to open +# up the file. This script is meant to be used with a fuzzy find such as fzf so +# that you can use an external fuzzy finder but still integrate it with vim +# +# Set options: +# e: Stop script if command fails +# u: Stop script if unset variable is referenced +# x: Debug, print commands as they are executed +# set -eu + +# Immutable globals +readonly ARGS=( "$@" ) +readonly PROGNAME=$(basename "$0") +readonly USAGE=$(cat << EOF +usage: $PROGNAME file_name + +Script that will search for a tmux pane running vim and will tell vim to open a +file specified by the passed in arguement + +OPTIONS: + -h Display help options +EOF +) + +# Function for processing arguments +cmdline() { + while getopts "h" FLAG; do + case "$FLAG" in + h) + echo "$USAGE" + exit 0 + ;; + *) + exit 0 + ;; + esac + done +} + +# Main loop of program +main() { + if [[ -z ${ARGS[0]} ]]; then + exit + fi + cmdline "${ARGS[@]}" + panes=($(tmux list-panes| awk -F: '{ print $1 }')) + for pane in "${panes[@]}"; do + pane_tty=$(tmux display -p -t "$pane" '#{pane_tty}') + ps -o state= -o comm= -t "$pane_tty" \ + | grep -iqE '^[^TXZ ]+ +(\\S+\\/)?g?(view|n?vim?x?)(diff)?$' &> /dev/null + if [[ "$?" == 0 ]]; then + filename="${ARGS[0]}" + tmux send-keys -t "$pane" ":e $filename" Enter + tmux select-pane -t "$pane" + fi + done +} +main |