Mereka berbeda jika paket ditangguhkan, yaitu tidak dimuat sampai diperlukan. Dalam hal ini :init
akan dieksekusi pada saat file emacs Anda pertama kali dibaca, tetapi :config
akan dieksekusi pada saat paket itu sebenarnya dimuat.
Dalam contoh Anda, penggunaan mode
secara implisit mencegah pemuatan paket. Anda telah mengonfigurasi paket untuk dimuat saat pertama kali file html dikunjungi.
Anda bisa menggunakan :demand
untuk memastikan paket selalu dimuat saat startup, tetapi lebih mungkin apa yang ingin Anda lakukan di sini adalah memasukkan kait Anda :init
.
Dari docstring:
:init Code to run when `use-package' form evals.
Karena Anda meletakkan ini di file user-init Anda, itu pada dasarnya berarti akan berjalan saat startup.
:config Runs if and when package loads.
Jadi, jangan dijalankan sampai paket benar-benar dimuat ..
:defer Defer loading of package -- automatic if :commands, :bind, :bind*, :mode or :interpreter are used.
Perhatikan daftar hal-hal yang secara otomatis membuat paket ditangguhkan. Pada dasarnya jika Anda memberi tahu use-package
kondisi di mana Anda membutuhkan paket ini, ia menganggap Anda tidak ingin memuatnya sampai persyaratan itu muncul.
:demand Prevent deferred loading in all cases.
Pastikan paket dimuat saat startup, terlepas dari opsi apa yang telah Anda tentukan.
Memperbarui
Meninjau kembali ini berdasarkan pada komentar baru-baru ini ... Apa yang saya katakan di atas adalah benar, tetapi saya tidak berpikir dengan benar menjawab pertanyaan. Masalah root di sini sebenarnya html-mode
bukan paket, melainkan mode yang ditentukan oleh paket sgml-mode
. Ini berfungsi seperti yang diharapkan untuk saya:
(use-package sgml-mode
:mode ("\\.html\\'" . html-mode)
:config (add-hook 'html-mode-hook 'turn-off-auto-fill))
Dalam contoh asli, :config
ekspresi tidak pernah dievaluasi karena paket bernama html-mode
tidak pernah dimuat. Memindahkan ekspresi yang sama menjadi :init
berfungsi karena kode init selalu dievaluasi, terlepas dari apakah paket tersebut pernah dimuat.