shithub: wiki.9front.org

ref: 1ef9a80c4144dfb4848fa89af99d2010975cbf3e
dir: wiki.9front.org/plumber-vt.md

View raw version
# Plumber + vt: accessing remote Unix files

It's possible to use `OSC 7` extension for easier plumbing of paths displayed in vt(1).
First, for each machine you're planning to ssh+vt into, set up sshfs(4). Example:

	sshfs -s myhost -r / myhost
	plumb 'Local mount -c /srv/myhost /n/myhost'

The name in "/n/myhost" path MUST be the hostname of the remote machine - run `hostname` there to check.

For the remote shell to start sending `OSC 7` messages, follow
[these instructions](https://codeberg.org/dnkl/foot/wiki#user-content-spawning-new-terminal-instances-in-the-current-working-directory). You might want to replace `${HOSTNAME}` with `${HOSTNAME%.lan}` to get rid of `.lan` suffix, depending on how your hosts are shown in `/n/...`.

If you intend to use `tmux`, it's required to pass `OSC 7` message to `vt` explicitely, by adding the following at the end of `osc7_cwd()`:

	if [ -n "$TMUX" ]; then
		printf '\e]7;file://%s%s\e\\' "${HOSTNAME%.lan}" "${encoded}" > `tmux display-message -p '#{client_tty}'`
	fi

The full (confirmed to be working) strip from `.bash_profile`:

	osc7_cwd() {
	    local strlen=${#PWD}
	    local encoded=""
	    local pos c o
	    for (( pos=0; pos<strlen; pos++ )); do
	        c=${PWD:$pos:1}
	        case "$c" in
	            [-/:_.!\'\(\)~[:alnum:]] ) o="${c}" ;;
	            * ) printf -v o '%%%02X' "'${c}" ;;
	        esac
	        encoded+="${o}"
	    done
	    printf '\e]7;file://%s%s\e\\' "${HOSTNAME%.lan}" "${encoded}"
	    if [ -n "$TMUX" ]; then
	        printf '\e]7;file://%s%s\e\\' "${HOSTNAME%.lan}" "${encoded}" > `tmux display-message -p '#{client_tty}'`
	    fi
	}
	export PROMPT_COMMAND=${PROMPT_COMMAND:+$PROMPT_COMMAND; }osc7_cwd