Горизонтальная прокрутка в терминале

12

Таким образом, я считаю, что уже 2 вопроса по этому вопросу. Все они имеют отношение tail -fи, следовательно, люди дают касательный ответ «меньше пользуйтесь».

Мне это нужно для всего, для каждой команды и т. Д. Проблема в том, что мне нужно запускать много консольных окон, и даже при наличии нескольких мониторов их все равно приходится сокращать. Как следствие, почти каждый вывод обрабатывается переносом строк и неудобно читать.

Одно из предложенных решений echo -ne '\e[?7l', которое работает, несколько. Проблема сейчас, есть ли способ получить полосы прокрутки на консоли?

Ubuntu 12.10, Terminal

srcspider
источник
В качестве примера (в ответ на все комментарии «Терминалы работают не так»!) Я бы указал, что консоль Ubuntu для Windows поддерживает эту функцию. Такие приложения, как lsи mceditпрекрасно работают в нем, потому что ширина экрана и буфера ширина обрабатываются отдельно.
CZ

Ответы:

10

То, что вы спрашиваете, это терминал бесконечной ширины, часть которого отображается. Дело не в том, как традиционно работают терминалы, и как приложения ожидают их работы.

Например, если терминал имеет бесконечную ширину, как должны работать визуальные приложения, когда они хотят что-то отобразить в середине экрана?

Что-то подходящее, что вы можете сделать, это использовать GNU screen(вы должны иметь возможность присоединять сеанс экрана от нескольких терминалов разных размеров, чтобы экран знал, как отобразить маленькое окно большего терминала) и установить screenширину окна на что-то очень большие, а затем обманывать визуальные приложения, думая, что ширина экрана является оригинальной.

Как (внутри screen)

c=$COLUMNS # assuming your shell has that variable
screen -X width -w 1000
stty cols "$c"

Некоторые визуальные приложения будут работать нормально, некоторые не очень хорошо (для установки, когда они делают относительное позиционирование или когда они зависят от переноса терминала). vimкажется, работает нормально.

Затем для прокрутки и копировать вставить данные, единственным вариантом является использование screen«s копировать режим. ( <prefix>]) и перемещайте курсор (см. info -f screen -n Movementперемещение в режиме копирования ).

tmux может иметь аналогичные возможности.

Этот terminatorэмулятор терминала (на основе Java), который не terminatorвходит в Ubuntu, также делает это с бесконечной шириной терминала:

  • строки никогда не оборачиваются
  • визуальные приложения говорят, что ширина экрана - это то, что умещается в окне, а не бесконечность.
  • это также будет работать лучше, чем screenоснованное выше решение в том смысле, что его запись terminfo утверждает, что не выполняет перенос строки, поэтому приложения знают об этом, и BS в начале строки не перемещается в конец предыдущей строки.
Стефан Шазелас
источник
Я уже в графической среде, поэтому, если я хочу открыть файл в визуальном редакторе, я могу просто запустить графический интерфейс из терминала. В любом случае их легче скопировать, чем в терминал, поскольку вы не можете просто перетащить выделение блока в терминале без его обрезания. Запуск screen -X width -w 1000возвращается No screen session found., есть идеи?
srcspider
@srcspider Как я уже сказал, вам нужно сделать это внутри screen. Начните screenсначала.
Стефан Шазелас
Окей, я думаю, я вас сейчас понимаю, в основном я должен бежатьscreen -X width -w 1000 <mycommand>
srcspider
1
@srcspider. № screen- терминальный эмулятор терминала. Поэтому вам нужно запустить его сначала так, как вам нужно, xtermили gnome-terminalсначала, запустив screenкоманду. Затем, внутри этого нового эмулятора терминала, вы запускаете эту screen -Xкоманду, чтобы указать screenизменить ширину окна. Смотрите также мой отредактированный ответ для terminatorэмулятора, который я подозреваю, вы предпочтете.
Стефан Шазелас
Спасибо! Даже если я каким-то образом не заставляю их работать, по крайней мере, теперь я знаю, почему я не могу заставить их так работать.
srcspider
6

Хотя Emacs является в первую очередь редактором и IDE¹, он вполне соответствует вашей проблеме. Вы можете запустить программу в окне Emacs, и Emacs отобразит ее в немом терминале бесконечной ширины и высоты. Если курсор находится в конце буфера, окно прокручивается по мере того, как программа выводит данные; если вы перемещаете курсор, окно будет оставаться на месте по мере роста выходных данных.

Введите M-x shell RET(т.е. Alt+ x shell Return), чтобы запустить оболочку в буфере Emacs. Введите C-u M-x shell RETили, M-1 M-x shell RETчтобы запустить другую оболочку. Вы можете запустить программу в каждой оболочке и расположить буферы в нескольких окнах по своему желанию.

Sometimes Иногда говорят, что это лучшая ОС, чем редактор, но только люди, которые ею не пользуются - это просто шутка.

Жиль "ТАК - перестань быть злым"
источник