목록 또는 데이터 구조를 조직 문서로 변환


15

healine, 내용 및 사용자에게 표시 될 다른 속성 목록을 다운로드하는 패키지를 작성하고 있습니다. 현재로서는 org-mode버퍼가 이러한 헤드 라인을 표시하는 좋은 방법 인 것 같습니다.

아래는이 목록이 어떻게 구성되는지에 대한 예입니다. 그것은 단지 예시 일 뿐이며, 필요에 따라 다른 구조로 쉽게 변환 할 수 있습니다.

'(("One headline" "Some much longer content."
   (property1 . value)
   (property2 . value))
  ("Second headline" "More much longer content."
   (property1 . value)
   (property2 . value)))

그러한 목록을 org-mode버퍼에 인쇄하는 기능이나 패키지가 있습니까?

다음은 원하는 출력입니다.

* One headline
  :PROPERTIES:
  :property1: value
  :property2: value
  :END:
Some much longer content.

* Second headline
  :PROPERTIES:
  :property1: value
  :property2: value
  :END:
More much longer content.

나는 이것을 수동으로 할 수있다. 나는 거기에 무언가가 있는지 궁금하다.


오 마이, 이것은 매우 유용합니다. +1. 조직조차도 수동으로 수행합니다. 참조하십시오 org-insert-drawer. (그러한 변환기가 존재한다면,이 함수는로 변환 할 것입니다 nil.)
Sean Allred

답변:


17

이것은의 일이다 org-element멋진 의 (!) 일 니콜라 Goaziou . 당신이 모르고 org-element조직 개발에 관심 이 있다면 이것은 당신이 고려해야 할 것입니다. 이 도구는 함께 사용할 수있는 훌륭한 도구 일뿐만 아니라 점점 강화되고 org있습니다. 특히 org-export( ox)뿐만 아니라 예를 들어 org.el.

점에서 요소의 "립스 표시"를 얻으려면 org-element-at-point또는을 사용하십시오 org-element-context. 버퍼 표현을 얻으려면을 사용하십시오 org-element-parse-buffer. 여기서 직접 관련이 없지만 org-element-map.

은 "LISP 표현"는의에서 이동하려면 element, secondary string또는 parse tree받는 사람 다시 "조직 구문 표현" 사용 org-element-interpret-data. 이다 는 "조직 구문 표현"에 "LISP 표현」을 켭니다 (전용) 방법. 그래도이 표현을 수동으로 작성하고 싶지 않을 것입니다. 다음은 첫 번째 헤드 라인을 나타내는 아주 작은 표현입니다.

(org-element-interpret-data
 '(headline (:title "One headline" :level 1)
            (property-drawer nil ((node-property (:key "property1" :value "value1"))
                                  (node-property (:key "property2" :value "value2"))))
            (#("Some much longer content."))))

두 헤드 라인을 모두 추가해야하는 경우 parse tree

(org-element-interpret-data
 '(org-data nil (headline (:title "One headline" :level 1)
                          (property-drawer nil ((node-property (:key "property1" :value "value1"))
                                                (node-property (:key "property2" :value "value2"))))
                          (#("Some much longer content.")))
            (headline (:title "Second headline" :level 1)
                          (property-drawer nil ((node-property (:key "property1" :value "value1"))
                                                (node-property (:key "property2" :value "value2"))))
                          (#("More much longer content.")))))

당신은 찾을 수 있습니다 토르스텐 Jolitzorg-dp라이브러리 (이러한 노력에 도움이됩니다 MELPA에 ).

라이브러리 org-dp는 로컬 수준에서 프로그래밍하기위한 것입니다. 즉, 파싱 된 요소에 대한 정보를 제외하고 (컨텍스트적인) 정보가없는 것입니다. 전역 수준에서 사용하는 것만 큼 편리한 로컬 수준에서 조직 파서 / 인터프리터 프레임 워크를 사용하도록 설계되었습니다 (사용 가능한 전체 구문 분석 트리 org-element-parse-buffer사용).

Thorsten의 자세한 설명은 여기를 참조하십시오 .

자세한 설명 gmane.emacs.orgmode은 실제로 적절한 포럼입니다.


이것은 훌륭한 답변이지만 org-dp가 org-element를 넘어서 무엇을 가져 오는지 이해할 수 없습니다.
Lyn Headley

org-dp대체 인터페이스입니다. AFAIR는 "요소"관점에서 조직 구문 / 형식으로 문서를 작성하도록 작성되었습니다. Org Element의 목표는 조직의 파서이자 일꾼이되는 것입니다. 나는 개인적으로 괜찮지 org-element만 대체 인터페이스를 갖는 것이 좋습니다.
rasmus

2

나는이 문제를 접하게 보았다. org-protocol.el을 살펴보십시오 . org-mode와 함께 제공됩니다. 특히 org-protocol-do-capture 함수는 org-store-link-props 함수를 사용하여 "parts"(이미 가지고있는 것으로 보이는) 목록을 org-mode 속성으로 변환 한 다음 org-capture를 호출합니다. 여기에는 % : link와 같은 자리 표시자가있는 캡처 템플릿이 있다고 가정합니다. 원하는대로 속성을 정의 할 수 있습니다.

사이트 API에서 제목, 작성자, 날짜, 소스 등을 긁는 것과 비슷한 작업을 수행했습니다 . 이 코드를 살펴보면 capture-templates.el도 참조하십시오.

JSON 데이터로 작업하는 경우 json.el 및 / 또는 request.el이 유용 할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.