mirror of
git://git.sv.gnu.org/emacs.git
synced 2025-12-15 10:30:25 -08:00
Merge Org version 8.2.3a.
This commit is contained in:
parent
f201cf3a81
commit
271672fad7
102 changed files with 49092 additions and 10745 deletions
|
|
@ -27,31 +27,25 @@
|
|||
;;; Commentary:
|
||||
;;
|
||||
;; This module implements inline tasks in Org-mode. Inline tasks are
|
||||
;; tasks that have all the properties of normal outline nodes, including
|
||||
;; the ability to store meta data like scheduling dates, TODO state, tags
|
||||
;; and properties. However, these nodes are treated specially by the
|
||||
;; visibility cycling and export commands.
|
||||
;; tasks that have all the properties of normal outline nodes,
|
||||
;; including the ability to store meta data like scheduling dates,
|
||||
;; TODO state, tags and properties. However, these nodes are treated
|
||||
;; specially by the visibility cycling.
|
||||
;;
|
||||
;; Visibility cycling exempts these nodes from cycling. So whenever their
|
||||
;; parent is opened, so are these tasks. This will only work with
|
||||
;; `org-cycle', so if you are also using other commands to show/hide
|
||||
;; entries, you will occasionally find these tasks to behave like
|
||||
;; all other outline nodes, seemingly splitting the text of the parent
|
||||
;; into children.
|
||||
;; Visibility cycling exempts these nodes from cycling. So whenever
|
||||
;; their parent is opened, so are these tasks. This will only work
|
||||
;; with `org-cycle', so if you are also using other commands to
|
||||
;; show/hide entries, you will occasionally find these tasks to behave
|
||||
;; like all other outline nodes, seemingly splitting the text of the
|
||||
;; parent into children.
|
||||
;;
|
||||
;; Export commands do not treat these nodes as part of the sectioning
|
||||
;; structure, but as a special inline text that is either removed, or
|
||||
;; formatted in some special way. This in handled by
|
||||
;; `org-inlinetask-export' and `org-inlinetask-export-templates'
|
||||
;; variables.
|
||||
;; Special fontification of inline tasks, so that they can be
|
||||
;; immediately recognized. From the stars of the headline, only the
|
||||
;; first and the last two will be visible, the others will be hidden
|
||||
;; using the `org-hide' face.
|
||||
;;
|
||||
;; Special fontification of inline tasks, so that they can be immediately
|
||||
;; recognized. From the stars of the headline, only the first and the
|
||||
;; last two will be visible, the others will be hidden using the
|
||||
;; `org-hide' face.
|
||||
;;
|
||||
;; An inline task is identified solely by a minimum outline level, given
|
||||
;; by the variable `org-inlinetask-min-level', default 15.
|
||||
;; An inline task is identified solely by a minimum outline level,
|
||||
;; given by the variable `org-inlinetask-min-level', default 15.
|
||||
;;
|
||||
;; If you need to have a time planning line (DEADLINE etc), drawers,
|
||||
;; for example LOGBOOK of PROPERTIES, or even normal text as part of
|
||||
|
|
@ -111,69 +105,6 @@ When nil, the first star is not shown."
|
|||
:tag "Org Inline Tasks"
|
||||
:group 'org-structure)
|
||||
|
||||
(defcustom org-inlinetask-export t
|
||||
"Non-nil means export inline tasks.
|
||||
When nil, they will not be exported."
|
||||
:group 'org-inlinetask
|
||||
:type 'boolean)
|
||||
|
||||
(defvar org-inlinetask-export-templates
|
||||
'((html "<div class=\"inlinetask\"><b>%s%s</b><br />%s</div>"
|
||||
'((unless (eq todo "")
|
||||
(format "<span class=\"%s %s\">%s%s</span> "
|
||||
class todo todo priority))
|
||||
heading content))
|
||||
(odt "%s" '((org-odt-format-inlinetask heading content
|
||||
todo priority tags)))
|
||||
|
||||
(latex "\\begin\{description\}\n\\item[%s%s]~%s\\end\{description\}"
|
||||
'((unless (eq todo "") (format "\\textsc\{%s%s\} " todo priority))
|
||||
heading content))
|
||||
(ascii " -- %s%s%s"
|
||||
'((unless (eq todo "") (format "%s%s " todo priority))
|
||||
heading
|
||||
(unless (eq content "")
|
||||
(format "\n ¦ %s"
|
||||
(mapconcat 'identity (org-split-string content "\n")
|
||||
"\n ¦ ")))))
|
||||
(docbook "<variablelist>
|
||||
<varlistentry>
|
||||
<term>%s%s</term>
|
||||
<listitem><para>%s</para></listitem>
|
||||
</varlistentry>
|
||||
</variablelist>"
|
||||
'((unless (eq todo "") (format "%s%s " todo priority))
|
||||
heading content)))
|
||||
"Templates for inline tasks in various exporters.
|
||||
|
||||
This variable is an alist in the shape of \(BACKEND STRING OBJECTS\).
|
||||
|
||||
BACKEND is the name of the backend for the template \(ascii, html...\).
|
||||
|
||||
STRING is a format control string.
|
||||
|
||||
OBJECTS is a list of elements to be substituted into the format
|
||||
string. They can be of any type, from a string to a form
|
||||
returning a value (thus allowing conditional insertion). A nil
|
||||
object will be substituted as the empty string. Obviously, there
|
||||
must be at least as many objects as %-sequences in the format
|
||||
string.
|
||||
|
||||
Moreover, the following special keywords are provided: `todo',
|
||||
`priority', `heading', `content', `tags'. If some of them are not
|
||||
defined in an inline task, their value is the empty string.
|
||||
|
||||
As an example, valid associations are:
|
||||
|
||||
\(html \"<ul><li>%s <p>%s</p></li></ul>\" \(heading content\)\)
|
||||
|
||||
or, with the additional package \"todonotes\" for LaTeX,
|
||||
|
||||
\(latex \"\\todo[inline]{\\textbf{\\textsf{%s %s}}\\linebreak{} %s}\"
|
||||
'\(\(unless \(eq todo \"\"\)
|
||||
\(format \"\\textsc{%s%s}\" todo priority\)\)
|
||||
heading content\)\)\)")
|
||||
|
||||
(defvar org-odd-levels-only)
|
||||
(defvar org-keyword-time-regexp)
|
||||
(defvar org-drawer-regexp)
|
||||
|
|
@ -328,89 +259,6 @@ If the task has an end part, also demote it."
|
|||
(goto-char beg)
|
||||
(org-fixup-indentation diff)))))))
|
||||
|
||||
(defvar org-export-current-backend) ; dynamically bound in org-exp.el
|
||||
(defun org-inlinetask-export-handler ()
|
||||
"Handle headlines with level larger or equal to `org-inlinetask-min-level'.
|
||||
Either remove headline and meta data, or do special formatting."
|
||||
(goto-char (point-min))
|
||||
(let* ((keywords-re (concat "^[ \t]*" org-keyword-time-regexp))
|
||||
(inline-re (concat (org-inlinetask-outline-regexp) ".*")))
|
||||
(while (re-search-forward inline-re nil t)
|
||||
(let ((headline (match-string 0))
|
||||
(beg (point-at-bol))
|
||||
(end (copy-marker (save-excursion
|
||||
(org-inlinetask-goto-end) (point))))
|
||||
content)
|
||||
;; Delete SCHEDULED, DEADLINE...
|
||||
(while (re-search-forward keywords-re end t)
|
||||
(delete-region (point-at-bol) (1+ (point-at-eol))))
|
||||
(goto-char beg)
|
||||
;; Delete drawers
|
||||
(while (re-search-forward org-drawer-regexp end t)
|
||||
(when (save-excursion (re-search-forward org-property-end-re nil t))
|
||||
(delete-region beg (1+ (match-end 0)))))
|
||||
;; Get CONTENT, if any.
|
||||
(goto-char beg)
|
||||
(forward-line 1)
|
||||
(unless (= (point) end)
|
||||
(setq content (buffer-substring (point)
|
||||
(save-excursion (goto-char end)
|
||||
(forward-line -1)
|
||||
(point)))))
|
||||
;; Remove the task.
|
||||
(goto-char beg)
|
||||
(delete-region beg end)
|
||||
(when (and org-inlinetask-export
|
||||
(assq org-export-current-backend
|
||||
org-inlinetask-export-templates))
|
||||
;; Format CONTENT, if appropriate.
|
||||
(setq content
|
||||
(if (not (and content (string-match "\\S-" content)))
|
||||
""
|
||||
;; Ensure CONTENT has minimal indentation, a single
|
||||
;; newline character at its boundaries, and isn't
|
||||
;; protected.
|
||||
(when (string-match "\\`\\([ \t]*\n\\)+" content)
|
||||
(setq content (substring content (match-end 0))))
|
||||
(when (string-match "[ \t\n]+\\'" content)
|
||||
(setq content (substring content 0 (match-beginning 0))))
|
||||
(org-add-props
|
||||
(concat "\n\n" (org-remove-indentation content) "\n\n")
|
||||
'(org-protected nil org-native-text nil))))
|
||||
|
||||
(when (string-match org-complex-heading-regexp headline)
|
||||
(let* ((nil-to-str
|
||||
(function
|
||||
;; Change nil arguments into empty strings.
|
||||
(lambda (el) (or (eval el) ""))))
|
||||
;; Set up keywords provided to templates.
|
||||
(todo (or (match-string 2 headline) ""))
|
||||
(class (or (and (eq "" todo) "")
|
||||
(if (member todo org-done-keywords) "done" "todo")))
|
||||
(priority (or (match-string 3 headline) ""))
|
||||
(heading (or (match-string 4 headline) ""))
|
||||
(tags (or (match-string 5 headline) ""))
|
||||
;; Read `org-inlinetask-export-templates'.
|
||||
(backend-spec (assq org-export-current-backend
|
||||
org-inlinetask-export-templates))
|
||||
(format-str (org-add-props (nth 1 backend-spec)
|
||||
'(org-protected t org-native-text t)))
|
||||
(tokens (cadr (nth 2 backend-spec)))
|
||||
;; Build export string. Ensure it won't break
|
||||
;; surrounding lists by giving it arbitrary high
|
||||
;; indentation.
|
||||
(export-str (org-add-props
|
||||
(eval (append '(format format-str)
|
||||
(mapcar nil-to-str tokens)))
|
||||
'(original-indentation 1000))))
|
||||
;; Ensure task starts a new paragraph.
|
||||
(unless (or (bobp)
|
||||
(save-excursion (forward-line -1)
|
||||
(looking-at "[ \t]*$")))
|
||||
(insert "\n"))
|
||||
(insert export-str)
|
||||
(unless (bolp) (insert "\n")))))))))
|
||||
|
||||
(defun org-inlinetask-get-current-indentation ()
|
||||
"Get the indentation of the last non-while line above this one."
|
||||
(save-excursion
|
||||
|
|
@ -467,7 +315,8 @@ Either remove headline and meta data, or do special formatting."
|
|||
((= end start))
|
||||
;; Inlinetask was folded: expand it.
|
||||
((get-char-property (1+ start) 'invisible)
|
||||
(org-show-entry))
|
||||
(outline-flag-region start end nil)
|
||||
(org-cycle-hide-drawers 'children))
|
||||
(t (outline-flag-region start end t)))))
|
||||
|
||||
(defun org-inlinetask-remove-END-maybe ()
|
||||
|
|
@ -476,9 +325,6 @@ Either remove headline and meta data, or do special formatting."
|
|||
org-inlinetask-min-level))
|
||||
(replace-match "")))
|
||||
|
||||
(eval-after-load "org-exp"
|
||||
'(add-hook 'org-export-preprocess-before-backend-specifics-hook
|
||||
'org-inlinetask-export-handler))
|
||||
(eval-after-load "org"
|
||||
'(add-hook 'org-font-lock-hook 'org-inlinetask-fontify))
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue