1*fa0dc4f0SXin LI#!/bin/sh 2*fa0dc4f0SXin LI 3*fa0dc4f0SXin LI# Less OSC 8 handler. 4*fa0dc4f0SXin LI 5*fa0dc4f0SXin LIecho() { printf %s\\n "$*"; } 6*fa0dc4f0SXin LI 7*fa0dc4f0SXin LI# Open a link of the form "file://HOST/PATH" or "file:///PATH" 8*fa0dc4f0SXin LIopen_file() { 9*fa0dc4f0SXin LI case $1 in 10*fa0dc4f0SXin LI file:///* | file://localhost/*) 11*fa0dc4f0SXin LI less -- "/${1#file://*/}" 12*fa0dc4f0SXin LI ;; 13*fa0dc4f0SXin LI 14*fa0dc4f0SXin LI file://*/*) 15*fa0dc4f0SXin LI linkhost=${1#file://}; linkhost=${linkhost%%/*} 16*fa0dc4f0SXin LI localhost=${HOSTNAME:-$(bash -c 'printf %s "$HOSTNAME"' || uname -n)} 2>/dev/null 17*fa0dc4f0SXin LI 18*fa0dc4f0SXin LI case $localhost in 19*fa0dc4f0SXin LI */* | '') 20*fa0dc4f0SXin LI echo "unable to detect local hostname: $localhost" 21*fa0dc4f0SXin LI exit 1 22*fa0dc4f0SXin LI ;; 23*fa0dc4f0SXin LI "$linkhost") 24*fa0dc4f0SXin LI less -- "/${1#file://*/}" 25*fa0dc4f0SXin LI ;; 26*fa0dc4f0SXin LI *) 27*fa0dc4f0SXin LI echo "cannot open remote file: $1" 28*fa0dc4f0SXin LI exit 1 29*fa0dc4f0SXin LI ;; 30*fa0dc4f0SXin LI esac 31*fa0dc4f0SXin LI ;; 32*fa0dc4f0SXin LI 33*fa0dc4f0SXin LI *) 34*fa0dc4f0SXin LI echo "invalid file link: $1" 35*fa0dc4f0SXin LI exit 1 36*fa0dc4f0SXin LI ;; 37*fa0dc4f0SXin LI esac 38*fa0dc4f0SXin LI} 39*fa0dc4f0SXin LI 40*fa0dc4f0SXin LI# Open a link of the form "man:NAME" or "man:NAME(SECTION)". 41*fa0dc4f0SXin LIopen_man() { 42*fa0dc4f0SXin LI case $1 in 43*fa0dc4f0SXin LI man:?*\(*\) ) 44*fa0dc4f0SXin LI sect=${1#*\(}; sect=${sect%?} 45*fa0dc4f0SXin LI name=${1#man:}; name=${name%%\(*} 46*fa0dc4f0SXin LI man -- ${sect:+"$sect"} "$name" 47*fa0dc4f0SXin LI ;; 48*fa0dc4f0SXin LI 49*fa0dc4f0SXin LI man:?*) 50*fa0dc4f0SXin LI man -- "${1#man:}" 51*fa0dc4f0SXin LI ;; 52*fa0dc4f0SXin LI 53*fa0dc4f0SXin LI *) 54*fa0dc4f0SXin LI echo "invalid man link: $1" 55*fa0dc4f0SXin LI exit 1 56*fa0dc4f0SXin LI ;; 57*fa0dc4f0SXin LI esac 58*fa0dc4f0SXin LI} 59*fa0dc4f0SXin LI 60*fa0dc4f0SXin LIcase $1 in 61*fa0dc4f0SXin LIfile:*) open_file "$1" ;; 62*fa0dc4f0SXin LIman:*) open_man "$1" ;; 63*fa0dc4f0SXin LI*) echo "unsupported link type: $1"; exit 1 ;; 64*fa0dc4f0SXin LIesac 65