Изменить текст уже в терминале - PullRequest
3 голосов
/ 25 марта 2019

Есть ли способ изменить текст, уже находящийся в терминале, но в отличие от простого удаления индикатора выполнения с помощью \r, путем полного изменения текста

Е.Г.

user@machine$ grep -R 'mystuff' .
result1
result2
result3
user@machine$ 

используя стрелки, например, переместить «виртуальный» курсор (|)

user@machine$ grep -R 'mystuff' .
|result1
result2
result3
user@machine$ 

и, самое главное, без очистки терминала?

И нет, это не дубликат Изменение текста в терминале , потому что он запрашивает другой вид манипуляции с текстом, в то время как описание другого вопроса специально запрашивает пример индикатора выполнения.

Ответы [ 2 ]

4 голосов
/ 25 марта 2019

Вы можете использовать escape-последовательности для выполнения различных действий на терминале linux.Вы можете узнать об этом из следующих ссылок:

Управление терминалом напрямую с помощью escape-последовательностей очень сложно, потому что вы должны иметь дело со всеми видами пограничных случаев и побочных эффектов, в зависимости от фактического содержимого терминала итип текста, который вы отображаете на нем (ASCII, UTF-8 или другие экзотические варианты ...)

Ваш вариант использования делает его еще более сложным, так как вы должны сначала определить содержимое терминала, созданного несвязанными командаминапример, grep, но также в зависимости от конкретной ширины и высоты терминала, приглашения оболочки и т. д.

Как соавтор и сопровождающий qemacs , я могу рассказать вам, какбольшая часть полного кошмара это было, чтобы заставить буфер процесса вести себя правильно, обрабатывая вывод оболочки и программ, а также ввод данных пользователем прозрачным образом, в то же времявремя сделать все это содержимое свободно редактируемым в буферах и окнах редактора.Вы можете посмотреть исходные файлы tty.c и shell.c , если вы не слабонервны.

Поэтому я призываю вас пересмотреть свою проблему сдругой угол:

  • Чего вы пытаетесь достичь?
  • Можете ли вы сделать это, отфильтровав выходные данные команд?
  • Можете ли вы сделать это, создав псевдонимы оболочкиили сценарии оболочки, которые будут обрабатывать вывод команд?
  • Можете ли вы использовать emacs, qemacs или какую-либо другую интегрированную среду оболочки с поддержкой для достижения желаемой функциональности?
0 голосов
/ 25 марта 2019

Да, вы можете использовать escape-последовательности ANSI для перемещения по терминалу.

ПРИМЕЧАНИЕ: работает и в Windows, если включена поддержка ANSI.

...