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

후속 작업으로 간주 될 수 있습니다 :
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)


답변

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

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

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

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