`use-package` dengan: config untuk mengatur variabel

9

Saya mencoba menggunakan use-packageuntuk mengatur org-modeinisialisasi saya . Saya memiliki yang berikut ini di ~/.emacsfile saya :

(use-package org-mode
  :mode "\\.org$"
  :ensure org
  :config
  (progn
    (setq org-log-done 'time)
    (setq org-confirm-babel-evaluate nil)
    (setq org-export-babel-evaluate nil)
    (setq org-html-validation-link nil)
    ;; ... more stuff
  )
)

Namun, tak satu pun dari :configinisialisasi itu dijalankan. Apakah saya salah nama paket atau sesuatu? Saya agak bingung pada nama paket vs nama ELPA vs perintah doa ....

Ken Williams
sumber
Lihatlah org.eldan Anda akan melihat menuju akhir: (provide 'org). Simbol yang ( org) adalah apa yang akan Anda gunakan untuk memuat paket, seperti dalam: (require 'org). Itulah yang akhirnya use-packagedilakukan, hanya dengan beberapa hal berguna di sekitarnya. Paket yang diberikan dapat mendefinisikan banyak mode sehingga paket dan nama mode tidak selalu sama. Ini benar-benar masalah yang sama dengan pertanyaan lain tentang html-modedidefinisikan oleh sgml-modepaket.
glucas
"Pertanyaan lain" @glucas menyebutkan: emacs.stackexchange.com/q/10396/8899
Ken Williams

Jawaban:

18

Di bawah ini akan berfungsi. Demi kejelasan, saya menggunakan :ensure org-plus-contribyang sedikit menyimpang dari contoh dalam pertanyaan Anda.

(use-package org
  :mode (("\\.org$" . org-mode))
  :ensure org-plus-contrib
  :config
  (progn
    ;; config stuff
    ))

Berikut adalah beberapa catatan penjelasan untuk yang di atas:

  • (use-package FEATURE-NAME
    • FEATURE-NAMEadalah apa yang ada di (provide ..)garis paket. Sebab org-mode, garis itu adalah (provide 'org).
  • :mode ((FILE-REGEXP . MAJOR-MODE))
    • FILE-REGEXPadalah ekspresi reguler yang Anda inginkan untuk mengaktifkan mode utama tertentu. Anda memiliki yang benar: "\\.org$".
    • MAJOR-MODEadalah nama mode utama yang ingin Anda aktifkan (termasuk -modebagian dari nama mode utama). Dalam hal ini, nama mode utama adalah org-mode.
    • Gaya :mode (FILE-REGEXP)yang Anda gunakan hanya akan bekerja jika FEATURE-NAMEdan MAJOR-MODEsama persis. Contoh: cperl-mode.
  • :ensure PACKAGE-NAME
    • PACKAGE-NAMEadalah apa yang saya lihat tercantum dalam daftar paket ( M-x package-list-packages). Untuk kejelasan, dalam solusi saya di atas, kami menginstal paket org-plus-contrib1 . Ini untuk menunjukkan nama fitur, mode utama dan nama paket yang sebenarnya tidak harus sama persis. Dan saya juga lebih suka menginstalnya daripada sekadar org-modemendapatkan semua contrib/paket barang juga! :)

1 Anda harus menambahkan (add-to-list 'package-archives '("org" . "http://orgmode.org/elpa/") t)konfigurasi emacs Anda untuk menginstal org-plus-contrib. Lihat halaman instalasi mode-org resmi untuk info lebih lanjut.


Catatan

Cara terbaik untuk membuat use-packagepotongan di atas berfungsi adalah menyimpannya ke konfigurasi emacs Anda terlebih dahulu, kemudian hapus versi Package Manager yang diinstal sebelumnya org, dan kemudian mulai kembali emacs.

Kaushal Modi
sumber
Terima kasih - Saya masih mengalami masalah dengan satu aspek, mendapatkan dukungan R org untuk bekerja menggunakan org-babel-do-load-languagesdalam konteks ini, itu memberikan kesalahan Error (use-package): org :config: Invalid function: org-babel-header-args-safe-fn. Bahasa lain (misalnya shatau perlatau emacs-lisp) tampaknya bekerja dengan baik.
Ken Williams
Itu terlihat seperti masalah yang tidak terkait. Apakah Anda menggunakan makro itu seperti yang dimaksudkan? Anda dapat mempelajari lebih lanjut dengan melakukannya C-h f org-babel-header-args-safe-fn. Anda juga tidak memiliki cuplikan kode itu di pertanyaan Anda. Jadi sulit untuk menebak apa yang terjadi.
Kaushal Modi
Tampaknya menjadi masalah ini: mail-archive.com/[email protected]/msg98818.html . Belum yakin bagaimana cara mengatasinya. Konfigurasi lengkap saya ada di sini: gist.github.com/kenahoo/8bca2ecc5cbe6e48a91c dan mengomentari (R . t)saluran menghentikan kesalahan. Jadi ya, masalah yang tidak berhubungan saya pikir. Mungkin perlu membuka pertanyaan lain ...
Ken Williams
Sepertinya mode-org saya sendiri rusak dengan pembaruan terbaru. Memperbaiki itu dengan melakukan emacs -Qmulai bersih, dengan hati-hati memuat 'packagekonfigurasi saya , mencopot pemasangan orgdan org-plus-contrib, kemudian menginstalnya kembali. Masalahnya dijelaskan di sini: emacs.stackexchange.com/a/13576/8899
Ken Williams
Ah, maaf soal itu. Mungkin menginstal instalasi org-plus-contriborgasme Anda berantakan dan Anda akhirnya memiliki campuran versi. btw, Anda perlu menginstal saja org-plus-contrib. Anda tidak perlu menginstal orgpaket terpisah juga.
Kaushal Modi
4

Dengan peringatan bahwa saya belum pernah menggunakan use-packagesebelumnya, saya yakin Anda ingin orgbukan org-mode. Saya mendasarkan ini pada kenyataan bahwa, pada Emacs saya, (package-installed-p 'org-mode)mengembalikan nihil sementara (package-installed-p 'org)tidak.

Aaron Harris
sumber