2011-11-13 23 views
9

I (etkileşimli ve bir kanca olarak) kaynak kodunuemacs kaydetme-gezi değil geri yükleme noktası?

(defun a-style()                                               
    (interactive)                                               
    (save-excursion                                               
    (shell-command-on-region (point-min) (point-max) "/usr/local/bin/astyle -A10 -s4 -m0 -M40 -k1 -W0 -z2 -xd -CSKNLwYfpHjJcn" t t))) 

yeniden biçimlendirmek ama save-gezi çalışmak görünmüyor, amaç her zaman için 1 atlar için bu fonksiyonu koşuyorum (kabuk komut olsa çalışıyor!). Burada bariz bir şey eksik miyim?

sayesinde Mario

DÜZENLEME:

Yani nihayet o naif bir şekilde yaptı:

(defun a-style()                                               
    (interactive)                                               
    (setq temp-point (point))                                            
    (shell-command-on-region (point-min) (point-max) "/usr/local/bin/astyle -A10 -s4 -m0 -M40 -k1 -W0 -z2 -xd -CSKNLwYfpHjJcn" t t)                   
    (goto-char temp-point)) 

Kinda aptal ama ne istediğimi yapar. Eğer daha iyi bir çözümden haberi varsa minnettar olurum.

+2

"setq" yerine "let" formu nasıl olur? –

cevap

10

shell-command-on-region için dokümantasyon bölümünde diyor ki:

ise eklemek demektir olmayan sıfırdır, opsiyonel beşinci argüman DEĞİŞTİRİN START ile END metnin yerine çıkışı noktası ve işareti koyarak Çevresinde . Eğer t olarak ayarlanmış DEĞİŞTİRDİNİZ beri

, tüm metni değiştirir ve etrafındaki noktası ve işareti koyar ve böylece nokta nokta-min gider. Dahası, daha önce save-excursion tarafından kaydedilen nokta kaldırıldığında, Emacs tekrar kaldırılan bölgenin başlangıcına kadar tekrar işaret eder.

Çözümünüzün iyi olduğunu düşünüyorum.

3

Bunun eski bir soru olduğunu biliyorum, ancak aynı soruna rastladım. İşte, noktayı ve arabelleği geri yükleyen basit bir makro:

(defmacro my-save-excursion (&rest forms) 
    `(let* (
    (oldp (point)) 
    (oldbuff (current-buffer)) 
    (retval (progn ,@forms)) 
    ) 

    (unless (eq (current-buffer) oldbuff) (switch-to-buffer oldbuff)) 
    (goto-char oldp) 
    retval 
    ) 
) 
İlgili konular