2010-12-04 3 views
2

당신 ESS는 인수와 함께 R 세션을 시작하기 때문에 버퍼 (참조 CB를, 또는 유사한)사용자 입력 ESS

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

인터프리터가 무한 루프 상태에서 다음을 평가하는 ESS 요청할 때 --no-readline. 루프는 C-g로 깨질 수 있지만 실제로 사용자 입력을 요청하는 인터프리터를 얻을 수있는 방법이 있습니까?

이 프롬프트를 볼 수 있나요 : "반환 히트 '세션 창 하나에

답변

0

(전략 구글과 RSiteSearches에서 수집)? 그렇다면 ... 맞았다.

없는 경우, 플롯 창에서 클릭하십시오.

그리고 실패 할 경우, 당신은 C-G와 컨트롤을 다시 받아야합니다.

편집 : 또 다른 전략은 인정 하듯 ESS-이 아닌 상호 작용의 문제를 해결하지 :

input=file("stdin") 
print(readLines(input,1)) 
+0

은 그냥 사용자 입력을 기다리는 루프의 탈옥하지 않는 C-G 및 c-G 타격 후 나타나는 프롬프트, 그것은 나머지 스크립트의 실행을 중지합니다. – fgregg

+1

그래서 명확하게 말하면 플롯 창이 나타나고 창을 클릭해도 포커스를 얻지 만 프롬프트가 표시되지 않습니까? –

+0

당신은 맞습니다.내가 깨끗한 R 세션에서 시작했을 때 문제없이 실행 된 한 줄의 스크립트로 이전과 같은 스크립트. 원래 질문에 두 번째 음모를 추가하여 설명하는 문제를 재현 할 수 있도록했습니다. – fgregg

1

해결책이 ess-r-d.el을 편집하는 것입니다 : 당신이 사용자 입력을 잡고 싶은 경우에, readlines도 사용할 수 있습니다 R에게 주어진 하드 코딩 --no-runtime 옵션을 제거, 그것은 최신 구현의 라인 127입니다.

변경

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

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

컴파일 된 버전이있는 경우

, 당신은 생성하고 바이너리 .elc 파일을 대체 할 .el을 컴파일해야합니다.

파일은 site-lisp 디렉토리에

  • (디렉토리의 위치는 OS에 따라 다름) 될 수있다. 이맥스에서 .el 파일을 (^ X^F) 편집 후 .elc를 생성하는 M-x byte-compile-file을한다. 당신이 lisp 디렉토리에 전체 우편/타르 소스 패키지에서 설치 한 경우

  • . 이 경우 변경 후 make 다음에 make install을 입력하십시오.

당신은 .el.elc 파일에 write 액세스 권한이 물론 필요합니다. 당신이 .el 파일의 편집과 편안하지 않으면

, 당신은 단순히 (.elc)를 제거하고 (단지 약간의 성능 차이가 있어야한다)만을 .el 버전을 사용할 수 있습니다.

+0

글쎄. 그리고 당신은 stat.ethz.ch/mailman/listinfo/ess-help의 블라하드가 OP가 어떻게이 문제를 해결할 것인지 물어 본다면 무엇을 말했 을까요? 그들은 "처음부터 readline을 사용하면 안되며 내장 된 ESS 기능이 더 좋을 것입니다. 물론 그들은 사용자보다 사용자에게 가장 좋은 것이 무엇인지 잘 알고 있습니다. 이 패치를 문서화 해 주셔서 감사합니다. OP에 그들이해야 할 일에 대해 강연하는 대신에. – f1r3br4nd