Edit: Sementara aku masih belajar tali dari Babel, saya sudah membaca tentang system-type
, emacs-version
dan window-system
variabel, yang terdengar seperti mereka berisi semua informasi yang saya butuhkan untuk mendapatkan perilaku saya sudah dijelaskan di sini. Bahkan, saya hanya bisa membungkus kode khusus OS dalam kondisi ketika diperlukan dalam blok kode. Saya bertanya-tanya apakah ini cara terbaik untuk melakukan ini, namun.
Saya menggunakan Babel untuk menulis file konfigurasi melek untuk Emacs. Saya ingin file konfigurasi saya berfungsi pada semua platform yang sering saya gunakan (jadi pada dasarnya berbagai distro Linux dan Mac), dan bagian dari ini melibatkan pengaturan yang bergantung pada sistem (mis., Font default yang saya gunakan pada Mac saya adalah berbeda dari yang saya gunakan di Linux Mint).
Sementara saya yakin saya telah melihat cara untuk mengenali apakah saya menggunakan Mac menggunakan elisp atau tidak (dan karenanya dapat membungkus pengaturan spesifik sistem dalam beberapa jenis kondisi berdasarkan ini), saya bertanya-tanya apakah Org / Babel memiliki beberapa cara untuk mendeteksi jenis sistem yang saya gunakan yang memungkinkan saya untuk menulis blok kode yang berbeda untuk sistem yang berbeda. Lebih baik lagi, dapatkah ini dilakukan untuk versi Emacs yang berbeda? Saya membayangkan kode yang akan terlihat seperti berikut ini (dengan contoh platform dan header dibuat-buat)
#+Platform: LinuxMint
#+Emacs: GNU Emacs
#+EmacsVersion: 24+
#+BEGIN_SOURCE EMACS-LISP
[Some configuration for Linux Mint and GNU Emacs 24+]
#+END_SOURCE
#+Platform: LinuxMint
#+Emacs: GNU Emacs
#+EmacsVersion: 22.1
#+BEGIN_SOURCE EMACS-LISP
[Some other configuration for Linux Mint and GNU Emacs 22.1]
#+END_SOURCE
#+Platform: Mac
#+Emacs: Aquamacs
#+EmacsVersion: 24+
#+BEGIN_SOURCE EMACS-LISP
[Some other configuration for Mac and Emacs 24+]
#+END_SOURCE
Ikan besar untuk digoreng adalah platform, karena versi emacs dan emacsen yang saya gunakan mungkin dapat disimpulkan dari ini dalam kebanyakan situasi. Saya harus menyebutkan bahwa platform bisa lebih kasar daripada yang saya sarankan di atas. (Saya benar-benar hanya perlu tahu apakah saya menggunakan Linux, Windows, atau distribusi Mac.) Juga, jika ini bukan fitur bawaan, bagaimana saya bisa membuat header kode-blok seperti ini?
Sunting: Saya kira itu juga lebih cenderung terlihat seperti berikut ini.
#+BEGIN_SOURCE EMACS-LISP :os Linux :emacs GNU :emacs-version 24+
[Some configuration for Linux and GNU Emacs 24+]
#+END_SOURCE
Saya membayangkan ini dapat ditemukan di suatu tempat di dokumentasi jika ada tetapi saya tidak bisa menemukan daftar header yang komprehensif untuk blok kode. Terima kasih atas bantuan yang Anda berikan!
Jawaban:
Saya tidak yakin bagaimana Anda bisa mengekstrak ini ke header kustom, tetapi Anda dapat memasukkan ELISP mentah dalam argumen header Anda. Jadi, untuk kusut secara kondisional, Anda cukup memberi tanda centang pada
:tangle
argumen Anda seperti:Ketika file menjadi kusut dan ekspresi ELISP "
(eq system-type 'gnu/linux)
" benar, itu akan mengembalikan ""yes"
", yang akan kusut ke nama file default untuk blok bahasa itu. Anda dapat meletakkan nama file di sana juga jika Anda menginginkannya. Jika kondisinya kembalinil
, blok tidak kusut.Beberapa tipe sistem lain yang dapat Anda mainkan adalah "
windows-nt
" untuk beberapa OS Windows dan "darwin
" untuk Mac OSX. Informasi sistem lainnya (Termasuk "emacs-version
" seperti yang Anda sebutkan) dapat diambil menggunakan variabel yang dijelaskan di halaman ini .Jika argumen header ini menjadi berat, Anda mungkin dapat memiliki bagian di
.emacs
mana Anda mendefinisikan beberapa fungsi yang hanya mengembalikan nama file untuk tipe sistem tertentu. Dengan begitu Anda hanya perlu satu panggilan fungsi di ponsel Anda:tangle
.Ketika datang ke file konfigurasi Anda sendiri, apa pun yang paling nyaman bagi Anda adalah pilihan terbaik ... Tapi ada cara lain untuk mendekati masalah Anda, misalnya, kemungkinan lain adalah memiliki sesuatu seperti:
... di bagian atas
.org
file Anda , dan minta setiap blok spesifik platform memiliki argumen kusut yang menunjuk ke file masing-masing ... Seperti ":tangle windows.el
" untuk sepotong kode khusus Windows.Strategi lain yang mungkin adalah membuat banyak
.org
file untuk sistem yang berbeda, dan untuk(org-babel-load-file ...)
yang menggunakan sistem Anda menggunakan variabel di atas dalam(cond ...)
blok seperti yang di atas. Dengan cara ini Anda dapat menghindari logika kusut sama sekali.Namun kemungkinan lain adalah dengan hanya menulis kode platform-independen dalam konfigurasi Emacs Anda - dan untuk menjaga tweak khusus sistem di komputer Anda
.emacs
. (Ini adalah cara saya melakukannya.)Ada argumen header di file info Emacs. Anda bisa sampai di sana dengan "
C-h i
,,"mOrg Mode"
lalu"mSpecific header arguments"
". Ini juga online di sini .Ada juga argumen tajuk khusus bahasa dan informasi lainnya di sini. . (Yang juga ada di file Info.)
sumber
C-h <thing>
kabel ketika Anda melihat sesuatu yang menarik, atau dengan membaca kode orang lain. Semoga berhasil..!