2011-12-21 2 views
10

출력 쉘, 내가 좋아하는 뭔가를 입력 할 수 있어야합니다.파이프 이맥스는 새로운 버퍼 예를 들어

+3

내가 제안한다면 magit을 시도해보십시오. 그것은 당신이 원하는 것을 정확하게하지 못할 수도 있습니다. 하지만 당신의 필요에 맞는 것을 알 수 있습니다. https://github.com/magit/magit – kindahero

답변

6

M-! - 쉘 버퍼와 동일한 cwd 내에서 명령을 실행하고 결과를 *Shell Command Output* 버퍼로 출력합니다.

결과가 짧으면 버퍼가 올라가지 않고 출력이 에코 영역에 복사됩니다. 그러나 버퍼 은 여전히 ​​사용되고 사용 가능한입니다. Fshell-commandRET "는 간단히"출력을 구성하는 것에 대한 세부 가지고 출력 resize-mini-windows 비이다 가변 max-mini-window-height 경우 결정된 응답 영역 (에 표시 충분히 짧으면

을 -nil), 거기에 표시됩니다. 그렇지 않으면 출력을 포함하는 버퍼가 표시됩니다.

+3

또한 C-u M-! 출력을 현재 버퍼에 넣습니다. – Daimrod

+1

@Daimrod : 정확히 OP가하지 않기를 바란 * 않습니다. 그녀는 껍데기 안에있어 명령의 출력을 새 버퍼로 보내려고합니다. – Thomas

+0

이것은 훌륭합니다 - 고마워요. 누락 된 유일한 부분은 새 버퍼를 올바른 모드로 설정하는 것입니다. 예를 들어,'git diff'의 결과를 새로운 버퍼에 보내면, 버퍼가 diff 모드가되도록하고 싶습니다. –

8

eshell을 사용하는 경우 출력을 버퍼로 리디렉션 할 수 있습니다 (예 : 콘텐츠 '갑'과 새로운 버퍼를 생성 bar

print foo > #<buffer bar> 

. 자세한 내용은 Emacswiki (http://www.emacswiki.org/emacs/EshellRedirection)를 참조하십시오.

+1

고맙습니다. 그것은 eshell에서 효과가 있습니다. 그러나 정상 쉘 (즉, M-x 쉘)을 사용하고 있습니다. –

+1

eshell이 ​​옵션이 아닌 경우 출력을 emacsclient로 파이프 할 수 있습니다. 이를 위해 스크립트 또는 셸 함수가 필요합니다. 출발점으로 http://www.emacswiki.org/emacs/EmacsClient#toc43을 참조하십시오. –

+0

이것은 TRAMP를 사용할 때 매우 유용합니다. "foo/ssh : user @ machine :/some/remote/file> # " – Warbo

3

불행히도 emacsclient은 표준 입력을 읽지 않으므로 어떤 종류의 래퍼가 필요합니다. 여기에 나를 위해 작동 bash 쉘 함수는 다음과 같습니다

tempbuffer() { 
    perl -MFile::Temp -MFile::Copy -e \ 
    'copy *STDIN, $file = File::Temp->new; system "emacsclient", $file'; 
} 
+0

의견을 보내 주셔서 감사합니다. 미안 해요, 조금 바보 같아요. 이 함수를 bash 파일에 넣었고 콘솔에서 호출 할 수 있습니다. 그러나 실제로 실행하려는 명령 (예 :'git diff')을 전달하는 방법을 이해할 수 없습니다. –

+0

원래 게시물과 마찬가지로. 'git diff | tempbuffer '라고합니다. – Sean

+0

아, 알았어요. 고마워. –

0

내가 시작점으로 이맥스 위키에서 정보를 사용하여 패키지 (e-sink)를했다. 그것은 당신이 기술 한대로 작동하고 "tail"은 프로세스가 모든 것을 표시하기를 기다릴 때까지 기다리는 대신 출력을 보냅니다. 강타는 임시 파일을 삭제하기 전에 버퍼 완료 될 때까지

git diff | (f=$(mktemp); cat > $f; emacsclient $f; rm -v $f) 

는 emacsclient가 기다립니다 :

0

내 개인적인 취향 뭔가를 당신이 어떤 파일을 관리 할 필요없이 배쉬를 입력 할 수 있습니다.

나는 M-! (phils의 답) 쉘에서 쉘 명령을 시작하고 위의 경우 (Sean의 답과 비슷합니다) 쉘에서 '무언가의 한가운데에'있다면 '이것을 이맥스에 연결하고 싶습니다.'라고 결정했습니다.