Оскільки не тільки, less
але й інші текстові програми, як-от, vim
демонструють ту саму надзвичайно дратівливу особливість, що я роблю, це просто видалити з терміналу можливість підтримувати залучені команди з terminfo
бази даних.
Ці команди є smcup
і rmcup
, які були розроблені, щоб дозволити вмикати і рухатись там, де cup
команда (положення курсора) була дозволена.
Ось функція оболонки, яку я використовував для автоматизації завдання, вона працює принаймні з Solaris і, ймовірно, з більшою кількістю дистрибутивів Linux:
fixterminfo()
{
(
[[ ! -d /tmp/terminfo ]] && { mkdir /tmp/terminfo || return ; }
cd /tmp/terminfo || return
TERM=xterm infocmp > xterm.src.org
sed -e 's/rmcup=[^,]*,//' -e 's/smcup=[^,]*,//' xterm.src.org > xterm.src
if diff xterm.src.org xterm.src
then
echo xterm terminfo already patched
return
fi
TERMINFO=/tmp/terminfo tic xterm.src
if [ -f /usr/share/lib/terminfo/x/xterm ] ; then
XTERM=/usr/share/lib/terminfo/x/xterm
else
if [ -f /lib/terminfo/x/xterm ] ; then
XTERM=/lib/terminfo/x/xterm
else
if [ -f /usr/share/terminfo/x/xterm ] ; then
XTERM=/usr/share/terminfo/x/xterm
else
echo xterm terminfo not found ; return
fi
fi
fi
if [ ! -f ${XTERM}.org ]
then
sudo cp ${XTERM} ${XTERM}.org || return
fi
cat /tmp/terminfo/x/xterm | sudo dd of=${XTERM}
)
}
Якщо ваш термінальний запис не відновлюється xterm
, його слід замінити xterm
правильним ім'ям терміналу в сценарії.