fish-shell/tests/test_functions/isolated-tmux-start.fish
Johannes Altmanninger c155acd004 Fix tmux-multiline-prompt test with EDITOR=vim
This test does "isolated-tmux send-keys Escape" to exit copy mode. When
EDITOR contains "vi", tmux will use Vi keybindings where Escape does
something else ("q" would exit copy mode).

Tests want to have predictable behavior so let's declare the default
emacs key bindings unconditionally.

Fixes #10812
2024-10-27 05:03:30 +01:00

54 lines
1.9 KiB
Fish

function isolated-tmux-start
set -l tmpdir (mktemp -d)
cd $tmpdir
begin
echo 'set -g mode-keys emacs'
# macOS lacks the tmux-256color terminfo, use screen-256color instead.
if test (uname) = Darwin
echo 'set -g default-terminal "screen-256color"'
end
end >./.tmux.conf
function isolated-tmux --inherit-variable tmpdir
# tmux can't handle session sockets in paths that are too long, and macOS has a very long
# $TMPDIR, so use a relative path - except macOS doesn't have `realpath --relative-to`...
# Luckily, we don't need to call tmux from other directories, so just make sure no one
# does by accident.
if test $PWD != $tmpdir
echo "error: isolated-tmux must always be run from the same directory." >&2
return 1
end
tmux -S .tmux-socket -f .tmux.conf $argv
end
function isolated-tmux-cleanup --on-event fish_exit --inherit-variable tmpdir
isolated-tmux kill-server
rm -r $tmpdir
end
function tmux-sleep
set -q CI && sleep 1
or sleep 0.3
end
set -l fish (status fish-path)
isolated-tmux new-session -x 80 -y 10 -d $fish -C '
# This is similar to "tests/interactive.config".
function fish_greeting; end
function fish_prompt; printf "prompt $status_generation> "; end
# No autosuggestion from older history.
set fish_history ""
' $isolated_tmux_fish_extra_args
# Set the correct permissions for the newly created socket to allow future connections.
# This is required at least under WSL or else each invocation will return a permissions error.
chmod 777 .tmux-socket
# Loop a bit, until we get an initial prompt.
for i in (seq 25)
if string match -q '*prompt*' -- (isolated-tmux capture-pane -p)
break
end
sleep .2
end
end