org-mtags: remove
* contrib/lisp/org-mtags.el: Delete file. * lisp/org.el (org-structure-template-alist): Remove <foo>-style tags. (org-complete-expand-structure-template): Don't handle <foo>-style tags.
This commit is contained in:
parent
ce2359eb80
commit
94939bd473
|
@ -1,255 +0,0 @@
|
||||||
;;; org-mtags.el --- Muse-like tags in Org-mode
|
|
||||||
|
|
||||||
;; Copyright (C) 2008-2014 Free Software Foundation, Inc.
|
|
||||||
;;
|
|
||||||
;; Author: Carsten Dominik <carsten at orgmode dot org>
|
|
||||||
;; Keywords: outlines, hypermedia, calendar, wp
|
|
||||||
;; Homepage: http://orgmode.org
|
|
||||||
;; Version: 0.01
|
|
||||||
;;
|
|
||||||
;; This file is not yet part of GNU Emacs.
|
|
||||||
;;
|
|
||||||
;; This program is free software; you can redistribute it and/or modify
|
|
||||||
;; it under the terms of the GNU General Public License as published by
|
|
||||||
;; the Free Software Foundation; either version 3, or (at your option)
|
|
||||||
;; any later version.
|
|
||||||
|
|
||||||
;; This program is distributed in the hope that it will be useful,
|
|
||||||
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
;; GNU General Public License for more details.
|
|
||||||
|
|
||||||
;; You should have received a copy of the GNU General Public License
|
|
||||||
;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
||||||
;;
|
|
||||||
;;; Commentary:
|
|
||||||
;;
|
|
||||||
;; This modules implements some of the formatting tags available in
|
|
||||||
;; Emacs Muse. This is not a way if adding new functionality, but just
|
|
||||||
;; a different way to write some formatting directives. The advantage is
|
|
||||||
;; that files written in this way can be read by Muse reasonably well,
|
|
||||||
;; and that this provides an alternative way of writing formatting
|
|
||||||
;; directives in Org, a way that some might find more pleasant to type
|
|
||||||
;; and look at that the Org's #+BEGIN..#+END notation.
|
|
||||||
|
|
||||||
;; The goal of this development is to make it easier for people to
|
|
||||||
;; move between both worlds as they see fit for different tasks.
|
|
||||||
|
|
||||||
;; The following muse tags will be translated during export into their
|
|
||||||
;; native Org equivalents:
|
|
||||||
;;
|
|
||||||
;; <br>
|
|
||||||
;; Needs to be at the end of a line. Will be translated to "\\".
|
|
||||||
;;
|
|
||||||
;; <example switches="-n -r">
|
|
||||||
;; Needs to be on a line by itself, similarly the </example> tag.
|
|
||||||
;; Will be translated into Org's #+BEGIN_EXAMPLE construct.
|
|
||||||
;;
|
|
||||||
;; <quote>
|
|
||||||
;; Needs to be on a line by itself, similarly the </quote> tag.
|
|
||||||
;; Will be translated into Org's #+BEGIN_QUOTE construct.
|
|
||||||
;;
|
|
||||||
;; <comment>
|
|
||||||
;; Needs to be on a line by itself, similarly the </comment> tag.
|
|
||||||
;; Will be translated into Org's #+BEGIN_COMMENT construct.
|
|
||||||
;;
|
|
||||||
;; <verse>
|
|
||||||
;; Needs to be on a line by itself, similarly the </verse> tag.
|
|
||||||
;; Will be translated into Org's #+BEGIN_VERSE construct.
|
|
||||||
;;
|
|
||||||
;; <contents>
|
|
||||||
;; This gets translated into "[TABLE-OF-CONTENTS]". It will not
|
|
||||||
;; trigger the production of a table of contents - that is done
|
|
||||||
;; in Org with the "#+OPTIONS: toc:t" setting. But it will define
|
|
||||||
;; the location where the TOC will be placed.
|
|
||||||
;;
|
|
||||||
;; <literal style="STYLE"> ;; only latex, html, and docbook supported
|
|
||||||
;; in Org.
|
|
||||||
;; Needs to be on a line by itself, similarly the </literal> tag.
|
|
||||||
;;
|
|
||||||
;; <src lang="LANG" switches="-n -r">
|
|
||||||
;; Needs to be on a line by itself, similarly the </src> tag.
|
|
||||||
;; Will be translated into Org's BEGIN_SRC construct.
|
|
||||||
;;
|
|
||||||
;; <include file="FILE" markup="MARKUP" lang="LANG"
|
|
||||||
;; prefix="str" prefix1="str" switches="-n -r">
|
|
||||||
;; Needs to be on a line by itself.
|
|
||||||
;; Will be translated into Org's #+INCLUDE construct.
|
|
||||||
;;
|
|
||||||
;; The lisp/perl/ruby/python tags can be implemented using the
|
|
||||||
;; `org-eval.el' module, which see.
|
|
||||||
|
|
||||||
(require 'org)
|
|
||||||
|
|
||||||
;;; Customization
|
|
||||||
|
|
||||||
(defgroup org-mtags nil
|
|
||||||
"Options concerning Muse tags in Org mode."
|
|
||||||
:tag "Org Muse Tags"
|
|
||||||
:group 'org)
|
|
||||||
|
|
||||||
(defface org-mtags ; similar to shadow
|
|
||||||
(org-compatible-face 'shadow
|
|
||||||
'((((class color grayscale) (min-colors 88) (background light))
|
|
||||||
(:foreground "grey50"))
|
|
||||||
(((class color grayscale) (min-colors 88) (background dark))
|
|
||||||
(:foreground "grey70"))
|
|
||||||
(((class color) (min-colors 8) (background light))
|
|
||||||
(:foreground "green"))
|
|
||||||
(((class color) (min-colors 8) (background dark))
|
|
||||||
(:foreground "yellow"))))
|
|
||||||
"Face for Muse-like tags in Org."
|
|
||||||
:group 'org-mtags
|
|
||||||
:group 'org-faces)
|
|
||||||
|
|
||||||
(defcustom org-mtags-prefer-muse-templates t
|
|
||||||
"Non-nil means prefere Muse tags for structure elements.
|
|
||||||
This is relevane when expanding the templates defined in the variable
|
|
||||||
`org-structure-templates'."
|
|
||||||
:group 'org-mtags
|
|
||||||
:type 'boolean)
|
|
||||||
|
|
||||||
(defconst org-mtags-supported-tags
|
|
||||||
'("example" "quote" "comment" "verse" "contents" "literal" "src" "include")
|
|
||||||
"The tags that are supported by org-mtags.el for conversion.
|
|
||||||
In addition to this list, the <br> tag is supported as well.")
|
|
||||||
|
|
||||||
(defconst org-mtags-fontification-re
|
|
||||||
(concat
|
|
||||||
"^[ \t]*</?\\("
|
|
||||||
(mapconcat 'identity org-mtags-supported-tags "\\|")
|
|
||||||
"\\)\\>[^>]*>\\|<br>[ \t]*$")
|
|
||||||
"Regular expression used for fontifying muse tags.")
|
|
||||||
|
|
||||||
(defun org-mtags-replace ()
|
|
||||||
"Replace Muse-like tags with the appropriate Org constructs.
|
|
||||||
The is done in the entire buffer."
|
|
||||||
(interactive) ;; FIXME
|
|
||||||
(let ((re (concat "^[ \t]*\\(</?\\("
|
|
||||||
(mapconcat 'identity org-mtags-supported-tags "\\|")
|
|
||||||
"\\)\\>\\)"))
|
|
||||||
info tag rpl style markup lang file prefix prefix1 switches)
|
|
||||||
;; First, do the <br> tag
|
|
||||||
(goto-char (point-min))
|
|
||||||
(while (re-search-forward "<br>[ \t]*$" nil t)
|
|
||||||
(replace-match "\\\\" t t))
|
|
||||||
;; Now, all the other tags
|
|
||||||
(goto-char (point-min))
|
|
||||||
(while (re-search-forward re nil t)
|
|
||||||
(goto-char (match-beginning 1))
|
|
||||||
(setq info (org-mtags-get-tag-and-attributes))
|
|
||||||
(if (not info)
|
|
||||||
(end-of-line 1)
|
|
||||||
(setq tag (plist-get info :tag))
|
|
||||||
(cond
|
|
||||||
((equal tag "contents")
|
|
||||||
(setq rpl "[TABLE-OF-CONTENTS]")
|
|
||||||
;; FIXME: also trigger TOC in options-plist?????
|
|
||||||
)
|
|
||||||
((member tag '("quote" "comment" "verse"))
|
|
||||||
(if (plist-get info :closing)
|
|
||||||
(setq rpl (format "#+END_%s" (upcase tag)))
|
|
||||||
(setq rpl (format "#+BEGIN_%s" (upcase tag)))))
|
|
||||||
((equal tag "literal")
|
|
||||||
(setq style (plist-get info :style))
|
|
||||||
(and style (setq style (downcase style)))
|
|
||||||
(if (plist-get info :closing)
|
|
||||||
(setq rpl (cond
|
|
||||||
((member style '("latex"))
|
|
||||||
"#+END_LaTeX")
|
|
||||||
((member style '("html"))
|
|
||||||
"#+END_HTML")
|
|
||||||
((member style '("docbook"))
|
|
||||||
"#+END_DOCBOOK")
|
|
||||||
((member style '("ascii"))
|
|
||||||
"#+END_ASCII")))
|
|
||||||
(setq rpl (cond
|
|
||||||
((member style '("latex"))
|
|
||||||
"#+BEGIN_LaTeX")
|
|
||||||
((member style '("html"))
|
|
||||||
"#+BEGIN_HTML")
|
|
||||||
((member style '("ascii"))
|
|
||||||
"#+BEGIN_ASCII")))))
|
|
||||||
((equal tag "example")
|
|
||||||
(if (plist-get info :closing)
|
|
||||||
(setq rpl "#+END_EXAMPLE")
|
|
||||||
(setq rpl "#+BEGIN_EXAMPLE")
|
|
||||||
(when (setq switches (plist-get info :switches))
|
|
||||||
(setq rpl (concat rpl " " switches)))))
|
|
||||||
((equal tag "src")
|
|
||||||
(if (plist-get info :closing)
|
|
||||||
(setq rpl "#+END_SRC")
|
|
||||||
(setq rpl "#+BEGIN_SRC")
|
|
||||||
(when (setq lang (plist-get info :lang))
|
|
||||||
(setq rpl (concat rpl " " lang))
|
|
||||||
(when (setq switches (plist-get info :switches))
|
|
||||||
(setq rpl (concat rpl " " switches))))))
|
|
||||||
((equal tag "include")
|
|
||||||
(setq file (plist-get info :file)
|
|
||||||
markup (downcase (plist-get info :markup))
|
|
||||||
lang (plist-get info :lang)
|
|
||||||
prefix (plist-get info :prefix)
|
|
||||||
prefix1 (plist-get info :prefix1)
|
|
||||||
switches (plist-get info :switches))
|
|
||||||
(setq rpl "#+INCLUDE")
|
|
||||||
(setq rpl (concat rpl " " (prin1-to-string file)))
|
|
||||||
(when markup
|
|
||||||
(setq rpl (concat rpl " " markup))
|
|
||||||
(when (and (equal markup "src") lang)
|
|
||||||
(setq rpl (concat rpl " " lang))))
|
|
||||||
(when prefix
|
|
||||||
(setq rpl (concat rpl " :prefix " (prin1-to-string prefix))))
|
|
||||||
(when prefix1
|
|
||||||
(setq rpl (concat rpl " :prefix1 " (prin1-to-string prefix1))))
|
|
||||||
(when switches
|
|
||||||
(setq rpl (concat rpl " " switches)))))
|
|
||||||
(when rpl
|
|
||||||
(goto-char (plist-get info :match-beginning))
|
|
||||||
(delete-region (point-at-bol) (plist-get info :match-end))
|
|
||||||
(insert rpl))))))
|
|
||||||
|
|
||||||
(defun org-mtags-get-tag-and-attributes ()
|
|
||||||
"Parse a Muse-like tag at point ant rturn the information about it.
|
|
||||||
The return value is a property list which contains all the attributes
|
|
||||||
with string values. In addition, it reutnrs the following properties:
|
|
||||||
|
|
||||||
:tag The tag as a string.
|
|
||||||
:match-beginning The beginning of the match, just before \"<\".
|
|
||||||
:match-end The end of the match, just after \">\".
|
|
||||||
:closing t when the tag starts with \"</\"."
|
|
||||||
(when (looking-at "<\\(/\\)?\\([a-zA-Z]+\\>\\)\\([^>]*\\)>")
|
|
||||||
(let ((start 0)
|
|
||||||
tag rest prop attributes endp val)
|
|
||||||
(setq tag (org-match-string-no-properties 2)
|
|
||||||
endp (match-end 1)
|
|
||||||
rest (and (match-end 3)
|
|
||||||
(org-match-string-no-properties 3))
|
|
||||||
attributes (list :tag tag
|
|
||||||
:match-beginning (match-beginning 0)
|
|
||||||
:match-end (match-end 0)
|
|
||||||
:closing endp))
|
|
||||||
(when rest
|
|
||||||
(while (string-match "\\([a-zA-Z]+\\)=\\([^ \t\n>]+\\|\"[^>]+\"\\)"
|
|
||||||
rest start)
|
|
||||||
(setq start (match-end 0)
|
|
||||||
prop (org-match-string-no-properties 1 rest)
|
|
||||||
val (org-remove-double-quotes
|
|
||||||
(org-match-string-no-properties 2 rest)))
|
|
||||||
(setq attributes (plist-put attributes
|
|
||||||
(intern (concat ":" prop)) val))))
|
|
||||||
attributes)))
|
|
||||||
|
|
||||||
(defun org-mtags-fontify-tags (limit)
|
|
||||||
"Fontify the muse-like tags."
|
|
||||||
(while (re-search-forward org-mtags-fontification-re limit t)
|
|
||||||
(add-text-properties (match-beginning 0) (match-end 0)
|
|
||||||
'(face org-mtags font-lock-multiline t
|
|
||||||
font-lock-fontified t))))
|
|
||||||
|
|
||||||
(add-hook 'org-export-preprocess-hook 'org-mtags-replace)
|
|
||||||
(add-hook 'org-font-lock-hook 'org-mtags-fontify-tags)
|
|
||||||
|
|
||||||
(provide 'org-mtags)
|
|
||||||
|
|
||||||
;;; org-mtags.el ends here
|
|
41
lisp/org.el
41
lisp/org.el
|
@ -12240,27 +12240,24 @@ keywords relative to each registered export back-end."
|
||||||
"TITLE:" "TODO:" "TYP_TODO:" "SELECT_TAGS:" "EXCLUDE_TAGS:"))
|
"TITLE:" "TODO:" "TYP_TODO:" "SELECT_TAGS:" "EXCLUDE_TAGS:"))
|
||||||
|
|
||||||
(defcustom org-structure-template-alist
|
(defcustom org-structure-template-alist
|
||||||
'(("s" "#+BEGIN_SRC ?\n\n#+END_SRC" "<src lang=\"?\">\n\n</src>")
|
'(("s" "#+BEGIN_SRC ?\n\n#+END_SRC")
|
||||||
("e" "#+BEGIN_EXAMPLE\n?\n#+END_EXAMPLE" "<example>\n?\n</example>")
|
("e" "#+BEGIN_EXAMPLE\n?\n#+END_EXAMPLE")
|
||||||
("q" "#+BEGIN_QUOTE\n?\n#+END_QUOTE" "<quote>\n?\n</quote>")
|
("q" "#+BEGIN_QUOTE\n?\n#+END_QUOTE")
|
||||||
("v" "#+BEGIN_VERSE\n?\n#+END_VERSE" "<verse>\n?\n</verse>")
|
("v" "#+BEGIN_VERSE\n?\n#+END_VERSE")
|
||||||
("V" "#+BEGIN_VERBATIM\n?\n#+END_VERBATIM" "<verbatim>\n?\n</verbatim>")
|
("V" "#+BEGIN_VERBATIM\n?\n#+END_VERBATIM")
|
||||||
("c" "#+BEGIN_CENTER\n?\n#+END_CENTER" "<center>\n?\n</center>")
|
("c" "#+BEGIN_CENTER\n?\n#+END_CENTER")
|
||||||
("l" "#+BEGIN_LaTeX\n?\n#+END_LaTeX"
|
("l" "#+BEGIN_LaTeX\n?\n#+END_LaTeX")
|
||||||
"<literal style=\"latex\">\n?\n</literal>")
|
("L" "#+LaTeX: ")
|
||||||
("L" "#+LaTeX: " "<literal style=\"latex\">?</literal>")
|
("h" "#+BEGIN_HTML\n?\n#+END_HTML")
|
||||||
("h" "#+BEGIN_HTML\n?\n#+END_HTML"
|
("H" "#+HTML: ")
|
||||||
"<literal style=\"html\">\n?\n</literal>")
|
("a" "#+BEGIN_ASCII\n?\n#+END_ASCII")
|
||||||
("H" "#+HTML: " "<literal style=\"html\">?</literal>")
|
("A" "#+ASCII: ")
|
||||||
("a" "#+BEGIN_ASCII\n?\n#+END_ASCII" "")
|
("i" "#+INDEX: ?")
|
||||||
("A" "#+ASCII: " "")
|
("I" "#+INCLUDE: %file ?"))
|
||||||
("i" "#+INDEX: ?" "#+INDEX: ?")
|
|
||||||
("I" "#+INCLUDE: %file ?"
|
|
||||||
"<include file=%file markup=\"?\">"))
|
|
||||||
"Structure completion elements.
|
"Structure completion elements.
|
||||||
This is a list of abbreviation keys and values. The value gets inserted
|
This is a list of abbreviation keys and values. The value gets inserted
|
||||||
if you type `<' followed by the key and then press the completion key,
|
if you type `<' followed by the key and then press the completion key,
|
||||||
usually `M-TAB'. %file will be replaced by a file name after prompting
|
usually `TAB'. %file will be replaced by a file name after prompting
|
||||||
for the file using completion. The cursor will be placed at the position
|
for the file using completion. The cursor will be placed at the position
|
||||||
of the `?` in the template.
|
of the `?` in the template.
|
||||||
There are two templates for each key, the first uses the original Org syntax,
|
There are two templates for each key, the first uses the original Org syntax,
|
||||||
|
@ -12271,8 +12268,9 @@ variable `org-mtags-prefer-muse-templates'."
|
||||||
:type '(repeat
|
:type '(repeat
|
||||||
(list
|
(list
|
||||||
(string :tag "Key")
|
(string :tag "Key")
|
||||||
(string :tag "Template")
|
(string :tag "Template")))
|
||||||
(string :tag "Muse Template"))))
|
:version 24.4
|
||||||
|
:package-version ("Org" . "8.3"))
|
||||||
|
|
||||||
(defun org-try-structure-completion ()
|
(defun org-try-structure-completion ()
|
||||||
"Try to complete a structure template before point.
|
"Try to complete a structure template before point.
|
||||||
|
@ -12289,8 +12287,7 @@ expands them."
|
||||||
|
|
||||||
(defun org-complete-expand-structure-template (start cell)
|
(defun org-complete-expand-structure-template (start cell)
|
||||||
"Expand a structure template."
|
"Expand a structure template."
|
||||||
(let* ((musep (org-bound-and-true-p org-mtags-prefer-muse-templates))
|
(let ((rpl (nth 1 cell))
|
||||||
(rpl (nth (if musep 2 1) cell))
|
|
||||||
(ind ""))
|
(ind ""))
|
||||||
(delete-region start (point))
|
(delete-region start (point))
|
||||||
(when (string-match "\\`[ \t]*#\\+" rpl)
|
(when (string-match "\\`[ \t]*#\\+" rpl)
|
||||||
|
|
Loading…
Reference in New Issue