центральная текущая линия в эмуляторе терминала

центральная текущая линия в эмуляторе терминала

Одной из функций буферов emacs (даже ansi-term, shell, и eshell), которая мне действительно нравится, является возможность C-l«центрировать» текущую строку в терминале, так что верхняя половина экрана по-прежнему содержит часть предыдущего вывода.

Похоже, что стандартный (не уверен, как называется стандарт) терминал переместит текущую строку в верхнюю часть окна при C-lнажатии. Есть ли общий способ переместить текущую строку в центр экрана? Если нет, есть ли способ сделать это специально для iterm2, терминала или какого-то эмулятора терминала, который был портирован на OS X?

решение1

Большинство эмуляторов терминала могут «сделать» это, но это требует некоторой работы:

  • Предположим, что строка, которую вы хотите переместить, находится в нижней части экрана.
  • Если вы хотите переместить эту строку вверх, вы прокручиваете (или «индексируете») строку, отправив управляющую последовательность в нижнюю строку и (считая!) передвигаете строку вверх на то количество строк, которое вы хотите прокрутить.
  • Прокрутка перемещает все строки на экране. Вы можете ограничить количество перемещаемых строк, установив область прокрутки. Сделав это, вы можете не допустить исчезновения строк в верхней половине экрана. Но линии между исходным положением вашей строки и ее целью исчезнут.

Это только перемещает строку вверх. Вы можете перемещать строку вниз, аналогично, используя "обратную индексацию". Эти операции, кстати, не входят встандартныйECMA-48, но находятся в чем-то похожем на xterm (на основе DEC vt100). ansi-termподдерживает прокрутку/индексацию.

Наконец, это просто вверх или вниз. Чтобы переместить строку влево/вправо, вы должны отправить escape-последовательности для вставки или удаления символов, пока курсор находится в начале строки.

Эти последовательности выхода задокументированы на terminfo(5)странице руководства. Я уже упоминал их:

csr(установить область прокрутки)
ind(индекс)
rin(обратный индекс)
cup(позиция курсора)
ich(вставить символ)
dch(удалить символ)

Дальнейшее чтение:

Связанный контент