일반적으로, 당신이 뭔가를 실행하려면 컴파일이 끝나면 컴파일 명령에 추가합니다. 대신
M-x compile RET make RET
의 예를 들어, 당신은
M-x compile RET make && ./test RET
를 입력 할 수 있습니다 또는 경우에 당신이 아마
M-x compile RET make test RET
을 할 수 있도록, 당신의 메이크에 약간의 적절한 대상에 프로그램을 추가 할 수 있습니다 eshell에서 컴파일 된 프로그램을 실행하고 싶은 이유를 설명 할 수 있으므로 더 나은 조언을 제공 할 수 있습니다. 당신이 eshell 사용을 주장하는 경우
그러나, 당신은 compilation-finish-functions
을 사용할 수 있습니다 편집 프로세스가 완료되면
함수를 호출 할 수 있습니다. 각 함수는 컴파일 버퍼와 프로세스 완료 방법을 설명하는 문자열의 두 인수로 호출됩니다.
이 모든 것이 잘 설명되어 있지는 않지만이 프로세스가 성공적으로 완료되면 문자열은 "finished\n"
입니다. 그래서 당신은 같은 것을 할 수 있습니다
는
(defun run-compilation-output-in-eshell (buf msg)
"If compilation finished successfully, switch to eshell and execute a command."
(when (string= msg "finished\n")
(eshell)
(goto-char (point-max))
(eshell-kill-input)
(insert "echo command goes here")
(eshell-send-input)))
(add-hook 'compilation-finish-functions #'run-compilation-output-in-eshell)
하지만 이것은 오히려 무례 보인다 컴파일이 완료 될 때 eshell
버퍼에 입력 할 일이 있다면,이 입력을 삭제합니다. 위에서 말한 것처럼 조금 더 많은 컨텍스트가 도움이 될 수 있습니다.
안녕하세요. 답변 주셔서 대단히 감사합니다. 게시물 끝에있는 기능이 트릭을 수행합니다. 지금은 관련성이 없지만 컨텍스트는'g ++ source.cc '로 쉽게 컴파일 할 수있는 C++ (spoj/topcoder)의 간단한 소스 파일을 많이 작성하고 있다는 것입니다. 파일 그래서 나는 그것을 테스트 할 수 있습니다. – zeroDivisible
필자는 이해하지만, 왜 eshell *에서 컴파일 된 프로그램을 실행해야하는지 이해하지 못합니다. 명령 줄을 통해 컴파일 된 프로그램과 상호 작용해야하기 때문입니까? –
나는 집과 직장에서 이맥스에서 일하고있다. 직장에서 나는 내 PC (XP에서 승리)에 대한 권한이 매우 제한되어 있으며 eshell은 내가 얻을 수있는 유닉스 쉘에 가장 가까운 것이다. 게다가 Emacs에있어 키 스트로크가 적고 기본 명령이 거의없는 셸이 필요하기 때문에 충분합니다. 또한 -이 해킹이 어떻게 수행 될 수 있는지 궁금합니다.) – zeroDivisible