пользовательский ввод и ESS

Когда вы просите ESS оценить следующее из буфера (C-c, C-b или подобное)

par(ask=TRUE)
plot(1,1)
plot(2,1)

Интерпретатор переходит в бесконечный цикл, потому что ESS запускает сеанс R с аргументом --no-readline. Цикл можно разорвать с помощью C-g, но есть ли способ заставить интерпретатор действительно запрашивать пользовательский ввод?


person fgregg    schedule 04.12.2010    source источник


Ответы (2)


Решение состоит в том, чтобы отредактировать ess-r-d.el и удалить жестко запрограммированную опцию --no-runtime, заданную для R, это строка 127 последней реализации.

Сдача

  (let* ((r-always-arg
      (if (or ess-microsoft-p (eq system-type 'cygwin))
          "--ess "
        "--no-readline "))

to

  (let* ((r-always-arg
      (if (or ess-microsoft-p (eq system-type 'cygwin))
          "--ess "))

Если есть скомпилированная версия, вам нужно скомпилировать .el для создания и замены двоичного файла .elc.

Файл может быть (расположение каталога зависит от вашей ОС)

  • в каталоге site-lisp. Отредактируйте файл .el в emacs (^X^F), затем выполните M-x byte-compile-file, чтобы сгенерировать файл .elc.

  • если вы установили из всего исходного пакета zip/tar, в каталоге lisp. В этом случае после изменения выполните make, а затем make install.

Конечно, вам нужно иметь write доступ к файлам .el и .elc.

Если вы не чувствуете себя комфортно при компиляции файла .el, вы можете просто удалить его (.elc) и использовать только версию .el (должна быть только небольшая разница в производительности).

person Breaking not so bad    schedule 08.12.2010
comment
Хорошо сказано. И вы знаете, что сказали бы хвастуны на stat.ethz.ch/mailman/listinfo/ess-help, если бы ОП спросил их, как это исправить? Они бы сказали, что вам не следует использовать readline в первую очередь, встроенная функциональность ESS лучше, бла-бла-бла. Потому что, конечно, они лучше самого пользователя знают, что лучше для пользователя. Спасибо за документирование этого патча вместо того, чтобы читать лекции ОП о том, что они должны делать. - person bokov; 17.04.2012

(Стратегии взяты из Google и RSiteSearches):

Видите ли вы подсказку: «нажмите «Возврат»» в любом из окон вашего сеанса? Если да ... попал .

Если нет, то попробуйте щелкнуть в окне графика.

И если это не удастся, вы должны вернуть контроль с помощью c-G.

Изменить: еще одна стратегия, по общему признанию, не решающая проблему ESS-неинтерактивности: если вы хотите удерживать пользовательский ввод, можно использовать readLines:

input=file("stdin")
print(readLines(input,1))
person IRTFM    schedule 04.12.2010
comment
Приглашение появляется только ПОСЛЕ нажатия c-G, и c-G не просто выходит из цикла, ожидающего ввода пользователя, но и останавливает выполнение оставшегося скрипта. - person fgregg; 06.12.2010
comment
Итак, чтобы было ясно, появляется окно графика, и, несмотря на то, что вы щелкнули в окне, чтобы сфокусироваться на нем, вы не видите подсказку? - person IRTFM; 06.12.2010
comment
Ты совершенно прав. Сценарий, как у меня был раньше, только с одним сюжетом, выполненным без проблем, когда я начал в чистом сеансе R. Я добавил второй сюжет к исходному вопросу, чтобы проблема, которую я описываю, воспроизводилась. - person fgregg; 06.12.2010
comment
Я предлагаю вам также задать вопрос в списке рассылки ESS: stat.ethz.ch/mailman/listinfo /ess-помощь - person IRTFM; 07.12.2010