
Одной из функций буферов 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
(удалить символ)
Дальнейшее чтение: