Можно ли написать на предыдущей строке? - PullRequest
5 голосов
/ 23 декабря 2011

Я использую R и хочу написать текст, который был помещен на консоль при помощи cat.Это легко сделать, если текст находится в текущей строке, используя символ возврата на одну позицию (\ b).Пример:

> cat("A cat says ruff\b\b\b\bmeow")
A cat says meow> 

Однако, если есть разрыв строки, я не знаю, как вернуться к предыдущей строке.Использование cat с символом возврата на задний план, похоже, не отменяет разрыв строки.

> cat("A cat says ruff\n\b\b\b\b\bmeow")
A cat says ruff
meow> 

В качестве альтернативы, если есть пакет, который позволяет вам выделить раздел консоли и просто изменить содержимое внутри него, что также будет работать для меня.Я никогда не использовал ncurses в linux напрямую, но, насколько я понимаю, я хочу иметь некоторую функциональность, аналогичную той, которую предоставляет ncurses.Спасибо за ваше время!

Редактировать: Я добавлю, что мне не обязательно просто изменять только определенный раздел консоли - если единственное решение - это выделить всю консоль, которая будет хорошочто я пытаюсь сделать.

Редактировать 2: Было предоставлено решение для консоли tty.Теперь меня интересует, возможно ли это сделать с помощью RGui в Windows.

Ответы [ 2 ]

5 голосов
/ 24 декабря 2011

Вы просто не можете этого сделать.В особом случае вывода tty вы можете использовать escape-последовательности, как показано выше, но это всего лишь побочный эффект этого конкретного (редкого) случая (и поведение фактически не определено для R).Ни один из обычных графических интерфейсов R не поддерживает редактирование, кроме как с предопределенными последовательностями, задокументированными в R (по существу, просто \b и \r), которые не будут выходить за пределы последней строки.

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

4 голосов
/ 23 декабря 2011

try cat("hello world\033[A") или cat("hello world\033[nA"), где n - количество строк, которые вы хотите увеличить. Это последовательности vt100 для курсора вверх.

http://ascii -table.com / ANSI-спусковая последовательность-VT-100.php

например. вот что произошло на моем экране

>          hello again>
>
> cat("hello world\033[3Ahello again")
hello world

Вы правы, считая, что что-то вроде ncurses было бы предпочтительнее. Он разработан для более высокого уровня termio, который, в свою очередь, предназначен для более высокого уровня, чем вывод управляющих последовательностей, подобных этой. Я не знаю, есть ли у R пакеты для них.

Может быть, вы можете описать, почему вы хотите это сделать? Там могут быть совершенно разные варианты, которые вы не рассматривали.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...