143 lines
4.1 KiB
Bash
Executable File
143 lines
4.1 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
CURRENT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
|
|
|
source "$CURRENT_DIR/scripts/helpers.sh"
|
|
|
|
default_open_key="o"
|
|
open_option="@open"
|
|
|
|
default_open_editor_key="C-o"
|
|
open_editor_option="@open-editor"
|
|
open_editor_override="@open-editor-command"
|
|
|
|
command_exists() {
|
|
local command="$1"
|
|
type "$command" >/dev/null 2>&1
|
|
}
|
|
|
|
is_osx() {
|
|
local platform=$(uname)
|
|
[ "$platform" == "Darwin" ]
|
|
}
|
|
|
|
is_cygwin() {
|
|
[[ "$(uname)" =~ CYGWIN ]]
|
|
}
|
|
|
|
get_editor_from_the_env_var() {
|
|
if [ -z $EDITOR ]; then
|
|
# $EDITOR not set, fallback
|
|
echo "vi"
|
|
else
|
|
echo "$EDITOR"
|
|
fi
|
|
}
|
|
|
|
command_generator() {
|
|
local command_string="$1"
|
|
echo "xargs -I {} tmux run-shell -b 'cd #{pane_current_path}; $command_string \"{}\" > /dev/null'"
|
|
}
|
|
|
|
search_command_generator() {
|
|
local command_string="$1"
|
|
local engine="$2"
|
|
|
|
echo "xargs -I {} tmux run-shell -b 'cd #{pane_current_path}; $command_string $engine\"{}\" > /dev/null'"
|
|
}
|
|
|
|
generate_open_command() {
|
|
if is_osx; then
|
|
echo "$(command_generator "open")"
|
|
elif is_cygwin; then
|
|
echo "$(command_generator "cygstart")"
|
|
elif command_exists "xdg-open"; then
|
|
echo "$(command_generator "xdg-open")"
|
|
else
|
|
# error command for Linux machines when 'xdg-open' not installed
|
|
"$CURRENT_DIR/scripts/tmux_open_error_message.sh" "xdg-open"
|
|
fi
|
|
}
|
|
|
|
generate_open_search_command() {
|
|
local engine="$1"
|
|
if is_osx; then
|
|
echo "$(search_command_generator "open" "$engine")"
|
|
elif is_cygwin; then
|
|
echo "$(command_generator "cygstart")"
|
|
elif command_exists "xdg-open"; then
|
|
echo "$(search_command_generator "xdg-open" "$engine")"
|
|
else
|
|
# error command for Linux machines when 'xdg-open' not installed
|
|
"$CURRENT_DIR/scripts/tmux_open_error_message.sh" "xdg-open"
|
|
fi
|
|
}
|
|
|
|
# 1. write a command to the terminal, example: 'vim -- some_file.txt'
|
|
# 2. invoke the command by pressing enter/C-m
|
|
generate_editor_command() {
|
|
local environment_editor=$(get_editor_from_the_env_var)
|
|
local editor=$(get_tmux_option "$open_editor_override" "$environment_editor")
|
|
# vim freezes terminal unless there's the '--' argument. Other editors seem
|
|
# to be fine with it (textmate [mate], light table [table]).
|
|
echo "xargs -I {} tmux send-keys '$editor -- \"{}\"'; tmux send-keys 'C-m'"
|
|
}
|
|
|
|
set_copy_mode_open_bindings() {
|
|
local open_command="$(generate_open_command)"
|
|
local key_bindings=$(get_tmux_option "$open_option" "$default_open_key")
|
|
local key
|
|
for key in $key_bindings; do
|
|
if tmux-is-at-least 2.4; then
|
|
tmux bind-key -T copy-mode-vi "$key" send-keys -X copy-pipe-and-cancel "$open_command"
|
|
tmux bind-key -T copy-mode "$key" send-keys -X copy-pipe-and-cancel "$open_command"
|
|
else
|
|
tmux bind-key -t vi-copy "$key" copy-pipe "$open_command"
|
|
tmux bind-key -t emacs-copy "$key" copy-pipe "$open_command"
|
|
fi
|
|
done
|
|
}
|
|
|
|
set_copy_mode_open_editor_bindings() {
|
|
local editor_command="$(generate_editor_command)"
|
|
local key_bindings=$(get_tmux_option "$open_editor_option" "$default_open_editor_key")
|
|
local key
|
|
for key in $key_bindings; do
|
|
if tmux-is-at-least 2.4; then
|
|
tmux bind-key -T copy-mode-vi "$key" send-keys -X copy-pipe-and-cancel "$editor_command"
|
|
tmux bind-key -T copy-mode "$key" send-keys -X copy-pipe-and-cancel "$editor_command"
|
|
else
|
|
tmux bind-key -t vi-copy "$key" copy-pipe "$editor_command"
|
|
tmux bind-key -t emacs-copy "$key" copy-pipe "$editor_command"
|
|
fi
|
|
done
|
|
}
|
|
|
|
set_copy_mode_open_search_bindings() {
|
|
local stored_engine_vars="$(stored_engine_vars)"
|
|
local engine_var
|
|
local engine
|
|
local key
|
|
|
|
for engine_var in $stored_engine_vars; do
|
|
engine="$(get_engine "$engine_var")"
|
|
|
|
if tmux-is-at-least 2.4; then
|
|
tmux bind-key -T copy-mode-vi "$engine_var" send-keys -X copy-pipe-and-cancel "$(generate_open_search_command "$engine")"
|
|
tmux bind-key -T copy-mode "$engine_var" send-keys -X copy-pipe-and-cancel "$(generate_open_search_command "$engine")"
|
|
else
|
|
tmux bind-key -t vi-copy "$engine_var" copy-pipe "$(generate_open_search_command "$engine")"
|
|
tmux bind-key -t emacs-copy "$engine_var" copy-pipe "$(generate_open_search_command "$engine")"
|
|
fi
|
|
|
|
done
|
|
}
|
|
|
|
main() {
|
|
set_copy_mode_open_bindings
|
|
set_copy_mode_open_editor_bindings
|
|
set_copy_mode_open_search_bindings
|
|
}
|
|
|
|
main
|