Estou usando o Aquamacs, uma distro do GNU Emacs 23.3.50.1.
Estou vendo alguns arquivos de origem escritos com alguns comentários em grego e eles estão codificados em CP1253.
E posso reverter com a codificação adequada ou posso adicionar uma variável local de arquivo:
/* -*- mode: c-mode; tab-width: 4; coding: cp1253-unix; -*- */
Assim, posso fazer com que eles abram corretamente e certamente poderia adicionar variáveis de arquivo a cada arquivo.
Mas eu gostaria de definir a codificação para todo o diretório. Em vez de editar .dir-locals.el manualmente, pensei em simplesmente:
M-x copy-file-locals-to-dir-locals
Do arquivo que abriu corretamente. E isso gera:
;;; Directory Local Variables
;;; See Info node `(emacs) Directory Variables' for more information.
((c-mode
(tab-width . 4)
(coding . cp1253-unix)))
Sem dados. No entanto, ele reconhece claramente a nova largura da guia, por isso está lendo o arquivo.
Alguma idéia do porquê? E há algum registro enquanto o emacs está processando a lista a?
Responder1
Infelizmente, parece que o cabeçalho de codificação, por design, não se propaga a partir dos diretórios locais do Emacs; Tive dificuldades com sua configuração e também repliquei o problema.
Mais tarde me deparei com esta fonte que parece verificar o que você encontrou: http://www.emacsmirror.org/package/dir-locals.html
Não tenho certeza se existe um log para processar a lista a, mas caso você não esteja familiarizado com esta variável, você pode verificar sua codificação após visitar um arquivo com:
C-h v buffer-file-coding-system RET
ou
M-x describe-variable RET buffer-file-coding-system RET
Pessoalmente, acho que sua melhor aposta seria o que você já tem funcionando - arquivar variáveis locais.
As alternativas que consigo pensar (a primeira não foi testada) seriam dar uma olhada em algumas das funções do elisp:
(coding-system-priority-list)
(set-coding-system-priority &rest coding-systems)
OU segundo: (assumindo que sua estrutura de diretórios seja /something/blah/greekcode/file.c)
(add-to-list 'auto-coding-alist
'("/greekcode/[^/]+.c\\'" . cp1253-unix))
Isso tem precedência até mesmo sobre variáveis locais de arquivo. Modifique o regexp conforme necessário e experimente avaliando:
(find-auto-coding "/home/brian/greekcode/garbage.c" 1) <= C-x C-e
retorna:
(cp1253-unix . auto-coding-alist)
Espero que isso ajude! Adoraria ouvir o que outros usuários do emacs propõem como soluções.