Yorumlu metin veya eşdeğer çok satırlı dize sözdizimi?


10

Ortak lisp'te cl-heredoc kütüphanemiz var, EmacsLisp'de bir eşdeğeri var mı?


Emacs Lisp'in okuyucu makroları yok, bu yüzden başımın üstünde hayır diyebilirim, yok. Ama belki de bunlarla ne yapacağınıza dair ayrıntılar verdiyseniz, alternatif bir yaklaşım olabilir.
wvxvw

1
@wvxvw Muhtemelen çok satırlı bir dize ile ihtiyacım olanı yapabilirim, sadece iç tırnak kaçan tek tahriş.
ocodo

3
ELisp'de teller çok satırlıdır. Tırnak içinde tırnak içine alınmanın bir yolu gibi bir şey olabilir (format "next word is quoted %S" "word").
wvxvw

@wvxvw% S bunu yaptığını bilmiyordum, bir deneyeceğim. Kulağa ideal geliyor teşekkürler! Bir cevap verin, kabul ediyorum.
ocodo

"% S", CL format ~syönergesine (yani prin1) çok benzer . Böylece, argümanını okuyucu için uygun bir şekilde, tırnak işaretleri olan dizeler için yazdıracaktır.
wvxvw

Yanıtlar:


6

Sıradan Emacs Lisp dizeleri çok satırlı özelliktedir. Bunlara yeni satırlar koyabilirsiniz.

Bakmak, cl-heredocaradığınız şey "ham" dizeleri gibi geliyor. Bunları bir süre önce elisp'e eklemek için bir teklif vardı, ancak maalesef reddedildi. (Umarım yeniden diriltilmeyi beklemek yerine.) Elisp'in bunu kendisi için gereken okuyucu genişletilebilirlik özellikleri de yoktur.


Kullanıcı tanımlı okuyucu makroları konusu en son gündeme geldiğinde herkes lehine görünüyordu. Eminim ki tek engel insan çabasıdır.
Malabarba

2

Emac'leri bir init.el dosyası üzerinden yapılandırıyorsanız, bunun yerine init.org'u kullanmayı düşünebilirsiniz .

Sonra aşağıdaki gibi yapıları kullanabilirsiniz:

#+NAME: arbitrary-text
#+begin_src xml
<some>
  <random src="xml">or whatever... includes syntax highlighting!</random>
</some>
#+end_src


#+begin_src emacs-lisp :var arb-text=arbitrary-text
(eval `(defun a-test ()
         (format "whoop there it is: %S" ,arb-text)))
#+end_src

Oluşturulan .eldosyaya bakarsanız şöyle bir şey göreceksiniz:

(let ((arb-text "escaped text here..."))
  (eval `(defun a-test ()
           (format "whoop there it is: %S" ,arb-text))))

Metni ve kodu istediğiniz sırayla koyabilirsiniz. Kuruluş listelerine, tablolara vb. Ad ekleyebilirsiniz.

Bu, ortak çalışanları 'okuryazar programlama' kullanmaya da zorlamak istemeyeceğiniz bir kütüphane içinse, kodun büyük bir kısmını bir .eldosyaya koyabilir ve .elOrg kullanarak yardımcı bir dosya oluşturabilirsiniz - oluşturulan kodu revizyon kontrolüne kontrol edin.


3
Belki bir şey eksik, ama init.org'un çok satırlı dizelerle ne ilgisi olduğunu görmüyorum.
Malabarba

1
@Malabarba: tl; dr: elisp'inizi org modunda yazarsanız, heredocları anımsatan bir şey yapabilirsiniz; aksi takdirde, çok satırlı dize değişmezlerinin içindeki bazı şeylerden kaçmanız gerekir - çoğunlukla ` and "`, iirc.
SamB

Bu sorunun etrafında ilginç bir yol, ama benim davalarım için biraz fazla kıvrık.
ocodo
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.