답변:
start-process
버퍼를 팝업하지 않아야하는로 백그라운드 프로세스를 시작할 수 있습니다 .
(start-process "process-name" "buffer-name" "program")
필요한 경우 복제를 피하기 위해 프로세스 이름이 수정되므로 걱정하지 마십시오. 나중에 디버깅에 유용한 이름을 지정하십시오!
을 지정하면 "buffer-name"
버퍼가 생성되지만 즉시 표시되지는 않습니다. 이것은 프로세스 관리 및 출력 확인에 편리 할 수 있습니다. 버퍼를 전혀 작성하지 않으려면 nil
버퍼 이름으로 전달 하십시오.
(start-process "process-name" nil "program")
"program"
이 경우 프로그램 이름 (예 : 노틸러스, caja, 파이어 폭스) 일 뿐이며 "arg1 arg2 ..."
의 네 번째 위치 인수에 있어야합니다 start-process
. 나는 문서를 읽음으로써 그것을 알아 냈습니다 :)
티콘이 언급했듯이 (start-process)
갈 길입니다. 버퍼를 만들고 싶지 않지만 백그라운드 프로세스 상태에 계속 반응하려면을 사용할 수도 있습니다 (set-process-sentinel)
. projector
패키지 에서 가져온 수정 된 예는 다음과 같습니다 .
(set-process-sentinel (start-process "process-name" nil "command") #'output-message-sentinel)
(defun output-message-sentinel (process msg)
(when (memq (process-status process) '(exit signal))
(message (concat (process-name process) " - " msg))))
Emacs 기능 설명에서 :
(set-process-sentinel PROCESS SENTINEL)
Give PROCESS the sentinel SENTINEL; nil for default.
The sentinel is called as a function when the process changes state.
It gets two arguments: the process, and a string describing the change.
Processes 의 GNU 매뉴얼 페이지 는 자세한 정보를 제공합니다.
set-process-sentinel
좀 더 정확하게 설명해 주 시겠습니까? 프로세스를 관리하는 기능을 가지고 있다는 일반적인 아이디어를 얻었지만 모든 세부 사항을 완전히 이해하지는 못합니다. 감사!
M-x describe-function
를 입력 set-process-sentinel
하면 짧은 이맥스 문서에서 답변을 얻을 것이다 : (SET-프로세스 감시 프로세스 SENTINEL) PROCESS에게 감시 SENTINEL을 지정을; 기본값은 nil입니다. 센티넬은 프로세스가 상태를 변경하면 함수로 호출됩니다. 프로세스와 변경을 설명하는 문자열이라는 두 가지 인수를 얻습니다.
C-h f
...
비동기 명령 실행 방법을 변경할 필요가 없습니다. Emacs는 단일 데이터 구조 인을 수정하여 버퍼가 팝업 될 위치 또는 여부를 제어 할 수있는 일반적인 기능을 가지고 display-buffer-alist
있습니다.
아래 솔루션에서 액션 함수 display-buffer-no-window
(예 : 팝업 없음)가 이름이 시작되는 버퍼와 연결되도록 설정되어 있음을 확인할 수 있습니다 *Asynchronous Shell Command*
(emacs는 둘 이상의 생성 요청시 증분 접미사를 추가 함).
사용 가능한 다른 디스플레이 옵션 목록을 보려면 C-h f display-buffer
"동작 기능"목록을 입력 하고 찾으십시오.
;; Buffers that I don't want popping up by default
(add-to-list 'display-buffer-alist
'("\\*Async Shell Command\\*.*" display-buffer-no-window))
start-process
sudo 명령 에 사용할 수 있습니까? 나는 내 전화를 배치 시도start-process
에서(let ((default-directory "/sudo::")) ... )
그러나 그것은 나를 위해 작동하지 않았다.