2011-06-16 17 views
5

Sekmelerin kullanıldığı python projesinde yer alıyorum, ancak bunları yazdığım her kodda kullanmıyorum, bunları söz konusu projede kullanmak çok önemlidir. Projeler belirli dizinler altında bir dizinde bulunur. Yani:Dosya konumuna bağlı olarak kanca nasıl çalıştırılır

\main_folder 
    \project1 
    \project2 
    \project3 
...etc 

Ben çift işlevleri/dosya üzerinde kancalar açık ve untabify kaydetmek ve ben üzerinde çalışmak bütün tampon tabify var. i .emacs koyarsanız

;; My Functions 
(defun untabify-buffer() 
      "Untabify current buffer" 
     (interactive) 
     (untabify (point-min) (point-max))) 

(defun tabify-buffer() 
     "Tabify current buffer" 
     (interactive) 
     (tabify (point-min) (point-max))) 

;; HOOKS 
; untabify buffer on open 
(add-hook 'find-file-hook 'untabify-buffer) 
; tabify on save 
(add-hook 'before-save-hook 'tabify-buffer) 

o ben istediğim olmadığı açtığınız her .py dosyası üzerinde çalıştırılır dosya. Sahip olmak istediğim, bu kancaların sadece ilgili alt klasörlere sahip belirli bir klasörde kullanılmasını sağlamaktır. .dir_locals denedim ancak sadece kanca olmayan özellikler için çalışıyor. Neredeyse tüm projeler python ile yazıldığı için, kancaları belirli modlarda (yani python modu) kullanamıyorum. Dürüst olmak gerekirse elisp koşullu kaydetmeyi yazmayı denedim ama başarısız oldu.

cevap

2

Çok kolay bir çözüm, kancaları devre dışı bırakmak için kullanılabilecek bir yapılandırma değişkeni eklemektir. Örneğin:

(defvar tweak-tabs t) 
(add-hook 'find-file-hook 
      (lambda() (when tweak-tabs (untabify (point-min) (point-max))))) 
(add-hook 'before-save-hook 
      (lambda() (when tweak-tabs (tabify (point-min) (point-max))))) 

Şimdi orada bu özelliği devre dışı bırakarak, nil için tweak-tabs ayarlayarak, alakalı dizinlere bir .dir-locals.el dosya ekleyebilir.

(Ama başka bir sorun bu sekmeleri ile başa çıkmak için oldukça kötü bir yoldur olmasıdır. Bir dosyayı kaydettikten sonra Örneğin, içinde sekme göreceksiniz yapmak .)

+0

teşekkür ederiz.. Bu aslında benim soruma cevap ama iyi bir noktaya yükselttiniz. Kaydettikten sonra tamponun her tarafında sekmeler var. Fonksiyonları öldürme-tampon veya kill-emac'lara bağlamayı düşündüğümden biraz araştırma yaptım ama maalesef dosya zaten kaydedildikten sonra çalıştırılıyorlar. Tamponda 'kaydetme' ile çağrılan şeyin gerçekte ne olduğunu kontrol etmek mümkün olsaydı ve sadece kill-buffer ya da kill-emacs ise aply işlevi görür. Bu durumda başka önerileriniz veya deneyimleriniz var mı? –

+0

Muhtemelen 'write-file-functions' ile başlayalım ve belki de tamponun bir kopyasını oluşturup, bunu tablonun, kaydet ve' t' döndür. Tamponun * * * * * * * * * * kalmasını istedikleri için, bunu yapmamalarına rağmen [bu sayfa] 'na bakınız (http://www.emacswiki.org/emacs/UntabifyUponSave). –

0

Bilgin için için başlıktaki asıl soruya cevap verin (bu soruya bir web araması ile ulaştığım gibi): dosya konumuna bağlı olarak bir kanca eklemenin bir yolu, buffer-file-name numarasını kontrol eden bir işlevdir. (this answer den Fikir.)

Örneğin, tam olarak aynı sorunu için (sadece belirli dizinde sekmelerde açın ve sekmeler başka bir yerde kapalı tutun), Şu anda paket smart-tabs-mode yüklü sonra (böyle bir şey yapıyorum) M-x package-install ile: kendisi python-mode-hook değiştirir ve sonra geri değiştirerek konum smart-tabs-insinuate olarak

(smart-tabs-insinuate 'python) ; This screws up all Python files (inserts tabs) 
(add-hook 'python-mode-hook ; So we need to un-screw most of them 
      (lambda() 
      (unless (and (stringp buffer-file-name) 
         (string-match "specialproject" buffer-file-name)) 
       (setq smart-tabs-mode nil))) 
      t)     ; Add this hook to end of the list 

(Bu, biraz ters, ama bir örnek olarak yapmalıdır)

İlgili konular