shithub: wiki.9front.org

ref: 45f6dd9f8e21e2e8d6b185d39b2f36098e62b286
dir: /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 p
	    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
	    p=`printf '\e]7;file://%s%s\e\\' "${HOSTNAME%.lan}" "${encoded}"`
	    if [ -n "$TMUX" ]; then
	    	printf "%s" "$p" >`tmux display-message -p '#{client_tty}'`
	    else
	        printf "%s" "$p"
	    fi
	}
	export PROMPT_COMMAND=${PROMPT_COMMAND:+$PROMPT_COMMAND; }osc7_cwd