Поскольку не только, 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
на правильное имя терминала в скрипте.