diff options
author | Bastien Guerry <bzg@gnu.org> | 2013-11-12 14:06:26 +0100 |
---|---|---|
committer | Bastien Guerry <bzg@gnu.org> | 2013-11-12 14:06:26 +0100 |
commit | 271672fad74cdbc9065d23d6e6cee1b8540f571b (patch) | |
tree | d322b956ec0e74ee33b22354ef00839b23b1618d /lisp/org/org-inlinetask.el | |
parent | f201cf3a8143b0b34b07769fc7d73dd14761b87b (diff) | |
download | emacs-271672fad74cdbc9065d23d6e6cee1b8540f571b.tar.gz |
Merge Org version 8.2.3a.
Diffstat (limited to 'lisp/org/org-inlinetask.el')
-rw-r--r-- | lisp/org/org-inlinetask.el | 190 |
1 files changed, 18 insertions, 172 deletions
diff --git a/lisp/org/org-inlinetask.el b/lisp/org/org-inlinetask.el index 43913acacde..ca7572bcc37 100644 --- a/lisp/org/org-inlinetask.el +++ b/lisp/org/org-inlinetask.el @@ -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)) |