Lista branca de .dir-locals.el

7

É possível carregar o .dir-locals.elarquivo sem me avisar, mas também sem adicionar valores que estou configurando nesse arquivo ao meu init.elin custom-set-variables? A razão pela qual eu quero é que esse arquivo contenha alguns dados confidenciais e eu tenho o hábito de compartilhar os meus init.el, portanto, quero que ele seja carregado. Entendo que, em geral, .dir-locals.elpode conter código inapropriado que não devo avaliar. Então, eu estava pensando que provavelmente existe algo como lista branca .dir-locals.el.

Atualizar

Em geral, o que eu quero alcançar é ter um arquivo de configurações do emacs para todo o projeto carregado sem qualquer aborrecimento adicional. Portanto, se não for possível com .dir-locals.el- estou aberto a outras soluções: D

d12frosted
fonte

Respostas:

5

Eu adicionei isso ao meu init.el:

(defun recursive-load-dir-settings (currentfile)
  (let ((lds-dir (locate-dominating-file currentfile "settings.el")))
  (when lds-dir
      (progn
        (load-file (concat lds-dir "settings.el"))
        (recursive-load-dir-settings (file-truename(concat lds-dir "..")))))))

(defun load-dir-settings()
  (interactive)
  (when buffer-file-name
    (recursive-load-dir-settings buffer-file-name)))

(add-hook 'find-file-hook 'load-dir-settings)

Isso carrega o arquivo settings.elno diretório do arquivo atual. Em seguida, ele continua pesquisando para settings.elcima na árvore de diretórios, até que nenhum outro arquivo seja encontrado (como .dir-locals.el).

Isso carrega e executa os arquivos de configurações sem um prompt de segurança ; portanto, você precisa ter certeza de que é o único que pode colocar esses arquivos na árvore de diretórios. Se você ainda deseja o prompt, é claro que ele pode ser adicionado sem o uso do mecânico de personalização , para que você init.elpossa permanecer limpo.

Um exemplo para settings.elpode ser assim:

(make-local-variable 'my-pw)
(setq my-pw "passw0rd A")
(message "Loaded super-secret password for project A")
Geier
fonte
Parece uma resposta que eu estava procurando. Obrigado, vou tentar.
d12frosted
3

Se você gravar a configuração no seu init.elarquivo manualmente, poderá adicionar o seguinte:

(setq custom-file "~/.emacs.d/custom.el")
(load custom-file t)

Agora, quando o emacs encontrar uma .dir-locals.elopção duvidosa, o Emacs salvará sua escolha nesse custom.elarquivo, deixando você livre para compartilhá-lo init.elpublicamente.

Se você gosta de usar a interface Personalizar do Emacs para toda a sua configuração, não acho que isso funcione para você.

Keybeard Proglems
fonte
Obrigado pela sua resposta. Esta solução alternativa pode ser boa para mim. Mas, infelizmente, não é uma solução geral, por isso estou deixando uma pergunta em aberto.
usar o seguinte comando
0

A solução é substituir o sistema de proteção dir-locals do Emacs.

(defun safe-local-variable-p (sym val)
"Put your guard logic here, return t when sym is ok, nil otherwise"
  t)

Basta colocá-lo em algum lugar no seu núcleo init e patch de macaco emacs elisp.

dev1223
fonte