2012-10-19 1 views
1

Cygwin bash 3.2.51에서 W32 GNU Emacs 24.1.50.1을 사용하고 있습니다. 나는이 조합이 매우 성가신 것을 안다. (EmacsWikiCygwin list을 보라). 그러나 지금 해결하고 싶은 문제는 Cygwin에만 국한되지 않습니다. 나는 MinGW에도 문제가있다. 그래서, 문제가 : 이맥스에서W32 Emacs에서 Cygwin 또는 MinGW bash에서 Ctrl-D가 반복되는 EOF를 발행하는 이유는 무엇입니까?

M-x shell를 통해 쉘이 적절 변수 shell-file-nameexplicit-bash-args을 설정 한 제공을 시작합니다 (예를 들어, here 참조). 그런 다음 stdin 입력을 기대하는 명령을 내 보냅니다. cat. cat을 취소하려면 보통 Ctrl-D 을 입력하고을 입력하면 쉘 프롬프트로 돌아갑니다. W32 emacs에서 (심지어 명시 적으로 M-x comint-send-eof을 실행해도) cat 명령이 종료되면 bash 쉘도 종료됩니다.

나는 물론, bash는, 다음과 같은 출력

$ Use "exit" to leave the shell. 
$ Use "exit" to leave the shell. 
$ Use "exit" to leave the shell. 
$ Use "exit" to leave the shell. 
$ Use "exit" to leave the shell. 
$ exit 

Process shell finished 

에서 환경 변수를 IGNOREEOF에, 말하자면, 5,하지만 하나의 Ctrl-D를 결과를 설정하여 증가 강타의 '탄력성'을 시도하고 이 문제는 쉘이 W32 emacs에서 실행될 때만 발생합니다 - Cygwin tty 창을 통해 Cygwin bash를 실행하고 MinTW bash를 통해 MinTW bash를 실행하십시오.

왜이 문제가 W32 Emacs에서 발생하며 어떻게 종료 할 수 있습니까? bash 쉘을 종료하지 않고 W32 Emacs를 사용할 때 running 하위 명령어 (예 : cat)?

+0

을 나는 W32 이맥스 처리 적절한 sifnal를 지원하지 않는 제품입니다. ('MX의 COMINT 스톱 subjob'가 오류를 반환 그 이유는) 그러나 W32 이맥스하고있다 * 무언가 *'Mx comint-send-eof'에. 불행히도 논리는 ELISP에서는 표현되지 않지만 아직 조사하지 않은 C 코드에 묻혀 있습니다. - 그래서 이맥스 C 소스 전문가가 내게 더 많은 정보를 줄 수 있기를 바란다. – halloleo

답변

0

당신이 생각하는 것처럼 tty의 개념은 실제로 W32 worl에는 존재하지 않습니다. 이 Unixy 동작을보고 싶다면 Cygwin 프로그램을 실행할 필요가 있지만 Cygwin 프로그램이 다른 Cygwin 프로그램 (Emacs, 터미널, 사용자 이름)과 통신해야합니다. Cygwin 버전의 Emacs 만 사용하면됩니다.

+0

전 신호 지원 나는 Cywin 이맥스 만 가지고있다. 하지만 W32 이맥스는'M-x comint-send-eof'에서 뭔가를하고 있습니다. * 나는 그 동작을 사용자 정의하고 싶습니다. – halloleo

+0

그런 다음'defintvice'를'comint-send-eof'에 사용하십시오. 디폴트 동작은'process-send-eof'를 호출하는 것인데, Windows에서 (즉, pty가없는) 기본적으로 파이프를 닫습니다. – Stefan

0

GNU Emacs FAQ for MS Windows은이 문제가 셸 버퍼의 하위 프로세스에 존재 함을 나타냅니다. 따라서 DOS 명령 행에도 영향을줍니다 (물론 DOS에서는 Ctrl-D를 사용하지 않으므로 눈에 띄지 않습니다). FAQ에는 해결 방법이 제시되지 않았으므로 쉽게 고칠 수는 없다고 생각합니다.

관련 문제