66 lines
1.5 KiB
Bash
Executable File
66 lines
1.5 KiB
Bash
Executable File
#!/bin/sh
|
|
# Copyright 2007 Jari Aalto;
|
|
# Copyright 2019-2022 Bastien Roucariès
|
|
# Copyright 2022 Richard Lewis
|
|
# Released under GNU GPL v2 or any later version
|
|
PATH="$PATH:/usr/share/sensible-utils/bin"
|
|
|
|
program="$(realpath "$(command -v "$0")")"
|
|
|
|
Try()
|
|
{
|
|
$candidate "$@"
|
|
ret=$?
|
|
[ "$ret" -ne 126 ] && [ "$ret" -ne 127 ] && exit "$ret"
|
|
}
|
|
|
|
TryEnv()
|
|
{
|
|
# global $candidate
|
|
[ -z "$candidate" ] && return
|
|
# Prevent recursive loops, where environment variables are set to this script
|
|
[ x$(realpath "$(command -v "$candidate" || true)" || true) = x"$program" ] && return
|
|
# interpret like environ (7) man page. Do not use eval in order to not leak variables
|
|
sh -c "$candidate \"\$@\"" EDITOR "$@"
|
|
ret=$?
|
|
# Operating system command not found
|
|
[ "$ret" -ne 126 ] && [ "$ret" -ne 127 ] && exit "$ret"
|
|
}
|
|
|
|
|
|
# work around for #991982
|
|
nano ()
|
|
{
|
|
if [ -z "$TERM" ]; then
|
|
return 126
|
|
else
|
|
command nano "$@"
|
|
fi
|
|
}
|
|
|
|
for candidate in "$VISUAL" "$EDITOR" "$SENSIBLE_EDITOR" "$SELECTED_EDITOR"; do
|
|
TryEnv "$@"
|
|
done
|
|
|
|
# fix #987675
|
|
if [ -n "$HOME" ]; then
|
|
if [ -r ~/.selected_editor ]; then
|
|
. ~/.selected_editor 2>/dev/null
|
|
elif [ -z "$EDITOR" ] && [ -z "$SELECTED_EDITOR" ] && [ -t 0 ]; then
|
|
select-editor && . ~/.selected_editor 2>/dev/null
|
|
fi
|
|
fi
|
|
|
|
for candidate in "$EDITOR" "$SELECTED_EDITOR"; do
|
|
TryEnv "$@"
|
|
done
|
|
|
|
for candidate in editor nano nano-tiny vi; do
|
|
Try "$@"
|
|
done
|
|
|
|
echo "Couldn't find an editor!" 1>&2
|
|
echo 'Set the $EDITOR environment variable to your desired editor.' 1>&2
|
|
exit 1
|
|
|