sensible-utils/select-editor.in

80 lines
2.4 KiB
Bash

#!/bin/sh
# To generate localization information, run:
# xgettext -o - -L Shell select-editor
# if no gettext it will fallback to gettext on /usr/share/sensible-utils/bin
# see #728612
PATH=$PATH:/usr/sbin:@binpkgdatadir@
# EASIEST editor
EASIEST="/bin/nano"
# Ensure that $HOME/.selected_editor is writeable
touch $HOME/.selected_editor || exit 1
sorted_list_of_editors() {
update-alternatives --query editor | while read emptyline; do
# skip the first entry (header) as well as the rest of processed entries
if [ -z "$emptyline" ]; then continue; fi
# extract the two interesting fields
local ALTERNATIVE=''
local PRIORITY=''
while read field value; do
case "${field}" in
'Alternative:') ALTERNATIVE="${value}";;
'Priority:') PRIORITY="${value}";;
esac
if [ -n "$ALTERNATIVE" ] && [ -n "$PRIORITY" ]; then break; fi
done
if [ -z "$ALTERNATIVE" ] || [ -z "$PRIORITY" ]; then continue; fi
echo "${PRIORITY}:${ALTERNATIVE}"
done | sort -n -r | cut -d':' -f 2-
}
editors=`update-alternatives --list editor | wc -l`
if [ $editors -gt 1 ]; then
# fix simple to 1 see #777168
simple=1
echo
echo "`gettext 'Select an editor. To change later, run'`" "'select-editor'."
i=0
editors=`sorted_list_of_editors`
for e in $editors; do
i=`expr $i + 1`
desc=
if [ $e = "$EASIEST" ]; then
desc=" <---- ` gettext 'easiest'`"
simple=$i
fi
echo " $i. $e$desc"
done
echo ""
selected=x
while /bin/true; do
if [ -z "$selected" -a ! -z "$simple" ]; then
selected="$simple"
elif ! test $selected -gt 0 2>/dev/null; then
echo -n "$(gettext 'Choose') 1-$i [$simple]: "
read -r selected
elif ! test $selected -le $i 2>/dev/null; then
echo -n "$(gettext 'Choose') 1-$i [$simple]: "
read -r selected
else
break
fi
done
i=0
for e in $editors; do
i=`expr $i + 1`
if [ $i -eq $selected ]; then
echo "# Generated by /usr/bin/select-editor" > $HOME/.selected_editor
echo "SELECTED_EDITOR=\"$e\"" >> $HOME/.selected_editor && exit 0
fi
done
fi
exit 1