回答:
パッケージが延期される場合、つまり、必要になるまでロードされない場合、それらは異なります。その場合:init
、emacsファイルが最初に読み込ま:config
れたときに実行されますが、パッケージが実際にロードされたときに実行されます。
あなたの例ではmode
、パッケージのロードを暗黙的に延期します。htmlファイルが初めてアクセスされたときにパッケージがロードされるように設定しました。
:demand
パッケージが起動時に常にロードされるようにするために使用できますが、ここでやりたいことはフックをに入れることです:init
。
docstringから:
:init Code to run when `use-package' form evals.
これをuser-initファイルに入れているため、基本的には起動時に実行されます。
:config Runs if and when package loads.
そのため、パッケージが実際にロードされるまで実行しないでください。
:defer Defer loading of package -- automatic if :commands, :bind, :bind*, :mode or :interpreter are used.
パッケージを自動的に遅延させるもののリストに注意してください。基本的に、use-package
このパッケージが必要な条件を指定すると、それらの条件が発生するまでロードしたくないと見なされます。
:demand Prevent deferred loading in all cases.
指定した他のオプションに関係なく、起動時にパッケージがロードされていることを確認してください。
更新
最近のコメントに基づいてこれを再検討します...上記で私が言ったことはすべて真実ですが、質問に正しく答えるとは思いません。ここでの根本的な問題は、実際にhtml-mode
はパッケージではなく、パッケージによって定義されたモードですsgml-mode
。これは私にとって期待通りに機能します:
(use-package sgml-mode
:mode ("\\.html\\'" . html-mode)
:config (add-hook 'html-mode-hook 'turn-off-auto-fill))
元の例では、指定:config
されたパッケージhtml-mode
がロードされないため、式は評価されません。:init
パッケージがロードされたかどうかに関係なく、initコードは常に評価されるため、同じ式を動作するように移動します。
:idle
かなり広範囲に使用しており、「:idle has been removed」の影響については調べていません。
auto-fill
オフにならない、つまり構成コードが実行されなかった理由は、まだわかりません。私は同じ問題を抱えています。
html-mode
は、パッケージではないことだと思います。少なくとも私の現在のバージョンのEmacsではhtml-mode
、パッケージで定義されていますsgml-mode
。そのため、指定されuse-package
たパッケージhtml-mode
がロードされたときに何かを行うように指示すると、そのようなパッケージはロードされないため、コードは実行されません。にhtmlモードのセットアップを配置する必要があります(use-package sgml-mode ....)
。
org-mode
にありhtml-mode
ます 同様の問題として、パッケージが呼び出されますorg-mode
が、ELPAパッケージが呼び出されorg
ます。たぶんそれが混乱しているのでしょうか(または私)?
この例により、との違いを理解しやすく:init
なりました:config
。ace-window
パッケージの例を見てみましょう(ただし、これはどのパッケージでもかまいません)。これをinit.el
ファイルに入れてください:
(use-package ace-window
:ensure t
:defer t
:config
(progn
(message "ace window: hello world")))
ここで、emacsを開き、*Messages*
バッファー内でhello world
メッセージがあるかどうかを確認します。パッケージが延期されているため、見つけることができません。からconfig
に変更しますinit
:
(use-package ace-window
:ensure t
:defer t
:init
(progn
(message "ace window: hello world")))
次に、emacsを閉じて再度開き、*Messages*
バッファーを調べます。ace window: hello world
コードはいつ:init
指定されても実行されるため、メッセージが表示されます。その場合、config
そのパッケージがロードされたときにのみ実行されます。
:init
と:preface
例の違いは何ですか?
:preface
問題のパッケージがされていても実行されて無効のに対し、:init
パッケージが有効になっている場合にのみ実行されます。