Emacs에서 터미널 에뮬레이터를 종료하려면 어떻게해야합니까?


2

후속 작업으로 간주 될 수 있습니다 : emacs에서 쉘 기록을 저장하고 터미널에서 사용하는 방법?

.emacs 파일에서 다음과 같이 bash를 강제 종료하려고하지만 "exit"라는 단어 뒤에 ^ M 문자가 포함되어 있어도 작동하지 않습니다. 이것이 작동하도록 할 수 있습니까?

(defun bye ()
  "Leaving emacs now"
  (interactive)
  (shell)
  (goto-char (point-max))
  (insert-string "exit"))
(add-hook 'kill-emacs-hook 'bye)

답변:


0

당신이하고있는 일이 효과가없는 이유 중 일부는 (shell)실제로 새로운 열등 쉘을 시작 하기 때문 입니다 (insert-string). 어쨌든, 가장 달성 할 수있는 것은 열등한 셸을 종료하는 것입니다. Emacs 위키 에는 주제에 대한 답변이없는 질문이 있습니다. 그와 비 배치 모드 Emacs가 어떤 식 으로든 부모 프로세스와 통신 할 때 확신하는 일반적인 무관심 사이에, 당신이 시도하는 것이 무엇인지 의심하는 경향이 있습니다.

그렇다고해서 원하는 결과를 얻을 수 없다는 것은 아닙니다. 결국 Emacs가 부모 프로세스와 통신 할 필요는 없습니다. 당신이 경우 대체 어떤 터미널과 같은 방식으로 당신이 이맥스가하는 동시에 의지 출구를 사용하고 어떤 터미널 다음 이맥스와 쉘 프로세스를 프로세스는 PTY 완료에 부착 할 때.

이 방법은, 당신은 단순히 당신의 이맥스 호출 서문 필요 쉘에 따라 다양하지만, 배쉬에서, zsh을, 아마도뿐만 아니라 (가정 누군가가 여전히 사용)에서 tcsh 것입니다 exec당신이 일반적으로 말한다면 - emacs -nw대신, 말 exec emacs -nw, & C.

이것은 아마 당신이 쉘에서 직접 Emacs를 호출한다고 가정합니다. 예를 들어 쉘 스크립트를 사용하여 Emacs를 호출하면 작동하지 않습니다. 왜냐하면 exec스크립트를 실행하는 쉘 프로세스가 pty에 바인딩 된 것이 아니라 쉘 프로세스를 대체 하기 때문 입니다. 이 경우 exec대신 쉘 스크립트 만 사용하면 스크립트가 실제로 이상한 일을하지 않는 한 여전히 결과를 얻을 수 있습니다.이 경우 질문을 포함하도록 질문을 업데이트해야하며 누군가가 무언가를 알아낼 수 있습니다. 작동합니다.


실제로 종료하려고하는 열등한 쉘이며, "* shell *"라는 기존 버퍼가없는 경우 (shell) 만 새로운 열등한 쉘을 시작합니다. 나는 항상 "* shell *"라는 이름의 버퍼를 가지고 있기 때문에 삽입하고있는 "exit"명령을 처리하기 위해 bash를 얻을 수 있다면 작동 할 것이라고 믿는다.
wytten

나는 되돌아 가서 bash FAQ를 읽는 것에 대한 이전 질문에서 제안한 것을 따랐다. 내 .bashrc에 PROMPT_COMMAND = "history -a"를 추가하는 것처럼 보입니다. 감사합니다!
wytten

@wytten 박람회; 기꺼이 도와주세요.
Aaron Miller
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.