Bisakah saya menggunakan mode-org untuk membuat struktur .emacs saya atau file konfigurasi .el lainnya?


48

.emacsFile konfigurasi saya menjadi lebih besar dan lebih besar dan saya ingin mendapatkan gambaran dan penataan yang lebih baik dengan menambahkan judul, subpos dan mampu menyembunyikan atau menunjukkannya seperti yang dapat saya lakukan dengan Emacs org-mode.

Saya perhatikan bahwa saya dapat mengaktifkan org-modejuga di .emacsbuffer dan memungkinkan untuk menambahkan heading dan menutupnya. Tetapi apakah Emacs / Aquamacs masih dapat memuat kode Elisp dari dokumen jika saya menambahkan org-modejudul (yaitu, baris yang dimulai dengan satu tanda bintang atau lebih)?

Bisakah saya memiliki semua itu dalam satu file atau saya harus memiliki satu .*orgfile dan kemudian secara teratur mengekspor kode Elisp ke file lain?

Jawaban:


46

Ya, Anda pasti bisa, bisa Anda gunakan org-babel-load-fileuntuk melakukan ini.

Di Anda init.el, tuliskan yang berikut:

(require 'org)
(org-babel-load-file
 (expand-file-name "settings.org"
                   user-emacs-directory))

(Saya menggunakan ~ / .emacs.d / settings.org tetapi itu adalah preferensi pribadi). Dalam settings.orgfile Anda dapat mengaturnya sesuka Anda, dengan membungkus elisp di:

* Turn off menu bar
#+BEGIN_SRC emacs-lisp
(menu-bar-mode -1)
#+END_SRC

Saat Anda memulai Emacs, secara otomatis akan menentukan apakah file settings.org telah berubah, dan jika perlu, kusut untuk menghasilkan settings.elfile yang akan dimuat.


1
Bagaimana Anda mengubahnya untuk memuat yang terbaru orgdari elpa, alih-alih orgyang tersedia di emacs bersih? Tampaknya packagekode inisialisasi perlu ditarik keluar settings.orgdan dimasukkan ke dalam init.el?
mankoff

3
@mankoff Itu benar, ini milik saya init.el: (require 'package) (package-initialize) (setq custom-file "~/.emacs.d/custom.el") (when (file-exists-p custom-file) (load custom-file)) (require 'org) (org-babel-load-file (expand-file-name "settings.org" user-emacs-directory))
Lee H

2
@mankoff Maaf untuk pemformatan yang buruk, saya memiliki versi yang lebih mudah dibaca di dekat bagian atas writequit.org/org/settings.html
Lee H

2
Ada lebih dari beberapa contoh konfigurasi Emacs melek. Mungkin sudah waktunya untuk memulai indeks. Ini milik saya misalnya github.com/grettke/home
grettke

1
ingatlah untuk tidak mengonfigurasi hal-hal terkait org di dalam file org jika Anda ingin menggunakan versi terbaru org (9) yang tersedia di Melpa. Saya melakukan ini github.com/cescoferraro/dotfiles/blob/master/src/emacs.d/...
CESCO

23

Jika semua yang Anda inginkan adalah tampilan bagian dan navigasi selektif di antara judul, Anda tidak perlu mode Organisasi. Yang Anda butuhkan hanyalah mode Outline . Mode outline pada dasarnya adalah level header dan manajemen visibilitas bagian mode Org. Bahkan, mode Org pada awalnya adalah ekstensi penulis ke mode Outline, dan tumbuh, tumbuh, dan tumbuh ... Bahkan hari ini, org-modeberasal dari outline-mode.

Mode outline ada sebagai mode utama dan sebagai mode minor. Mode minor dapat digunakan dalam mode mayor apa pun. Anda dapat mengonfigurasinya untuk menggunakan format tajuk yang kompatibel dengan sintaks program Anda, dan banyak mode utama melakukannya, dengan mengatur outline-regexpvariabel ke regexp yang cocok dengan awal tajuk. Misalnya, ini adalah nilai default dalam mode Emacs Lisp:

";;;\\(;* [^ \t\n]\\|###autoload\\)\\|("

yaitu header bagian dimulai dengan tiga atau lebih titik koma dan satu ruang, atau tanda kurung buka di margin kiri. Variabel outline-levelberisi nama fungsi untuk menentukan kedalaman header; nilai default adalah panjang string yang cocok dengan outline-regexp, dan mode Emacs Lisp menimpanya untuk menetapkan kedalaman yang lebih besar ke (dan ;;;###autoload.

Jika Anda tidak menyukai format tajuk default, setel variabel outline-regexpdalam file deklarasi variabel lokal . Ini yang saya gunakan - semua header bagian saya terdiri dari ;;;diikuti oleh urutan klasik bintang:

;;; Local Variables:
;;; outline-regexp: ";;;\\*+\\|\\`"
;;; End:

Jika Anda ingin mode kecil Garis besar diaktifkan secara otomatis saat Anda memuat file, tambahkan baris berikut di bagian Variabel Lokal - perhatikan bahwa ini akan memperingatkan Anda tentang kode tidak aman di Emacs ≤23.x.

;;; eval: (outline-minor-mode 1)

Perintah untuk outline mode minor menggunakan C-c @awalan yang agak tidak nyaman secara default. Saya memindahkannya ke M-o(saya tidak pernah menggunakan binding facemenu), Anda dapat memilih kunci lain, atau untuk mereplikasi binding mode Org (yang telah sedikit berbeda dari mode Outline).


4
Saya yang kedua ini. Org hebat, tetapi untuk ini, yang Anda butuhkan hanyalah outline-mode. Dan akan lebih baik lagi jika Anda menggabungkannya dengan outshine-mode, outorg, dan navi-mode. Dengan outshine dan outorg, Anda tidak perlu menggunakan org-babel dan menyatukannya dalam file terpisah untuk mendapatkan komentar gaya-org-mode yang bagus. Berikut adalah inti dari kode elisp yang saya gunakan untuk membuat kode Python, elisp, dan shell bekerja dan lipat dengan baik dalam outline / outshine.
blujay

14

Pemrograman melek membawa Anda paling jauh ke sana, mode-org mendukungnya melalui org-babel . Dua solusi yang mungkin dijelaskan di blog @malabarba :

Cara paling sederhana adalah memuat mode-org, lalu menggunakan fitur unangling untuk memuat konfigurasi Emacs melek:

(require 'org)
(org-babel-load-file
 (expand-file-name "emacs-init.org"
                   user-emacs-directory))

Atau (untuk menghindari pemuatan org sepenuhnya), penguraian dapat dilakukan dengan primitif Emacs Lisp:

(defvar endless/init.org-message-depth 3
  "What depth of init.org headers to message at startup.")

(with-temp-buffer
  (insert-file "~/.emacs.d/init.org")
  (goto-char (point-min))
  (search-forward "\n* init.el")
  (while (not (eobp))
    (forward-line 1)
    (cond
     ;; Report Headers
     ((looking-at
       (format "\\*\\{2,%s\\} +.*$"
               endless/init.org-message-depth))
      (message "%s" (match-string 0)))
     ;; Evaluate Code Blocks
     ((looking-at "^#\\+BEGIN_SRC +emacs-lisp.*$")
      (let ((l (match-end 0)))
        (search-forward "\n#+END_SRC")
        (eval-region l (match-beginning 0))))
     ;; Finish on the next level-1 header
     ((looking-at "^\\* ")
      (goto-char (point-max))))))

6

Satu lagi suara untuk mode-outline. Sebagai contoh untuk pengorganisasian .emacssaya menggunakan sintaks berikut:

;;; HEADING:

bagian penting adalah ;;;dan:\n

(add-hook 'emacs-lisp-mode-hook 
          (lambda ()
            (make-local-variable 'outline-regexp)
            (setq outline-regexp "^;;; ")
            (make-local-variable 'outline-heading-end-regexp)
            (setq outline-heading-end-regexp ":\n")
            (outline-minor-mode 1)
            ))

Berikut ini contohnya .emacs:

;;; preliminaries:
;; load-path:
;; This little monster adds all non-dot dirs to Your load path recursively
(let* ((my-lisp-dir "~/.emacs.d/site-lisp/")
       (default-directory my-lisp-dir)
       (orig-load-path load-path))
  (setq load-path (cons my-lisp-dir nil))
  (normal-top-level-add-subdirs-to-load-path)
  (nconc load-path orig-load-path))

;; ...

;;; modes:

;; python-mode:
(setq py-install-directory "~/.emacs.d/site-lisp/python-mode")
(add-to-list 'load-path py-install-directory)
(require 'python-mode)

;; ...

;;; customizations:
(custom-set-variables
 '(blink-cursor-mode nil)
)

;; ...

Satu harus mengaktifkan outline-minor-modedan kemudian dua stroke kunci yang diperlukan adalah:

  • C-c @ C-t - menunjukkan struktur tingkat atas

    menjadi di atas

    ;;; preliminaries:
    ;;; modes:
    ;;; customizations:
    
  • C-c @ C-a - tampilkan lagi

Penggunaan khas adalah untuk menunjukkan struktur tingkat atas, pindah ke judul yang menarik, dan menunjukkan semua lagi.


1
dapatkah kita menggunakan arahan seperti dalam mode-org: misalnya #+STARTUP: overviewatau show allatau contentsopsi.
gelar doktor

@doctorate: dukungan mode-org untuk pelipatan juga dibangun di atas mode-outline. Kita tidak bisa menggunakan arahan saja: karena berbeda dengan mode-org - di elisp #bukan tanda komentar, jadi penerjemah elisp bawaan emacs akan bingung ketika mengenai #+STARTUPatau seperti ini. (atau apakah saya salah paham dengan komentar Anda?)
Adobe

Maksud saya apakah ada cara untuk menerapkan STARTUPdirektif di dalam orgstruct-mode, misalnya ini adalah buffer R tetapi ide yang sama: emacs.stackexchange.com/a/8065/2443
doktor

3

Pada jawaban SO berikut Anda akan melihat bagaimana melakukannya, contoh proyek menggunakan satu file org tunggal atau banyak, apa manfaat menggunakan Tong dan tautan ke dokumentasi.

https://stackoverflow.com/questions/25430029/whats-the-best-way-to-package-my-emacs-installation-packages-and-config-so-tha/25430745#25430745

Saya mengubah konfigurasi saya ke org beberapa bulan yang lalu, dan saya tidak sepenuhnya puas dengannya. Dibutuhkan konfigurasi dan pembacaan manual org untuk memiliki file org berguna yang membuatnya mudah untuk mengedit kode elisp. Kita harus mengaktifkan font src block (dinonaktifkan secara default -> menggunakan variabel per-file), periksa apakah mode lain tidak bertentangan untuk mengedit blok src (mode isi-otomatis), dll. Kita tidak ingin menggunakan Cc (backtick) (org-edit-src-block`) untuk mengedit blok src. Dan itu sedikit menghalangi untuk debug.

Saran saya adalah: mulai dengan memecah file init Anda menjadi potongan kecil, coba beberapa paket penyempitan di luar sana, gunakan helm-swoopuntuk navigasi cepat, dan kemudian pertimbangkan untuk menggunakannya org-mode.


1

Saya baru-baru ini menginvestasikan waktu untuk melakukan hal itu. Saya telah berakhir dengan konfigurasi yang - dipertahankan dengan mode-org - menggunakan 'paket-pakai' untuk menginstal secara otomatis paket-paket yang hilang - adalah repo github yang sejenis instal-otomatis (plug-shameless plug: https://github.com / pascalfleury / emacs-config )

Saya telah 'bootstrap' beberapa mesin (Linux dan Mac) dengan mengkloning repo dan menambahkan satu baris di ~ / .emacs et voila. Saya siap sesuai keinginan saya.

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.