답변:
최신 정보:
조직 모드 9.2 가 템플릿 확장 메커니즘을 변경 했음을 알지 못했습니다 . 여기서 및로 org-structure-template-alist
정의 된 블록에만 적용됩니다 . 그리고 같은 항목 은 더 이상 허용되지 않습니다."#+BEGIN_"
"#+END_"
("p" ":PROPERTIES:?:END:")
위 링크에서 언급했듯이 다른 "복잡한"템플릿은 function으로 정의 할 수 있으며 tempo-define-template
org-tempo를로드해야합니다 ( (require 'org-tempo)
). 실제로의 항목은 org-structure-template-alist
에 의해 org-tempo-tags
via tempo-define-template
로 변환 org-tempo
되며 org-tempo-tags
기본값은 다음 과 같습니다.
(("<i" . tempo-template-org-index)
("<A" . tempo-template-org-ascii)
("<H" . tempo-template-org-html)
("<L" . tempo-template-org-latex)
("<v" . tempo-template-org-verse)
("<s" . tempo-template-org-src)
("<q" . tempo-template-org-quote)
("<l" . tempo-template-org-export-latex)
("<h" . tempo-template-org-export-html)
("<E" . tempo-template-org-export)
("<e" . tempo-template-org-example)
("<C" . tempo-template-org-comment)
("<c" . tempo-template-org-center)
("<a" . tempo-template-org-export-ascii)
("<I" . tempo-template-org-include))
귀하의 경우 다음을 통해 템플릿을 정의 할 수 있습니다.
(tempo-define-template "my-property"
'(":PROPERTIES:" p ":END:" >)
"<p"
"Insert a property tempate")
아래 답변은 9.2 이전의 조직 모드 버전에서만 작동합니다.
예, 다음과 같이 항목을 추가 할 수 있습니다.
(add-to-list 'org-structure-template-alist '("p" ":PROPERTIES:?:END:"))
그런 다음 org 파일에서 <p
and 를 입력 TAB
하면 속성으로 확장되어 지점이에 위치 ?
합니다.
그리고을 입력하여 변수 문서에서 자세한 내용을 찾을 수 있습니다 C-h v org-structure-template-alist RET
.
tempo-define-template
내장 된 재미 가 있다는 것을 의미한다 . 자세한 내용은 docstring 을 참조하십시오.
그들이 org-mode의 커스터마이징에서 호환되지 않는 변화를 일으키는 빈도는 실제로 유감입니다.
다음 코드는 버전 9.2 이전의 org-mode의 이전 구조 템플리트를 제공합니다. 이 기능 org-complete-expand-structure-template
은 버전 9.1의 순수한 사본 org-try-structure-completion
이며 9.1 버전의 약간 수정 된 버전입니다. (나는 거기에 유형 확인을 추가했습니다.)
해당 코드를 설치 한 후에는 기존 템플릿을
(add-to-list 'org-structure-template-alist '("p" ":PROPERTIES:?:END:"))
다시 사용할 수 있습니다 .
(defvar org-structure-template-alist)
(defun org+-avoid-old-structure-templates (fun &rest args)
"Call FUN with ARGS with modified `org-structure-template-alist'.
Use a copy of `org-structure-template-alist' with all
old structure templates removed."
(let ((org-structure-template-alist
(cl-remove-if
(lambda (template)
(null (stringp (cdr template))))
org-structure-template-alist)))
(apply fun args)))
(eval-after-load "org"
'(when (version<= "9.2" (org-version))
(defun org-try-structure-completion ()
"Try to complete a structure template before point.
This looks for strings like \"<e\" on an otherwise empty line and
expands them."
(let ((l (buffer-substring (point-at-bol) (point)))
a)
(when (and (looking-at "[ \t]*$")
(string-match "^[ \t]*<\\([a-zA-Z]+\\)$" l)
(setq a (assoc (match-string 1 l) org-structure-template-alist))
(null (stringp (cdr a))))
(org-complete-expand-structure-template (+ -1 (point-at-bol)
(match-beginning 1)) a)
t)))
(defun org-complete-expand-structure-template (start cell)
"Expand a structure template."
(let ((rpl (nth 1 cell))
(ind ""))
(delete-region start (point))
(when (string-match "\\`[ \t]*#\\+" rpl)
(cond
((bolp))
((not (string-match "\\S-" (buffer-substring (point-at-bol) (point))))
(setq ind (buffer-substring (point-at-bol) (point))))
(t (newline))))
(setq start (point))
(when (string-match "%file" rpl)
(setq rpl (replace-match
(concat
"\""
(save-match-data
(abbreviate-file-name (read-file-name "Include file: ")))
"\"")
t t rpl)))
(setq rpl (mapconcat 'identity (split-string rpl "\n")
(concat "\n" ind)))
(insert rpl)
(when (re-search-backward "\\?" start t) (delete-char 1))))
(advice-add 'org-tempo-add-templates :around #'org+-avoid-old-structure-templates)
(add-hook 'org-tab-after-check-for-cycling-hook #'org-try-structure-completion)
(require 'org-tempo)
))
>
상징tempo-define-template
입니까? 그렇지 않다면 ... 정의에서 그 역할은 무엇입니까?