頻繁に呼び出すマクロを変更するにはどうすればよいですか?


7

use-package整理に使用しinit.elます。私の宣言はすべてを使用していることに気付きました:ensure t。宣言の例は次のとおりです。

(use-package auto-complete
  :ensure t
  :diminish auto-complete-mode
  :init (global-auto-complete-mode t))

すべてのuse-package宣言でを使用しているため:ensure t、use-package.elを直接変更せずuse-packageに暗黙的にインクルードするように変更する方法はあり:ensure tますか?理想的には、別の名前の関数を使用しないようにします。

私は少し慣れてadvice-addいますが、これはフックや環境を関数に追加するために使用され、関数やマクロ自体を変更するためではないという印象があります。


2
あなたが指摘したように、アドバイスはここでは役に立ちません:use-package実際にはLispマクロです。おそらく、独自のmy-use-packageマクロを作成してuse-package、好みのデフォルト設定で拡張できます。
グルカ2015年

マクロも助言することができます。ケースは閉じられました。
ポリッツァ2015年

@politza True-私が何を考えていたかわからない。:-)この場合、それがどのように機能するかの例を提供できますか?:filter-argsアドバイスを使用して:ensure t?のようなキーワードを追加できると思います。
グルカ2015年

nadvice.elに関する情報サイトを読む前に、私もそれを知りませんでした。
politza 2015年

私はここでの解決策が機能することを理解していますが、同じことは、use-packageのラッパー関数を記述し、代わりにそのラッパーを使用することであったと思います。それははるかに明確であり、関係するすべてのコードはあなたの管理下にあるようです。
ジョセフガービン2017年

回答:


6

(もちろん!)アドバイスはマクロで機能するという@politzaのコメントに基づいて、機能するように見える何かを見つけました。

(defun use-package-always-ensure (form)
  (append form '(:ensure t)))

(advice-add #'use-package :filter-args #'use-package-always-ensure)

この例では、Emacs 24.4アドバイス関数を使用しています。Emacsの古いバージョンの同等の機能が何であるかはわかりません。


このアドバイスの使用が、アドバイスされたマクロを使用するバイトコンパイルファイルの動作にどのように影響するか、本当にわかりません...誰でもコメントできますか?
グルカ2015年

1
マクロはコンパイル中に評価されるため、アドバイスをrequire提供する機能を使用するか、を使用して、コンパイル時にアドバイスを利用できる必要がありますeval-when-compile

5

新しいバージョンuse-packageは、すべてのパッケージに対してこの動作を有効にするための次の機能があります。

(setq use-package-always-ensure t) 

他の誰かが同じ質問をした場合に備えて。

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