.dir-locals.elのホワイトリスト


7

それはロードすることが可能である.dir-locals.el私に、私は、そのファイルに設定していた値を追加することなく、また私にメッセージを表示せずにファイルを、しかし、init.elcustom-set-variables?私が欲しいのは、そのファイルには機密データが含まれており、自分のを共有する癖があるinit.elため、ロードするだけだからです。一般的に、.dir-locals.el評価すべきではない不適切なコードが含まれている可能性があることを理解しています。なので、たぶんのホワイトリストみたいなものがあるのではないかと思っていました.dir-locals.el

更新

一般的に私が達成したいのは、追加の手間をかけずにロードされる「プロジェクト」全体のemacs構成ファイルを用意することです。だからそれが不可能な場合.dir-locals.el-私は他の解決策を受け入れる:D

回答:


5

私はこれを私の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)

これsettings.elにより、現在のファイルのディレクトリにファイルが読み込まれます。次にsettings.el、(。dir-locals.elのように)そのようなファイルが見つからなくなるまで、ディレクトリツリーで上方向に検索を続けます。

これにより、セキュリティプロンプトなしで設定ファイルが読み込まれて実行されるため、そのようなファイルをディレクトリツリーに配置できるのは自分だけであることを確認する必要があります。それでもプロンプトが必要な場合は、もちろん、カスタマイズメカニズムを使用せずにプロンプ​​トを追加init.elできるため、クリーンな状態を保つことができます。

の例は次のsettings.elようになります。

(make-local-variable 'my-pw)
(setq my-pw "passw0rd A")
(message "Loaded super-secret password for project A")

これは私が探していた答えのようです。ありがとう、やってみます。
d12frosted 2015

3

init.elファイルに設定を手動で書き込む場合は、次のものを追加できます。

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

これで、emacsが.dir-locals.elwith iffyオプションに遭遇すると、Emacsは選択をこのcustom.elファイルに保存し、ファイルを自由にinit.el公開できます。

EmacsのCustomizeインターフェースをすべての構成に使用したい場合は、これでうまくいくとは思いません。


ご回答有難うございます。この回避策は私にとって良いかもしれません。しかし残念ながら、それは一般的な解決策ではないので、私は質問を開いたままにしておきます。
d12frosted

0

解決策は、Emacs dir-locals保護システムをオーバーライドすることです。

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

それを単にあなたのinitとモンキーパッチemacs elispコアのどこかに置くだけです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.