2010-03-17 4 views
7

kullanarak metin içeren yeni bir arabellek oluşturma Daha fazla analiz için başka bir programa metin gönderebilen bir programım var (örn. Sed, grep, vb.). Verileri Emacs'e göndermek ve orada analiz yapmak istiyorum. Bunu nasıl yaparım? EmacsClient varsayılan olarak bir dosya adı alır, bu bir dosya değil bir veri dizesidir ve gerçekten sadece Emacs'e veri göndermek için dosyaları oluşturmak ve silmek istemiyorum.MacacsClient

EmacsClient, açık dosyalar yerine lisp kodunu yürütmenize izin veren bir "eval" komut satırı seçeneğine sahiptir. Verilen metinle yeni bir arabellek açacak basit bir lisp işlevi var mı?

Düzenleme:

emacsclientw.exe -eval (open-new-buffer 'hello world')

Ve yeni tampon otomatik kelime "merhaba dünya" olarak görünecektir: Ben böyle bir şey arıyorum. Tamponun adını nasıl ayarlayacağından emin değilim. Umarım otomatik numaralandırılmış bir şey.

cevap

6

Bu Ne istediğine yapar: Açıkçası istediğini yapmak open-buffer-with özelleştirebilirsiniz

emacsclient -e '(open-buffer-with "some\nstuff\nhere")' 

(defun open-buffer-with (txt) 
    "create a new buffer, insert txt" 
    (pop-to-buffer (get-buffer-create (generate-new-buffer-name "something"))) 
    (insert txt)) 

.

Bakmak isteyebileceğiniz benzer bir soru var: How do I get basic App<->Emacs integration?.

+1

EmacsW32'de çalışmaya başlamak için herhangi bir sıkıntıya sahip olursak, tek tırnak işaretlerini çift tırnak içine almalı ve komut içindeki çift tırnaklardan kaçmam gerekti: emacsclient -e "(open-buffer- \ "merhaba, dünya \") " –

+0

@OtherMichael ile yaptığınız şey, Windows'da benim için gayet iyi çalışıyor, ancak ben bir cygwin kabuğundan koşuyorum. Genel bir DOS komut isteminden çalışacak şeyleri nasıl özelleştireceğimi bilmiyorum - DOS komut isteminden çalıştığımda bir hata alıyorum "emacsclient.exe: Yok yuva veya alternatif düzenleyici" (tabii ki cygwin'den Emacs'i başlattım kabuk, buna neden olabilir). –

+0

Cygwin kabuğundan, EmacsW32 veya cygwin emacs'ı mı başlatıyorsunuz? –

2

Bu yaklaşım nasıl?

emacsclient -e ' 
    (progn 
    (pop-to-buffer (generate-new-buffer "Piped")) 
    (insert (decode-hex-string " 
    '$(perl -e 'print unpack "H*", qq("Hello, World!")' 
    )'"))) 
' 

ben görüntüleme amacıyla bu çok uzun bir çizgi kırmak için yeni satır ekledikten.

Bunu bir terminal penceresinden çalıştırdığımda, Piped adlı yeni bir tampon, Emacs penceremde "Hello, World!" (tırnak işareti ile birlikte) metnini içeren bir pencerede açılır. Tekrar çalıştırdığımda, aynı metinle Piped<2> isimli başka bir tampon açılır.

Onaltılık kaçış (muhtemelen sadece Perl değil, başka herhangi bir yüksek düzeyli dil ile kolayca yapılabilir), aksi halde (insert)'a beslenen dize sabitini sonlandıran alıntılar içindir.

Bu yaklaşım, komut satırında Emacsclient aracılığıyla Emacs'e metin besler, böylece çok uzun girdi metni sorun yaratabilir. Daha genel bir çözüm, uzun giriş verilerini parçalayabilir ve Emacsli emeğiyle birlikte Emacs'e gönderebilir.