перенос строки прерывисто прерывается (R, tmux, readline)

682
Patrick B.

Я часто поддерживаю несколько интерактивных сеансов командной строки R на своем рабочем столе, связанных с vim с помощью vim-r-plugin (что-то вроде ESS). Я использую tmux для удаленного подключения к ним, а также потому, что от этого зависит vim-r-plugin. Однако иногда при удаленном соединении длинные строки в приглашении R не будут правильно переноситься: вместо того, чтобы разбивать их на несколько строк, курсор просто начнет перезаписывать материал в начале строки. Расположение обертки (не обязательно) совпадает с краем моего текущего терминала. Все команды работают должным образом, так что это просто проблема с отображением.

Другие подробности, которые могут помочь в диагностике проблемы: Backspace после начала строки будет фактически возвращаться назад на строку, поэтому несвязанный материал в предыдущей строке начнет исчезать / перезаписываться. Клавиши со стрелками, как правило, «оборачиваются» вокруг конца этой строки, но будут выключены на одну единицу: движение влево за начало строки приводит к перемещению курсора вправо от предыдущей (не связанной) строки. Кроме того, при переходе назад по истории команд все слишком длинные объекты будут перенесены таким же неправильным способом, а последующий переход по страницам переместит курсор вверх на строку.

Изменение размера терминала, чтобы быть более узким, чем там, где происходит разрыв, вызывает дальнейшие проблемы. Похоже, что текст переносится на следующую строку правильно, но все еще есть странные сбои: если я вернусь и отредактирую верхнюю строку, а затем попытаюсь перейти к нижней строке, курсор больше не будет переноситься за правую часть первого линия. Пролистывание истории выглядит еще более странным: длинные команды разбиты на несколько строк, но символы отсутствуют в середине, и в нижней строке все еще есть перезапись. Как будто два типа обертки происходят одновременно. Редактирование верхней строки вызывает непредсказуемые «перерисовки» обновлений, которые делают команду нечитаемой.

$ TERM - экран 256 цветов. Я использую Terminator в качестве эмулятора терминала и bash в качестве оболочки. Версия R 3.3.1.

Вещи, которые я пробовал: отправка "detach-client -a" и "set агрессивное изменение размера" в tmux; изменяя переменную PS1 в моем .bashrc. Нет эффекта. Выход и повторный вход в сеанс R работает, но это неприятно, потому что у меня обычно есть большие рабочие пространства, для сохранения и восстановления которых требуются минуты.

Я почти уверен, что R использует GNU readline для интерактивных сеансов командной строки, поэтому я добавил это и в качестве тега.

Какие-либо исправления / обходные пути? Спасибо всем!

1

1 ответ на вопрос

1
rcs

Это было исправлено / улучшено в R 3.3.2. Смотрите соответствующую часть файла NEWS и сообщенную ошибку :

УСТАНОВКА И ВКЛЮЧЕННОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ:

* Versions of the readline library >= 6.3 had been changed so that terminal window resizes were not signalled to readline: code has been added using a explicit signal handler to work around that (when R is compiled against readline >= 6.3). (PR#16604) 
Это кажется, чтобы решить проблему. Спасибо! Patrick B. 7 лет назад 0

Похожие вопросы