Como impedir que o Emacs abra arquivos binários

0

Como posso fazer com que o Emacs me avise se estou prestes a abrir um arquivo que não contém texto?

Exemplo: Quando edito um código-fonte c ++ no arquivo test.cpp e o compo como um executável test no mesmo diretório, muitas vezes, acidentalmente, abro o arquivo binário test .

    
por ggg 02.01.2012 / 01:37

1 resposta

2

O Emacs não pode avisá-lo que um arquivo não contém texto a menos que faça abri-lo (para que possa ver qual é o conteúdo), ou pergunte a outro programa para descobrir (talvez usando algo como o comando Unix file ).

O problema com a última abordagem é que o Emacs pode manipular muitos tipos de arquivos binários, então você precisaria desse programa externo para também saber quais tipos de arquivo binário o Emacs reconhece, incluindo suporte adicionado por bibliotecas complementares, que podem variar dinamicamente e por usuário.

Eu não acho que há boas opções lá.

O que especificamente você está tentando evitar?

Editar:

Como o teste requerido para o exemplo dado é baseado apenas em nomes de arquivos, o seguinte seria uma abordagem viável.

(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)
    
por 02.01.2012 / 02:19

Tags