Elisp의 Heredoc 또는 동등한 여러 줄 문자열 구문?


10

공통 리스프에는 cl-heredoc 라이브러리 가 있습니다. EmacsLisp에 해당하는 것이 있습니까?


이맥스 리스프에는 리더 매크로가 없기 때문에 제 머리 위에는 아니오라고 말하고 싶습니다. 그러나 어쩌면 당신이 이것들로 무엇을 할 것인지에 대해 자세히 설명했다면 다른 접근법이있을 수 있습니다.
wvxvw

1
@wvxvw 아마 여러 줄로 묶인 문자열로 필요한 것을 할 수 있습니다. 내부 인용 부호를 탈출하는 것이 유일한 자극입니다.
ocodo

3
글쎄, 문자열은 ELisp에서 여러 줄입니다. 따옴표 안의 따옴표를 처리하는 한 가지 방법은 다음과 같은 것 (format "next word is quoted %S" "word")입니다.
wvxvw

@wvxvw 나는 % S가 그것을 몰랐다, 나는 그것을 시도 할 것이다. 이상적입니다 감사합니다! 답변을 드리겠습니다. 수락하겠습니다.
ocodo

"% S"는 CL format ~s지시문 (예 :)과 매우 유사합니다 prin1. 따라서 인용 부호가있는 문자열의 경우 독자에게 적합한 방식으로 인수를 인쇄합니다.
wvxvw 2019

답변:


6

일반 Emacs Lisp 문자열은 여러 줄을 지원합니다. 간단히 개행을 넣을 수 있습니다.

에서 으르렁 cl-heredoc거리는 것은 "원시"문자열 인 것 같습니다. 잠시 뒤로 물러나 기 위해 이것들을 추가 하자는 제안이 있었지만 불행히도 거절당했습니다. (나는 그것이 부활 될 수 있기를 기대하기보다는 희망한다.) 이것을 구현하는데 필요한 독자 확장 성 기능도 가지고 있지 않다.


사용자 정의 리더 매크로에 관한 주제가 마지막에 나왔을 때 모두에게 호의를 보였습니다. 인간의 노력 만이 장애물이라고 확신합니다.
Malabarba

2

init.el 파일을 통해 emacs를 구성하는 경우 대신 init.org 를 사용하는 것이 좋습니다.

그런 다음 다음과 같은 구문을 사용할 수 있습니다.

#+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

생성 된 .el파일을 보면 다음과 같은 내용이 표시됩니다.

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

텍스트와 코드를 임의의 순서로 넣을 수 있습니다. 조직 목록, 테이블 등에 이름을 추가 할 수 있습니다.

공동 작업자가 'literate programming'을 사용하지 못하게하려는 라이브러리를위한 것이라면 대량의 코드를 .el파일에 넣고 .elOrg를 사용하여 보조 파일을 생성 할 수 있습니다. 생성 된 코드를 개정 제어로 확인하십시오.


3
어쩌면 나는 뭔가를 놓치고 있지만 init.org가 멀티 라인 문자열과 어떤 관련이 있는지 알 수 없습니다.
Malabarba

1
@Malabarba : tl; dr : 조직 모드에서 elisp를 작성하면 heredocs를 연상시키는 무언가를 할 수 있습니다. 그렇지 않으면, 당신은 당신의 멀티 라인 문자열 리터럴 ` and
안에서 무언가를 피해야

이것은 문제를 둘러싼 흥미로운 방법이지만 내 경우에는 약간 복잡합니다.
ocodo
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.