From 494d046fb2de078fc3715e806553556dc9a897ae Mon Sep 17 00:00:00 2001 From: Nicholas Ochiel Date: Fri, 17 Nov 2017 22:40:42 +0300 Subject: [PATCH] * 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. --- rc/extra/ranger.kak | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/rc/extra/ranger.kak b/rc/extra/ranger.kak index 4ba2a64f..48eb0c99 100644 --- a/rc/extra/ranger.kak +++ b/rc/extra/ranger.kak @@ -23,6 +23,29 @@ All the optional arguments are forwarded to the ranger utility} \ kak -p $kak_session; \ 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')" + + 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 setsid $kak_opt_termcmd " \ ranger $@ --cmd "'"'" \