2017-12-27 48 views
2

Emacs가 새 버퍼로 전환하고, 버퍼에 출력을 쓰는 (이 경우 쉘 명령어를 실행한다) 명령을 작성하려고한다.emacs elisp가 버퍼로 전환하고 따라 간다.

(defun test-func() 
    (interactive) 
    (let ((bname "*temp*") 
     (default-directory "/home/me")) 
    (with-output-to-temp-buffer bname 
     (switch-to-buffer bname) 
     (shell-command "ls -l" bname)))) 

이 경우 명령 실행이 완료 될 때까지 버퍼를 전환하지 않는다는 점을 제외하면 "작동"합니다. 즉시 전환 한 다음 실행중인 출력을 따라 가고 싶었습니다. 그렇게 할 수있는 방법이 있습니까?

답변

1

switch-to-buffer 뒤에 redisplay을 명시 적으로 호출해야 볼 수 있습니다.

ls은 상당히 "빠른"명령이며 단편적으로 표시되지 않을 수 있습니다. 당신은

while true; do 
    date 
    sleep 10 
done 

같은 쉘 스크립트를 시도 할 수도 있습니다 및 실행 (async-shell-command를 사용하거나 명령 줄의 끝에 &를 추가 중) 비동기 적이다.

참고도 shell-command에 대한 도움말은 말한다 :

Elisp에서

, 당신이 종종 더 나은 더 많은 제어를 제공하며 쉘의 사용을 부과하지 않기 때문에, 직접 call-process 또는 start-process를 호출하여 제공됩니다 (논증을 인용 할 필요가 있음).

+0

그래, 버퍼로 전환하지만 버퍼가 쉘 명령이 완료 될 때까지 업데이트되지 않습니다. 아마도 다른 방법으로 호출 할 수 있습니다. – MichaelB

+0

@MichaelB :'&'를 사용하십시오. 편집을 참조하십시오. – sds

+0

가 다시 표시되는 것처럼 보이고 시작 프로세스가 수행 될 수 있습니다. – MichaelB