Emacs 버퍼로 대화형 쉘 명령 실행

Emacs 버퍼로 대화형 쉘 명령 실행

계속하기 전에 Emacs 내에서 몇 가지 대화형 질문을 하는 쉘 명령을 실행하고 싶습니다. 내가 찾고 있는 기능은 xterm -e <command>Emacs 창이 대신 열리는 것과 같습니다. 터미널 에뮬레이션 기능이 너무 많이 필요하지는 않지만(기본적으로 "y"를 몇 번 누르는 것임) 여전히 키보드 입력이 필요합니다. 어떻게 든 이것을 할 수 있습니까?

나는 이미 termand를 사용해 보았습니다 ansi-term. /bin/bash와 다른 명령이 주어지면 둘 다 즉시 닫히고 문제가 무엇인지 읽을 시간이 없습니다.

답변1

짧은 답변:

M-x terminal-emulator

당신이 요구하는 것과 정확히 같은 것 같습니다.

당신은 무엇을필요y다를 수도 있습니다. 프로그램에 stdin에 일련의 행을 제공해야 한다면 yes | program. 프로그램이 정말로 stdin을 tty로 만들고 싶다면, expect.

답변2

Emacs 편집 매크로("편집 매크로"는 "emacs"라는 이름이 파생됨)를 만들고 키보드 매크로에 Gnu Bash 스크립트 또는 기타 쉘 프로그램을 실행하는 명령을 입력하고 사용자에게 Y 또는 N을 쿼리하는 스크립트를 생성할 수 있습니다. 답변.

따라서 매크로를 만들려면 다음과 같이 해야 합니다.

Cx (
Mx new-frame return
Mx shell return (or just Mx eshell return--to use the emacs built-in shell)
bash <bash-program-that-queries-end-user-for-Y-or-N-answers> &
Mx delete-frame
Cx )

매크로를 저장하고 재사용을 위해 로드하는 emacs lisp 프로그램에 넣습니다.

물론 매크로는 그때부터 emacs 내에서 사용할 수 있거나 다른 프로그램처럼 명령줄에서 배치 파일로 전체를 실행할 수 있습니다.

기타 도구 및 제안: emacs 재귀 편집(매크로를 중지했다가 다시 시작하고 최종 사용자에게 질문에 대답하거나 편집할 시간을 제공)과 emacs 내장 기능인 메시지 또는 상자 또는 메시지만 살펴보세요. 기능. tkquery(사용자에게 입력 데이터를 쿼리하는 설정하기 쉬운 Tcl/Tk 프로그램)를 사용하거나 zenity를 사용하여 프로그래밍하기 쉽고 최종 사용자가 사용하기 쉬운 간단한 그래픽 상호 작용 상자를 만들 수 있습니다.

Gnu Make에서 질문과 답변 루틴을 만들고 Gnu Emacs 내에서 실행할 수 있습니다. 이를 수행하고 실행 중인 Make 세션과 상호 작용하려면 내 makefile 중 하나에서 발췌한 것처럼 process-send-string을 사용할 수 있습니다.

echo "(process-send-string \"*compilation*\" \" \\n \") "

내 말은, Emacs process-send-string 함수를 사용하여 Gnu Emacs 버퍼 내에서 실행되는 실행 중인 Gnu Make 프로그램과 통신하고 Y 또는 N 질문에 답할 수 있다는 것입니다.

마지막으로 질문으로 돌아가서 이유를 궁금해하면 빨리 종료됩니다. 및/또는 xterm -e <your-program>과 같은 작업을 수행할 수 있습니다 . 그러나 이는 프로그램을 동기 또는 비동기 프로세스로 실행하려는 방법에 따라 달라집니다. 내 말은, 최종 사용자가 질문에 대답하는 동안 프로그램이 실행되는 것을 차단하시겠습니까?emacs -l <emacs-lisp-file-with-question-and-answer-macro-in-it> & disownxterm -e <your-program-which-queries-the-end-users> & disown

이러한 도구를 사용하면 Gnu Emacs로 원하는 것을 얻을 수 있다고 생각합니다. 그리고 Gnu Emacs는 확장 가능하기 때문에 여러분이 직접 프로그래밍하여 확장한다면 어떻게든 여러분이 원하는 것을 확실히 할 수 있습니다.

관련 정보