* Integrate ranger with GNU Screen.

- Ensure ranger opens with the currently focused client tty if multiple screen clients are connected to the same session.
- Ensure args are passed to ranger correctly.
- Ensure command-line args are passed to ranger correctly. (Only strict long format works e.g. `ranger --cmd="echo foo"`)
- Change the current directory because `screen -X` uses screen's cwd not kakoune's.
- Use heredoc to make escaping and quoting easier to debug and slightly less unpredictable.
- Use ranger's `--choosefiles` option instead of mapping keys and having to do multiple levels of escaping and quoting of args esp. command-line args which were unusable in `screen -X eval`.
- Remove screen region when user quits ranger.
This commit is contained in:
Nicholas Ochiel 2017-11-17 22:40:42 +03:00
parent 908e0c1f8c
commit 494d046fb2

View File

@ -23,6 +23,29 @@ All the optional arguments are forwarded to the ranger utility} \
kak -p $kak_session; \ kak -p $kak_session; \
tmux select-pane -t $kak_client_env_TMUX_PANE'.format(file=fm.thisfile.path)) \ tmux select-pane -t $kak_client_env_TMUX_PANE'.format(file=fm.thisfile.path)) \
if fm.thisfile.is_file else fm.execute_console('move right=1')" if fm.thisfile.is_file else fm.execute_console('move right=1')"
elif [ -n "${STY}" ]; then
script="/tmp/kak-ranger-${kak_client}-${kak_session}.sh"
selections="/tmp/kak-ranger-${kak_client}-${kak_session}.txt"
cat > "$script" << EOF
#! /usr/bin/env sh
cd "$PWD"
ranger --choosefiles="$selections" $@
while read -r f; do
printf %s "evaluate-commands -client '${kak_client}' edit '\"\$f\"'" | kak -p '${kak_session}'
done < "$selections"
screen -X remove
rm -f "$selections" "$script"
EOF
tty="$(ps -o tty ${kak_client_pid} | tail -n 1)"
screen -X eval \
'split -h' \
'focus down' \
"screen sh '$script'" \
< "/dev/$tty"
elif [ -n "$WINDOWID" ]; then elif [ -n "$WINDOWID" ]; then
setsid $kak_opt_termcmd " \ setsid $kak_opt_termcmd " \
ranger $@ --cmd "'"'" \ ranger $@ --cmd "'"'" \