xref: /freebsd/contrib/less/less-osc8-open.sh (revision fa0dc4f0f96a1b77d4be7bcdbf965897cda14521)
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