`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 ....


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.


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/emacs-orgmode@gnu.org/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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.