Emacs'in ikili dosyaları açmasını engelleme


0

Metin içermeyen bir dosyayı açmak üzereysem Emacs'ın bana bir uyarı vermesini nasıl sağlayabilirim?

Örnek: Dosyadaki bir c ++ kaynak kodunu düzenlediğimde ve aynı dizinde test.cppçalıştırılabilir olarak derlediğimde test, yanlışlıkla ikili dosyayı açıyorum test.

Yanıtlar:


2

Emacs ya olmadıkça bir dosya metnini içermediğini sizi uyarır olamaz yapar (bu içerikleri ne görebilmesi için) açmak veya başka (belki Unix gibi bir şey kullanarak öğrenmek için başka bir program sorar filekomutuna).

İkinci yaklaşım ile sorun Emacs olmasıdır edebilirsiniz ikili dosya birçok türde ele, böylece daha sonra dış programı da hangi Emacs tanıyan ikili dosya, çeşitleri bilmek olduğunu gerekir dahil dinamik değişebilir hangi eklenti kütüphaneler tarafından eklenen desteği ve Kullanıcı Başına.

Orada herhangi bir iyi seçenek olduğunu sanmıyorum.

Özellikle kaçınmaya çalıştığınız şey nedir?

Düzenle:

Verilen örnek için gerekli olan test sadece dosya isimlerine dayandığından, aşağıdakiler uygulanabilir bir yaklaşım olacaktır.

(defvar my-find-file-check-source-extensions
  '(".cpp" ".cc"))

(defadvice find-file-read-args (after my-find-file-read-args-check-source)
  (let* ((filename (car ad-return-value))
         (source-filename
          (catch 'source-file-exists
            (mapc (lambda (ext)
                    (let ((source-filename (concat filename ext)))
                      (when (file-exists-p source-filename)
                        (throw 'source-file-exists source-filename))))
                  my-find-file-check-source-extensions)
            nil)))

    (and source-filename
         (not (y-or-n-p (format "Source file %s detected. Are you sure you \
want to open %s? " source-filename filename)))
         (error "find-file aborted by user"))))

(ad-activate 'find-file-read-args)

Bir örnek ekleyerek soru ile düzenledim.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.