From 7e6a8e09faaf27cc6fea0171d7667541f4bf7bd2 Mon Sep 17 00:00:00 2001 From: Andreas Gerler Date: Sat, 8 Apr 2017 20:30:53 +0200 Subject: [PATCH] upgrade org-mode - switching to elpa-20170407 created from git repository. Signed-off-by: Andreas Gerler --- bba.org | 2 +- elpa/org-20170210/ob-clojure.el | 118 -- elpa/org-20170210/org-autoloads.el | 708 -------- elpa/org-20170210/org-pkg.el | 3 - elpa/org-20170210/orgcard.pdf | Bin 119383 -> 0 bytes elpa/{org-20170210 => org-20170407}/COPYING | 0 .../README_ELPA | 0 elpa/{org-20170210 => org-20170407}/dir | 0 .../etc/ORG-NEWS | 305 +++- .../etc/styles/OrgOdtContentTemplate.xml | 0 .../etc/styles/OrgOdtStyles.xml | 0 .../etc/styles/README | 0 elpa/{org-20170210 => org-20170407}/ob-C.el | 0 elpa/{org-20170210 => org-20170407}/ob-J.el | 0 elpa/{org-20170210 => org-20170407}/ob-R.el | 4 +- elpa/{org-20170210 => org-20170407}/ob-abc.el | 0 .../ob-asymptote.el | 0 elpa/{org-20170210 => org-20170407}/ob-awk.el | 0 .../{org-20170210 => org-20170407}/ob-calc.el | 0 elpa/org-20170407/ob-clojure.el | 198 +++ .../ob-comint.el | 0 elpa/{org-20170210 => org-20170407}/ob-coq.el | 0 .../{org-20170210 => org-20170407}/ob-core.el | 17 +- elpa/{org-20170210 => org-20170407}/ob-css.el | 0 .../ob-ditaa.el | 0 elpa/{org-20170210 => org-20170407}/ob-dot.el | 0 .../{org-20170210 => org-20170407}/ob-ebnf.el | 0 .../ob-emacs-lisp.el | 0 .../{org-20170210 => org-20170407}/ob-eval.el | 0 elpa/{org-20170210 => org-20170407}/ob-exp.el | 35 +- .../ob-forth.el | 0 .../ob-fortran.el | 0 .../ob-gnuplot.el | 0 .../ob-groovy.el | 0 .../ob-haskell.el | 0 elpa/org-20170407/ob-hledger.el | 70 + elpa/{org-20170210 => org-20170407}/ob-io.el | 0 .../{org-20170210 => org-20170407}/ob-java.el | 0 elpa/{org-20170210 => org-20170407}/ob-js.el | 0 .../{org-20170210 => org-20170407}/ob-keys.el | 0 .../ob-latex.el | 0 .../ob-ledger.el | 0 .../ob-lilypond.el | 0 .../{org-20170210 => org-20170407}/ob-lisp.el | 0 elpa/{org-20170210 => org-20170407}/ob-lob.el | 0 elpa/{org-20170210 => org-20170407}/ob-lua.el | 0 .../ob-makefile.el | 0 .../ob-matlab.el | 0 .../ob-maxima.el | 8 +- .../ob-mscgen.el | 0 .../ob-ocaml.el | 0 .../ob-octave.el | 0 elpa/{org-20170210 => org-20170407}/ob-org.el | 0 .../{org-20170210 => org-20170407}/ob-perl.el | 0 .../ob-picolisp.el | 0 .../ob-plantuml.el | 28 +- .../ob-processing.el | 0 .../ob-python.el | 0 elpa/{org-20170210 => org-20170407}/ob-ref.el | 0 .../{org-20170210 => org-20170407}/ob-ruby.el | 0 .../{org-20170210 => org-20170407}/ob-sass.el | 0 .../ob-scala.el | 0 .../ob-scheme.el | 0 .../ob-screen.el | 0 elpa/{org-20170210 => org-20170407}/ob-sed.el | 0 .../ob-shell.el | 0 .../{org-20170210 => org-20170407}/ob-shen.el | 0 elpa/{org-20170210 => org-20170407}/ob-sql.el | 63 +- .../ob-sqlite.el | 0 .../{org-20170210 => org-20170407}/ob-stan.el | 0 .../ob-table.el | 0 .../ob-tangle.el | 3 +- elpa/{org-20170210 => org-20170407}/ob.el | 0 elpa/{org-20170210 => org-20170407}/org | 1551 ++++++++--------- .../org-agenda.el | 585 +++---- .../org-archive.el | 0 .../org-attach.el | 12 +- .../org-bbdb.el | 55 +- .../org-bibtex.el | 13 +- .../org-capture.el | 476 ++--- .../org-clock.el | 367 ++-- .../org-colview.el | 94 +- .../org-compat.el | 329 ++-- .../org-crypt.el | 0 .../org-ctags.el | 0 .../org-datetree.el | 53 +- .../org-docview.el | 0 elpa/org-20170407/org-duration.el | 447 +++++ .../org-element.el | 253 +-- .../org-entities.el | 0 .../org-eshell.el | 0 .../{org-20170210 => org-20170407}/org-eww.el | 9 +- .../org-faces.el | 0 .../org-feed.el | 0 .../org-footnote.el | 0 .../org-gnus.el | 0 .../org-habit.el | 2 +- elpa/{org-20170210 => org-20170407}/org-id.el | 0 .../org-indent.el | 0 .../org-info.el | 22 +- .../org-inlinetask.el | 0 .../org-install.el | 0 .../{org-20170210 => org-20170407}/org-irc.el | 0 .../org-lint.el | 32 +- .../org-list.el | 60 +- .../org-loaddefs.el | 940 ++-------- .../org-macro.el | 0 .../org-macs.el | 0 .../{org-20170210 => org-20170407}/org-mhe.el | 0 .../org-mobile.el | 0 .../org-mouse.el | 1 - .../org-pcomplete.el | 0 elpa/org-20170407/org-pkg.el | 5 + .../org-plot.el | 0 .../org-protocol.el | 8 +- .../org-rmail.el | 0 .../{org-20170210 => org-20170407}/org-src.el | 58 +- .../org-table.el | 127 +- .../org-timer.el | 0 .../org-version.el | 2 +- .../{org-20170210 => org-20170407}/org-w3m.el | 0 elpa/{org-20170210 => org-20170407}/org.el | 1248 +++++-------- elpa/org-20170407/orgcard.pdf | Bin 0 -> 81692 bytes .../ox-ascii.el | 0 .../ox-beamer.el | 10 +- .../{org-20170210 => org-20170407}/ox-html.el | 153 +- .../ox-icalendar.el | 2 +- .../ox-latex.el | 128 +- elpa/{org-20170210 => org-20170407}/ox-man.el | 2 +- elpa/{org-20170210 => org-20170407}/ox-md.el | 133 +- elpa/{org-20170210 => org-20170407}/ox-odt.el | 8 +- elpa/{org-20170210 => org-20170407}/ox-org.el | 53 +- .../ox-publish.el | 673 +++---- .../ox-texinfo.el | 6 - elpa/{org-20170210 => org-20170407}/ox.el | 438 +++-- init.el | 4 +- 136 files changed, 4841 insertions(+), 5080 deletions(-) delete mode 100644 elpa/org-20170210/ob-clojure.el delete mode 100644 elpa/org-20170210/org-autoloads.el delete mode 100644 elpa/org-20170210/org-pkg.el delete mode 100644 elpa/org-20170210/orgcard.pdf rename elpa/{org-20170210 => org-20170407}/COPYING (100%) rename elpa/{org-20170210 => org-20170407}/README_ELPA (100%) rename elpa/{org-20170210 => org-20170407}/dir (100%) rename elpa/{org-20170210 => org-20170407}/etc/ORG-NEWS (93%) rename elpa/{org-20170210 => org-20170407}/etc/styles/OrgOdtContentTemplate.xml (100%) rename elpa/{org-20170210 => org-20170407}/etc/styles/OrgOdtStyles.xml (100%) rename elpa/{org-20170210 => org-20170407}/etc/styles/README (100%) rename elpa/{org-20170210 => org-20170407}/ob-C.el (100%) rename elpa/{org-20170210 => org-20170407}/ob-J.el (100%) rename elpa/{org-20170210 => org-20170407}/ob-R.el (99%) rename elpa/{org-20170210 => org-20170407}/ob-abc.el (100%) rename elpa/{org-20170210 => org-20170407}/ob-asymptote.el (100%) rename elpa/{org-20170210 => org-20170407}/ob-awk.el (100%) rename elpa/{org-20170210 => org-20170407}/ob-calc.el (100%) create mode 100644 elpa/org-20170407/ob-clojure.el rename elpa/{org-20170210 => org-20170407}/ob-comint.el (100%) rename elpa/{org-20170210 => org-20170407}/ob-coq.el (100%) rename elpa/{org-20170210 => org-20170407}/ob-core.el (99%) rename elpa/{org-20170210 => org-20170407}/ob-css.el (100%) rename elpa/{org-20170210 => org-20170407}/ob-ditaa.el (100%) rename elpa/{org-20170210 => org-20170407}/ob-dot.el (100%) rename elpa/{org-20170210 => org-20170407}/ob-ebnf.el (100%) rename elpa/{org-20170210 => org-20170407}/ob-emacs-lisp.el (100%) rename elpa/{org-20170210 => org-20170407}/ob-eval.el (100%) rename elpa/{org-20170210 => org-20170407}/ob-exp.el (94%) rename elpa/{org-20170210 => org-20170407}/ob-forth.el (100%) rename elpa/{org-20170210 => org-20170407}/ob-fortran.el (100%) rename elpa/{org-20170210 => org-20170407}/ob-gnuplot.el (100%) rename elpa/{org-20170210 => org-20170407}/ob-groovy.el (100%) rename elpa/{org-20170210 => org-20170407}/ob-haskell.el (100%) create mode 100644 elpa/org-20170407/ob-hledger.el rename elpa/{org-20170210 => org-20170407}/ob-io.el (100%) rename elpa/{org-20170210 => org-20170407}/ob-java.el (100%) rename elpa/{org-20170210 => org-20170407}/ob-js.el (100%) rename elpa/{org-20170210 => org-20170407}/ob-keys.el (100%) rename elpa/{org-20170210 => org-20170407}/ob-latex.el (100%) rename elpa/{org-20170210 => org-20170407}/ob-ledger.el (100%) rename elpa/{org-20170210 => org-20170407}/ob-lilypond.el (100%) rename elpa/{org-20170210 => org-20170407}/ob-lisp.el (100%) rename elpa/{org-20170210 => org-20170407}/ob-lob.el (100%) rename elpa/{org-20170210 => org-20170407}/ob-lua.el (100%) rename elpa/{org-20170210 => org-20170407}/ob-makefile.el (100%) rename elpa/{org-20170210 => org-20170407}/ob-matlab.el (100%) rename elpa/{org-20170210 => org-20170407}/ob-maxima.el (94%) rename elpa/{org-20170210 => org-20170407}/ob-mscgen.el (100%) rename elpa/{org-20170210 => org-20170407}/ob-ocaml.el (100%) rename elpa/{org-20170210 => org-20170407}/ob-octave.el (100%) rename elpa/{org-20170210 => org-20170407}/ob-org.el (100%) rename elpa/{org-20170210 => org-20170407}/ob-perl.el (100%) rename elpa/{org-20170210 => org-20170407}/ob-picolisp.el (100%) rename elpa/{org-20170210 => org-20170407}/ob-plantuml.el (75%) rename elpa/{org-20170210 => org-20170407}/ob-processing.el (100%) rename elpa/{org-20170210 => org-20170407}/ob-python.el (100%) rename elpa/{org-20170210 => org-20170407}/ob-ref.el (100%) rename elpa/{org-20170210 => org-20170407}/ob-ruby.el (100%) rename elpa/{org-20170210 => org-20170407}/ob-sass.el (100%) rename elpa/{org-20170210 => org-20170407}/ob-scala.el (100%) rename elpa/{org-20170210 => org-20170407}/ob-scheme.el (100%) rename elpa/{org-20170210 => org-20170407}/ob-screen.el (100%) rename elpa/{org-20170210 => org-20170407}/ob-sed.el (100%) rename elpa/{org-20170210 => org-20170407}/ob-shell.el (100%) rename elpa/{org-20170210 => org-20170407}/ob-shen.el (100%) rename elpa/{org-20170210 => org-20170407}/ob-sql.el (88%) rename elpa/{org-20170210 => org-20170407}/ob-sqlite.el (100%) rename elpa/{org-20170210 => org-20170407}/ob-stan.el (100%) rename elpa/{org-20170210 => org-20170407}/ob-table.el (100%) rename elpa/{org-20170210 => org-20170407}/ob-tangle.el (99%) rename elpa/{org-20170210 => org-20170407}/ob.el (100%) rename elpa/{org-20170210 => org-20170407}/org (97%) rename elpa/{org-20170210 => org-20170407}/org-agenda.el (96%) rename elpa/{org-20170210 => org-20170407}/org-archive.el (100%) rename elpa/{org-20170210 => org-20170407}/org-attach.el (97%) rename elpa/{org-20170210 => org-20170407}/org-bbdb.el (90%) rename elpa/{org-20170210 => org-20170407}/org-bibtex.el (98%) rename elpa/{org-20170210 => org-20170407}/org-capture.el (86%) rename elpa/{org-20170210 => org-20170407}/org-clock.el (92%) rename elpa/{org-20170210 => org-20170407}/org-colview.el (96%) rename elpa/{org-20170210 => org-20170407}/org-compat.el (64%) rename elpa/{org-20170210 => org-20170407}/org-crypt.el (100%) rename elpa/{org-20170210 => org-20170407}/org-ctags.el (100%) rename elpa/{org-20170210 => org-20170407}/org-datetree.el (84%) rename elpa/{org-20170210 => org-20170407}/org-docview.el (100%) create mode 100644 elpa/org-20170407/org-duration.el rename elpa/{org-20170210 => org-20170407}/org-element.el (96%) rename elpa/{org-20170210 => org-20170407}/org-entities.el (100%) rename elpa/{org-20170210 => org-20170407}/org-eshell.el (100%) rename elpa/{org-20170210 => org-20170407}/org-eww.el (96%) rename elpa/{org-20170210 => org-20170407}/org-faces.el (100%) rename elpa/{org-20170210 => org-20170407}/org-feed.el (100%) rename elpa/{org-20170210 => org-20170407}/org-footnote.el (100%) rename elpa/{org-20170210 => org-20170407}/org-gnus.el (100%) rename elpa/{org-20170210 => org-20170407}/org-habit.el (99%) rename elpa/{org-20170210 => org-20170407}/org-id.el (100%) rename elpa/{org-20170210 => org-20170407}/org-indent.el (100%) rename elpa/{org-20170210 => org-20170407}/org-info.el (92%) rename elpa/{org-20170210 => org-20170407}/org-inlinetask.el (100%) rename elpa/{org-20170210 => org-20170407}/org-install.el (100%) rename elpa/{org-20170210 => org-20170407}/org-irc.el (100%) rename elpa/{org-20170210 => org-20170407}/org-lint.el (97%) rename elpa/{org-20170210 => org-20170407}/org-list.el (98%) rename elpa/{org-20170210 => org-20170407}/org-loaddefs.el (79%) rename elpa/{org-20170210 => org-20170407}/org-macro.el (100%) rename elpa/{org-20170210 => org-20170407}/org-macs.el (100%) rename elpa/{org-20170210 => org-20170407}/org-mhe.el (100%) rename elpa/{org-20170210 => org-20170407}/org-mobile.el (100%) rename elpa/{org-20170210 => org-20170407}/org-mouse.el (99%) rename elpa/{org-20170210 => org-20170407}/org-pcomplete.el (100%) create mode 100644 elpa/org-20170407/org-pkg.el rename elpa/{org-20170210 => org-20170407}/org-plot.el (100%) rename elpa/{org-20170210 => org-20170407}/org-protocol.el (99%) rename elpa/{org-20170210 => org-20170407}/org-rmail.el (100%) rename elpa/{org-20170210 => org-20170407}/org-src.el (96%) rename elpa/{org-20170210 => org-20170407}/org-table.el (98%) rename elpa/{org-20170210 => org-20170407}/org-timer.el (100%) rename elpa/{org-20170210 => org-20170407}/org-version.el (91%) rename elpa/{org-20170210 => org-20170407}/org-w3m.el (100%) rename elpa/{org-20170210 => org-20170407}/org.el (96%) create mode 100644 elpa/org-20170407/orgcard.pdf rename elpa/{org-20170210 => org-20170407}/ox-ascii.el (100%) rename elpa/{org-20170210 => org-20170407}/ox-beamer.el (99%) rename elpa/{org-20170210 => org-20170407}/ox-html.el (97%) rename elpa/{org-20170210 => org-20170407}/ox-icalendar.el (99%) rename elpa/{org-20170210 => org-20170407}/ox-latex.el (97%) rename elpa/{org-20170210 => org-20170407}/ox-man.el (99%) rename elpa/{org-20170210 => org-20170407}/ox-md.el (82%) rename elpa/{org-20170210 => org-20170407}/ox-odt.el (99%) rename elpa/{org-20170210 => org-20170407}/ox-org.el (88%) rename elpa/{org-20170210 => org-20170407}/ox-publish.el (72%) rename elpa/{org-20170210 => org-20170407}/ox-texinfo.el (99%) rename elpa/{org-20170210 => org-20170407}/ox.el (95%) diff --git a/bba.org b/bba.org index 17f03ec7..ad9d8df0 100644 --- a/bba.org +++ b/bba.org @@ -33,7 +33,7 @@ To be precise, this is what's in the first part of my =~/.emacs.d/init.el= (what load-path)) - (add-to-list 'load-path "~/.emacs/elpa/org-20170210") + (add-to-list 'load-path "~/.emacs/elpa/org-20170407") ;; (add-to-list 'load-path "~/elisp/org-mode/contrib/lisp") ;; Load the rest of the packages diff --git a/elpa/org-20170210/ob-clojure.el b/elpa/org-20170210/ob-clojure.el deleted file mode 100644 index 39561572..00000000 --- a/elpa/org-20170210/ob-clojure.el +++ /dev/null @@ -1,118 +0,0 @@ -;;; ob-clojure.el --- Babel Functions for Clojure -*- lexical-binding: t; -*- - -;; Copyright (C) 2009-2017 Free Software Foundation, Inc. - -;; Author: Joel Boehland, Eric Schulte, Oleh Krehel -;; -;; Keywords: literate programming, reproducible research -;; Homepage: http://orgmode.org - -;; This file is part of GNU Emacs. - -;; GNU Emacs 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 of the License, or -;; (at your option) any later version. - -;; GNU Emacs 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 . - -;;; Commentary: - -;; Support for evaluating clojure code - -;; Requirements: - -;; - clojure (at least 1.2.0) -;; - clojure-mode -;; - either cider or SLIME - -;; For Cider, see https://github.com/clojure-emacs/cider - -;; For SLIME, the best way to install these components is by following -;; the directions as set out by Phil Hagelberg (Technomancy) on the -;; web page: http://technomancy.us/126 - -;;; Code: -(require 'cl-lib) -(require 'ob) - -(declare-function cider-current-connection "ext:cider-client" (&optional type)) -(declare-function cider-current-session "ext:cider-client" ()) -(declare-function nrepl-dict-get "ext:nrepl-client" (dict key)) -(declare-function nrepl-sync-request:eval "ext:nrepl-client" - (input connection session &optional ns)) -(declare-function org-trim "org" (s &optional keep-lead)) -(declare-function slime-eval "ext:slime" (sexp &optional package)) - -(defvar org-babel-tangle-lang-exts) -(add-to-list 'org-babel-tangle-lang-exts '("clojure" . "clj")) - -(defvar org-babel-default-header-args:clojure '()) -(defvar org-babel-header-args:clojure '((package . :any))) - -(defcustom org-babel-clojure-backend - (cond ((featurep 'cider) 'cider) - (t 'slime)) - "Backend used to evaluate Clojure code blocks." - :group 'org-babel - :type '(choice - (const :tag "cider" cider) - (const :tag "SLIME" slime))) - -(defun org-babel-expand-body:clojure (body params) - "Expand BODY according to PARAMS, return the expanded body." - (let* ((vars (org-babel--get-vars params)) - (result-params (cdr (assq :result-params params))) - (print-level nil) (print-length nil) - (body (org-trim - (if (null vars) (org-trim body) - (concat "(let [" - (mapconcat - (lambda (var) - (format "%S (quote %S)" (car var) (cdr var))) - vars "\n ") - "]\n" body ")"))))) - (if (or (member "code" result-params) - (member "pp" result-params)) - (format "(clojure.pprint/pprint (do %s))" body) - body))) - -(defun org-babel-execute:clojure (body params) - "Execute a block of Clojure code with Babel." - (let ((expanded (org-babel-expand-body:clojure body params)) - result) - (cl-case org-babel-clojure-backend - (cider - (require 'cider) - (let ((result-params (cdr (assq :result-params params)))) - (setq result - (nrepl-dict-get - (nrepl-sync-request:eval - expanded (cider-current-connection) (cider-current-session)) - (if (or (member "output" result-params) - (member "pp" result-params)) - "out" - "value"))))) - (slime - (require 'slime) - (with-temp-buffer - (insert expanded) - (setq result - (slime-eval - `(swank:eval-and-grab-output - ,(buffer-substring-no-properties (point-min) (point-max))) - (cdr (assq :package params))))))) - (org-babel-result-cond (cdr (assq :result-params params)) - result - (condition-case nil (org-babel-script-escape result) - (error result))))) - -(provide 'ob-clojure) - -;;; ob-clojure.el ends here diff --git a/elpa/org-20170210/org-autoloads.el b/elpa/org-20170210/org-autoloads.el deleted file mode 100644 index 088e5227..00000000 --- a/elpa/org-20170210/org-autoloads.el +++ /dev/null @@ -1,708 +0,0 @@ -;;; org-autoloads.el --- automatically extracted autoloads -;; -;;; Code: -(add-to-list 'load-path (directory-file-name (or (file-name-directory #$) (car load-path)))) - -;;;### (autoloads nil "org" "org.el" (22693 37959 0 0)) -;;; Generated autoloads from org.el - -(autoload 'org-babel-do-load-languages "org" "\ -Load the languages defined in `org-babel-load-languages'. - -\(fn SYM VALUE)" nil nil) - -(autoload 'org-babel-load-file "org" "\ -Load Emacs Lisp source code blocks in the Org FILE. -This function exports the source code using `org-babel-tangle' -and then loads the resulting file using `load-file'. With prefix -arg (noninteractively: 2nd arg) COMPILE the tangled Emacs Lisp -file to byte-code before it is loaded. - -\(fn FILE &optional COMPILE)" t nil) - -(autoload 'org-version "org" "\ -Show the Org version. -Interactively, or when MESSAGE is non-nil, show it in echo area. -With prefix argument, or when HERE is non-nil, insert it at point. -In non-interactive uses, a reduced version string is output unless -FULL is given. - -\(fn &optional HERE FULL MESSAGE)" t nil) - -(autoload 'turn-on-orgtbl "org" "\ -Unconditionally turn on `orgtbl-mode'. - -\(fn)" nil nil) - -(autoload 'org-clock-persistence-insinuate "org" "\ -Set up hooks for clock persistence. - -\(fn)" nil nil) - -(autoload 'org-mode "org" "\ -Outline-based notes management and organizer, alias -\"Carsten's outline-mode for keeping track of everything.\" - -Org mode develops organizational tasks around a NOTES file which -contains information about projects as plain text. Org mode is -implemented on top of Outline mode, which is ideal to keep the content -of large files well structured. It supports ToDo items, deadlines and -time stamps, which magically appear in the diary listing of the Emacs -calendar. Tables are easily created with a built-in table editor. -Plain text URL-like links connect to websites, emails (VM), Usenet -messages (Gnus), BBDB entries, and any files related to the project. -For printing and sharing of notes, an Org file (or a part of it) -can be exported as a structured ASCII or HTML file. - -The following commands are available: - -\\{org-mode-map} - -\(fn)" t nil) - -(autoload 'org-cycle "org" "\ -TAB-action and visibility cycling for Org mode. - -This is the command invoked in Org mode by the `TAB' key. Its main -purpose is outline visibility cycling, but it also invokes other actions -in special contexts. - -When this function is called with a `\\[universal-argument]' prefix, rotate the entire -buffer through 3 states (global cycling) - 1. OVERVIEW: Show only top-level headlines. - 2. CONTENTS: Show all headlines of all levels, but no body text. - 3. SHOW ALL: Show everything. - -With a `\\[universal-argument] \\[universal-argument]' prefix argument, switch to the startup visibility, -determined by the variable `org-startup-folded', and by any VISIBILITY -properties in the buffer. - -With a `\\[universal-argument] \\[universal-argument] \\[universal-argument]' prefix argument, show the entire buffer, including -any drawers. - -When inside a table, re-align the table and move to the next field. - -When point is at the beginning of a headline, rotate the subtree started -by this line through 3 different states (local cycling) - 1. FOLDED: Only the main headline is shown. - 2. CHILDREN: The main headline and the direct children are shown. - From this state, you can move to one of the children - and zoom in further. - 3. SUBTREE: Show the entire subtree, including body text. -If there is no subtree, switch directly from CHILDREN to FOLDED. - -When point is at the beginning of an empty headline and the variable -`org-cycle-level-after-item/entry-creation' is set, cycle the level -of the headline by demoting and promoting it to likely levels. This -speeds up creation document structure by pressing `TAB' once or several -times right after creating a new headline. - -When there is a numeric prefix, go up to a heading with level ARG, do -a `show-subtree' and return to the previous cursor position. If ARG -is negative, go up that many levels. - -When point is not at the beginning of a headline, execute the global -binding for `TAB', which is re-indenting the line. See the option -`org-cycle-emulate-tab' for details. - -As a special case, if point is at the beginning of the buffer and there is -no headline in line 1, this function will act as if called with prefix arg -\(`\\[universal-argument] TAB', same as `S-TAB') also when called without prefix arg, but only -if the variable `org-cycle-global-at-bob' is t. - -\(fn &optional ARG)" t nil) - -(autoload 'org-global-cycle "org" "\ -Cycle the global visibility. For details see `org-cycle'. -With `\\[universal-argument]' prefix ARG, switch to startup visibility. -With a numeric prefix, show all headlines up to that level. - -\(fn &optional ARG)" t nil) -(put 'orgstruct-heading-prefix-regexp 'safe-local-variable 'stringp) - -(autoload 'orgstruct-mode "org" "\ -Toggle the minor mode `orgstruct-mode'. -This mode is for using Org mode structure commands in other -modes. The following keys behave as if Org mode were active, if -the cursor is on a headline, or on a plain list item (both as -defined by Org mode). - -\(fn &optional ARG)" t nil) - -(autoload 'turn-on-orgstruct "org" "\ -Unconditionally turn on `orgstruct-mode'. - -\(fn)" nil nil) - -(autoload 'turn-on-orgstruct++ "org" "\ -Unconditionally turn on `orgstruct++-mode'. - -\(fn)" nil nil) - -(autoload 'org-run-like-in-org-mode "org" "\ -Run a command, pretending that the current buffer is in Org mode. -This will temporarily bind local variables that are typically bound in -Org mode to the values they have in Org mode, and then interactively -call CMD. - -\(fn CMD)" nil nil) - -(autoload 'org-store-link "org" "\ -Store an org-link to the current location. -\\ -This link is added to `org-stored-links' and can later be inserted -into an Org buffer with `org-insert-link' (`\\[org-insert-link]'). - -For some link types, a `\\[universal-argument]' prefix ARG is interpreted. -For links to Usenet articles, ARG negates `org-gnus-prefer-web-links'. -For file links, ARG negates `org-context-in-file-links'. - -A `\\[universal-argument] \\[universal-argument]' prefix ARG forces skipping storing functions that are not -part of Org core. - -A `\\[universal-argument] \\[universal-argument] \\[universal-argument]' prefix ARG forces storing a link for each line in the -active region. - -\(fn ARG)" t nil) - -(autoload 'org-insert-link-global "org" "\ -Insert a link like Org mode does. -This command can be called in any mode to insert a link in Org syntax. - -\(fn)" t nil) - -(autoload 'org-open-at-point-global "org" "\ -Follow a link or time-stamp like Org mode does. -This command can be called in any mode to follow an external link -or a time-stamp that has Org mode syntax. Its behavior is -undefined when called on internal links (e.g., fuzzy links). -Raise an error when there is nothing to follow. - -\(fn)" t nil) - -(autoload 'org-open-link-from-string "org" "\ -Open a link in the string S, as if it was in Org mode. - -\(fn S &optional ARG REFERENCE-BUFFER)" t nil) - -(autoload 'org-switchb "org" "\ -Switch between Org buffers. - -With `\\[universal-argument]' prefix, restrict available buffers to files. - -With `\\[universal-argument] \\[universal-argument]' prefix, restrict available buffers to agenda files. - -\(fn &optional ARG)" t nil) - -(autoload 'org-cycle-agenda-files "org" "\ -Cycle through the files in `org-agenda-files'. -If the current buffer visits an agenda file, find the next one in the list. -If the current buffer does not, find the first agenda file. - -\(fn)" t nil) - -(autoload 'org-submit-bug-report "org" "\ -Submit a bug report on Org via mail. - -Don't hesitate to report any problems or inaccurate documentation. - -If you don't have setup sending mail from (X)Emacs, please copy the -output buffer into your mail program, as it gives us important -information about your Org version and configuration. - -\(fn)" t nil) - -(autoload 'org-reload "org" "\ -Reload all org lisp files. -With prefix arg UNCOMPILED, load the uncompiled versions. - -\(fn &optional UNCOMPILED)" t nil) - -(autoload 'org-customize "org" "\ -Call the customize function with org as argument. - -\(fn)" t nil) - -;;;*** - -;;;### (autoloads nil "org-agenda" "org-agenda.el" (22693 37958 0 -;;;;;; 0)) -;;; Generated autoloads from org-agenda.el - -(autoload 'org-toggle-sticky-agenda "org-agenda" "\ -Toggle `org-agenda-sticky'. - -\(fn &optional ARG)" t nil) - -(autoload 'org-agenda "org-agenda" "\ -Dispatch agenda commands to collect entries to the agenda buffer. -Prompts for a command to execute. Any prefix arg will be passed -on to the selected command. The default selections are: - -a Call `org-agenda-list' to display the agenda for current day or week. -t Call `org-todo-list' to display the global todo list. -T Call `org-todo-list' to display the global todo list, select only - entries with a specific TODO keyword (the user gets a prompt). -m Call `org-tags-view' to display headlines with tags matching - a condition (the user is prompted for the condition). -M Like `m', but select only TODO entries, no ordinary headlines. -L Create a timeline for the current buffer. -e Export views to associated files. -s Search entries for keywords. -S Search entries for keywords, only with TODO keywords. -/ Multi occur across all agenda files and also files listed - in `org-agenda-text-search-extra-files'. -< Restrict agenda commands to buffer, subtree, or region. - Press several times to get the desired effect. -> Remove a previous restriction. -# List \"stuck\" projects. -! Configure what \"stuck\" means. -C Configure custom agenda commands. - -More commands can be added by configuring the variable -`org-agenda-custom-commands'. In particular, specific tags and TODO keyword -searches can be pre-defined in this way. - -If the current buffer is in Org mode and visiting a file, you can also -first press `<' once to indicate that the agenda should be temporarily -\(until the next use of `\\[org-agenda]') restricted to the current file. -Pressing `<' twice means to restrict to the current subtree or region -\(if active). - -\(fn &optional ARG ORG-KEYS RESTRICTION)" t nil) - -(autoload 'org-batch-agenda "org-agenda" "\ -Run an agenda command in batch mode and send the result to STDOUT. -If CMD-KEY is a string of length 1, it is used as a key in -`org-agenda-custom-commands' and triggers this command. If it is a -longer string it is used as a tags/todo match string. -Parameters are alternating variable names and values that will be bound -before running the agenda command. - -\(fn CMD-KEY &rest PARAMETERS)" nil t) - -(autoload 'org-batch-agenda-csv "org-agenda" "\ -Run an agenda command in batch mode and send the result to STDOUT. -If CMD-KEY is a string of length 1, it is used as a key in -`org-agenda-custom-commands' and triggers this command. If it is a -longer string it is used as a tags/todo match string. -Parameters are alternating variable names and values that will be bound -before running the agenda command. - -The output gives a line for each selected agenda item. Each -item is a list of comma-separated values, like this: - -category,head,type,todo,tags,date,time,extra,priority-l,priority-n - -category The category of the item -head The headline, without TODO kwd, TAGS and PRIORITY -type The type of the agenda entry, can be - todo selected in TODO match - tagsmatch selected in tags match - diary imported from diary - deadline a deadline on given date - scheduled scheduled on given date - timestamp entry has timestamp on given date - closed entry was closed on given date - upcoming-deadline warning about deadline - past-scheduled forwarded scheduled item - block entry has date block including g. date -todo The todo keyword, if any -tags All tags including inherited ones, separated by colons -date The relevant date, like 2007-2-14 -time The time, like 15:00-16:50 -extra Sting with extra planning info -priority-l The priority letter if any was given -priority-n The computed numerical priority -agenda-day The day in the agenda where this is listed - -\(fn CMD-KEY &rest PARAMETERS)" nil t) - -(autoload 'org-store-agenda-views "org-agenda" "\ -Store agenda views. - -\(fn &rest PARAMETERS)" t nil) - -(autoload 'org-batch-store-agenda-views "org-agenda" "\ -Run all custom agenda commands that have a file argument. - -\(fn &rest PARAMETERS)" nil t) - -(autoload 'org-agenda-list "org-agenda" "\ -Produce a daily/weekly view from all files in variable `org-agenda-files'. -The view will be for the current day or week, but from the overview buffer -you will be able to go to other days/weeks. - -With a numeric prefix argument in an interactive call, the agenda will -span ARG days. Lisp programs should instead specify SPAN to change -the number of days. SPAN defaults to `org-agenda-span'. - -START-DAY defaults to TODAY, or to the most recent match for the weekday -given in `org-agenda-start-on-weekday'. - -When WITH-HOUR is non-nil, only include scheduled and deadline -items if they have an hour specification like [h]h:mm. - -\(fn &optional ARG START-DAY SPAN WITH-HOUR)" t nil) - -(autoload 'org-search-view "org-agenda" "\ -Show all entries that contain a phrase or words or regular expressions. - -With optional prefix argument TODO-ONLY, only consider entries that are -TODO entries. The argument STRING can be used to pass a default search -string into this function. If EDIT-AT is non-nil, it means that the -user should get a chance to edit this string, with cursor at position -EDIT-AT. - -The search string can be viewed either as a phrase that should be found as -is, or it can be broken into a number of snippets, each of which must match -in a Boolean way to select an entry. The default depends on the variable -`org-agenda-search-view-always-boolean'. -Even if this is turned off (the default) you can always switch to -Boolean search dynamically by preceding the first word with \"+\" or \"-\". - -The default is a direct search of the whole phrase, where each space in -the search string can expand to an arbitrary amount of whitespace, -including newlines. - -If using a Boolean search, the search string is split on whitespace and -each snippet is searched separately, with logical AND to select an entry. -Words prefixed with a minus must *not* occur in the entry. Words without -a prefix or prefixed with a plus must occur in the entry. Matching is -case-insensitive. Words are enclosed by word delimiters (i.e. they must -match whole words, not parts of a word) if -`org-agenda-search-view-force-full-words' is set (default is nil). - -Boolean search snippets enclosed by curly braces are interpreted as -regular expressions that must or (when preceded with \"-\") must not -match in the entry. Snippets enclosed into double quotes will be taken -as a whole, to include whitespace. - -- If the search string starts with an asterisk, search only in headlines. -- If (possibly after the leading star) the search string starts with an - exclamation mark, this also means to look at TODO entries only, an effect - that can also be achieved with a prefix argument. -- If (possibly after star and exclamation mark) the search string starts - with a colon, this will mean that the (non-regexp) snippets of the - Boolean search must match as full words. - -This command searches the agenda files, and in addition the files listed -in `org-agenda-text-search-extra-files'. - -\(fn &optional TODO-ONLY STRING EDIT-AT)" t nil) - -(autoload 'org-todo-list "org-agenda" "\ -Show all (not done) TODO entries from all agenda file in a single list. -The prefix arg can be used to select a specific TODO keyword and limit -the list to these. When using `\\[universal-argument]', you will be prompted -for a keyword. A numeric prefix directly selects the Nth keyword in -`org-todo-keywords-1'. - -\(fn &optional ARG)" t nil) - -(autoload 'org-tags-view "org-agenda" "\ -Show all headlines for all `org-agenda-files' matching a TAGS criterion. -The prefix arg TODO-ONLY limits the search to TODO entries. - -\(fn &optional TODO-ONLY MATCH)" t nil) - -(autoload 'org-agenda-list-stuck-projects "org-agenda" "\ -Create agenda view for projects that are stuck. -Stuck projects are project that have no next actions. For the definitions -of what a project is and how to check if it stuck, customize the variable -`org-stuck-projects'. - -\(fn &rest IGNORE)" t nil) - -(autoload 'org-diary "org-agenda" "\ -Return diary information from org files. -This function can be used in a \"sexp\" diary entry in the Emacs calendar. -It accesses org files and extracts information from those files to be -listed in the diary. The function accepts arguments specifying what -items should be listed. For a list of arguments allowed here, see the -variable `org-agenda-entry-types'. - -The call in the diary file should look like this: - - &%%(org-diary) ~/path/to/some/orgfile.org - -Use a separate line for each org file to check. Or, if you omit the file name, -all files listed in `org-agenda-files' will be checked automatically: - - &%%(org-diary) - -If you don't give any arguments (as in the example above), the default value -of `org-agenda-entry-types' is used: (:deadline :scheduled :timestamp :sexp). -So the example above may also be written as - - &%%(org-diary :deadline :timestamp :sexp :scheduled) - -The function expects the lisp variables `entry' and `date' to be provided -by the caller, because this is how the calendar works. Don't use this -function from a program - use `org-agenda-get-day-entries' instead. - -\(fn &rest ARGS)" nil nil) - -(autoload 'org-agenda-check-for-timestamp-as-reason-to-ignore-todo-item "org-agenda" "\ -Do we have a reason to ignore this TODO entry because it has a time stamp? - -\(fn &optional END)" nil nil) - -(autoload 'org-agenda-set-restriction-lock "org-agenda" "\ -Set restriction lock for agenda, to current subtree or file. -Restriction will be the file if TYPE is `file', or if type is the -universal prefix \\='(4), or if the cursor is before the first headline -in the file. Otherwise, restriction will be to the current subtree. - -\(fn &optional TYPE)" t nil) - -(autoload 'org-calendar-goto-agenda "org-agenda" "\ -Compute the Org agenda for the calendar date displayed at the cursor. -This is a command that has to be installed in `calendar-mode-map'. - -\(fn)" t nil) - -(autoload 'org-agenda-to-appt "org-agenda" "\ -Activate appointments found in `org-agenda-files'. - -With a `\\[universal-argument]' prefix, refresh the list of appointments. - -If FILTER is t, interactively prompt the user for a regular -expression, and filter out entries that don't match it. - -If FILTER is a string, use this string as a regular expression -for filtering entries out. - -If FILTER is a function, filter out entries against which -calling the function returns nil. This function takes one -argument: an entry from `org-agenda-get-day-entries'. - -FILTER can also be an alist with the car of each cell being -either `headline' or `category'. For example: - - \\='((headline \"IMPORTANT\") - (category \"Work\")) - -will only add headlines containing IMPORTANT or headlines -belonging to the \"Work\" category. - -ARGS are symbols indicating what kind of entries to consider. -By default `org-agenda-to-appt' will use :deadline*, :scheduled* -\(i.e., deadlines and scheduled items with a hh:mm specification) -and :timestamp entries. See the docstring of `org-diary' for -details and examples. - -If an entry has a APPT_WARNTIME property, its value will be used -to override `appt-message-warning-time'. - -\(fn &optional REFRESH FILTER &rest ARGS)" t nil) - -;;;*** - -;;;### (autoloads nil "org-capture" "org-capture.el" (22693 37958 -;;;;;; 0 0)) -;;; Generated autoloads from org-capture.el - -(autoload 'org-capture-string "org-capture" "\ -Capture STRING with the template selected by KEYS. - -\(fn STRING &optional KEYS)" t nil) - -(autoload 'org-capture "org-capture" "\ -Capture something. -\\ -This will let you select a template from `org-capture-templates', and -then file the newly captured information. The text is immediately -inserted at the target location, and an indirect buffer is shown where -you can edit it. Pressing `\\[org-capture-finalize]' brings you back to the previous -state of Emacs, so that you can continue your work. - -When called interactively with a `\\[universal-argument]' prefix argument GOTO, don't -capture anything, just go to the file/headline where the selected -template stores its notes. - -With a `\\[universal-argument] \\[universal-argument]' prefix argument, go to the last note stored. - -When called with a `C-0' (zero) prefix, insert a template at point. - -ELisp programs can set KEYS to a string associated with a template -in `org-capture-templates'. In this case, interactive selection -will be bypassed. - -If `org-capture-use-agenda-date' is non-nil, capturing from the -agenda will use the date at point as the default date. Then, a -`C-1' prefix will tell the capture process to use the HH:MM time -of the day at point (if any) or the current HH:MM time. - -\(fn &optional GOTO KEYS)" t nil) - -(autoload 'org-capture-import-remember-templates "org-capture" "\ -Set `org-capture-templates' to be similar to `org-remember-templates'. - -\(fn)" t nil) - -;;;*** - -;;;### (autoloads nil "org-colview" "org-colview.el" (22693 37958 -;;;;;; 0 0)) -;;; Generated autoloads from org-colview.el - -(autoload 'org-columns-remove-overlays "org-colview" "\ -Remove all currently active column overlays. - -\(fn)" t nil) - -(autoload 'org-columns-get-format-and-top-level "org-colview" "\ - - -\(fn)" nil nil) - -(autoload 'org-columns "org-colview" "\ -Turn on column view on an Org mode file. - -Column view applies to the whole buffer if point is before the -first headline. Otherwise, it applies to the first ancestor -setting \"COLUMNS\" property. If there is none, it defaults to -the current headline. With a `\\[universal-argument]' prefix argument, turn on column -view for the whole buffer unconditionally. - -When COLUMNS-FMT-STRING is non-nil, use it as the column format. - -\(fn &optional GLOBAL COLUMNS-FMT-STRING)" t nil) - -(autoload 'org-columns-compute "org-colview" "\ -Summarize the values of PROPERTY hierarchically. -Also update existing values for PROPERTY according to the first -column specification. - -\(fn PROPERTY)" t nil) - -(autoload 'org-dblock-write:columnview "org-colview" "\ -Write the column view table. -PARAMS is a property list of parameters: - -:id the :ID: property of the entry where the columns view - should be built. When the symbol `local', call locally. - When `global' call column view with the cursor at the beginning - of the buffer (usually this means that the whole buffer switches - to column view). When \"file:path/to/file.org\", invoke column - view at the start of that file. Otherwise, the ID is located - using `org-id-find'. -:hlines When t, insert a hline before each item. When a number, insert - a hline before each level <= that number. -:indent When non-nil, indent each ITEM field according to its level. -:vlines When t, make each column a colgroup to enforce vertical lines. -:maxlevel When set to a number, don't capture headlines below this level. -:skip-empty-rows - When t, skip rows where all specifiers other than ITEM are empty. -:width apply widths specified in columns format using specifiers. -:format When non-nil, specify the column view format to use. - -\(fn PARAMS)" nil nil) - -(autoload 'org-columns-insert-dblock "org-colview" "\ -Create a dynamic block capturing a column view table. - -\(fn)" t nil) - -(autoload 'org-agenda-columns "org-colview" "\ -Turn on or update column view in the agenda. - -\(fn)" t nil) - -;;;*** - -;;;### (autoloads nil "org-compat" "org-compat.el" (22693 37958 0 -;;;;;; 0)) -;;; Generated autoloads from org-compat.el - -(autoload 'org-check-version "org-compat" "\ -Try very hard to provide sensible version strings. - -\(fn)" nil t) - -;;;*** - -;;;### (autoloads nil "org-lint" "org-lint.el" (22693 37958 0 0)) -;;; Generated autoloads from org-lint.el - -(autoload 'org-lint "org-lint" "\ -Check current Org buffer for syntax mistakes. - -By default, run all checkers. With a `\\[universal-argument]' prefix ARG, select one -category of checkers only. With a `\\[universal-argument] \\[universal-argument]' prefix, run one precise -checker by its name. - -ARG can also be a list of checker names, as symbols, to run. - -\(fn &optional ARG)" t nil) - -;;;*** - -;;;### (autoloads nil "org-macs" "org-macs.el" (22693 37958 0 0)) -;;; Generated autoloads from org-macs.el - -(autoload 'org-load-noerror-mustsuffix "org-macs" "\ -Load FILE with optional arguments NOERROR and MUSTSUFFIX. - -\(fn FILE)" nil t) - -;;;*** - -;;;### (autoloads nil "org-version" "org-version.el" (22693 37958 -;;;;;; 0 0)) -;;; Generated autoloads from org-version.el - -(autoload 'org-release "org-version" "\ -The release version of Org. -Inserted by installing Org mode or when a release is made. - -\(fn)" nil nil) - -(autoload 'org-git-version "org-version" "\ -The Git version of org-mode. -Inserted by installing Org or when a release is made. - -\(fn)" nil nil) - -(defvar org-odt-data-dir "/usr/share/emacs/etc/org" "\ -The location of ODT styles.") - -;;;*** - -;;;### (autoloads nil nil ("ob-C.el" "ob-J.el" "ob-R.el" "ob-abc.el" -;;;;;; "ob-asymptote.el" "ob-awk.el" "ob-calc.el" "ob-clojure.el" -;;;;;; "ob-comint.el" "ob-coq.el" "ob-core.el" "ob-css.el" "ob-ditaa.el" -;;;;;; "ob-dot.el" "ob-ebnf.el" "ob-emacs-lisp.el" "ob-eval.el" -;;;;;; "ob-exp.el" "ob-forth.el" "ob-fortran.el" "ob-gnuplot.el" -;;;;;; "ob-groovy.el" "ob-haskell.el" "ob-io.el" "ob-java.el" "ob-js.el" -;;;;;; "ob-keys.el" "ob-latex.el" "ob-ledger.el" "ob-lilypond.el" -;;;;;; "ob-lisp.el" "ob-lob.el" "ob-lua.el" "ob-makefile.el" "ob-matlab.el" -;;;;;; "ob-maxima.el" "ob-mscgen.el" "ob-ocaml.el" "ob-octave.el" -;;;;;; "ob-org.el" "ob-perl.el" "ob-picolisp.el" "ob-plantuml.el" -;;;;;; "ob-processing.el" "ob-python.el" "ob-ref.el" "ob-ruby.el" -;;;;;; "ob-sass.el" "ob-scala.el" "ob-scheme.el" "ob-screen.el" -;;;;;; "ob-sed.el" "ob-shell.el" "ob-shen.el" "ob-sql.el" "ob-sqlite.el" -;;;;;; "ob-stan.el" "ob-table.el" "ob-tangle.el" "ob.el" "org-archive.el" -;;;;;; "org-attach.el" "org-bbdb.el" "org-bibtex.el" "org-clock.el" -;;;;;; "org-crypt.el" "org-ctags.el" "org-datetree.el" "org-docview.el" -;;;;;; "org-element.el" "org-entities.el" "org-eshell.el" "org-eww.el" -;;;;;; "org-faces.el" "org-feed.el" "org-footnote.el" "org-gnus.el" -;;;;;; "org-habit.el" "org-id.el" "org-indent.el" "org-info.el" -;;;;;; "org-inlinetask.el" "org-install.el" "org-irc.el" "org-list.el" -;;;;;; "org-loaddefs.el" "org-macro.el" "org-mhe.el" "org-mobile.el" -;;;;;; "org-mouse.el" "org-pcomplete.el" "org-pkg.el" "org-plot.el" -;;;;;; "org-protocol.el" "org-rmail.el" "org-src.el" "org-table.el" -;;;;;; "org-timer.el" "org-w3m.el" "ox-ascii.el" "ox-beamer.el" -;;;;;; "ox-html.el" "ox-icalendar.el" "ox-latex.el" "ox-man.el" -;;;;;; "ox-md.el" "ox-odt.el" "ox-org.el" "ox-publish.el" "ox-texinfo.el" -;;;;;; "ox.el") (22693 37959 0 0)) - -;;;*** - -;; Local Variables: -;; version-control: never -;; no-byte-compile: t -;; no-update-autoloads: t -;; End: -;;; org-autoloads.el ends here diff --git a/elpa/org-20170210/org-pkg.el b/elpa/org-20170210/org-pkg.el deleted file mode 100644 index 7bef203f..00000000 --- a/elpa/org-20170210/org-pkg.el +++ /dev/null @@ -1,3 +0,0 @@ -(define-package "org" - "20170210" "Outline-based notes management and organizer" ( )) -;; no-byte-compile: t diff --git a/elpa/org-20170210/orgcard.pdf b/elpa/org-20170210/orgcard.pdf deleted file mode 100644 index 0d266a59681bf3b08bb3153551997422dc3c0c80..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 119383 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

4_YXLWQyn+d`-huPuf?^#T=%dR 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 0 +,#+END_SRC +#+end_example + +**** SQL: new engine added =vertica= + +A new engine was added to support vsql command line utility for use +against HP Vertica. + +More information on =vsql= can be found here: [[https://my.vertica.com/docs/7.2.x/HTML/index.htm#Authoring/ConnectingToHPVertica/vsql/UsingVsql.htm][my.vertica.com]] + +To use =vertica= in an sql =SRC_BLK= set the =:engine= like this: + +#+BEGIN_EXAMPLE + ,#+BEGIN_SRC sql :engine vertica :dbhost my_host :dbuser dbadmin :dbpassword pw :database vmart + SELECT * FROM nodes; + ,#+END_SRC +#+END_EXAMPLE + +*** New ~function~ scope argument for the Clock Table +Added a nullary function that returns a list of files as a possible +argument for the scope of the clock table. +*** Export +**** Implement vernacular table of contents in Markdown exporter +Global table of contents are generated using vanilla Markdown syntax +instead of HTML. Also #+TOC keyword, including local table of +contents, are now supported. +**** Add Slovanian translations +**** Implement ~org-export-insert-image-links~ +This new function is meant to be used in back-ends supporting images +as descriptions of links, a.k.a. image links. See its docstring for +details. +**** Add global macros through ~org-export-global-macros~ +With this variable, one can define macros available for all documents. +**** New keyword ~#+EXPORT_FILE_NAME~ +Simiralry to ~:EXPORT_FILE_NAME:~ property, this keyword allows the +user to specify the name of the output file upon exporting the +document. This also has an effect on publishing. +**** Horizontal rules are no longer ignored in LaTeX table math mode +**** Use ~compilation-mode~ for compilation output +**** ~latex-environment~ elements support ~caption~ keywords for LaTeX export +*** ~org-edit-special~ can edit LaTeX environments + +Using ~C-c '~ on a LaTeX environment opens a sub-editing buffer. By +default, major mode in that buffer is ~latex-mode~, but it can be +changed by configuring ~org-src-lang-modes~. + +*** ~org-list-to-generic~ includes a new property: ~:ifmt~ + +~:ifmt~ is a function to be called on the body of each item. See +~org-list-to-generic~ documentation for details. + +*** New variable : ~org-bibtex-headline-format-function~ +This allow to use a different title than entry title. + +*** ~org-attach~ supports attaching files from URLs + +Using ~C-c C-a u~ prompts for a URL pointing to a file to be attached +to the document. + +** Removed functions + +*** Org Timeline + +This feature has been removed. Use a custom agenda view, possibly +narrowed to current buffer to achieve a similar functionality. + +*** ~org-agenda-skip-entry-when-regexp-matches~ is obsolete + +Use ~org-agenda-skip-if~ instead. + +*** ~org-agenda-skip-subtree-when-regexp-matches~ is obsolete + +Use ~org-agenda-skip-if~ instead. + +*** ~org-agenda-skip-entry-when-regexp-matches-in-subtree~ is obsolete + +Use ~org-agenda-skip-if~ instead. + +*** ~org-minutes-to-clocksum-string~ is obsolete + +Use ~org-duration-from-minutes~ instead. + +*** ~org-hh:mm-string-to-minutes~ is obsolete + +Use ~org-duration-to-minutes~ instead. + +*** ~org-duration-string-to-minutes~ is obsolete + +Use ~org-duration-to-minutes~ instead. + +** Removed options + +*** ~org-agenda-repeating-timestamp-show-all~ is removed. + +For an equivalent to a ~nil~ value, set +~org-agenda-show-future-repeats~ to nil and +~org-agenda-prefer-last-repeat~ to ~t~. + +*** ~org-publish-sitemap-file-entry-format~ is deprecated + +One can provide new ~:sitemap-format-entry~ property for a function +equivalent to the removed format string. + +** New functions + +*** ~org-publish-find-property~ + +This function can be used as a tool to format entries in a site-map, +in addition to ~org-publish-find-title~ and ~org-publish-find-date~. + +*** ~org-list-to-org~ + +It is the reciprocal of ~org-list-to-lisp~, which see. + +*** ~org-agenda-set-restriction-lock-from-agenda~ + +Call ~org-agenda-set-restriction-lock~ from the agenda. + +** Miscellaneous + +*** More specific anniversary descriptions + +Anniversary descriptions (used in the agenda view, for instance) +include the point in time, when the anniversary appears. This is, +in its most general form, just the date of the anniversary. Or +more specific terms, like "today", "tomorrow" or "in n days" are +used to describe the time span. + +This feature allows to automatically change the description of an +anniversary, depending on if it occurs in the next few days or +far away in the future. + +*** Computed dates in tables appear as inactive time stamps + +*** Save point before opening a file with an unknown search option + +When following a file link with a search option (e.g., =::#custom-id=) +that doesn't exist in the target file, save positon before raising an +error. As a consequence, it is possible to jump back to the original +document with ~org-mark-ring-goto~ (default binding =C-c &=). + +*** ~org-get-heading~ accepts two more optional arguments + +See docstring for details. + +*** New option ~org-babel-uppercase-example-markers~ + +This variable is a ~defcustom~ and replaces the variable +~org-babel-capitalize-example-region-markers~, which is a ~defvar~ and +is now obselete. + * Version 9.0 ** Incompatible changes @@ -346,7 +649,7 @@ If you want to use the *trusted connection* feature, omit *both* the If your Emacs is running in a Cygwin environment, the =ob-sql= library can pass the converted path to the =sqlcmd= tool. -**** Improved support of header arguments for postgresql +**** Improved support of header arguments for postgresql The postgresql engine in a sql code block supports now ~:dbport~ nd ~:dbpassword~ as header arguments. diff --git a/elpa/org-20170210/etc/styles/OrgOdtContentTemplate.xml b/elpa/org-20170407/etc/styles/OrgOdtContentTemplate.xml similarity index 100% rename from elpa/org-20170210/etc/styles/OrgOdtContentTemplate.xml rename to elpa/org-20170407/etc/styles/OrgOdtContentTemplate.xml diff --git a/elpa/org-20170210/etc/styles/OrgOdtStyles.xml b/elpa/org-20170407/etc/styles/OrgOdtStyles.xml similarity index 100% rename from elpa/org-20170210/etc/styles/OrgOdtStyles.xml rename to elpa/org-20170407/etc/styles/OrgOdtStyles.xml diff --git a/elpa/org-20170210/etc/styles/README b/elpa/org-20170407/etc/styles/README similarity index 100% rename from elpa/org-20170210/etc/styles/README rename to elpa/org-20170407/etc/styles/README diff --git a/elpa/org-20170210/ob-C.el b/elpa/org-20170407/ob-C.el similarity index 100% rename from elpa/org-20170210/ob-C.el rename to elpa/org-20170407/ob-C.el diff --git a/elpa/org-20170210/ob-J.el b/elpa/org-20170407/ob-J.el similarity index 100% rename from elpa/org-20170210/ob-J.el rename to elpa/org-20170407/ob-J.el diff --git a/elpa/org-20170210/ob-R.el b/elpa/org-20170407/ob-R.el similarity index 99% rename from elpa/org-20170210/ob-R.el rename to elpa/org-20170407/ob-R.el index 3accade4..60990535 100644 --- a/elpa/org-20170210/ob-R.el +++ b/elpa/org-20170407/ob-R.el @@ -159,10 +159,10 @@ This function is called by `org-babel-execute-src-block'." (result-type (cdr (assq :result-type params))) (session (org-babel-R-initiate-session (cdr (assq :session params)) params)) - (colnames-p (cdr (assq :colnames params))) - (rownames-p (cdr (assq :rownames params))) (graphics-file (and (member "graphics" (assq :result-params params)) (org-babel-graphical-output-file params))) + (colnames-p (unless graphics-file (cdr (assq :colnames params)))) + (rownames-p (unless graphics-file (cdr (assq :rownames params)))) (full-body (let ((inside (list (org-babel-expand-body:R body params graphics-file)))) diff --git a/elpa/org-20170210/ob-abc.el b/elpa/org-20170407/ob-abc.el similarity index 100% rename from elpa/org-20170210/ob-abc.el rename to elpa/org-20170407/ob-abc.el diff --git a/elpa/org-20170210/ob-asymptote.el b/elpa/org-20170407/ob-asymptote.el similarity index 100% rename from elpa/org-20170210/ob-asymptote.el rename to elpa/org-20170407/ob-asymptote.el diff --git a/elpa/org-20170210/ob-awk.el b/elpa/org-20170407/ob-awk.el similarity index 100% rename from elpa/org-20170210/ob-awk.el rename to elpa/org-20170407/ob-awk.el diff --git a/elpa/org-20170210/ob-calc.el b/elpa/org-20170407/ob-calc.el similarity index 100% rename from elpa/org-20170210/ob-calc.el rename to elpa/org-20170407/ob-calc.el diff --git a/elpa/org-20170407/ob-clojure.el b/elpa/org-20170407/ob-clojure.el new file mode 100644 index 00000000..ada35a4b --- /dev/null +++ b/elpa/org-20170407/ob-clojure.el @@ -0,0 +1,198 @@ +;;; ob-clojure.el --- Babel Functions for Clojure -*- lexical-binding: t; -*- + +;; Copyright (C) 2009-2017 Free Software Foundation, Inc. + +;; Author: Joel Boehland, Eric Schulte, Oleh Krehel, Frederick Giasson +;; +;; Keywords: literate programming, reproducible research +;; Homepage: http://orgmode.org + +;; This file is part of GNU Emacs. + +;; GNU Emacs 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 of the License, or +;; (at your option) any later version. + +;; GNU Emacs 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 . + +;;; Commentary: + +;; Support for evaluating clojure code + +;; Requirements: + +;; - clojure (at least 1.2.0) +;; - clojure-mode +;; - either cider or SLIME + +;; For Cider, see https://github.com/clojure-emacs/cider + +;; For SLIME, the best way to install these components is by following +;; the directions as set out by Phil Hagelberg (Technomancy) on the +;; web page: http://technomancy.us/126 + +;;; Code: +(require 'cl-lib) +(require 'ob) + +(declare-function cider-current-connection "ext:cider-client" (&optional type)) +(declare-function cider-current-ns "ext:cider-client" ()) +(declare-function nrepl--merge "ext:nrepl-client" (dict1 dict2)) +(declare-function nrepl-dict-get "ext:nrepl-client" (dict key)) +(declare-function nrepl-dict-put "ext:nrepl-client" (dict key value)) +(declare-function nrepl-request:eval "ext:nrepl-client" + (input callback connection &optional session ns line column additional-params)) +(declare-function nrepl-sync-request:eval "ext:nrepl-client" + (input connection session &optional ns)) +(declare-function org-trim "org" (s &optional keep-lead)) +(declare-function slime-eval "ext:slime" (sexp &optional package)) + +(defvar nrepl-sync-request-timeout) + +(defvar org-babel-tangle-lang-exts) +(add-to-list 'org-babel-tangle-lang-exts '("clojure" . "clj")) + +(defvar org-babel-default-header-args:clojure '()) +(defvar org-babel-header-args:clojure '((package . :any))) + +(defcustom org-babel-clojure-sync-nrepl-timeout 10 + "Timeout value, in seconds, of a Clojure sync call. +If the value is nil, timeout is disabled." + :group 'org-babel + :type 'integer + :version "26.1" + :package-version '(Org . "9.1") + :safe #'wholenump) + +(defcustom org-babel-clojure-backend + (cond ((featurep 'cider) 'cider) + (t 'slime)) + "Backend used to evaluate Clojure code blocks." + :group 'org-babel + :type '(choice + (const :tag "cider" cider) + (const :tag "SLIME" slime))) + +(defun org-babel-expand-body:clojure (body params) + "Expand BODY according to PARAMS, return the expanded body." + (let* ((vars (org-babel--get-vars params)) + (result-params (cdr (assq :result-params params))) + (print-level nil) (print-length nil) + (body (org-trim + (if (null vars) (org-trim body) + (concat "(let [" + (mapconcat + (lambda (var) + (format "%S (quote %S)" (car var) (cdr var))) + vars "\n ") + "]\n" body ")"))))) + (if (or (member "code" result-params) + (member "pp" result-params)) + (format "(clojure.pprint/pprint (do %s))" body) + body))) + +(defun org-babel-execute:clojure (body params) + "Execute a block of Clojure code with Babel. +The underlying process performed by the code block can be output +using the :show-process parameter." + (let ((expanded (org-babel-expand-body:clojure body params)) + (response (list 'dict)) + result) + (cl-case org-babel-clojure-backend + (cider + (require 'cider) + (let ((result-params (cdr (assq :result-params params))) + (show (cdr (assq :show-process params)))) + (if (member show '(nil "no")) + ;; Run code without showing the process. + (progn + (setq response + (let ((nrepl-sync-request-timeout + org-babel-clojure-sync-nrepl-timeout)) + (nrepl-sync-request:eval expanded + (cider-current-connection) + (cider-current-ns)))) + (setq result + (concat + (nrepl-dict-get response + (if (or (member "output" result-params) + (member "pp" result-params)) + "out" + "value")) + (nrepl-dict-get response "ex") + (nrepl-dict-get response "root-ex") + (nrepl-dict-get response "err")))) + ;; Show the process in an output buffer/window. + (let ((process-buffer (switch-to-buffer-other-window + "*Clojure Show Process Sub Buffer*")) + status) + ;; Run the Clojure code in nREPL. + (nrepl-request:eval + expanded + (lambda (resp) + (when (member "out" resp) + ;; Print the output of the nREPL in the output buffer. + (princ (nrepl-dict-get resp "out") process-buffer)) + (when (member "ex" resp) + ;; In case there is an exception, then add it to the + ;; output buffer as well. + (princ (nrepl-dict-get resp "ex") process-buffer) + (princ (nrepl-dict-get resp "root-ex") process-buffer)) + (when (member "err" resp) + ;; In case there is an error, then add it to the + ;; output buffer as well. + (princ (nrepl-dict-get resp "err") process-buffer)) + (nrepl--merge response resp) + ;; Update the status of the nREPL output session. + (setq status (nrepl-dict-get response "status"))) + (cider-current-connection) + (cider-current-ns)) + + ;; Wait until the nREPL code finished to be processed. + (while (not (member "done" status)) + (nrepl-dict-put response "status" (remove "need-input" status)) + (accept-process-output nil 0.01) + (redisplay)) + + ;; Delete the show buffer & window when the processing is + ;; finalized. + (mapc #'delete-window + (get-buffer-window-list process-buffer nil t)) + (kill-buffer process-buffer) + + ;; Put the output or the value in the result section of + ;; the code block. + (setq result + (concat + (nrepl-dict-get response + (if (or (member "output" result-params) + (member "pp" result-params)) + "out" + "value")) + (nrepl-dict-get response "ex") + (nrepl-dict-get response "root-ex") + (nrepl-dict-get response "err"))))))) + (slime + (require 'slime) + (with-temp-buffer + (insert expanded) + (setq result + (slime-eval + `(swank:eval-and-grab-output + ,(buffer-substring-no-properties (point-min) (point-max))) + (cdr (assq :package params))))))) + (org-babel-result-cond (cdr (assq :result-params params)) + result + (condition-case nil (org-babel-script-escape result) + (error result))))) + +(provide 'ob-clojure) + +;;; ob-clojure.el ends here diff --git a/elpa/org-20170210/ob-comint.el b/elpa/org-20170407/ob-comint.el similarity index 100% rename from elpa/org-20170210/ob-comint.el rename to elpa/org-20170407/ob-comint.el diff --git a/elpa/org-20170210/ob-coq.el b/elpa/org-20170407/ob-coq.el similarity index 100% rename from elpa/org-20170210/ob-coq.el rename to elpa/org-20170407/ob-coq.el diff --git a/elpa/org-20170210/ob-core.el b/elpa/org-20170407/ob-core.el similarity index 99% rename from elpa/org-20170210/ob-core.el rename to elpa/org-20170407/ob-core.el index e8356934..d64f7b1e 100644 --- a/elpa/org-20170210/ob-core.el +++ b/elpa/org-20170407/ob-core.el @@ -179,6 +179,14 @@ This string must include a \"%s\" which will be replaced by the results." :package-version '(Org . "9.0") :safe #'booleanp) +(defcustom org-babel-uppercase-example-markers nil + "When non-nil, begin/end example markers will be inserted in upper case." + :group 'org-babel + :type 'boolean + :version "26.1" + :package-version '(Org . "9.1") + :safe #'booleanp) + (defun org-babel-noweb-wrap (&optional regexp) (concat org-babel-noweb-wrap-start (or regexp "\\([^ \t\n].+?[^ \t]\\|[^ \t\n]\\)") @@ -2435,15 +2443,12 @@ file's directory then expand relative links." result) (if description (concat "[" description "]") "")))) -(defvar org-babel-capitalize-example-region-markers nil - "Make true to capitalize begin/end example markers inserted by code blocks.") - (defun org-babel-examplify-region (beg end &optional results-switches inline) "Comment out region using the inline `==' or `: ' org example quote." (interactive "*r") (let ((maybe-cap (lambda (str) - (if org-babel-capitalize-example-region-markers (upcase str) str)))) + (if org-babel-uppercase-example-markers (upcase str) str)))) (if inline (save-excursion (goto-char beg) @@ -2463,7 +2468,9 @@ file's directory then expand relative links." (funcall maybe-cap "#+begin_example") results-switches) (funcall maybe-cap "#+begin_example\n"))) - (if (markerp end) (goto-char end) (forward-char (- end beg))) + (let ((p (point))) + (if (markerp end) (goto-char end) (forward-char (- end beg))) + (org-escape-code-in-region p (point))) (insert (funcall maybe-cap "#+end_example\n"))))))))) (defun org-babel-update-block-body (new-body) diff --git a/elpa/org-20170210/ob-css.el b/elpa/org-20170407/ob-css.el similarity index 100% rename from elpa/org-20170210/ob-css.el rename to elpa/org-20170407/ob-css.el diff --git a/elpa/org-20170210/ob-ditaa.el b/elpa/org-20170407/ob-ditaa.el similarity index 100% rename from elpa/org-20170210/ob-ditaa.el rename to elpa/org-20170407/ob-ditaa.el diff --git a/elpa/org-20170210/ob-dot.el b/elpa/org-20170407/ob-dot.el similarity index 100% rename from elpa/org-20170210/ob-dot.el rename to elpa/org-20170407/ob-dot.el diff --git a/elpa/org-20170210/ob-ebnf.el b/elpa/org-20170407/ob-ebnf.el similarity index 100% rename from elpa/org-20170210/ob-ebnf.el rename to elpa/org-20170407/ob-ebnf.el diff --git a/elpa/org-20170210/ob-emacs-lisp.el b/elpa/org-20170407/ob-emacs-lisp.el similarity index 100% rename from elpa/org-20170210/ob-emacs-lisp.el rename to elpa/org-20170407/ob-emacs-lisp.el diff --git a/elpa/org-20170210/ob-eval.el b/elpa/org-20170407/ob-eval.el similarity index 100% rename from elpa/org-20170210/ob-eval.el rename to elpa/org-20170407/ob-eval.el diff --git a/elpa/org-20170210/ob-exp.el b/elpa/org-20170407/ob-exp.el similarity index 94% rename from elpa/org-20170210/ob-exp.el rename to elpa/org-20170407/ob-exp.el index 95853a68..d966cd91 100644 --- a/elpa/org-20170210/ob-exp.el +++ b/elpa/org-20170407/ob-exp.el @@ -38,10 +38,10 @@ (defvar org-src-preserve-indentation) -(defcustom org-export-babel-evaluate t - "Switch controlling code evaluation during export. +(defcustom org-export-use-babel t + "Switch controlling code evaluation and header processing during export. When set to nil no code will be evaluated as part of the export -process and no header argumentss will be obeyed. When set to +process and no header arguments will be obeyed. When set to `inline-only', only inline code blocks will be executed. Users who wish to avoid evaluating code on export should use the header argument `:eval never-export'." @@ -49,8 +49,9 @@ argument `:eval never-export'." :version "24.1" :type '(choice (const :tag "Never" nil) (const :tag "Only inline code" inline-only) - (const :tag "Always" t))) -(put 'org-export-babel-evaluate 'safe-local-variable #'null) + (const :tag "Always" t)) + :safe #'null) + (defmacro org-babel-exp--at-source (&rest body) "Evaluate BODY at the source of the Babel block at point. @@ -128,10 +129,10 @@ this template." (defun org-babel-exp-process-buffer () "Execute all Babel blocks in current buffer." (interactive) - (when org-export-babel-evaluate + (when org-export-use-babel (save-window-excursion (let ((case-fold-search t) - (regexp (if (eq org-export-babel-evaluate 'inline-only) + (regexp (if (eq org-export-use-babel 'inline-only) "\\(call\\|src\\)_" "\\(call\\|src\\)_\\|^[ \t]*#\\+\\(BEGIN_SRC\\|CALL:\\)")) ;; Get a pristine copy of current buffer so Babel @@ -159,8 +160,24 @@ this template." (goto-char (point-min)) (while (re-search-forward regexp nil t) (unless (save-match-data (org-in-commented-heading-p)) - (let* ((element (save-match-data (org-element-context))) - (type (org-element-type element)) + (let* ((object? (match-end 1)) + (element (save-match-data + (if object? (org-element-context) + ;; No deep inspection if we're + ;; just looking for an element. + (org-element-at-point)))) + (type + (pcase (org-element-type element) + ;; Discard block elements if we're looking + ;; for inline objects. False results + ;; happen when, e.g., "call_" syntax is + ;; located within affiliated keywords: + ;; + ;; #+name: call_src + ;; #+begin_src ... + ((and (or `babel-call `src-block) (guard object?)) + nil) + (type type))) (begin (copy-marker (org-element-property :begin element))) (end diff --git a/elpa/org-20170210/ob-forth.el b/elpa/org-20170407/ob-forth.el similarity index 100% rename from elpa/org-20170210/ob-forth.el rename to elpa/org-20170407/ob-forth.el diff --git a/elpa/org-20170210/ob-fortran.el b/elpa/org-20170407/ob-fortran.el similarity index 100% rename from elpa/org-20170210/ob-fortran.el rename to elpa/org-20170407/ob-fortran.el diff --git a/elpa/org-20170210/ob-gnuplot.el b/elpa/org-20170407/ob-gnuplot.el similarity index 100% rename from elpa/org-20170210/ob-gnuplot.el rename to elpa/org-20170407/ob-gnuplot.el diff --git a/elpa/org-20170210/ob-groovy.el b/elpa/org-20170407/ob-groovy.el similarity index 100% rename from elpa/org-20170210/ob-groovy.el rename to elpa/org-20170407/ob-groovy.el diff --git a/elpa/org-20170210/ob-haskell.el b/elpa/org-20170407/ob-haskell.el similarity index 100% rename from elpa/org-20170210/ob-haskell.el rename to elpa/org-20170407/ob-haskell.el diff --git a/elpa/org-20170407/ob-hledger.el b/elpa/org-20170407/ob-hledger.el new file mode 100644 index 00000000..371b9c6b --- /dev/null +++ b/elpa/org-20170407/ob-hledger.el @@ -0,0 +1,70 @@ +;; ob-ledger.el --- Babel Functions for hledger -*- lexical-binding: t; -*- + +;; Copyright (C) 2010-2017 Free Software Foundation, Inc. + +;; Author: Simon Michael +;; Keywords: literate programming, reproducible research, plain text accounting +;; Homepage: http://orgmode.org + +;; This file is part of GNU Emacs. + +;; GNU Emacs 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 of the License, or +;; (at your option) any later version. + +;; GNU Emacs 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 . + +;;; Commentary: + +;; Babel support for evaluating hledger entries. +;; +;; Based on ob-ledger.el. +;; If the source block is empty, hledger will use a default journal file, +;; probably ~/.hledger.journal (it may not notice your $LEDGER_FILE env var). +;; So make ~/.hledger.journal a symbolic link to the real file if necessary. + +;;; Code: +(require 'ob) + +(defvar org-babel-default-header-args:hledger + '((:results . "output") (:exports . "results") (:cmdline . "bal")) + "Default arguments to use when evaluating a hledger source block.") + +(defun org-babel-execute:hledger (body params) + "Execute a block of hledger entries with org-babel. +This function is called by `org-babel-execute-src-block'." + (message "executing hledger source code block") + (letrec ( ;(result-params (split-string (or (cdr (assq :results params)) ""))) + (cmdline (cdr (assq :cmdline params))) + (in-file (org-babel-temp-file "hledger-")) + (out-file (org-babel-temp-file "hledger-output-")) + (hledgercmd (concat "hledger" + (if (> (length body) 0) + (concat " -f " (org-babel-process-file-name in-file)) + "") + " " cmdline))) + (with-temp-file in-file (insert body)) +;; TODO This is calling for some refactoring: +;; (concat "hledger" (if ...) " " cmdline) +;; could be built only once and bound to a symbol. + (message "%s" hledgercmd) + (with-output-to-string + (shell-command (concat hledgercmd " > " (org-babel-process-file-name out-file)))) + (with-temp-buffer (insert-file-contents out-file) (buffer-string)))) + +(defun org-babel-prep-session:hledger (_session _params) + (error "hledger does not support sessions")) + +(provide 'ob-hledger) + + + +;;; ob-hledger.el ends here +;; TODO Unit tests are more than welcome, too. diff --git a/elpa/org-20170210/ob-io.el b/elpa/org-20170407/ob-io.el similarity index 100% rename from elpa/org-20170210/ob-io.el rename to elpa/org-20170407/ob-io.el diff --git a/elpa/org-20170210/ob-java.el b/elpa/org-20170407/ob-java.el similarity index 100% rename from elpa/org-20170210/ob-java.el rename to elpa/org-20170407/ob-java.el diff --git a/elpa/org-20170210/ob-js.el b/elpa/org-20170407/ob-js.el similarity index 100% rename from elpa/org-20170210/ob-js.el rename to elpa/org-20170407/ob-js.el diff --git a/elpa/org-20170210/ob-keys.el b/elpa/org-20170407/ob-keys.el similarity index 100% rename from elpa/org-20170210/ob-keys.el rename to elpa/org-20170407/ob-keys.el diff --git a/elpa/org-20170210/ob-latex.el b/elpa/org-20170407/ob-latex.el similarity index 100% rename from elpa/org-20170210/ob-latex.el rename to elpa/org-20170407/ob-latex.el diff --git a/elpa/org-20170210/ob-ledger.el b/elpa/org-20170407/ob-ledger.el similarity index 100% rename from elpa/org-20170210/ob-ledger.el rename to elpa/org-20170407/ob-ledger.el diff --git a/elpa/org-20170210/ob-lilypond.el b/elpa/org-20170407/ob-lilypond.el similarity index 100% rename from elpa/org-20170210/ob-lilypond.el rename to elpa/org-20170407/ob-lilypond.el diff --git a/elpa/org-20170210/ob-lisp.el b/elpa/org-20170407/ob-lisp.el similarity index 100% rename from elpa/org-20170210/ob-lisp.el rename to elpa/org-20170407/ob-lisp.el diff --git a/elpa/org-20170210/ob-lob.el b/elpa/org-20170407/ob-lob.el similarity index 100% rename from elpa/org-20170210/ob-lob.el rename to elpa/org-20170407/ob-lob.el diff --git a/elpa/org-20170210/ob-lua.el b/elpa/org-20170407/ob-lua.el similarity index 100% rename from elpa/org-20170210/ob-lua.el rename to elpa/org-20170407/ob-lua.el diff --git a/elpa/org-20170210/ob-makefile.el b/elpa/org-20170407/ob-makefile.el similarity index 100% rename from elpa/org-20170210/ob-makefile.el rename to elpa/org-20170407/ob-makefile.el diff --git a/elpa/org-20170210/ob-matlab.el b/elpa/org-20170407/ob-matlab.el similarity index 100% rename from elpa/org-20170210/ob-matlab.el rename to elpa/org-20170407/ob-matlab.el diff --git a/elpa/org-20170210/ob-maxima.el b/elpa/org-20170407/ob-maxima.el similarity index 94% rename from elpa/org-20170210/ob-maxima.el rename to elpa/org-20170407/ob-maxima.el index 0a4d835a..350f66b7 100644 --- a/elpa/org-20170210/ob-maxima.el +++ b/elpa/org-20170407/ob-maxima.el @@ -48,9 +48,13 @@ (defun org-babel-maxima-expand (body params) "Expand a block of Maxima code according to its header arguments." - (let ((vars (org-babel--get-vars params))) + (let ((vars (org-babel--get-vars params)) + (epilogue (cdr (assq :epilogue params))) + (prologue (cdr (assq :prologue params)))) (mapconcat 'identity (list + ;; Any code from the specified prologue at the start. + prologue ;; graphic output (let ((graphic-file (ignore-errors (org-babel-graphical-output-file params)))) (if graphic-file @@ -62,6 +66,8 @@ (mapconcat 'org-babel-maxima-var-to-maxima vars "\n") ;; body body + ;; Any code from the specified epilogue at the end. + epilogue "gnuplot_close ()$") "\n"))) diff --git a/elpa/org-20170210/ob-mscgen.el b/elpa/org-20170407/ob-mscgen.el similarity index 100% rename from elpa/org-20170210/ob-mscgen.el rename to elpa/org-20170407/ob-mscgen.el diff --git a/elpa/org-20170210/ob-ocaml.el b/elpa/org-20170407/ob-ocaml.el similarity index 100% rename from elpa/org-20170210/ob-ocaml.el rename to elpa/org-20170407/ob-ocaml.el diff --git a/elpa/org-20170210/ob-octave.el b/elpa/org-20170407/ob-octave.el similarity index 100% rename from elpa/org-20170210/ob-octave.el rename to elpa/org-20170407/ob-octave.el diff --git a/elpa/org-20170210/ob-org.el b/elpa/org-20170407/ob-org.el similarity index 100% rename from elpa/org-20170210/ob-org.el rename to elpa/org-20170407/ob-org.el diff --git a/elpa/org-20170210/ob-perl.el b/elpa/org-20170407/ob-perl.el similarity index 100% rename from elpa/org-20170210/ob-perl.el rename to elpa/org-20170407/ob-perl.el diff --git a/elpa/org-20170210/ob-picolisp.el b/elpa/org-20170407/ob-picolisp.el similarity index 100% rename from elpa/org-20170210/ob-picolisp.el rename to elpa/org-20170407/ob-picolisp.el diff --git a/elpa/org-20170210/ob-plantuml.el b/elpa/org-20170407/ob-plantuml.el similarity index 75% rename from elpa/org-20170210/ob-plantuml.el rename to elpa/org-20170407/ob-plantuml.el index e90021a5..70c8d787 100644 --- a/elpa/org-20170210/ob-plantuml.el +++ b/elpa/org-20170407/ob-plantuml.el @@ -46,6 +46,31 @@ :version "24.1" :type 'string) +(defun org-babel-variable-assignments:plantuml (params) + "Return a list of PlantUML statements assigning the block's variables. +PARAMS is a property list of source block parameters, which may +contain multiple entries for the key `:var'. `:var' entries in PARAMS +are expected to be scalar variables." + (mapcar + (lambda (pair) + (format "!define %s %s" + (car pair) + (replace-regexp-in-string "\"" "" (cdr pair)))) + (org-babel--get-vars params))) + +(defun org-babel-plantuml-make-body (body params) + "Return PlantUML input string. +BODY is the content of the source block and PARAMS is a property list +of source block parameters. This function relies on the +`org-babel-expand-body:generic' function to extract `:var' entries +from PARAMS and on the `org-babel-variable-assignments:plantuml' +function to convert variables to PlantUML assignments." + (concat + "@startuml\n" + (org-babel-expand-body:generic + body params (org-babel-variable-assignments:plantuml params)) + "\n@enduml")) + (defun org-babel-execute:plantuml (body params) "Execute a block of plantuml code with org-babel. This function is called by `org-babel-execute-src-block'." @@ -54,6 +79,7 @@ This function is called by `org-babel-execute-src-block'." (cmdline (cdr (assq :cmdline params))) (in-file (org-babel-temp-file "plantuml-")) (java (or (cdr (assq :java params)) "")) + (full-body (org-babel-plantuml-make-body body params)) (cmd (if (string= "" org-plantuml-jar-path) (error "`org-plantuml-jar-path' is not set") (concat "java " java " -jar " @@ -85,7 +111,7 @@ This function is called by `org-babel-execute-src-block'." (org-babel-process-file-name out-file))))) (unless (file-exists-p org-plantuml-jar-path) (error "Could not find plantuml.jar at %s" org-plantuml-jar-path)) - (with-temp-file in-file (insert (concat "@startuml\n" body "\n@enduml"))) + (with-temp-file in-file (insert full-body)) (message "%s" cmd) (org-babel-eval cmd "") nil)) ;; signal that output has already been written to file diff --git a/elpa/org-20170210/ob-processing.el b/elpa/org-20170407/ob-processing.el similarity index 100% rename from elpa/org-20170210/ob-processing.el rename to elpa/org-20170407/ob-processing.el diff --git a/elpa/org-20170210/ob-python.el b/elpa/org-20170407/ob-python.el similarity index 100% rename from elpa/org-20170210/ob-python.el rename to elpa/org-20170407/ob-python.el diff --git a/elpa/org-20170210/ob-ref.el b/elpa/org-20170407/ob-ref.el similarity index 100% rename from elpa/org-20170210/ob-ref.el rename to elpa/org-20170407/ob-ref.el diff --git a/elpa/org-20170210/ob-ruby.el b/elpa/org-20170407/ob-ruby.el similarity index 100% rename from elpa/org-20170210/ob-ruby.el rename to elpa/org-20170407/ob-ruby.el diff --git a/elpa/org-20170210/ob-sass.el b/elpa/org-20170407/ob-sass.el similarity index 100% rename from elpa/org-20170210/ob-sass.el rename to elpa/org-20170407/ob-sass.el diff --git a/elpa/org-20170210/ob-scala.el b/elpa/org-20170407/ob-scala.el similarity index 100% rename from elpa/org-20170210/ob-scala.el rename to elpa/org-20170407/ob-scala.el diff --git a/elpa/org-20170210/ob-scheme.el b/elpa/org-20170407/ob-scheme.el similarity index 100% rename from elpa/org-20170210/ob-scheme.el rename to elpa/org-20170407/ob-scheme.el diff --git a/elpa/org-20170210/ob-screen.el b/elpa/org-20170407/ob-screen.el similarity index 100% rename from elpa/org-20170210/ob-screen.el rename to elpa/org-20170407/ob-screen.el diff --git a/elpa/org-20170210/ob-sed.el b/elpa/org-20170407/ob-sed.el similarity index 100% rename from elpa/org-20170210/ob-sed.el rename to elpa/org-20170407/ob-sed.el diff --git a/elpa/org-20170210/ob-shell.el b/elpa/org-20170407/ob-shell.el similarity index 100% rename from elpa/org-20170210/ob-shell.el rename to elpa/org-20170407/ob-shell.el diff --git a/elpa/org-20170210/ob-shen.el b/elpa/org-20170407/ob-shen.el similarity index 100% rename from elpa/org-20170210/ob-shen.el rename to elpa/org-20170407/ob-shen.el diff --git a/elpa/org-20170210/ob-sql.el b/elpa/org-20170407/ob-sql.el similarity index 88% rename from elpa/org-20170210/ob-sql.el rename to elpa/org-20170407/ob-sql.el index 265c7135..ec0427f4 100644 --- a/elpa/org-20170210/ob-sql.el +++ b/elpa/org-20170407/ob-sql.el @@ -43,15 +43,25 @@ ;; - colnames (default, nil, means "yes") ;; - result-params ;; - out-file +;; ;; The following are used but not really implemented for SQL: ;; - colname-names ;; - rownames ;; - rowname-names ;; +;; Engines supported: +;; - mysql +;; - dbi +;; - mssql +;; - sqsh +;; - postgresql +;; - oracle +;; - vertica +;; ;; TODO: ;; ;; - support for sessions -;; - support for more engines (currently only supports mysql) +;; - support for more engines ;; - what's a reasonable way to drop table data into SQL? ;; @@ -100,17 +110,6 @@ Pass nil to omit that arg." (when user (concat "-U" user)) (when database (concat "-d" database)))))) -(defun org-babel-sql-dbstring-vertica (host port user password database) - "Make Vertica command line args for database connection. Pass nil to omit that arg." - (mapconcat #'identity - (delq nil - (list (when host (format "-h %s" host)) - (when port (format "-p %d" port)) - (when user (format "-U %s" user)) - (when password (format "-w %s" (shell-quote-argument password) )) - (when database (format "-d %s" database)))) - " ")) - (defun org-babel-sql-dbstring-oracle (host port user password database) "Make Oracle command line args for database connection." (format "%s/%s@%s:%s/%s" user password host port database)) @@ -127,6 +126,28 @@ SQL Server on Windows and Linux platform." (when database (format "-d \"%s\"" database)))) " ")) +(defun org-babel-sql-dbstring-sqsh (host user password database) + "Make sqsh commmand line args for database connection. +\"sqsh\" is one method to access Sybase or MS SQL via Linux platform" + (mapconcat #'identity + (delq nil + (list (when host (format "-S \"%s\"" host)) + (when user (format "-U \"%s\"" user)) + (when password (format "-P \"%s\"" password)) + (when database (format "-D \"%s\"" database)))) + " ")) + +(defun org-babel-sql-dbstring-vertica (host port user password database) + "Make Vertica command line args for database connection. Pass nil to omit that arg." + (mapconcat #'identity + (delq nil + (list (when host (format "-h %s" host)) + (when port (format "-p %d" port)) + (when user (format "-U %s" user)) + (when password (format "-w %s" (shell-quote-argument password) )) + (when database (format "-d %s" database)))) + " ")) + (defun org-babel-sql-convert-standard-filename (file) "Convert the file name to OS standard. If in Cygwin environment, uses Cygwin specific function to @@ -190,6 +211,14 @@ footer=off -F \"\t\" %s -f %s -o %s %s" (org-babel-process-file-name in-file) (org-babel-process-file-name out-file) (or cmdline ""))) + (`sqsh (format "sqsh %s %s -i %s -o %s -m csv" + (or cmdline "") + (org-babel-sql-dbstring-sqsh + dbhost dbuser dbpassword database) + (org-babel-sql-convert-standard-filename + (org-babel-process-file-name in-file)) + (org-babel-sql-convert-standard-filename + (org-babel-process-file-name out-file)))) (`vertica (format "vsql %s -f %s -o %s %s" (org-babel-sql-dbstring-vertica dbhost dbport dbuser dbpassword database) @@ -220,19 +249,21 @@ SET MARKUP HTML OFF SPOOL OFF SET COLSEP '|' ") - (`mssql "SET NOCOUNT ON + ((or `mssql `sqsh) "SET NOCOUNT ON ") (`vertica "\\a\n") (_ "")) - (org-babel-expand-body:sql body params))) + (org-babel-expand-body:sql body params) + ;; "sqsh" requires "go" inserted at EOF. + (if (string= engine "sqsh") "\ngo" ""))) (org-babel-eval command "") (org-babel-result-cond result-params (with-temp-buffer (progn (insert-file-contents-literally out-file) (buffer-string))) (with-temp-buffer (cond - ((memq (intern engine) '(dbi mysql postgresql vertica)) + ((memq (intern engine) '(dbi mysql postgresql sqsh vertica)) ;; Add header row delimiter after column-names header in first line (cond (colnames-p @@ -257,7 +288,7 @@ SET COLSEP '|' (goto-char (point-max)) (forward-char -1)) (write-file out-file)))) - (org-table-import out-file '(16)) + (org-table-import out-file (if (string= engine "sqsh") '(4) '(16))) (org-babel-reassemble-table (mapcar (lambda (x) (if (string= (car x) header-delim) diff --git a/elpa/org-20170210/ob-sqlite.el b/elpa/org-20170407/ob-sqlite.el similarity index 100% rename from elpa/org-20170210/ob-sqlite.el rename to elpa/org-20170407/ob-sqlite.el diff --git a/elpa/org-20170210/ob-stan.el b/elpa/org-20170407/ob-stan.el similarity index 100% rename from elpa/org-20170210/ob-stan.el rename to elpa/org-20170407/ob-stan.el diff --git a/elpa/org-20170210/ob-table.el b/elpa/org-20170407/ob-table.el similarity index 100% rename from elpa/org-20170210/ob-table.el rename to elpa/org-20170407/ob-table.el diff --git a/elpa/org-20170210/ob-tangle.el b/elpa/org-20170407/ob-tangle.el similarity index 99% rename from elpa/org-20170210/ob-tangle.el rename to elpa/org-20170407/ob-tangle.el index 3b053326..b33fcaee 100644 --- a/elpa/org-20170210/ob-tangle.el +++ b/elpa/org-20170407/ob-tangle.el @@ -29,13 +29,13 @@ (require 'cl-lib) (require 'org-src) +(require 'org-macs) (declare-function make-directory "files" (dir &optional parents)) (declare-function org-at-heading-p "org" (&optional ignored)) (declare-function org-babel-update-block-body "ob-core" (new-body)) (declare-function org-back-to-heading "org" (&optional invisible-ok)) (declare-function org-before-first-heading-p "org" ()) -(declare-function org-edit-special "org" (&optional arg)) (declare-function org-element-at-point "org-element" ()) (declare-function org-element-type "org-element" (element)) (declare-function org-fill-template "org" (template alist)) @@ -45,7 +45,6 @@ (declare-function org-open-link-from-string "org" (s &optional arg reference-buffer)) (declare-function org-remove-indentation "org" (code &optional n)) (declare-function org-store-link "org" (arg)) -(declare-function org-string-nw-p "org-macs" (s)) (declare-function org-trim "org" (s &optional keep-lead)) (declare-function outline-previous-heading "outline" ()) (declare-function org-id-find "org-id" (id &optional markerp)) diff --git a/elpa/org-20170210/ob.el b/elpa/org-20170407/ob.el similarity index 100% rename from elpa/org-20170210/ob.el rename to elpa/org-20170407/ob.el diff --git a/elpa/org-20170210/org b/elpa/org-20170407/org similarity index 97% rename from elpa/org-20170210/org rename to elpa/org-20170407/org index 4e202dd3..f7a3d605 100644 --- a/elpa/org-20170210/org +++ b/elpa/org-20170407/org @@ -1,6 +1,6 @@ This is org, produced by makeinfo version 4.13 from org.texi. -This manual is for Org version 9.0.5 (release_9.0.5). +This manual is for Org version 9.0.5 (release_9.0.5-436-g8ba336.dirty). Copyright (C) 2004-2017 Free Software Foundation, Inc. @@ -26,7 +26,7 @@ File: org, Node: Top, Next: Introduction, Prev: (dir), Up: (dir) Org Mode Manual *************** -This manual is for Org version 9.0.5 (release_9.0.5). +This manual is for Org version 9.0.5 (release_9.0.5-436-g8ba336.dirty). Copyright (C) 2004-2017 Free Software Foundation, Inc. @@ -254,7 +254,6 @@ The built-in agenda views * Weekly/daily agenda:: The calendar page with current tasks * Global TODO list:: All unfinished action items * Matching tags and properties:: Structured information with fine-tuned search -* Timeline:: Time-sorted view for single file * Search view:: Find entries by searching for text * Stuck projects:: Find projects you need to review @@ -1115,8 +1114,8 @@ File: org, Node: Structure editing, Next: Sparse trees, Prev: Motion, Up: Do 2.5 Structure editing ===================== -`M-' (`org-insert-heading') - Insert a new heading/item with the same level as the one at point. +`M-' (`org-meta-return') + Insert a new heading, item or row. If the command is used at the _beginning_ of a line, and if there is a heading or a plain list item (*note Plain lists::) at point, @@ -1534,9 +1533,9 @@ like this: You can interactively insert drawers at point by calling `org-insert-drawer', which is bound to . With an active region, this command will put the region inside the drawer. With a -prefix argument, this command calls `org-insert-property-drawer' and -add a property drawer right below the current headline. Completion -over drawer keywords is also possible using . +prefix argument, this command calls `org-insert-property-drawer' and add +a property drawer right below the current headline. Completion over +drawer keywords is also possible using `M-'(1). Visibility cycling (*note Visibility cycling::) on the headline will hide and show the entry, but keep the drawer collapsed to a single @@ -1556,6 +1555,11 @@ quick note in the LOGBOOK drawer, in a similar way to state changes, use export output. Property drawers are not affected by this variable: configure `org-export-with-properties' instead. + ---------- Footnotes ---------- + + (1) Many desktops intercept `M-' to switch windows. Use +`C-M-i' or ` ' instead for completion (*note Completion::). +  File: org, Node: Blocks, Next: Footnotes, Prev: Drawers, Up: Document structure @@ -1816,7 +1820,7 @@ Re-aligning and field motion `C-c SPC (`org-table-blank-field')' Blank the field at point. -` (`org-table-next-field')' +`TAB (`org-table-next-field')' Re-align the table, move to the next field. Creates a new row if necessary. @@ -2679,7 +2683,7 @@ configure the option `org-table-use-standard-references'. Emacs Lisp mode. `M- (`lisp-complete-symbol')' - Complete Lisp symbols, just like in Emacs Lisp mode. + Complete Lisp symbols, just like in Emacs Lisp mode.(1) `S-///' Shift the reference at point. For example, if the reference @@ -2751,6 +2755,11 @@ turn on formula debugging in the `Tbl' menu and repeat the calculation, for example by pressing `C-u C-u C-c = ' in a field. Detailed information will be displayed. + ---------- Footnotes ---------- + + (1) Many desktops intercept `M-' to switch windows. Use +`C-M-i' or ` ' instead for completion (*note Completion::). +  File: org, Node: Updating the table, Next: Advanced features, Prev: Editing and debugging formulas, Up: The spreadsheet @@ -3634,9 +3643,8 @@ The most important commands to work with TODO entries are: the fast selection interface; this is the default behavior when `org-use-fast-todo-selection' is non-`nil'. - The same rotation can also be done "remotely" from the timeline - and agenda buffers with the `t' command key (*note Agenda - commands::). + The same rotation can also be done "remotely" from agenda buffers + with the `t' command key (*note Agenda commands::). `C-u C-c C-t' When TODO keywords have no selection keys, select a specific @@ -3763,8 +3771,7 @@ the global TODO list: `C-3 C-c a t'. ---------- Footnotes ---------- - (1) This is also true for the `t' command in the timeline and agenda -buffers. + (1) This is also true for the `t' command in the agenda buffers.  File: org, Node: Multiple sets in one file, Next: Fast access to TODO states, Prev: TODO types, Up: TODO extensions @@ -4004,11 +4011,6 @@ note along with the timestamp, use(2) You will then be prompted for a note, and that note will be stored below the entry with a `Closing Note' heading. - In the timeline (*note Timeline::) and in the agenda (*note -Weekly/daily agenda::), you can then use the `l' key to display the -TODO items with a `CLOSED' timestamp on each day, giving you an -overview of what has been done. - ---------- Footnotes ---------- (1) The corresponding in-buffer setting is: `#+STARTUP: logdone' @@ -4225,8 +4227,7 @@ be TODO items. command prompts for a priority character `A', `B' or `C'. When you press instead, the priority cookie is removed from the headline. The priorities can also be changed "remotely" from the - timeline and agenda buffer with the `,' command (*note Agenda - commands::). + agenda buffer with the `,' command (*note Agenda commands::). `S- (`org-priority-up')' `S- (`org-priority-down')' @@ -5409,9 +5410,8 @@ agenda (*note Weekly/daily agenda::). We distinguish: PLAIN TIMESTAMP; EVENT; APPOINTMENT A simple timestamp just assigns a date/time to an item. This is just like writing down an appointment or event in a paper agenda. - In the timeline and agenda displays, the headline of an entry - associated with a plain timestamp will be shown exactly on that - date. + In the agenda display, the headline of an entry associated with a + plain timestamp will be shown exactly on that date. * Meet Peter at the movies <2006-11-01 Wed 19:15> @@ -6045,9 +6045,8 @@ File: org, Node: Clocking commands, Next: The clock table, Up: Clocking work but the overlays disappear when you change the buffer (see variable `org-remove-highlights-with-change') or press `C-c C-c'. - The `l' key may be used in the timeline (*note Timeline::) and in -the agenda (*note Weekly/daily agenda::) to show which tasks have been -worked on or closed during a day. + The `l' key may be used the agenda (*note Weekly/daily agenda::) to +show which tasks have been worked on or closed during a day. *Important:* note that both `org-clock-out' and `org-clock-in-last' can have a global key binding and will not modify the window @@ -6119,6 +6118,7 @@ selected: tree the surrounding level 1 tree agenda all agenda files ("file"..) scan these files + function the list of files returned by a function of no argument file-with-archives current file and its archives agenda-with-archives all agenda files, including archives :block The time block to consider. This block is specified either @@ -6563,7 +6563,7 @@ configuration would look like: (setq org-capture-templates '(("t" "Todo" entry (file+headline "~/org/gtd.org" "Tasks") "* TODO %?\n %i\n %a") - ("j" "Journal" entry (file+datetree "~/org/journal.org") + ("j" "Journal" entry (file+olp+datetree "~/org/journal.org") "* %?\nEntered on %U\n %i\n %a"))) If you then press `C-c c t', Org will prepare the template for you like @@ -6667,20 +6667,12 @@ TARGET `(file+regexp "path/to/file" "regexp to find location")' Use a regular expression to position the cursor. - `(file+datetree "path/to/file")' - Will create a heading in a date tree for today's date(1). - - `(file+datetree+prompt "path/to/file")' - Will create a heading in a date tree, but will prompt for the - date. - - `(file+weektree "path/to/file")' - Will create a heading in a week tree for today's date. Week - trees are sorted by week and not by month unlike datetrees. - - `(file+weektree+prompt "path/to/file")' - Will create a heading in a week tree, but will prompt for the - date. + `(file+olp+datetree "path/to/file" [ "Level 1 heading" ....])' + This target(1) will create a heading in a date tree(2) for + today's date. If the optional outline path is given, the + tree will be built under the node it is pointing to, instead + of at top level. Check out the `:time-prompt' and + `:tree-type' properties below for additional options. `(file+function "path/to/file" function-finding-location)' A function to find the right location in the file. @@ -6731,6 +6723,18 @@ PROPERTIES setting both to `t', the current clock will run and the previous one will not be resumed. + `:time-prompt' + Prompt for a date/time to be used for date/week trees and + when filling the template. Without this property, capture + uses the current date and time. Even if this property has + not been set, you can force the same behavior by calling + `org-capture' with a `C-1' prefix argument. + + `:tree-type' + When `week', make a week tree instead of the month tree, i.e. + place the headings for each day under a heading with the + current iso week. + `:unnarrowed' Do not narrow the target buffer, simply show the full buffer. Default is to narrow it so that you only see the new material. @@ -6748,9 +6752,15 @@ PROPERTIES ---------- Footnotes ---------- - (1) Datetree headlines for years accept tags, so if you use both `* -2013 :noexport:' and `* 2013' in your file, the capture will refile the -note to the first one matched. + (1) Org used to offer four different targets for date/week tree +capture. Now, Org automatically translates these to use +`file+olp+datetree', applying the `:time-prompt' and `:tree-type' +properties. Please rewrite your date/week-tree targets using +`file+olp+datetree' since the older targets are now deprecated. + + (2) A date tree is an outline structure with years on the highest +level, months or ISO-weeks as sublevels and then dates on the lowest +level. Tags are allowed in the tree structure.  File: org, Node: Template expansion, Next: Templates in contexts, Prev: Template elements, Up: Capture templates @@ -6897,6 +6907,9 @@ The following commands deal with attachments: Attach a file using the copy/move/link method. Note that hard links are not supported on all systems. + `u (`org-attach-url')' + Attach a file from URL + `n (`org-attach-new')' Create a new attachment as an Emacs buffer. @@ -7195,7 +7208,7 @@ important for a particular date, this information must be collected, sorted and displayed in an organized way. Org can select items based on various criteria and display them in a -separate buffer. Seven different view types are provided: +separate buffer. Six different view types are provided: * an _agenda_ that is like a calendar and shows information for specific dates, @@ -7205,9 +7218,6 @@ separate buffer. Seven different view types are provided: * a _match view_, showings headlines based on the tags, properties, and TODO state associated with them, - * a _timeline view_ that shows all events in a single Org file, in - time-sorted view, - * a _text search view_ that shows all entries from multiple files that contain specified keywords, @@ -7341,9 +7351,6 @@ dispatcher offers the following default commands: Create a list of headlines matching a TAGS expression (*note Matching tags and properties::). -`L' - Create the timeline view for the current buffer (*note Timeline::). - `s' Create a list of entries selected by a boolean expression of keywords and/or regular expressions that must or must not occur in @@ -7409,7 +7416,6 @@ In this section we describe the built-in views. * Weekly/daily agenda:: The calendar page with current tasks * Global TODO list:: All unfinished action items * Matching tags and properties:: Structured information with fine-tuned search -* Timeline:: Time-sorted view for single file * Search view:: Find entries by searching for text * Stuck projects:: Find projects you need to review @@ -7612,7 +7618,7 @@ it more compact: the variable `org-agenda-todo-list-sublevels' to get this behavior.  -File: org, Node: Matching tags and properties, Next: Timeline, Prev: Global TODO list, Up: Built-in agenda views +File: org, Node: Matching tags and properties, Next: Search view, Prev: Global TODO list, Up: Built-in agenda views 10.3.3 Matching tags and properties ----------------------------------- @@ -7771,27 +7777,9 @@ a M' or `/!' will not match TODO keywords in a DONE state. Examples: `NEXT'.  -File: org, Node: Timeline, Next: Search view, Prev: Matching tags and properties, Up: Built-in agenda views - -10.3.4 Timeline for a single file ---------------------------------- - -The timeline summarizes all time-stamped items from a single Org mode -file in a _time-sorted view_. The main purpose of this command is to -give an overview over events in a project. - -`C-c a L (`org-timeline')' - Show a time-sorted view of the Org file, with all time-stamped - items. When called with a `C-u' prefix, all unfinished TODO - entries (scheduled or not) are also listed under the current date. - -The commands available in the timeline buffer are listed in *note -Agenda commands::. - - -File: org, Node: Search view, Next: Stuck projects, Prev: Timeline, Up: Built-in agenda views +File: org, Node: Search view, Next: Stuck projects, Prev: Matching tags and properties, Up: Built-in agenda views -10.3.5 Search view +10.3.4 Search view ------------------ This agenda view is a general text search facility for Org mode entries. @@ -7818,7 +7806,7 @@ search the files listed in `org-agenda-text-search-extra-files'.  File: org, Node: Stuck projects, Prev: Search view, Up: Built-in agenda views -10.3.6 Stuck projects +10.3.5 Stuck projects --------------------- If you are following a system like David Allen's GTD to organize your @@ -8279,7 +8267,7 @@ Change display `v [ or short [ (`org-agenda-manipulate-query-add')' Include inactive timestamps into the current view. Only for - weekly/daily agenda and timeline views. + weekly/daily agenda. `v a (`org-agenda-archives-mode')' `v A (`org-agenda-archives-mode 'files')' @@ -9556,7 +9544,7 @@ major LaTeX mode like AUCTeX in order to speed-up insertion of environments and math templates. Inside Org mode, you can make use of some of the features of CDLaTeX mode. You need to install `cdlatex.el' and `texmathp.el' (the latter comes also with AUCTeX) from -`http://www.astro.uva.nl/~dominik/Tools/cdlatex'. Don't use CDLaTeX +`https://staff.fnwi.uva.nl/c.dominik/Tools/cdlatex'. Don't use CDLaTeX mode itself under Org mode, but use the light version `org-cdlatex-mode' that comes as part of Org mode. Turn it on for the current buffer with `M-x org-cdlatex-mode RET', or for all Org files @@ -9753,7 +9741,7 @@ syntax. Option keyword sets tailored to a particular back-end can be inserted from the export dispatcher (*note The export dispatcher::) using the `Insert template' command by pressing <#>. To insert keywords individually, a good way to make sure the keyword is correct -is to type `#+' and then to use `M-' for completion. +is to type `#+' and then to use `M-'(1) for completion. The export keywords available for every back-end, and their equivalent global variables, include: @@ -9766,7 +9754,7 @@ equivalent global variables, include: (`org-export-creator-string'). `DATE' - A date or a time-stamp(1). + A date or a time-stamp(2). `EMAIL' The email address (`user-mail-address'). @@ -9796,7 +9784,14 @@ equivalent global variables, include: The title to be shown. You can use several such keywords for long titles. - The `#+OPTIONS' keyword is a compact(2) form that recognizes the +`EXPORT_FILE_NAME' + The name of the output file to be generated. By default, it is + taken from the file associated to the buffer, when possible, or + asked to you otherwise. In all cases, the extension is ignored, + and a back-end specific one is added. + + + The `#+OPTIONS' keyword is a compact(3) form that recognizes the following arguments: `':' @@ -9930,32 +9925,30 @@ following arguments: Toggle inclusion of tables (`org-export-with-tables'). - When exporting only a subtree, each of the previous keywords(3) can + When exporting only a subtree, each of the previous keywords(4) can be overridden locally by special node properties. These begin with -`EXPORT_', followed by the name of the keyword they supplant. For -example, `DATE' and `OPTIONS' keywords become, respectively, -`EXPORT_DATE' and `EXPORT_OPTIONS' properties. +`EXPORT_', followed by the name of the keyword they supplant, unless +the keyword already beging with `EXPORT_'. For example, `DATE' and +`EXPORT_FILE_NAME' keywords become, respectively, `EXPORT_DATE' and +`EXPORT_FILE_NAME' properties. If `org-export-allow-bind-keywords' is non-`nil', Emacs variables can become buffer-local during export by using the BIND keyword. Its syntax is `#+BIND: variable value'. This is particularly useful for in-buffer settings that cannot be changed using specific keywords. - The name of the output file to be generated is taken from the file -associated to the buffer, when possible, or asked to you otherwise. -For subtree export, you can also set `EXPORT_FILE_NAME' property. In -all cases, only the base name of the file is retained, and a back-end -specific extension is added. - ---------- Footnotes ---------- - (1) The variable `org-export-date-timestamp-format' defines how this + (1) Many desktops intercept `M-TAB' to switch windows. Use `C-M-i' +or ` ' instead. + + (2) The variable `org-export-date-timestamp-format' defines how this time-stamp will be exported. - (2) If you want to configure many options this way, you can use + (3) If you want to configure many options this way, you can use several `#+OPTIONS' lines. - (3) With the exception of `SETUPFILE'. + (4) With the exception of `SETUPFILE'.  File: org, Node: Table of contents, Next: Include files, Prev: Export settings, Up: Exporting @@ -10082,11 +10075,13 @@ File: org, Node: Macro replacement, Next: Comment lines, Prev: Include files, 12.5 Macro replacement ====================== -You can define text snippets with +Macros replace text snippets during export. Macros are defined +globally in `org-export-global-macros', or document-wise with the +following syntax: #+MACRO: name replacement text $1, $2 are arguments -which can be referenced `{{{name(arg1, arg2)}}}'(1). +which can be referenced using `{{{name(arg1, arg2)}}}'(1). These references, called macros, can be inserted anywhere Org markup is recognized: paragraphs, headlines, verse blocks, tables cells and @@ -13521,15 +13516,36 @@ files for a given project. `sitemap.org' (which becomes `sitemap.html'). `:sitemap-title' Title of sitemap page. Defaults to name of file. +`:sitemap-format-entry' With this option one can tell how a site-map + entry is formatted in the site-map. It is a + function called with three arguments: the file + or directory name relative to base directory + of the project, the site-map style and the + current project. It is expected to return a + string. Default value turns file names into + links and use document titles as descriptions. + For specific formatting needs, one can use + `org-publish-find-date', + `org-publish-find-title' and + `org-publish-find-property', to retrieve + additional information about published + documents. `:sitemap-function' Plug-in function to use for generation of the - sitemap. Defaults to - `org-publish-org-sitemap', which generates a - plain list of links to all files in the - project. + sitemap. It is called with two arguments: the + title of the site-map and a representation of + the files and directories involved in the + project as a radio list (*note Radio lists::). + The latter can further be transformed using + `org-list-to-generic', `org-list-to-subtree' + and alike. Default value generates a plain + list of links to all files in the project. `:sitemap-sort-folders' Where folders should appear in the sitemap. Set this to `first' (default) or `last' to display folders first or last, respectively. - Any other value will mix files and folders. + When set to `ignore', folders are ignored + altogether. Any other value will mix files + and folders. This variable has no effect when + site-map style is `tree'. `:sitemap-sort-files' How the files are sorted in the site map. Set this to `alphabetically' (default), `chronologically' or `anti-chronologically'. @@ -13541,26 +13557,11 @@ files for a given project. retrieved with `org-publish-find-date'. `:sitemap-ignore-case' Should sorting be case-sensitive? Default `nil'. -`:sitemap-file-entry-format'With this option one can tell how a sitemap's - entry is formatted in the sitemap. This is a - format string with some escape sequences: `%t' - stands for the title of the file, `%a' stands - for the author of the file and `%d' stands for - the date of the file. The date is retrieved - with the `org-publish-find-date' function and - formatted with - `org-publish-sitemap-date-format'. Default - `%t'. `:sitemap-date-format' Format string for the `format-time-string' function that tells how a sitemap entry's date is to be formatted. This property bypasses `org-publish-sitemap-date-format' which defaults to `%Y-%m-%d'. -`:sitemap-sans-extension' When non-`nil', remove filenames' extensions - from the generated sitemap. Useful to have - cool URIs (see - `http://www.w3.org/Provider/Style/URI'). - Defaults to `nil'.  File: org, Node: Generating an index, Prev: Sitemap, Up: Configuration @@ -13992,8 +13993,11 @@ Header arguments: `:exports none' Org does not export the code block nor the results. - To stop Org from evaluating code blocks during export, set -`org-export-babel-evaluate' variable to `nil'. + To stop Org from evaluating code blocks to speed exports, use the +header argument `:eval never-export' (*note eval::). To stop Org from +evaluating code blocks for greater security, set the +`org-export-use-babel' variable to `nil', but understand that header +arguments will have no effect. Turning off evaluation comes in handy when batch processing. For example, markup languages for wikis, which have a high risk of @@ -14890,7 +14894,7 @@ Remote execution To evaluate the `src' code block on a remote machine, supply a remote s directory name using `Tramp' syntax. For example: - #+BEGIN_SRC R :file plot.png :dir /dand@yakuba.princeton.edu: + #+BEGIN_SRC R :file plot.png :dir /scp:dand@yakuba.princeton.edu: plot(1:10, main=system("hostname", intern=TRUE)) #+END_SRC @@ -15113,14 +15117,14 @@ blocks by matching the reference name to either the block name or the For simple concatenation, set this `:noweb-ref' header argument at the sub-tree or file level. In the example Org file shown next, the body of the source code in each block is extracted for concatenation to -a pure code file(1). +a pure code file. #+BEGIN_SRC sh :tangle yes :noweb yes :shebang #!/bin/sh <> #+END_SRC * the mount point of the fullest disk :PROPERTIES: - :noweb-ref: fullest-disk + :header-args: :noweb-ref fullest-disk :END: ** query all mounted disks @@ -15133,21 +15137,11 @@ a pure code file(1). |sed '1d' \ #+END_SRC - ** sort by the percent full + ** output mount point of fullest disk #+BEGIN_SRC sh - |awk '{print $5 " " $6}'|sort -n |tail -1 \ + |awk '{if (u < +$5) {u = +$5; m = $6}} END {print m}' #+END_SRC - ** extract the mount point - #+BEGIN_SRC sh - |awk '{print $2}' - #+END_SRC - - ---------- Footnotes ---------- - - (1) (For the example to work, turn on the property inheritance for -`noweb-ref', *note Property inheritance::). -  File: org, Node: noweb-sep, Next: cache, Prev: noweb-ref, Up: Specific header arguments @@ -15813,6 +15807,9 @@ shortcuts. * When the point is anywhere else, complete dictionary words using Ispell. + If your desktop intercepts the combo `M-' to switch windows, + use `C-M-i' or ` ' as an alternative or customize your + environment.  File: org, Node: Easy templates, Next: Speed keys, Prev: Completion, Up: Miscellaneous @@ -16357,9 +16354,9 @@ File: org, Node: Cooperation, Next: Conflicts, Up: Interaction also use calculation suffixes for units, such as `M' for `Mega'. For a standard collection of such constants, install the `constants' package. Install version 2.0 of this package, - available at `http://www.astro.uva.nl/~dominik/Tools'. Org checks - if the function `constants-get' has been autoloaded. Installation - instructions are in the file, `constants.el'. + available at `https://staff.fnwi.uva.nl/c.dominik/Tools/'. Org + checks if the function `constants-get' has been autoloaded. + Installation instructions are in the file, `constants.el'. `cdlatex.el' by Carsten Dominik Org mode can use CDLaTeX package to efficiently enter LaTeX @@ -16568,7 +16565,7 @@ A.1 Hooks Org has a large number of hook variables for adding functionality. This appendix illustrates using a few. A complete list of hooks with documentation is maintained by the Worg project at -`http://orgmode.org/worg/org-configs/org-hooks.php'. +`http://orgmode.org/worg/doc.html#hooks'.  File: org, Node: Add-on packages, Next: Adding hyperlink types, Prev: Hooks, Up: Hacking @@ -18552,7 +18549,7 @@ Concept index (line 6) * #+BEGIN_SRC: Literal examples. (line 28) * #+BEGIN_VERSE: Paragraphs. (line 13) -* #+BIND: Export settings. (line 202) +* #+BIND: Export settings. (line 210) * #+CALL: Evaluating code blocks. (line 25) * #+CAPTION <1>: Images in HTML export. @@ -18577,6 +18574,7 @@ Concept index (line 10) * #+EMAIL: Export settings. (line 35) * #+EXCLUDE_TAGS: Export settings. (line 51) +* #+EXPORT_FILE_NAME: Export settings. (line 63) * #+FILETAGS: Tag inheritance. (line 20) * #+FINDEX: Indices. (line 6) * #+HEADER:: Code block specific header arguments. @@ -18648,7 +18646,7 @@ Concept index * #+ORGTBL, SEND: A LaTeX example. (line 13) * #+PINDEX: Indices. (line 6) * #+PLOT: Org-Plot. (line 6) -* #+PRIORITIES: Priorities. (line 44) +* #+PRIORITIES: Priorities. (line 43) * #+PROPERTY: Property syntax. (line 44) * #+RESULTS: Evaluating code blocks. (line 6) @@ -18792,7 +18790,7 @@ Concept index * agenda, column view: Agenda column view. (line 6) * agenda, pipe: Extracting agenda information. (line 6) -* agenda, sticky: Agenda dispatcher. (line 53) +* agenda, sticky: Agenda dispatcher. (line 50) * agenda, with block views: Block agenda. (line 6) * align, STARTUP keyword: In-buffer settings. (line 85) * alignment in tables: Column width and alignment. @@ -18809,7 +18807,7 @@ Concept index * appt.el: Weekly/daily agenda. (line 126) * archive locations: Moving subtrees. (line 25) * archive tag: Internal archiving. (line 6) -* archived entries, in agenda views: Agenda views. (line 40) +* archived entries, in agenda views: Agenda views. (line 37) * Archives mode: Agenda commands. (line 134) * archiving: Archiving. (line 6) * ASCII export: ASCII/Latin-1/UTF-8 export. @@ -18817,7 +18815,7 @@ Concept index * Atom feeds: RSS feeds. (line 6) * attachments: Attachments. (line 6) * author: Feedback. (line 6) -* author, macro: Macro replacement. (line 24) +* author, macro: Macro replacement. (line 26) * autoload: Activation. (line 6) * babel, languages: Languages. (line 6) * babel, library of: Library of Babel. (line 6) @@ -18898,7 +18896,7 @@ Concept index * commands, in agenda buffer: Agenda commands. (line 6) * comment lines: Comment lines. (line 6) * comment trees: Comment lines. (line 13) -* commented entries, in agenda views: Agenda views. (line 40) +* commented entries, in agenda views: Agenda views. (line 37) * completion, of dictionary words: Completion. (line 6) * completion, of file names: Handling links. (line 89) * completion, of link abbreviations: Completion. (line 6) @@ -18946,11 +18944,11 @@ Concept index * daily agenda: Weekly/daily agenda. (line 6) * dash, special symbol: Special symbols. (line 39) * date format, custom: Custom time format. (line 6) -* date range: Timestamps. (line 43) +* date range: Timestamps. (line 42) * date stamp: Dates and times. (line 6) * date stamps: Timestamps. (line 6) * date tree: Using capture. (line 9) -* date, macro: Macro replacement. (line 29) +* date, macro: Macro replacement. (line 31) * date, reading in minibuffer: The date/time prompt. (line 6) * dates: Dates and times. (line 6) @@ -19006,7 +19004,7 @@ Concept index * ellipsis, special symbol: Special symbols. (line 39) * ELPA: Activation. (line 6) * emacsserver: Protocols. (line 6) -* email, macro: Macro replacement. (line 24) +* email, macro: Macro replacement. (line 26) * embedding images in ODT: Images in ODT export. (line 6) * entitiesplain, STARTUP keyword: In-buffer settings. (line 166) @@ -19148,7 +19146,7 @@ Concept index * images, inlining: Handling links. (line 136) * imenu.el: Cooperation. (line 25) * in-buffer settings: In-buffer settings. (line 6) -* inactive timestamp: Timestamps. (line 52) +* inactive timestamp: Timestamps. (line 51) * include files, during export: Include files. (line 6) * indent, STARTUP keyword: In-buffer settings. (line 76) * indentation, in source blocks <1>: Editing source code. (line 38) @@ -19166,7 +19164,7 @@ Concept index (line 6) * inlining images in LaTeX: Images in LaTeX export. (line 6) -* input file, macro: Macro replacement. (line 45) +* input file, macro: Macro replacement. (line 47) * inserting links: Handling links. (line 66) * insertion, of templates: Easy templates. (line 6) * installation: Installation. (line 6) @@ -19270,7 +19268,7 @@ Concept index * MobileOrg: MobileOrg. (line 6) * mode, for calc: Formula syntax for Calc. (line 14) -* modification time, macro: Macro replacement. (line 36) +* modification time, macro: Macro replacement. (line 38) * motion commands in agenda: Agenda commands. (line 19) * motion, between headlines: Motion. (line 6) * name, of column or field: References. (line 110) @@ -19378,8 +19376,8 @@ Concept index * property, ARCHIVE <1>: Moving subtrees. (line 37) * property, ARCHIVE: Property inheritance. (line 34) -* property, ATTACH_DIR: Attachments. (line 71) -* property, ATTACH_DIR_INHERIT: Attachments. (line 76) +* property, ATTACH_DIR: Attachments. (line 74) +* property, ATTACH_DIR_INHERIT: Attachments. (line 79) * property, BEAMER_ACT: Sectioning Frames and Blocks in Beamer. (line 38) * property, BEAMER_COL: Sectioning Frames and Blocks in Beamer. @@ -19406,7 +19404,6 @@ Concept index * property, DESCRIPTION: Headings and sectioning structure. (line 22) * property, Effort: Effort estimates. (line 6) -* property, EXPORT_FILE_NAME: Export settings. (line 207) * property, EXPORT_LATEX_CLASS: LaTeX header and sectioning. (line 22) * property, EXPORT_LATEX_CLASS_OPTIONS: LaTeX header and sectioning. @@ -19424,7 +19421,7 @@ Concept index (line 38) * property, LOGGING: Tracking TODO state changes. (line 45) -* property, macro: Macro replacement. (line 49) +* property, macro: Macro replacement. (line 51) * property, ORDERED <1>: Checkboxes. (line 46) * property, ORDERED: TODO dependencies. (line 6) * property, special, ALLTAGS: Special properties. (line 13) @@ -19444,7 +19441,7 @@ Concept index * property, special, TIMESTAMP_IA: Special properties. (line 13) * property, special, TODO: Special properties. (line 13) * property, SUMMARY: iCalendar export. (line 46) -* property, UNNUMBERED: Export settings. (line 141) +* property, UNNUMBERED: Export settings. (line 148) * property, VISIBILITY: Initial visibility. (line 17) * property: CLOCK_MODELINE_TOTAL: Clocking commands. (line 20) * property: LAST_REPEAT: Clocking commands. (line 20) @@ -19560,7 +19557,7 @@ Concept index (line 6) * sparse tree, for deadlines: Inserting deadline/schedule. (line 24) -* sparse tree, for TODO: TODO basics. (line 42) +* sparse tree, for TODO: TODO basics. (line 41) * sparse tree, tag based: Tags. (line 6) * sparse trees: Sparse trees. (line 6) * special blocks, in ASCII export: ASCII/Latin-1/UTF-8 export. @@ -19666,22 +19663,20 @@ Concept index (line 26) * Time, computing: Durations and time values. (line 6) -* time, macro: Macro replacement. (line 36) +* time, macro: Macro replacement. (line 38) * time, reading in minibuffer: The date/time prompt. (line 6) * time-of-day specification: Time-of-day specifications. (line 6) -* time-sorted view: Timeline. (line 6) -* timeline, single file: Timeline. (line 6) -* timerange: Timestamps. (line 43) +* timerange: Timestamps. (line 42) * times: Dates and times. (line 6) * timestamp <1>: Timestamps. (line 14) * timestamp: Dates and times. (line 6) -* timestamp, inactive: Timestamps. (line 52) -* timestamp, with repeater interval: Timestamps. (line 26) +* timestamp, inactive: Timestamps. (line 51) +* timestamp, with repeater interval: Timestamps. (line 25) * timestamps: Timestamps. (line 6) * timestamps, creating: Creating timestamps. (line 6) -* title, macro: Macro replacement. (line 24) +* title, macro: Macro replacement. (line 26) * TODO dependencies: TODO dependencies. (line 6) * TODO dependencies, NOBLOCKING: TODO dependencies. (line 6) * TODO items: TODO items. (line 6) @@ -19784,10 +19779,8 @@ Key index * <3>: Setting tags. (line 108) * <4>: Editing and debugging formulas. (line 57) -* <5>: Built-in table editor. - (line 62) -* <6>: Plain lists. (line 68) -* <7>: Structure editing. (line 35) +* <5>: Plain lists. (line 68) +* <6>: Structure editing. (line 35) * : Global and local cycling. (line 10) * = <1>: Agenda commands. (line 215) @@ -19862,7 +19855,7 @@ Key index * C-c / m: Tag searches. (line 9) * C-c / p: Property searches. (line 29) * C-c / r: Sparse trees. (line 17) -* C-c / t: TODO basics. (line 39) +* C-c / t: TODO basics. (line 38) * C-c ;: Comment lines. (line 19) * C-c <: Creating timestamps. (line 29) * C-c : Built-in table editor. @@ -19895,7 +19888,6 @@ Key index * C-c a C: Storing searches. (line 9) * C-c a e: Exporting agenda views. (line 64) -* C-c a L: Timeline. (line 10) * C-c a M: Matching tags and properties. (line 17) * C-c a m: Matching tags and properties. @@ -19907,7 +19899,7 @@ Key index * C-c a s: Search view. (line 9) * C-c a T: Global TODO list. (line 15) * C-c a t <1>: Global TODO list. (line 9) -* C-c a t: TODO basics. (line 50) +* C-c a t: TODO basics. (line 49) * C-c c <1>: Using capture. (line 6) * C-c c: Conventions. (line 35) * C-c c C: Capture templates. (line 10) @@ -19916,18 +19908,19 @@ Key index * C-c C-a: Attachments. (line 26) * C-c C-a a: Attachments. (line 31) * C-c C-a c: Attachments. (line 37) -* C-c C-a D: Attachments. (line 66) -* C-c C-a d: Attachments. (line 63) -* C-c C-a F: Attachments. (line 60) -* C-c C-a f: Attachments. (line 57) -* C-c C-a i: Attachments. (line 75) +* C-c C-a D: Attachments. (line 69) +* C-c C-a d: Attachments. (line 66) +* C-c C-a F: Attachments. (line 63) +* C-c C-a f: Attachments. (line 60) +* C-c C-a i: Attachments. (line 78) * C-c C-a l: Attachments. (line 37) * C-c C-a m: Attachments. (line 37) -* C-c C-a n: Attachments. (line 41) -* C-c C-a O: Attachments. (line 54) -* C-c C-a o: Attachments. (line 48) -* C-c C-a s: Attachments. (line 70) -* C-c C-a z: Attachments. (line 44) +* C-c C-a n: Attachments. (line 44) +* C-c C-a O: Attachments. (line 57) +* C-c C-a o: Attachments. (line 51) +* C-c C-a s: Attachments. (line 73) +* C-c C-a u: Attachments. (line 41) +* C-c C-a z: Attachments. (line 47) * C-c C-b <1>: Editing support. (line 11) * C-c C-b: Motion. (line 15) * C-c C-c <1>: Cooperation. (line 41) @@ -20216,6 +20209,7 @@ Key index (line 26) * C-c ~: Cooperation. (line 50) * C-k: Agenda commands. (line 241) +* C-M-i: Completion. (line 47) * C-S- <1>: Agenda commands. (line 239) * C-S-: Multiple sets in one file. (line 25) @@ -20235,7 +20229,7 @@ Key index * C-u C-c c: Using capture. (line 43) * C-u C-c C-c: Updating the table. (line 19) * C-u C-c C-l: Handling links. (line 86) -* C-u C-c C-t: TODO basics. (line 28) +* C-u C-c C-t: TODO basics. (line 27) * C-u C-c C-w: Refile and copy. (line 33) * C-u C-c C-x a: Internal archiving. (line 40) * C-u C-c C-x C-s: Moving subtrees. (line 11) @@ -20396,7 +20390,7 @@ Key index * S- <2>: The date/time prompt. (line 82) * S- <3>: Creating timestamps. (line 47) -* S- <4>: Priorities. (line 29) +* S- <4>: Priorities. (line 28) * S- <5>: Editing and debugging formulas. (line 67) * S-: Plain lists. (line 90) @@ -20409,7 +20403,7 @@ Key index * S- <6>: Property syntax. (line 100) * S- <7>: Multiple sets in one file. (line 32) -* S- <8>: TODO basics. (line 34) +* S- <8>: TODO basics. (line 33) * S- <9>: Editing and debugging formulas. (line 67) * S-: Plain lists. (line 149) @@ -20424,7 +20418,7 @@ Key index * S- <6>: Property syntax. (line 100) * S- <7>: Multiple sets in one file. (line 32) -* S- <8>: TODO basics. (line 34) +* S- <8>: TODO basics. (line 33) * S- <9>: Editing and debugging formulas. (line 67) * S-: Plain lists. (line 149) @@ -20436,15 +20430,17 @@ Key index * S- <2>: The date/time prompt. (line 82) * S- <3>: Creating timestamps. (line 47) -* S- <4>: Priorities. (line 29) +* S- <4>: Priorities. (line 28) * S-: Editing and debugging formulas. (line 67) * S-M-: Using column view. (line 76) -* S-M-: TODO basics. (line 58) +* S-M-: TODO basics. (line 57) * S-M-: Using column view. (line 73) * S-M-: Clocking commands. (line 60) * T: Agenda commands. (line 267) * t: Agenda commands. (line 232) +* TAB: Built-in table editor. + (line 62) * U: Agenda commands. (line 372) * u: Agenda commands. (line 369) * v: Using column view. (line 56) @@ -20606,16 +20602,17 @@ Command and function index * org-attach <1>: Agenda commands. (line 297) * org-attach: Attachments. (line 26) * org-attach-attach: Attachments. (line 31) -* org-attach-delete-all: Attachments. (line 66) -* org-attach-delete-one: Attachments. (line 63) -* org-attach-new: Attachments. (line 41) -* org-attach-open: Attachments. (line 48) -* org-attach-open-in-emacs: Attachments. (line 54) -* org-attach-reveal: Attachments. (line 57) -* org-attach-reveal-in-emacs: Attachments. (line 60) -* org-attach-set-directory: Attachments. (line 70) -* org-attach-set-inherit: Attachments. (line 75) -* org-attach-sync: Attachments. (line 44) +* org-attach-delete-all: Attachments. (line 69) +* org-attach-delete-one: Attachments. (line 66) +* org-attach-new: Attachments. (line 44) +* org-attach-open: Attachments. (line 51) +* org-attach-open-in-emacs: Attachments. (line 57) +* org-attach-reveal: Attachments. (line 60) +* org-attach-reveal-in-emacs: Attachments. (line 63) +* org-attach-set-directory: Attachments. (line 73) +* org-attach-set-inherit: Attachments. (line 78) +* org-attach-sync: Attachments. (line 47) +* org-attach-url: Attachments. (line 41) * org-backward-same-level: Motion. (line 15) * org-beamer-export-as-latex: Beamer export commands. (line 9) @@ -20731,14 +20728,13 @@ Command and function index * org-insert-columns-dblock: Capturing column view. (line 52) * org-insert-heading <1>: Timers. (line 40) -* org-insert-heading <2>: Plain lists. (line 79) -* org-insert-heading: Structure editing. (line 6) +* org-insert-heading: Plain lists. (line 79) * org-insert-heading-respect-content: Structure editing. (line 23) * org-insert-link: Handling links. (line 65) * org-insert-property-drawer: Using the property API. (line 18) * org-insert-todo-heading <1>: Checkboxes. (line 74) -* org-insert-todo-heading <2>: TODO basics. (line 58) +* org-insert-todo-heading <2>: TODO basics. (line 57) * org-insert-todo-heading: Structure editing. (line 26) * org-insert-todo-heading-respect-content: Structure editing. (line 30) * org-iswitchb: Activation. (line 6) @@ -20761,6 +20757,7 @@ Command and function index * org-match-sparse-tree: Tag searches. (line 9) * org-md-export-as-markdown: Markdown export. (line 19) * org-md-export-to-markdown: Markdown export. (line 16) +* org-meta-return: Structure editing. (line 6) * org-move-subtree-down: Structure editing. (line 56) * org-move-subtree-up: Structure editing. (line 53) * org-narrow-to-block: Structure editing. (line 122) @@ -20779,8 +20776,8 @@ Command and function index * org-priority <1>: Using the mapping API. (line 66) * org-priority: Priorities. (line 24) -* org-priority-down: Priorities. (line 29) -* org-priority-up: Priorities. (line 29) +* org-priority-down: Priorities. (line 28) +* org-priority-up: Priorities. (line 28) * org-promote: Using the mapping API. (line 75) * org-promote-subtree: Structure editing. (line 47) @@ -20812,7 +20809,7 @@ Command and function index * org-set-startup-visibility: Global and local cycling. (line 33) * org-set-tags-command: Setting tags. (line 10) -* org-show-todo-tree: TODO basics. (line 39) +* org-show-todo-tree: TODO basics. (line 38) * org-sort: Structure editing. (line 107) * org-sparse-tree: Sparse trees. (line 15) * org-speedbar-set-agenda-restriction: Agenda files. (line 57) @@ -20927,7 +20924,6 @@ Command and function index (line 6) * org-time-stamp: Creating timestamps. (line 10) * org-time-stamp-inactive: Creating timestamps. (line 15) -* org-timeline: Timeline. (line 10) * org-timer: Timers. (line 31) * org-timer-item: Timers. (line 35) * org-timer-pause-or-continue: Timers. (line 44) @@ -20944,7 +20940,7 @@ Command and function index * org-todo <2>: Clocking commands. (line 67) * org-todo: TODO basics. (line 13) * org-todo-list <1>: Global TODO list. (line 9) -* org-todo-list: TODO basics. (line 50) +* org-todo-list: TODO basics. (line 49) * org-toggle-archive-tag: Internal archiving. (line 37) * org-toggle-checkbox: Checkboxes. (line 52) * org-toggle-heading: Structure editing. (line 128) @@ -21039,13 +21035,13 @@ org-customize '. (line 6) * org-agenda-regexp-filter-preset: Filtering/limiting agenda items. (line 82) -* org-agenda-restore-windows-after-quit: Agenda views. (line 45) +* org-agenda-restore-windows-after-quit: Agenda views. (line 42) * org-agenda-show-inherited-tags <1>: Speeding up your agendas. (line 21) * org-agenda-show-inherited-tags: Agenda commands. (line 270) -* org-agenda-skip-archived-trees <1>: Agenda views. (line 40) +* org-agenda-skip-archived-trees <1>: Agenda views. (line 37) * org-agenda-skip-archived-trees: Internal archiving. (line 22) -* org-agenda-skip-comment-trees: Agenda views. (line 40) +* org-agenda-skip-comment-trees: Agenda views. (line 37) * org-agenda-skip-deadline-prewarning-if-scheduled: Deadlines and scheduling. (line 14) * org-agenda-skip-function <1>: Using the mapping API. @@ -21069,7 +21065,7 @@ org-customize '. * org-agenda-start-with-clockreport-mode: Agenda commands. (line 140) * org-agenda-start-with-entry-text-mode: Agenda commands. (line 159) * org-agenda-start-with-follow-mode: Agenda commands. (line 48) -* org-agenda-sticky: Agenda dispatcher. (line 53) +* org-agenda-sticky: Agenda dispatcher. (line 50) * org-agenda-tag-filter-preset: Filtering/limiting agenda items. (line 18) * org-agenda-tags-column: Presentation and sorting. @@ -21077,7 +21073,7 @@ org-customize '. * org-agenda-tags-todo-honor-ignore-options: Matching tags and properties. (line 20) * org-agenda-text-search-extra-files <1>: Search view. (line 24) -* org-agenda-text-search-extra-files: Agenda dispatcher. (line 32) +* org-agenda-text-search-extra-files: Agenda dispatcher. (line 29) * org-agenda-time-grid <1>: Agenda commands. (line 167) * org-agenda-time-grid: Time-of-day specifications. (line 41) @@ -21093,7 +21089,7 @@ org-customize '. * org-agenda-use-time-grid <1>: Agenda commands. (line 167) * org-agenda-use-time-grid: Time-of-day specifications. (line 41) -* org-agenda-window-setup: Agenda views. (line 45) +* org-agenda-window-setup: Agenda views. (line 42) * org-archive-default-command <1>: Agenda commands. (line 253) * org-archive-default-command: Archiving. (line 12) * org-archive-location <1>: In-buffer settings. (line 14) @@ -21168,7 +21164,7 @@ org-customize '. * org-default-notes-file <1>: Template elements. (line 49) * org-default-notes-file: Setting up capture. (line 9) * org-default-priority <1>: In-buffer settings. (line 45) -* org-default-priority: Priorities. (line 38) +* org-default-priority: Priorities. (line 37) * org-display-custom-times: Custom time format. (line 6) * org-display-internal-link-with-indirect-buffer: Handling links. (line 132) @@ -21187,11 +21183,9 @@ org-customize '. * org-enforce-todo-dependencies: TODO dependencies. (line 6) * org-entities-user: Special symbols. (line 16) * org-execute-file-search-functions: Custom searches. (line 12) -* org-export-allow-bind-keywords: Export settings. (line 202) +* org-export-allow-bind-keywords: Export settings. (line 210) * org-export-async-init-file: The export dispatcher. (line 24) -* org-export-babel-evaluate: Exporting code blocks. - (line 36) * org-export-backends <1>: Other built-in back-ends. (line 6) * org-export-backends: Exporting. (line 38) @@ -21207,53 +21201,56 @@ org-customize '. * org-export-dispatch-use-expert-ui: The export dispatcher. (line 6) * org-export-exclude-tags: Export settings. (line 51) -* org-export-headline-levels: Export settings. (line 133) +* org-export-global-macros: Macro replacement. (line 6) +* org-export-headline-levels: Export settings. (line 140) * org-export-in-background: The export dispatcher. (line 33) * org-export-initial-scope: The export dispatcher. (line 43) -* org-export-preserve-breaks: Export settings. (line 86) +* org-export-preserve-breaks: Export settings. (line 93) * org-export-select-tags: Export settings. (line 44) * org-export-time-stamp-file <1>: HTML preamble and postamble. (line 6) -* org-export-time-stamp-file: Export settings. (line 178) -* org-export-with-archived-trees <1>: Export settings. (line 94) +* org-export-time-stamp-file: Export settings. (line 185) +* org-export-use-babel: Exporting code blocks. + (line 36) +* org-export-with-archived-trees <1>: Export settings. (line 101) * org-export-with-archived-trees: Internal archiving. (line 28) -* org-export-with-author: Export settings. (line 99) -* org-export-with-broken-links: Export settings. (line 103) -* org-export-with-clocks: Export settings. (line 108) -* org-export-with-creator: Export settings. (line 111) -* org-export-with-date: Export settings. (line 119) -* org-export-with-drawers <1>: Export settings. (line 115) +* org-export-with-author: Export settings. (line 106) +* org-export-with-broken-links: Export settings. (line 110) +* org-export-with-clocks: Export settings. (line 115) +* org-export-with-creator: Export settings. (line 118) +* org-export-with-date: Export settings. (line 126) +* org-export-with-drawers <1>: Export settings. (line 122) * org-export-with-drawers: Drawers. (line 38) -* org-export-with-email: Export settings. (line 126) -* org-export-with-entities: Export settings. (line 123) -* org-export-with-fixed-width: Export settings. (line 79) -* org-export-with-footnotes: Export settings. (line 130) -* org-export-with-inlinetasks: Export settings. (line 138) -* org-export-with-latex <1>: Export settings. (line 174) +* org-export-with-email: Export settings. (line 133) +* org-export-with-entities: Export settings. (line 130) +* org-export-with-fixed-width: Export settings. (line 86) +* org-export-with-footnotes: Export settings. (line 137) +* org-export-with-inlinetasks: Export settings. (line 145) +* org-export-with-latex <1>: Export settings. (line 181) * org-export-with-latex: LaTeX fragments. (line 38) -* org-export-with-planning: Export settings. (line 149) -* org-export-with-priority: Export settings. (line 154) -* org-export-with-properties <1>: Export settings. (line 157) +* org-export-with-planning: Export settings. (line 156) +* org-export-with-priority: Export settings. (line 161) +* org-export-with-properties <1>: Export settings. (line 164) * org-export-with-properties: Drawers. (line 38) -* org-export-with-section-numbers: Export settings. (line 141) -* org-export-with-smart-quotes: Export settings. (line 66) -* org-export-with-special-strings: Export settings. (line 75) -* org-export-with-statistics-cookies: Export settings. (line 161) -* org-export-with-sub-superscripts: Export settings. (line 89) -* org-export-with-tables: Export settings. (line 193) -* org-export-with-tags: Export settings. (line 165) -* org-export-with-tasks: Export settings. (line 169) -* org-export-with-timestamps: Export settings. (line 82) -* org-export-with-title: Export settings. (line 182) +* org-export-with-section-numbers: Export settings. (line 148) +* org-export-with-smart-quotes: Export settings. (line 73) +* org-export-with-special-strings: Export settings. (line 82) +* org-export-with-statistics-cookies: Export settings. (line 168) +* org-export-with-sub-superscripts: Export settings. (line 96) +* org-export-with-tables: Export settings. (line 200) +* org-export-with-tags: Export settings. (line 172) +* org-export-with-tasks: Export settings. (line 176) +* org-export-with-timestamps: Export settings. (line 89) +* org-export-with-title: Export settings. (line 189) * org-export-with-toc <1>: Table of contents. (line 6) -* org-export-with-toc: Export settings. (line 185) -* org-export-with-todo-keywords: Export settings. (line 189) +* org-export-with-toc: Export settings. (line 192) +* org-export-with-todo-keywords: Export settings. (line 196) * org-fast-tag-selection-include-todo: Fast access to TODO states. (line 16) * org-fast-tag-selection-single-key: Setting tags. (line 143) -* org-file-apps <1>: Attachments. (line 49) +* org-file-apps <1>: Attachments. (line 52) * org-file-apps: Handling links. (line 104) * org-fontify-emphasized-text: Emphasis and monospace. (line 6) @@ -21282,7 +21279,7 @@ org-customize '. * org-hide-leading-stars: In-buffer settings. (line 126) * org-hierarchical-todo-statistics: Breaking down tasks. (line 25) * org-highest-priority <1>: In-buffer settings. (line 45) -* org-highest-priority: Priorities. (line 38) +* org-highest-priority: Priorities. (line 37) * org-html-container-element: HTML Specific export settings. (line 17) * org-html-doctype <1>: HTML doctypes. (line 8) @@ -21419,7 +21416,7 @@ org-customize '. * org-log-states-order-reversed: Tracking TODO state changes. (line 6) * org-lowest-priority <1>: In-buffer settings. (line 45) -* org-lowest-priority: Priorities. (line 38) +* org-lowest-priority: Priorities. (line 37) * org-M-RET-may-split-line <1>: Plain lists. (line 82) * org-M-RET-may-split-line: Structure editing. (line 7) * org-md-headline-style: Markdown export. (line 30) @@ -21464,7 +21461,7 @@ org-customize '. * org-preview-latex-default-process: Previewing LaTeX fragments. (line 6) * org-priority-faces: Priorities. (line 13) -* org-priority-start-cycle-with-default: Priorities. (line 33) +* org-priority-start-cycle-with-default: Priorities. (line 32) * org-property-allowed-value-functions: Using the property API. (line 68) * org-publish-project-alist <1>: Publishing options. (line 13) @@ -21563,15 +21560,15 @@ org-customize '. * org-todo-keywords <1>: In-buffer settings. (line 189) * org-todo-keywords <2>: Global TODO list. (line 18) * org-todo-keywords <3>: TODO extensions. (line 6) -* org-todo-keywords: TODO basics. (line 42) +* org-todo-keywords: TODO basics. (line 41) * org-todo-repeat-to-state: Repeated tasks. (line 19) -* org-todo-state-tags-triggers: TODO basics. (line 63) +* org-todo-state-tags-triggers: TODO basics. (line 62) * org-track-ordered-property-with-tag <1>: Checkboxes. (line 80) * org-track-ordered-property-with-tag: TODO dependencies. (line 38) * org-treat-insert-todo-heading-as-state-change: Structure editing. (line 29) * org-treat-S-cursor-todo-selection-as-state-change: TODO basics. - (line 35) + (line 34) * org-use-fast-todo-selection: TODO basics. (line 14) * org-use-property-inheritance <1>: Using the property API. (line 18) @@ -21601,531 +21598,533 @@ org-customize '.  Tag Table: -Node: Top882 -Node: Introduction24566 -Node: Summary25007 -Node: Installation27703 -Node: Activation30399 -Ref: Activation-Footnote-131919 -Node: Feedback32041 -Ref: Feedback-Footnote-135696 -Node: Conventions35823 -Node: Document structure37860 -Node: Outlines38851 -Node: Headlines39480 -Ref: Headlines-Footnote-140682 -Ref: Headlines-Footnote-240858 -Node: Visibility cycling40929 -Node: Global and local cycling41308 -Ref: Global and local cycling-Footnote-143992 -Ref: Global and local cycling-Footnote-244050 -Ref: Global and local cycling-Footnote-344100 -Node: Initial visibility44369 -Ref: Initial visibility-Footnote-145404 -Node: Catching invisible edits45585 -Node: Motion46050 -Node: Structure editing47377 -Node: Sparse trees54014 -Ref: Sparse trees-Footnote-156524 -Ref: Sparse trees-Footnote-256635 -Node: Plain lists56706 -Ref: Plain lists-Footnote-164121 -Ref: Plain lists-Footnote-264475 -Ref: Plain lists-Footnote-364571 -Ref: Plain lists-Footnote-464818 -Ref: Plain lists-Footnote-564989 -Ref: Plain lists-Footnote-665052 -Ref: Plain lists-Footnote-765152 -Ref: Plain lists-Footnote-865254 -Node: Drawers65320 -Node: Blocks67143 -Node: Footnotes67702 -Ref: Footnotes-Footnote-171646 -Ref: Footnotes-Footnote-271743 -Node: Orgstruct mode71820 -Node: Org syntax73450 -Node: Tables74423 -Node: Built-in table editor75064 -Ref: Built-in table editor-Footnote-184818 -Node: Column width and alignment84918 -Ref: Column width and alignment-Footnote-187479 -Node: Column groups87576 -Node: Orgtbl mode89147 -Node: The spreadsheet89956 -Node: References91416 -Ref: References-Footnote-198134 -Ref: References-Footnote-298356 -Ref: References-Footnote-398625 -Ref: References-Footnote-498738 -Node: Formula syntax for Calc99028 -Ref: Formula syntax for Calc-Footnote-1104175 -Node: Formula syntax for Lisp104499 -Node: Durations and time values106234 -Node: Field and range formulas107312 -Node: Column formulas109709 -Node: Lookup functions111797 -Node: Editing and debugging formulas113720 -Ref: Using multiple #+TBLFM lines117979 -Node: Updating the table119192 -Node: Advanced features120548 -Ref: Advanced features-Footnote-1125029 -Node: Org-Plot125135 -Node: Hyperlinks129329 -Node: Link format130086 -Node: Internal links131345 -Ref: Internal links-Footnote-1133640 -Ref: Internal links-Footnote-2133880 -Node: Radio targets134018 -Node: External links134685 -Ref: External links-Footnote-1138609 -Ref: External links-Footnote-2139027 -Node: Handling links139283 -Ref: Handling links-Footnote-1147147 -Ref: Handling links-Footnote-2147306 -Ref: Handling links-Footnote-3147488 -Ref: Handling links-Footnote-4147783 -Ref: Handling links-Footnote-5148029 -Ref: Handling links-Footnote-6148148 -Ref: Handling links-Footnote-7148220 -Node: Using links outside Org148304 -Node: Link abbreviations148789 -Node: Search options151558 -Ref: Search options-Footnote-1153440 -Node: Custom searches153521 -Node: TODO items154531 -Ref: TODO items-Footnote-1155639 -Node: TODO basics155753 -Node: TODO extensions158599 -Node: Workflow states159629 -Ref: Workflow states-Footnote-1160930 -Node: TODO types161023 -Ref: TODO types-Footnote-1162621 -Node: Multiple sets in one file162703 -Node: Fast access to TODO states164557 -Ref: Fast access to TODO states-Footnote-1165430 -Ref: Fast access to TODO states-Footnote-2165514 -Node: Per-file keywords165807 -Ref: Per-file keywords-Footnote-1167178 -Node: Faces for TODO keywords167379 -Node: TODO dependencies168420 -Node: Progress logging170755 -Node: Closing items171467 -Ref: Closing items-Footnote-1172672 -Ref: Closing items-Footnote-2172741 -Node: Tracking TODO state changes172815 -Ref: Tracking TODO state changes-Footnote-1175851 -Ref: Tracking TODO state changes-Footnote-2175906 -Ref: Tracking TODO state changes-Footnote-3176046 -Node: Tracking your habits176334 -Node: Priorities180568 -Ref: Priorities-Footnote-1182558 -Node: Breaking down tasks182627 -Ref: Breaking down tasks-Footnote-1184606 -Node: Checkboxes184702 -Ref: Checkboxes-Footnote-1189329 -Ref: Checkboxes-Footnote-2189453 -Ref: Checkboxes-Footnote-3189627 -Node: Tags189747 -Node: Tag inheritance190803 -Ref: Tag inheritance-Footnote-1192618 -Ref: Tag inheritance-Footnote-2192718 -Node: Setting tags192844 -Ref: Setting tags-Footnote-1199155 -Node: Tag hierarchy199238 -Node: Tag searches202606 -Node: Properties and columns203888 -Node: Property syntax205324 -Node: Special properties209666 -Node: Property searches211311 -Node: Property inheritance212746 -Node: Column view214562 -Node: Defining columns215797 -Node: Scope of column definitions216175 -Node: Column attributes217080 -Ref: Column attributes-Footnote-1221874 -Ref: Column attributes-Footnote-2222030 -Ref: Column attributes-Footnote-3222243 -Ref: Column attributes-Footnote-4222526 -Node: Using column view222659 -Node: Capturing column view225584 -Ref: Capturing column view-Footnote-1228661 -Node: Property API228797 -Node: Dates and times229151 -Node: Timestamps230058 -Ref: Timestamps-Footnote-1232477 -Ref: Timestamps-Footnote-2232663 -Ref: Timestamps-Footnote-3232794 -Node: Creating timestamps233563 -Node: The date/time prompt236387 -Ref: The date/time prompt-Footnote-1240969 -Ref: The date/time prompt-Footnote-2241132 -Ref: The date/time prompt-Footnote-3241238 -Node: Custom time format241332 -Node: Deadlines and scheduling243054 -Ref: Deadlines and scheduling-Footnote-1246534 -Node: Inserting deadline/schedule246689 -Ref: Inserting deadline/schedule-Footnote-1248489 -Ref: Inserting deadline/schedule-Footnote-2248597 -Node: Repeated tasks248705 -Ref: Repeated tasks-Footnote-1253108 -Ref: Repeated tasks-Footnote-2253357 -Node: Clocking work time253556 -Ref: Clocking work time-Footnote-1254741 -Ref: Clocking work time-Footnote-2254885 -Node: Clocking commands255023 -Ref: Clocking commands-Footnote-1259970 -Ref: Clocking commands-Footnote-2260077 -Ref: Clocking commands-Footnote-3260127 -Ref: Clocking commands-Footnote-4260185 -Node: The clock table260263 -Ref: The clock table-Footnote-1267713 -Ref: The clock table-Footnote-2267807 -Node: Resolving idle time267932 -Ref: Resolving idle time-Footnote-1271779 -Node: Effort estimates272247 -Ref: Effort estimates-Footnote-1275000 -Node: Timers275107 -Node: Capture - Refile - Archive277399 -Node: Capture278389 -Node: Setting up capture279457 -Ref: Setting up capture-Footnote-1279866 -Node: Using capture279932 -Node: Capture templates282340 -Node: Template elements284301 -Ref: Template elements-Footnote-1290496 -Node: Template expansion290671 -Ref: Template expansion-Footnote-1294661 -Ref: Template expansion-Footnote-2294748 -Ref: Template expansion-Footnote-3294930 -Node: Templates in contexts295028 -Node: Attachments295850 -Ref: Attachments-Footnote-1299232 -Node: RSS feeds299382 -Node: Protocols300859 -Node: Refile and copy301574 -Ref: Refile and copy-Footnote-1303996 -Node: Archiving304092 -Node: Moving subtrees304792 -Node: Internal archiving306816 -Node: Agenda views309448 -Node: Agenda files311872 -Ref: Agenda files-Footnote-1314675 -Ref: Agenda files-Footnote-2314824 -Node: Agenda dispatcher315017 -Ref: Agenda dispatcher-Footnote-1317926 -Ref: Agenda dispatcher-Footnote-2318020 -Node: Built-in agenda views318122 -Node: Weekly/daily agenda318771 -Ref: Weekly/daily agenda-Footnote-1324505 -Ref: Weekly/daily agenda-Footnote-2324732 -Node: Global TODO list324907 -Node: Matching tags and properties327435 -Node: Timeline334384 -Node: Search view335076 -Node: Stuck projects336369 -Ref: Stuck projects-Footnote-1338429 -Node: Presentation and sorting338459 -Node: Categories339416 -Node: Time-of-day specifications340145 -Node: Sorting agenda items342114 -Node: Filtering/limiting agenda items343683 -Ref: Filtering/limiting agenda items-Footnote-1350831 -Node: Agenda commands351246 -Ref: Agenda commands-Footnote-1372256 -Ref: Agenda commands-Footnote-2372337 -Ref: Agenda commands-Footnote-3372456 -Ref: Agenda commands-Footnote-4372556 -Node: Custom agenda views372639 -Node: Storing searches373280 -Ref: Storing searches-Footnote-1376232 -Ref: Storing searches-Footnote-2376349 -Node: Block agenda376597 -Node: Setting options377835 -Node: Exporting agenda views381424 -Ref: Exporting agenda views-Footnote-1386325 -Ref: Exporting agenda views-Footnote-2386383 -Ref: Exporting agenda views-Footnote-3386539 -Ref: Exporting agenda views-Footnote-4386726 -Node: Agenda column view386808 -Node: Markup389880 -Node: Paragraphs390867 -Node: Emphasis and monospace392033 -Node: Horizontal rules392875 -Node: Images and tables393126 -Node: Literal examples394833 -Ref: Literal examples-Footnote-1399342 -Ref: Literal examples-Footnote-2399875 -Ref: Literal examples-Footnote-3400044 -Ref: Literal examples-Footnote-4400223 -Ref: Literal examples-Footnote-5400473 -Node: Special symbols400567 -Ref: Special symbols-Footnote-1402496 -Ref: Special symbols-Footnote-2402651 -Node: Subscripts and superscripts402741 -Node: Embedded LaTeX403845 -Ref: Embedded LaTeX-Footnote-1404659 -Node: LaTeX fragments404849 -Ref: LaTeX fragments-Footnote-1406929 -Node: Previewing LaTeX fragments407152 -Ref: Previewing LaTeX fragments-Footnote-1408581 -Node: CDLaTeX mode408827 -Ref: CDLaTeX mode-Footnote-1411324 -Node: Exporting411472 -Ref: Exporting-Footnote-1414051 -Node: The export dispatcher414161 -Ref: The export dispatcher-Footnote-1416200 -Node: Export settings416463 -Ref: Export settings-Footnote-1423979 -Ref: Export settings-Footnote-2424081 -Ref: Export settings-Footnote-3424176 -Node: Table of contents424219 -Ref: Table of contents-Footnote-1425970 -Node: Include files426168 -Ref: Include files-Footnote-1429089 -Ref: Include files-Footnote-2429239 -Node: Macro replacement429405 -Ref: Macro replacement-Footnote-1431536 -Node: Comment lines431766 -Ref: Comment lines-Footnote-1432572 -Node: ASCII/Latin-1/UTF-8 export432672 -Node: Beamer export435450 -Node: Beamer export commands436208 -Node: Beamer specific export settings436883 -Node: Sectioning Frames and Blocks in Beamer438667 -Ref: Sectioning Frames and Blocks in Beamer-Footnote-1441623 -Ref: Sectioning Frames and Blocks in Beamer-Footnote-2441786 -Node: Beamer specific syntax441904 -Node: Editing support443535 -Node: A Beamer Example443966 -Node: HTML export445244 -Node: HTML Export commands446388 -Node: HTML Specific export settings446934 -Node: HTML doctypes448719 -Node: HTML preamble and postamble450933 -Node: Quoting HTML tags451981 -Node: Links in HTML export452620 -Node: Tables in HTML export453831 -Node: Images in HTML export455267 -Ref: Images in HTML export-Footnote-1456557 -Node: Math formatting in HTML export456612 -Ref: Math formatting in HTML export-Footnote-1458003 -Node: Text areas in HTML export458263 -Node: CSS support459045 -Ref: CSS support-Footnote-1462217 -Ref: CSS support-Footnote-2462389 -Node: JavaScript support462631 -Node: LaTeX export466012 -Ref: LaTeX export-Footnote-1467298 -Node: LaTeX export commands467542 -Ref: LaTeX export commands-Footnote-1468644 -Node: LaTeX specific export settings468850 -Node: LaTeX header and sectioning471022 -Ref: LaTeX header and sectioning-Footnote-1472655 -Ref: LaTeX header and sectioning-Footnote-2472767 -Node: Quoting LaTeX code472930 -Node: Tables in LaTeX export473530 -Ref: Tables in LaTeX export-Footnote-1477140 -Ref: Tables in LaTeX export-Footnote-2477218 -Ref: Tables in LaTeX export-Footnote-3477292 -Node: Images in LaTeX export477376 -Ref: Images in LaTeX export-Footnote-1479992 -Node: Plain lists in LaTeX export480146 -Node: Source blocks in LaTeX export481262 -Node: Example blocks in LaTeX export482659 -Node: Special blocks in LaTeX export483295 -Node: Horizontal rules in LaTeX export484476 -Node: Markdown export484865 -Ref: Markdown export-Footnote-1486163 -Node: OpenDocument Text export486249 -Ref: OpenDocument Text export-Footnote-1487440 -Node: Pre-requisites for ODT export487584 -Node: ODT export commands487912 -Ref: x-export-to-odt488116 -Ref: ODT export commands-Footnote-1489115 -Ref: ODT export commands-Footnote-2489175 -Node: ODT specific export settings489226 -Node: Extending ODT export490068 -Ref: x-export-to-other-formats491056 -Ref: x-convert-to-other-formats491566 -Node: Applying custom styles492023 -Node: Links in ODT export494147 -Node: Tables in ODT export494794 -Ref: Tables in ODT export-Footnote-1496930 -Node: Images in ODT export497023 -Ref: Images in ODT export-Footnote-1499749 -Node: Math formatting in ODT export499982 -Node: Working with LaTeX math snippets500446 -Ref: Working with LaTeX math snippets-Footnote-1502665 -Ref: Working with LaTeX math snippets-Footnote-2502741 -Node: Working with MathML or OpenDocument formula files502786 -Node: Labels and captions in ODT export503340 -Node: Literal examples in ODT export504798 -Node: Advanced topics in ODT export505662 -Node: Configuring a document converter506418 -Ref: x-odt-converter-capabilities507190 -Node: Working with OpenDocument style files507771 -Ref: x-factory-styles508247 -Ref: x-orgodtstyles-xml508485 -Ref: x-orgodtcontenttemplate-xml508812 -Ref: x-overriding-factory-styles509468 -Ref: x-org-odt-styles-file509748 -Ref: x-org-odt-content-template-file510629 -Node: Creating one-off styles510770 -Node: Customizing tables in ODT export512991 -Ref: Customizing tables in ODT export-Footnote-1517968 -Ref: Customizing tables in ODT export-Footnote-2518072 -Ref: Customizing tables in ODT export-Footnote-3518160 -Node: Validating OpenDocument XML518475 -Ref: Validating OpenDocument XML-Footnote-1519474 -Node: Org export519526 -Node: Texinfo export520290 -Node: Texinfo export commands521390 -Ref: Texinfo export commands-Footnote-1521925 -Node: Texinfo specific export settings522033 -Node: Texinfo file header523067 -Ref: Texinfo file header-Footnote-1524069 -Node: Texinfo title and copyright page524131 -Node: Texinfo `Top' node525604 -Node: Headings and sectioning structure526343 -Node: Indices527798 -Node: Quoting Texinfo code528591 -Node: Plain lists in Texinfo export529083 -Ref: Plain lists in Texinfo export-Footnote-1529839 -Node: Tables in Texinfo export529905 -Node: Images in Texinfo export530367 -Node: Special blocks in Texinfo export530863 -Node: A Texinfo example531439 -Node: iCalendar export533458 -Ref: iCalendar export-Footnote-1536190 -Ref: iCalendar export-Footnote-2536280 -Ref: iCalendar export-Footnote-3536380 -Node: Other built-in back-ends536517 -Node: Advanced configuration537107 -Node: Export in foreign buffers544082 -Node: Publishing545039 -Node: Configuration545907 -Node: Project alist546670 -Node: Sources and destinations547811 -Node: Selecting files549334 -Node: Publishing action550335 -Ref: Publishing action-Footnote-1552164 -Node: Publishing options552321 -Node: Publishing links565471 -Node: Sitemap566823 -Node: Generating an index570042 -Node: Uploading files570824 -Node: Sample configuration572588 -Node: Simple example573077 -Node: Complex example573724 -Node: Triggering publication575775 -Node: Working with source code576771 -Node: Structure of code blocks581221 -Node: Editing source code583708 -Node: Exporting code blocks586467 -Node: Extracting source code588888 -Node: Evaluating code blocks591332 -Ref: Evaluating code blocks-Footnote-1594453 -Ref: Evaluating code blocks-Footnote-2594579 -Node: Library of Babel594765 -Node: Languages595444 -Node: Header arguments597841 -Node: Using header arguments598198 -Node: System-wide header arguments599004 -Node: Language-specific header arguments599699 -Node: Header arguments in Org mode properties600219 -Node: Language-specific mode properties601662 -Node: Code block specific header arguments602482 -Node: Arguments in function calls604133 -Node: Specific header arguments604893 -Node: var607575 -Node: results614157 -Node: file618056 -Node: file-desc618721 -Node: file-ext619119 -Node: output-dir619536 -Node: dir619934 -Node: exports622051 -Node: tangle622923 -Node: mkdirp623768 -Node: comments624082 -Node: padline625038 -Node: no-expand625429 -Node: session626141 -Node: noweb627218 -Node: noweb-ref629016 -Ref: noweb-ref-Footnote-1630207 -Node: noweb-sep630322 -Node: cache630626 -Node: sep633224 -Node: hlines633615 -Node: colnames635097 -Node: rownames636501 -Node: shebang637690 -Node: tangle-mode638168 -Node: eval638952 -Node: wrap639936 -Node: post640243 -Node: prologue641978 -Node: epilogue642474 -Node: Results of evaluation642732 -Node: Noweb reference syntax646453 -Node: Key bindings and useful functions647973 -Node: Batch execution650012 -Node: Miscellaneous651050 -Node: Completion651889 -Node: Easy templates653773 -Node: Speed keys654958 -Node: Code evaluation security655966 -Node: Customization658771 -Node: In-buffer settings659197 -Node: The very busy C-c C-c key668424 -Node: Clean view670255 -Ref: Clean view-Footnote-1673654 -Ref: Clean view-Footnote-2673877 -Ref: Clean view-Footnote-3673932 -Node: TTY keys674004 -Node: Interaction675429 -Node: Cooperation675826 -Node: Conflicts678542 -Node: org-crypt683051 -Node: Hacking684303 -Node: Hooks685289 -Node: Add-on packages685618 -Node: Adding hyperlink types686146 -Node: Adding export back-ends689507 -Node: Context-sensitive commands690727 -Node: Tables in arbitrary syntax691408 -Node: Radio tables693071 -Node: A LaTeX example695144 -Ref: A LaTeX example-Footnote-1698857 -Ref: A LaTeX example-Footnote-2699023 -Node: Translator functions699458 -Node: Radio lists701564 -Node: Dynamic blocks702714 -Node: Special agenda views704760 -Ref: x-agenda-skip-entry-regexp707585 -Ref: Special agenda views-Footnote-1708350 -Ref: Special agenda views-Footnote-2708545 -Node: Speeding up your agendas708673 -Node: Extracting agenda information709717 -Node: Using the property API713541 -Node: Using the mapping API716866 -Node: MobileOrg720833 -Node: Setting up the staging area722393 -Ref: Setting up the staging area-Footnote-1723595 -Ref: Setting up the staging area-Footnote-2723764 -Node: Pushing to MobileOrg723971 -Ref: Pushing to MobileOrg-Footnote-1724850 -Ref: Pushing to MobileOrg-Footnote-2724936 -Ref: Pushing to MobileOrg-Footnote-3725295 -Node: Pulling from MobileOrg725367 -Ref: Pulling from MobileOrg-Footnote-1727387 -Node: History and acknowledgments727447 -Node: GNU Free Documentation License742632 -Node: Main Index767822 -Node: Key Index859205 -Node: Command and Function Index911720 -Node: Variable Index946671 +Node: Top900 +Node: Introduction24537 +Node: Summary24978 +Node: Installation27674 +Node: Activation30370 +Ref: Activation-Footnote-131890 +Node: Feedback32012 +Ref: Feedback-Footnote-135667 +Node: Conventions35794 +Node: Document structure37831 +Node: Outlines38822 +Node: Headlines39451 +Ref: Headlines-Footnote-140653 +Ref: Headlines-Footnote-240829 +Node: Visibility cycling40900 +Node: Global and local cycling41279 +Ref: Global and local cycling-Footnote-143963 +Ref: Global and local cycling-Footnote-244021 +Ref: Global and local cycling-Footnote-344071 +Node: Initial visibility44340 +Ref: Initial visibility-Footnote-145375 +Node: Catching invisible edits45556 +Node: Motion46021 +Node: Structure editing47348 +Node: Sparse trees53950 +Ref: Sparse trees-Footnote-156460 +Ref: Sparse trees-Footnote-256571 +Node: Plain lists56642 +Ref: Plain lists-Footnote-164057 +Ref: Plain lists-Footnote-264411 +Ref: Plain lists-Footnote-364507 +Ref: Plain lists-Footnote-464754 +Ref: Plain lists-Footnote-564925 +Ref: Plain lists-Footnote-664988 +Ref: Plain lists-Footnote-765088 +Ref: Plain lists-Footnote-865190 +Node: Drawers65256 +Ref: Drawers-Footnote-167120 +Node: Blocks67256 +Node: Footnotes67815 +Ref: Footnotes-Footnote-171759 +Ref: Footnotes-Footnote-271856 +Node: Orgstruct mode71933 +Node: Org syntax73563 +Node: Tables74536 +Node: Built-in table editor75177 +Ref: Built-in table editor-Footnote-184929 +Node: Column width and alignment85029 +Ref: Column width and alignment-Footnote-187590 +Node: Column groups87687 +Node: Orgtbl mode89258 +Node: The spreadsheet90067 +Node: References91527 +Ref: References-Footnote-198245 +Ref: References-Footnote-298467 +Ref: References-Footnote-398736 +Ref: References-Footnote-498849 +Node: Formula syntax for Calc99139 +Ref: Formula syntax for Calc-Footnote-1104286 +Node: Formula syntax for Lisp104610 +Node: Durations and time values106345 +Node: Field and range formulas107423 +Node: Column formulas109820 +Node: Lookup functions111908 +Node: Editing and debugging formulas113831 +Ref: Using multiple #+TBLFM lines118092 +Ref: Editing and debugging formulas-Footnote-1119341 +Node: Updating the table119477 +Node: Advanced features120833 +Ref: Advanced features-Footnote-1125314 +Node: Org-Plot125420 +Node: Hyperlinks129614 +Node: Link format130371 +Node: Internal links131630 +Ref: Internal links-Footnote-1133925 +Ref: Internal links-Footnote-2134165 +Node: Radio targets134303 +Node: External links134970 +Ref: External links-Footnote-1138894 +Ref: External links-Footnote-2139312 +Node: Handling links139568 +Ref: Handling links-Footnote-1147432 +Ref: Handling links-Footnote-2147591 +Ref: Handling links-Footnote-3147773 +Ref: Handling links-Footnote-4148068 +Ref: Handling links-Footnote-5148314 +Ref: Handling links-Footnote-6148433 +Ref: Handling links-Footnote-7148505 +Node: Using links outside Org148589 +Node: Link abbreviations149074 +Node: Search options151843 +Ref: Search options-Footnote-1153725 +Node: Custom searches153806 +Node: TODO items154816 +Ref: TODO items-Footnote-1155924 +Node: TODO basics156038 +Node: TODO extensions158862 +Node: Workflow states159892 +Ref: Workflow states-Footnote-1161193 +Node: TODO types161286 +Ref: TODO types-Footnote-1162884 +Node: Multiple sets in one file162953 +Node: Fast access to TODO states164807 +Ref: Fast access to TODO states-Footnote-1165680 +Ref: Fast access to TODO states-Footnote-2165764 +Node: Per-file keywords166057 +Ref: Per-file keywords-Footnote-1167428 +Node: Faces for TODO keywords167629 +Node: TODO dependencies168670 +Node: Progress logging171005 +Node: Closing items171717 +Ref: Closing items-Footnote-1172694 +Ref: Closing items-Footnote-2172763 +Node: Tracking TODO state changes172837 +Ref: Tracking TODO state changes-Footnote-1175873 +Ref: Tracking TODO state changes-Footnote-2175928 +Ref: Tracking TODO state changes-Footnote-3176068 +Node: Tracking your habits176356 +Node: Priorities180590 +Ref: Priorities-Footnote-1182562 +Node: Breaking down tasks182631 +Ref: Breaking down tasks-Footnote-1184610 +Node: Checkboxes184706 +Ref: Checkboxes-Footnote-1189333 +Ref: Checkboxes-Footnote-2189457 +Ref: Checkboxes-Footnote-3189631 +Node: Tags189751 +Node: Tag inheritance190807 +Ref: Tag inheritance-Footnote-1192622 +Ref: Tag inheritance-Footnote-2192722 +Node: Setting tags192848 +Ref: Setting tags-Footnote-1199159 +Node: Tag hierarchy199242 +Node: Tag searches202610 +Node: Properties and columns203892 +Node: Property syntax205328 +Node: Special properties209670 +Node: Property searches211315 +Node: Property inheritance212750 +Node: Column view214566 +Node: Defining columns215801 +Node: Scope of column definitions216179 +Node: Column attributes217084 +Ref: Column attributes-Footnote-1221878 +Ref: Column attributes-Footnote-2222034 +Ref: Column attributes-Footnote-3222247 +Ref: Column attributes-Footnote-4222530 +Node: Using column view222663 +Node: Capturing column view225588 +Ref: Capturing column view-Footnote-1228665 +Node: Property API228801 +Node: Dates and times229155 +Node: Timestamps230062 +Ref: Timestamps-Footnote-1232462 +Ref: Timestamps-Footnote-2232648 +Ref: Timestamps-Footnote-3232779 +Node: Creating timestamps233548 +Node: The date/time prompt236372 +Ref: The date/time prompt-Footnote-1240954 +Ref: The date/time prompt-Footnote-2241117 +Ref: The date/time prompt-Footnote-3241223 +Node: Custom time format241317 +Node: Deadlines and scheduling243039 +Ref: Deadlines and scheduling-Footnote-1246519 +Node: Inserting deadline/schedule246674 +Ref: Inserting deadline/schedule-Footnote-1248474 +Ref: Inserting deadline/schedule-Footnote-2248582 +Node: Repeated tasks248690 +Ref: Repeated tasks-Footnote-1253093 +Ref: Repeated tasks-Footnote-2253342 +Node: Clocking work time253541 +Ref: Clocking work time-Footnote-1254726 +Ref: Clocking work time-Footnote-2254870 +Node: Clocking commands255008 +Ref: Clocking commands-Footnote-1259913 +Ref: Clocking commands-Footnote-2260020 +Ref: Clocking commands-Footnote-3260070 +Ref: Clocking commands-Footnote-4260128 +Node: The clock table260206 +Ref: The clock table-Footnote-1267741 +Ref: The clock table-Footnote-2267835 +Node: Resolving idle time267960 +Ref: Resolving idle time-Footnote-1271807 +Node: Effort estimates272275 +Ref: Effort estimates-Footnote-1275028 +Node: Timers275135 +Node: Capture - Refile - Archive277427 +Node: Capture278417 +Node: Setting up capture279485 +Ref: Setting up capture-Footnote-1279894 +Node: Using capture279960 +Node: Capture templates282368 +Node: Template elements284333 +Ref: Template elements-Footnote-1290910 +Ref: Template elements-Footnote-2291227 +Node: Template expansion291414 +Ref: Template expansion-Footnote-1295404 +Ref: Template expansion-Footnote-2295491 +Ref: Template expansion-Footnote-3295673 +Node: Templates in contexts295771 +Node: Attachments296593 +Ref: Attachments-Footnote-1300040 +Node: RSS feeds300190 +Node: Protocols301667 +Node: Refile and copy302382 +Ref: Refile and copy-Footnote-1304804 +Node: Archiving304900 +Node: Moving subtrees305600 +Node: Internal archiving307624 +Node: Agenda views310256 +Node: Agenda files312584 +Ref: Agenda files-Footnote-1315387 +Ref: Agenda files-Footnote-2315536 +Node: Agenda dispatcher315729 +Ref: Agenda dispatcher-Footnote-1318560 +Ref: Agenda dispatcher-Footnote-2318654 +Node: Built-in agenda views318756 +Node: Weekly/daily agenda319340 +Ref: Weekly/daily agenda-Footnote-1325074 +Ref: Weekly/daily agenda-Footnote-2325301 +Node: Global TODO list325476 +Node: Matching tags and properties328004 +Node: Search view334956 +Node: Stuck projects336269 +Ref: Stuck projects-Footnote-1338329 +Node: Presentation and sorting338359 +Node: Categories339316 +Node: Time-of-day specifications340045 +Node: Sorting agenda items342014 +Node: Filtering/limiting agenda items343583 +Ref: Filtering/limiting agenda items-Footnote-1350731 +Node: Agenda commands351146 +Ref: Agenda commands-Footnote-1372137 +Ref: Agenda commands-Footnote-2372218 +Ref: Agenda commands-Footnote-3372337 +Ref: Agenda commands-Footnote-4372437 +Node: Custom agenda views372520 +Node: Storing searches373161 +Ref: Storing searches-Footnote-1376113 +Ref: Storing searches-Footnote-2376230 +Node: Block agenda376478 +Node: Setting options377716 +Node: Exporting agenda views381305 +Ref: Exporting agenda views-Footnote-1386206 +Ref: Exporting agenda views-Footnote-2386264 +Ref: Exporting agenda views-Footnote-3386420 +Ref: Exporting agenda views-Footnote-4386607 +Node: Agenda column view386689 +Node: Markup389761 +Node: Paragraphs390748 +Node: Emphasis and monospace391914 +Node: Horizontal rules392756 +Node: Images and tables393007 +Node: Literal examples394714 +Ref: Literal examples-Footnote-1399223 +Ref: Literal examples-Footnote-2399756 +Ref: Literal examples-Footnote-3399925 +Ref: Literal examples-Footnote-4400104 +Ref: Literal examples-Footnote-5400354 +Node: Special symbols400448 +Ref: Special symbols-Footnote-1402377 +Ref: Special symbols-Footnote-2402532 +Node: Subscripts and superscripts402622 +Node: Embedded LaTeX403726 +Ref: Embedded LaTeX-Footnote-1404540 +Node: LaTeX fragments404730 +Ref: LaTeX fragments-Footnote-1406810 +Node: Previewing LaTeX fragments407033 +Ref: Previewing LaTeX fragments-Footnote-1408462 +Node: CDLaTeX mode408708 +Ref: CDLaTeX mode-Footnote-1411208 +Node: Exporting411356 +Ref: Exporting-Footnote-1413935 +Node: The export dispatcher414045 +Ref: The export dispatcher-Footnote-1416084 +Node: Export settings416347 +Ref: Export settings-Footnote-1423891 +Ref: Export settings-Footnote-2423989 +Ref: Export settings-Footnote-3424091 +Ref: Export settings-Footnote-4424186 +Node: Table of contents424229 +Ref: Table of contents-Footnote-1425980 +Node: Include files426178 +Ref: Include files-Footnote-1429099 +Ref: Include files-Footnote-2429249 +Node: Macro replacement429415 +Ref: Macro replacement-Footnote-1431666 +Node: Comment lines431896 +Ref: Comment lines-Footnote-1432702 +Node: ASCII/Latin-1/UTF-8 export432802 +Node: Beamer export435580 +Node: Beamer export commands436338 +Node: Beamer specific export settings437013 +Node: Sectioning Frames and Blocks in Beamer438797 +Ref: Sectioning Frames and Blocks in Beamer-Footnote-1441753 +Ref: Sectioning Frames and Blocks in Beamer-Footnote-2441916 +Node: Beamer specific syntax442034 +Node: Editing support443665 +Node: A Beamer Example444096 +Node: HTML export445374 +Node: HTML Export commands446518 +Node: HTML Specific export settings447064 +Node: HTML doctypes448849 +Node: HTML preamble and postamble451063 +Node: Quoting HTML tags452111 +Node: Links in HTML export452750 +Node: Tables in HTML export453961 +Node: Images in HTML export455397 +Ref: Images in HTML export-Footnote-1456687 +Node: Math formatting in HTML export456742 +Ref: Math formatting in HTML export-Footnote-1458133 +Node: Text areas in HTML export458393 +Node: CSS support459175 +Ref: CSS support-Footnote-1462347 +Ref: CSS support-Footnote-2462519 +Node: JavaScript support462761 +Node: LaTeX export466142 +Ref: LaTeX export-Footnote-1467428 +Node: LaTeX export commands467672 +Ref: LaTeX export commands-Footnote-1468774 +Node: LaTeX specific export settings468980 +Node: LaTeX header and sectioning471152 +Ref: LaTeX header and sectioning-Footnote-1472785 +Ref: LaTeX header and sectioning-Footnote-2472897 +Node: Quoting LaTeX code473060 +Node: Tables in LaTeX export473660 +Ref: Tables in LaTeX export-Footnote-1477270 +Ref: Tables in LaTeX export-Footnote-2477348 +Ref: Tables in LaTeX export-Footnote-3477422 +Node: Images in LaTeX export477506 +Ref: Images in LaTeX export-Footnote-1480122 +Node: Plain lists in LaTeX export480276 +Node: Source blocks in LaTeX export481392 +Node: Example blocks in LaTeX export482789 +Node: Special blocks in LaTeX export483425 +Node: Horizontal rules in LaTeX export484606 +Node: Markdown export484995 +Ref: Markdown export-Footnote-1486293 +Node: OpenDocument Text export486379 +Ref: OpenDocument Text export-Footnote-1487570 +Node: Pre-requisites for ODT export487714 +Node: ODT export commands488042 +Ref: x-export-to-odt488246 +Ref: ODT export commands-Footnote-1489245 +Ref: ODT export commands-Footnote-2489305 +Node: ODT specific export settings489356 +Node: Extending ODT export490198 +Ref: x-export-to-other-formats491186 +Ref: x-convert-to-other-formats491696 +Node: Applying custom styles492153 +Node: Links in ODT export494277 +Node: Tables in ODT export494924 +Ref: Tables in ODT export-Footnote-1497060 +Node: Images in ODT export497153 +Ref: Images in ODT export-Footnote-1499879 +Node: Math formatting in ODT export500112 +Node: Working with LaTeX math snippets500576 +Ref: Working with LaTeX math snippets-Footnote-1502795 +Ref: Working with LaTeX math snippets-Footnote-2502871 +Node: Working with MathML or OpenDocument formula files502916 +Node: Labels and captions in ODT export503470 +Node: Literal examples in ODT export504928 +Node: Advanced topics in ODT export505792 +Node: Configuring a document converter506548 +Ref: x-odt-converter-capabilities507320 +Node: Working with OpenDocument style files507901 +Ref: x-factory-styles508377 +Ref: x-orgodtstyles-xml508615 +Ref: x-orgodtcontenttemplate-xml508942 +Ref: x-overriding-factory-styles509598 +Ref: x-org-odt-styles-file509878 +Ref: x-org-odt-content-template-file510759 +Node: Creating one-off styles510900 +Node: Customizing tables in ODT export513121 +Ref: Customizing tables in ODT export-Footnote-1518098 +Ref: Customizing tables in ODT export-Footnote-2518202 +Ref: Customizing tables in ODT export-Footnote-3518290 +Node: Validating OpenDocument XML518605 +Ref: Validating OpenDocument XML-Footnote-1519604 +Node: Org export519656 +Node: Texinfo export520420 +Node: Texinfo export commands521520 +Ref: Texinfo export commands-Footnote-1522055 +Node: Texinfo specific export settings522163 +Node: Texinfo file header523197 +Ref: Texinfo file header-Footnote-1524199 +Node: Texinfo title and copyright page524261 +Node: Texinfo `Top' node525734 +Node: Headings and sectioning structure526473 +Node: Indices527928 +Node: Quoting Texinfo code528721 +Node: Plain lists in Texinfo export529213 +Ref: Plain lists in Texinfo export-Footnote-1529969 +Node: Tables in Texinfo export530035 +Node: Images in Texinfo export530497 +Node: Special blocks in Texinfo export530993 +Node: A Texinfo example531569 +Node: iCalendar export533588 +Ref: iCalendar export-Footnote-1536320 +Ref: iCalendar export-Footnote-2536410 +Ref: iCalendar export-Footnote-3536510 +Node: Other built-in back-ends536647 +Node: Advanced configuration537237 +Node: Export in foreign buffers544212 +Node: Publishing545169 +Node: Configuration546037 +Node: Project alist546800 +Node: Sources and destinations547941 +Node: Selecting files549464 +Node: Publishing action550465 +Ref: Publishing action-Footnote-1552294 +Node: Publishing options552451 +Node: Publishing links565601 +Node: Sitemap566953 +Node: Generating an index570681 +Node: Uploading files571463 +Node: Sample configuration573227 +Node: Simple example573716 +Node: Complex example574363 +Node: Triggering publication576414 +Node: Working with source code577410 +Node: Structure of code blocks581860 +Node: Editing source code584347 +Node: Exporting code blocks587106 +Node: Extracting source code589711 +Node: Evaluating code blocks592155 +Ref: Evaluating code blocks-Footnote-1595276 +Ref: Evaluating code blocks-Footnote-2595402 +Node: Library of Babel595588 +Node: Languages596267 +Node: Header arguments598664 +Node: Using header arguments599021 +Node: System-wide header arguments599827 +Node: Language-specific header arguments600522 +Node: Header arguments in Org mode properties601042 +Node: Language-specific mode properties602485 +Node: Code block specific header arguments603305 +Node: Arguments in function calls604956 +Node: Specific header arguments605716 +Node: var608398 +Node: results614980 +Node: file618879 +Node: file-desc619544 +Node: file-ext619942 +Node: output-dir620359 +Node: dir620757 +Node: exports622878 +Node: tangle623750 +Node: mkdirp624595 +Node: comments624909 +Node: padline625865 +Node: no-expand626256 +Node: session626968 +Node: noweb628045 +Node: noweb-ref629843 +Node: noweb-sep630931 +Node: cache631235 +Node: sep633833 +Node: hlines634224 +Node: colnames635706 +Node: rownames637110 +Node: shebang638299 +Node: tangle-mode638777 +Node: eval639561 +Node: wrap640545 +Node: post640852 +Node: prologue642587 +Node: epilogue643083 +Node: Results of evaluation643341 +Node: Noweb reference syntax647062 +Node: Key bindings and useful functions648582 +Node: Batch execution650621 +Node: Miscellaneous651659 +Node: Completion652498 +Node: Easy templates654541 +Node: Speed keys655726 +Node: Code evaluation security656734 +Node: Customization659539 +Node: In-buffer settings659965 +Node: The very busy C-c C-c key669192 +Node: Clean view671023 +Ref: Clean view-Footnote-1674422 +Ref: Clean view-Footnote-2674645 +Ref: Clean view-Footnote-3674700 +Node: TTY keys674772 +Node: Interaction676197 +Node: Cooperation676594 +Node: Conflicts679313 +Node: org-crypt683822 +Node: Hacking685074 +Node: Hooks686060 +Node: Add-on packages686378 +Node: Adding hyperlink types686906 +Node: Adding export back-ends690267 +Node: Context-sensitive commands691487 +Node: Tables in arbitrary syntax692168 +Node: Radio tables693831 +Node: A LaTeX example695904 +Ref: A LaTeX example-Footnote-1699617 +Ref: A LaTeX example-Footnote-2699783 +Node: Translator functions700218 +Node: Radio lists702324 +Node: Dynamic blocks703474 +Node: Special agenda views705520 +Ref: x-agenda-skip-entry-regexp708345 +Ref: Special agenda views-Footnote-1709110 +Ref: Special agenda views-Footnote-2709305 +Node: Speeding up your agendas709433 +Node: Extracting agenda information710477 +Node: Using the property API714301 +Node: Using the mapping API717626 +Node: MobileOrg721593 +Node: Setting up the staging area723153 +Ref: Setting up the staging area-Footnote-1724355 +Ref: Setting up the staging area-Footnote-2724524 +Node: Pushing to MobileOrg724731 +Ref: Pushing to MobileOrg-Footnote-1725610 +Ref: Pushing to MobileOrg-Footnote-2725696 +Ref: Pushing to MobileOrg-Footnote-3726055 +Node: Pulling from MobileOrg726127 +Ref: Pulling from MobileOrg-Footnote-1728147 +Node: History and acknowledgments728207 +Node: GNU Free Documentation License743392 +Node: Main Index768582 +Node: Key Index859819 +Node: Command and Function Index912407 +Node: Variable Index947358  End Tag Table diff --git a/elpa/org-20170210/org-agenda.el b/elpa/org-20170407/org-agenda.el similarity index 96% rename from elpa/org-20170210/org-agenda.el rename to elpa/org-20170407/org-agenda.el index b17efe83..8a590ce2 100644 --- a/elpa/org-20170210/org-agenda.el +++ b/elpa/org-20170407/org-agenda.el @@ -975,18 +975,6 @@ will only be dimmed." (const :tag "Dim to a gray face" t) (const :tag "Make invisible" invisible))) -(defcustom org-timeline-show-empty-dates 3 - "Non-nil means `org-timeline' also shows dates without an entry. -When nil, only the days which actually have entries are shown. -When t, all days between the first and the last date are shown. -When an integer, show also empty dates, but if there is a gap of more than -N days, just insert a special line indicating the size of the gap." - :group 'org-agenda-skip - :type '(choice - (const :tag "None" nil) - (const :tag "All" t) - (integer :tag "at most"))) - (defgroup org-agenda-startup nil "Options concerning initial settings in the Agenda in Org Mode." :tag "Org Agenda Startup" @@ -1260,17 +1248,43 @@ Custom commands can set this variable in the options section." :version "24.1" :type 'boolean) -(defcustom org-agenda-repeating-timestamp-show-all t - "Non-nil means show all occurrences of a repeating stamp in the agenda. -When set to a list of strings, only show occurrences of repeating -stamps for these TODO keywords. When nil, only one occurrence is -shown, either today or the nearest into the future." +(defcustom org-agenda-show-future-repeats t + "Non-nil shows repeated entries in the future part of the agenda. +When set to the symbol `next' only the first future repeat is shown." + :group 'org-agenda-daily/weekly + :type '(choice + (const :tag "Show all repeated entries" t) + (const :tag "Show next repeated entry" next) + (const :tag "Do not show repeated entries" nil)) + :version "26.1" + :package-version '(Org . "9.1") + :safe #'symbolp) + +(defcustom org-agenda-prefer-last-repeat nil + "Non-nil sets date for repeated entries to their last repeat. + +When nil, display SCHEDULED and DEADLINE dates at their base +date, and in today's agenda, as a reminder. Display plain +time-stamps, on the other hand, at every repeat date in the past +in addition to the base date. + +When non-nil, show a repeated entry at its latest repeat date, +possibly being today even if it wasn't marked as done. This +setting is useful if you do not always mark repeated entries as +done and, yet, consider that reaching repeat date starts the task +anew. + +When set to a list of strings, prefer last repeats only for +entries with these TODO keywords." :group 'org-agenda-daily/weekly :type '(choice - (const :tag "Show repeating stamps" t) - (repeat :tag "Show repeating stamps for these TODO keywords" - (string :tag "TODO Keyword")) - (const :tag "Don't show repeating stamps" nil))) + (const :tag "Prefer last repeat" t) + (const :tag "Prefer base date" nil) + (repeat :tag "Prefer last repeat for entries with these TODO keywords" + (string :tag "TODO keyword"))) + :version "26.1" + :package-version '(Org . "9.1") + :safe (lambda (x) (or (booleanp x) (consp x)))) (defcustom org-scheduled-past-days 10000 "Number of days to continue listing scheduled items not marked DONE. @@ -1278,7 +1292,19 @@ When an item is scheduled on a date, it shows up in the agenda on this day and will be listed until it is marked done or for the number of days given here." :group 'org-agenda-daily/weekly - :type 'integer) + :type 'integer + :safe 'integerp) + +(defcustom org-deadline-past-days 10000 + "Number of days to warn about missed deadlines. +When an item has deadline on a date, it shows up in the agenda on +this day and will appear as a reminder until it is marked DONE or +for the number of days given here." + :group 'org-agenda-daily/weekly + :type 'integer + :version "26.1" + :package-version '(Org . "9.1") + :safe 'integerp) (defcustom org-agenda-log-mode-items '(closed clock) "List of items that should be shown in agenda log mode. @@ -2311,6 +2337,7 @@ The following commands are available: (org-defkey org-agenda-mode-map "b" 'org-agenda-earlier) (org-defkey org-agenda-mode-map "\C-c\C-x\C-c" 'org-agenda-columns) (org-defkey org-agenda-mode-map "\C-c\C-x>" 'org-agenda-remove-restriction-lock) +(org-defkey org-agenda-mode-map "\C-c\C-x<" 'org-agenda-set-restriction-lock-from-agenda) (org-defkey org-agenda-mode-map "[" 'org-agenda-manipulate-query-add) (org-defkey org-agenda-mode-map "]" 'org-agenda-manipulate-query-subtract) @@ -2358,7 +2385,7 @@ The following commands are available: ["Fortnight View" org-agenda-fortnight-view :active (org-agenda-check-type nil 'agenda) :style radio :selected (eq org-agenda-current-span 'fortnight) - :keys "v f"] + :keys "v t"] ["Month View" org-agenda-month-view :active (org-agenda-check-type nil 'agenda) :style radio :selected (eq org-agenda-current-span 'month) @@ -2684,7 +2711,6 @@ T Call `org-todo-list' to display the global todo list, select only m Call `org-tags-view' to display headlines with tags matching a condition (the user is prompted for the condition). M Like `m', but select only TODO entries, no ordinary headlines. -L Create a timeline for the current buffer. e Export views to associated files. s Search entries for keywords. S Search entries for keywords, only with TODO keywords. @@ -2847,12 +2873,6 @@ Pressing `<' twice means to restrict to the current subtree or region (copy-sequence note)) nil 'face 'org-warning))))))) t t)) - ((equal org-keys "L") - (unless (derived-mode-p 'org-mode) - (user-error "This is not an Org file")) - (unless restriction - (put 'org-agenda-files 'org-restrict (list bfn)) - (org-call-with-arg 'org-timeline arg))) ((equal org-keys "#") (call-interactively 'org-agenda-list-stuck-projects)) ((equal org-keys "/") (call-interactively 'org-occur-in-agenda-files)) ((equal org-keys "!") (customize-variable 'org-stuck-projects)) @@ -2902,15 +2922,15 @@ Agenda views are separated by `org-agenda-block-separator'." (erase-buffer) (insert (eval-when-compile (let ((header - "Press key for an agenda command: < Buffer, subtree/region restriction --------------------------------- > Remove restriction -a Agenda for current week or day e Export agenda views -t List of all TODO entries T Entries with special TODO kwd -m Match a TAGS/PROP/TODO query M Like m, but only TODO entries -s Search for keywords S Like s, but only TODO entries -L Timeline for current buffer # List stuck projects (!=configure) -/ Multi-occur C Configure custom agenda commands -? Find :FLAGGED: entries * Toggle sticky agenda views + "Press key for an agenda command: +-------------------------------- < Buffer, subtree/region restriction +a Agenda for current week or day > Remove restriction +t List of all TODO entries e Export agenda views +m Match a TAGS/PROP/TODO query T Entries with special TODO kwd +s Search for keywords M Like m, but only TODO entries +/ Multi-occur S Like s, but only TODO entries +? Find :FLAGGED: entries C Configure custom agenda commands +* Toggle sticky agenda views # List stuck projects (!=configure) ") (start 0)) (while (string-match @@ -3345,6 +3365,7 @@ the agenda to write." (save-window-excursion (let ((bs (copy-sequence (buffer-string))) (extension (file-name-extension file)) + (default-directory (file-name-directory file)) beg content) (with-temp-buffer (rename-buffer org-agenda-write-buffer-name t) @@ -4017,152 +4038,7 @@ This check for agenda markers in all agenda buffers currently active." 'org-agenda-date-weekend) (t 'org-agenda-date))) -;;; Agenda timeline - -(defvar org-agenda-only-exact-dates nil) ; dynamically scoped -(defvar org-agenda-show-log-scoped) ;; dynamically scope in `org-timeline' or `org-agenda-list' - -(defun org-timeline (&optional dotodo) - "Show a time-sorted view of the entries in the current Org file. - -Only entries with a time stamp of today or later will be listed. - -With `\\[universal-argument]' prefix, all unfinished TODO items will also be \ -shown, -under the current date. - -If the buffer contains an active region, only check the region -for dates." - (interactive "P") - (let* ((dopast t) - (org-agenda-show-log-scoped org-agenda-show-log) - (org-agenda-show-log org-agenda-show-log-scoped) - (entry (buffer-file-name (or (buffer-base-buffer (current-buffer)) - (current-buffer)))) - (date (calendar-current-date)) - (beg (if (org-region-active-p) (region-beginning) (point-min))) - (end (if (org-region-active-p) (region-end) (point-max))) - (day-numbers (org-get-all-dates - beg end 'no-ranges - t org-agenda-show-log-scoped ; always include today - org-timeline-show-empty-dates)) - (org-deadline-warning-days 0) - (org-agenda-only-exact-dates t) - (today (org-today)) - (past t) - args - s e rtn d emptyp) - (setq org-agenda-redo-command - (list 'let - (list (list 'org-agenda-show-log 'org-agenda-show-log)) - (list 'org-switch-to-buffer-other-window (current-buffer)) - (list 'org-timeline (list 'quote dotodo)))) - (put 'org-agenda-redo-command 'org-lprops nil) - (if (not dopast) - ;; Remove past dates from the list of dates. - (setq day-numbers (delq nil (mapcar (lambda(x) - (if (>= x today) x nil)) - day-numbers)))) - (org-agenda-prepare (concat "Timeline " (file-name-nondirectory entry))) - (org-compile-prefix-format 'timeline) - (org-set-sorting-strategy 'timeline) - (if org-agenda-show-log-scoped (push :closed args)) - (push :timestamp args) - (push :deadline args) - (push :scheduled args) - (push :sexp args) - (if dotodo (push :todo args)) - (insert "Timeline of file " entry "\n") - (add-text-properties (point-min) (point) - (list 'face 'org-agenda-structure)) - (org-agenda-mark-header-line (point-min)) - (while (setq d (pop day-numbers)) - (if (and (listp d) (eq (car d) :omitted)) - (progn - (setq s (point)) - (insert (format "\n[... %d empty days omitted]\n\n" (cdr d))) - (put-text-property s (1- (point)) 'face 'org-agenda-structure)) - (if (listp d) (setq d (car d) emptyp t) (setq emptyp nil)) - (if (and (>= d today) - dopast - past) - (progn - (setq past nil) - (insert (make-string 79 ?-) "\n"))) - (setq date (calendar-gregorian-from-absolute d)) - (setq s (point)) - (setq rtn (and (not emptyp) - (apply 'org-agenda-get-day-entries entry - date args))) - (if (or rtn (equal d today) org-timeline-show-empty-dates) - (progn - (insert - (if (stringp org-agenda-format-date) - (format-time-string org-agenda-format-date - (org-time-from-absolute date)) - (funcall org-agenda-format-date date)) - "\n") - (put-text-property s (1- (point)) 'face - (org-agenda-get-day-face date)) - (put-text-property s (1- (point)) 'org-date-line t) - (put-text-property s (1- (point)) 'org-agenda-date-header t) - (if (equal d today) - (put-text-property s (1- (point)) 'org-today t)) - (and rtn (insert (org-agenda-finalize-entries rtn 'timeline) "\n")) - (put-text-property s (1- (point)) 'day d))))) - (goto-char (or (text-property-any (point-min) (point-max) 'org-today t) - (point-min))) - (add-text-properties - (point-min) (point-max) - `(org-agenda-type timeline org-redo-cmd ,org-agenda-redo-command)) - (org-agenda-finalize) - (setq buffer-read-only t))) - -(defun org-get-all-dates (beg end &optional no-ranges force-today inactive empty pre-re) - "Return a list of all relevant day numbers from BEG to END buffer positions. -If NO-RANGES is non-nil, include only the start and end dates of a range, -not every single day in the range. If FORCE-TODAY is non-nil, make -sure that TODAY is included in the list. If INACTIVE is non-nil, also -inactive time stamps (those in square brackets) are included. -When EMPTY is non-nil, also include days without any entries." - (let ((re (concat - (if pre-re pre-re "") - (if inactive org-ts-regexp-both org-ts-regexp))) - dates dates1 date day day1 day2 ts1 ts2 pos) - (if force-today - (setq dates (list (org-today)))) - (save-excursion - (goto-char beg) - (while (re-search-forward re end t) - (setq day (time-to-days (org-time-string-to-time - (substring (match-string 1) 0 10) - (current-buffer) (match-beginning 0)))) - (or (memq day dates) (push day dates))) - (unless no-ranges - (goto-char beg) - (while (re-search-forward org-tr-regexp end t) - (setq pos (match-beginning 0)) - (setq ts1 (substring (match-string 1) 0 10) - ts2 (substring (match-string 2) 0 10) - day1 (time-to-days (org-time-string-to-time - ts1 (current-buffer) pos)) - day2 (time-to-days (org-time-string-to-time - ts2 (current-buffer) pos))) - (while (< (setq day1 (1+ day1)) day2) - (or (memq day1 dates) (push day1 dates))))) - (setq dates (sort dates '<)) - (when empty - (while (setq day (pop dates)) - (setq day2 (car dates)) - (push day dates1) - (when (and day2 empty) - (if (or (eq empty t) - (and (numberp empty) (<= (- day2 day) empty))) - (while (< (setq day (1+ day)) day2) - (push (list day) dates1)) - (push (cons :omitted (- day2 day)) dates1)))) - (setq dates (nreverse dates1))) - dates))) +(defvar org-agenda-show-log-scoped) ;;; Agenda Daily/Weekly @@ -4201,13 +4077,14 @@ items if they have an hour specification like [h]h:mm." (catch 'exit (setq org-agenda-buffer-name (or org-agenda-buffer-tmp-name + (and org-agenda-doing-sticky-redo org-agenda-buffer-name) (if org-agenda-sticky (cond ((and org-keys (stringp org-match)) (format "*Org Agenda(%s:%s)*" org-keys org-match)) (org-keys (format "*Org Agenda(%s)*" org-keys)) (t "*Org Agenda(a)*"))) - org-agenda-buffer-name)) + "*Org Agenda*")) (org-agenda-prepare "Day/Week") (setq start-day (or start-day org-agenda-start-day)) (if (stringp start-day) @@ -4917,43 +4794,6 @@ used by user-defined selections using `org-agenda-skip-function'.") This variable should not be set directly, but custom commands can bind it in the options section.") -(defun org-agenda-skip-entry-when-regexp-matches () - "Check if the current entry contains match for `org-agenda-skip-regexp'. -If yes, it returns the end position of this entry, causing agenda commands -to skip the entry but continuing the search in the subtree. This is a -function that can be put into `org-agenda-skip-function' for the duration -of a command." - (let ((end (save-excursion (org-end-of-subtree t))) - skip) - (save-excursion - (setq skip (re-search-forward org-agenda-skip-regexp end t))) - (and skip end))) - -(defun org-agenda-skip-subtree-when-regexp-matches () - "Check if the current subtree contains match for `org-agenda-skip-regexp'. -If yes, it returns the end position of this tree, causing agenda commands -to skip this subtree. This is a function that can be put into -`org-agenda-skip-function' for the duration of a command." - (let ((end (save-excursion (org-end-of-subtree t))) - skip) - (save-excursion - (setq skip (re-search-forward org-agenda-skip-regexp end t))) - (and skip end))) - -(defun org-agenda-skip-entry-when-regexp-matches-in-subtree () - "Check if the current subtree contains match for `org-agenda-skip-regexp'. -If yes, it returns the end position of the current entry (NOT the tree), -causing agenda commands to skip the entry but continuing the search in -the subtree. This is a function that can be put into -`org-agenda-skip-function' for the duration of a command. An important -use of this function is for the stuck project list." - (let ((end (save-excursion (org-end-of-subtree t))) - (entry-end (save-excursion (outline-next-heading) (1- (point)))) - skip) - (save-excursion - (setq skip (re-search-forward org-agenda-skip-regexp end t))) - (and skip entry-end))) - (defun org-agenda-skip-entry-if (&rest conditions) "Skip entry if any of CONDITIONS is true. See `org-agenda-skip-if' for details." @@ -5639,9 +5479,6 @@ displayed in agenda view." (looking-at org-ts-regexp-both) (match-string 0)))) (todo-state (org-get-todo-state)) - (show-all (or (eq org-agenda-repeating-timestamp-show-all t) - (member todo-state - org-agenda-repeating-timestamp-show-all))) (warntime (get-text-property (point) 'org-appt-warntime)) (done? (member todo-state org-done-keywords))) ;; Possibly skip done tasks. @@ -5650,22 +5487,39 @@ displayed in agenda view." ;; S-exp entry doesn't match current day: skip it. (when (and sexp-entry (not (org-diary-sexp-entry sexp-entry "" date))) (throw :skip nil)) - ;; When time-stamp doesn't match CURRENT but has a repeater, - ;; make sure it repeats on CURRENT. Furthermore, if - ;; SHOW-ALL is nil, ensure that repeats are only the first - ;; before and the first after today. - (when (and repeat - (if show-all - (/= current - (org-agenda--timestamp-to-absolute - repeat current 'future (current-buffer) pos)) - (and (/= current - (org-agenda--timestamp-to-absolute - repeat today 'past (current-buffer) pos)) - (/= current - (org-agenda--timestamp-to-absolute - repeat today 'future (current-buffer) pos))))) - (throw :skip nil)) + (when repeat + (let* ((past + ;; A repeating time stamp is shown at its base + ;; date and every repeated date up to TODAY. If + ;; `org-agenda-prefer-last-repeat' is non-nil, + ;; however, only the last repeat before today + ;; (inclusive) is shown. + (org-agenda--timestamp-to-absolute + repeat + (if (or (> current today) + (eq org-agenda-prefer-last-repeat t) + (member todo-state org-agenda-prefer-last-repeat)) + today + current) + 'past (current-buffer) pos)) + (future + ;; Display every repeated date past TODAY + ;; (exclusive) unless + ;; `org-agenda-show-future-repeats' is nil. If + ;; this variable is set to `next', only display + ;; the first repeated date after TODAY + ;; (exclusive). + (cond + ((<= current today) past) + ((not org-agenda-show-future-repeats) past) + (t + (let ((base (if (eq org-agenda-show-future-repeats 'next) + (1+ today) + current))) + (org-agenda--timestamp-to-absolute + repeat base 'future (current-buffer) pos)))))) + (when (and (/= current past) (/= current future)) + (throw :skip nil)))) (save-excursion (re-search-backward org-outline-regexp-bol nil t) ;; Possibly skip time-stamp when a deadline is set. @@ -5923,8 +5777,7 @@ then those holidays will be skipped." "Add overlays, showing issues with clocking. See also the user option `org-agenda-clock-consistency-checks'." (interactive) - (let* ((org-time-clocksum-use-effort-durations nil) - (pl org-agenda-clock-consistency-checks) + (let* ((pl org-agenda-clock-consistency-checks) (re (concat "^[ \t]*" org-clock-string "[ \t]+" @@ -5932,14 +5785,14 @@ See also the user option `org-agenda-clock-consistency-checks'." "\\(-\\{1,3\\}\\(\\[.*?\\]\\)\\)?")) ; group 3 is second (tlstart 0.) (tlend 0.) - (maxtime (org-hh:mm-string-to-minutes + (maxtime (org-duration-to-minutes (or (plist-get pl :max-duration) "24:00"))) - (mintime (org-hh:mm-string-to-minutes + (mintime (org-duration-to-minutes (or (plist-get pl :min-duration) 0))) - (maxgap (org-hh:mm-string-to-minutes + (maxgap (org-duration-to-minutes ;; default 30:00 means never complain (or (plist-get pl :max-gap) "30:00"))) - (gapok (mapcar 'org-hh:mm-string-to-minutes + (gapok (mapcar #'org-duration-to-minutes (plist-get pl :gap-ok-around))) (def-face (or (plist-get pl :default-face) '((:background "DarkRed") (:foreground "white")))) @@ -5973,14 +5826,12 @@ See also the user option `org-agenda-clock-consistency-checks'." ((> dt (* 60 maxtime)) ;; a very long clocking chunk (setq issue (format "Clocking interval is very long: %s" - (org-minutes-to-clocksum-string - (floor (/ (float dt) 60.)))) + (org-duration-from-minutes (floor (/ dt 60.)))) face (or (plist-get pl :long-face) face))) ((< dt (* 60 mintime)) ;; a very short clocking chunk (setq issue (format "Clocking interval is very short: %s" - (org-minutes-to-clocksum-string - (floor (/ (float dt) 60.)))) + (org-duration-from-minutes (floor (/ dt 60.)))) face (or (plist-get pl :short-face) face))) ((and (> tlend 0) (< ts tlend)) ;; Two clock entries are overlapping @@ -6066,27 +5917,33 @@ specification like [h]h:mm." (pos (1- (match-beginning 1))) (todo-state (save-match-data (org-get-todo-state))) (done? (member todo-state org-done-keywords)) - (show-all (or (eq org-agenda-repeating-timestamp-show-all t) - (member todo-state - org-agenda-repeating-timestamp-show-all))) - (sexp? (string-prefix-p "%%" s)) - ;; DEADLINE is the bare deadline date, i.e., without - ;; any repeater, or the last repeat if SHOW-ALL is - ;; non-nil. REPEAT is closest repeat after CURRENT, if - ;; all repeated time stamps are to be shown, or after - ;; TODAY otherwise. REPEAT only applies to future - ;; dates. - (deadline (cond - (sexp? (org-agenda--timestamp-to-absolute s current)) - (show-all (org-agenda--timestamp-to-absolute s)) - (t (org-agenda--timestamp-to-absolute - s today 'past (current-buffer) pos)))) - (repeat (cond (sexp? deadline) - ((< current today) deadline) - (t - (org-agenda--timestamp-to-absolute - s (if show-all current today) 'future - (current-buffer) pos)))) + (sexp? (string-prefix-p "%%" s)) + ;; DEADLINE is the deadline date for the entry. It is + ;; either the base date or the last repeat, according + ;; to `org-agenda-prefer-last-repeat'. + (deadline + (cond + (sexp? (org-agenda--timestamp-to-absolute s current)) + ((or (eq org-agenda-prefer-last-repeat t) + (member todo-state org-agenda-prefer-last-repeat)) + (org-agenda--timestamp-to-absolute + s today 'past (current-buffer) pos)) + (t (org-agenda--timestamp-to-absolute s)))) + ;; REPEAT is the future repeat closest from CURRENT, + ;; according to `org-agenda-show-future-repeats'. If + ;; the latter is nil, or if the time stamp has no + ;; repeat part, default to DEADLINE. + (repeat + (cond + (sexp? deadline) + ((<= current today) deadline) + ((not org-agenda-show-future-repeats) deadline) + (t + (let ((base (if (eq org-agenda-show-future-repeats 'next) + (1+ today) + current))) + (org-agenda--timestamp-to-absolute + s base 'future (current-buffer) pos))))) (diff (- deadline current)) (suppress-prewarning (let ((scheduled @@ -6111,17 +5968,17 @@ specification like [h]h:mm." (let ((org-deadline-warning-days suppress-prewarning)) (org-get-wdays s)) (org-get-wdays s)))) - ;; When to show a deadline in the calendar: if the - ;; expiration is within WDAYS warning time. Past-due - ;; deadlines are only shown on today agenda. - (when (cond ((= current deadline) nil) - ((< deadline today) - (and (not today?) - (or (< current today) (/= repeat current)))) - ((> deadline current) - (or (not today?) (> diff wdays))) - (t (/= repeat current))) - (throw :skip nil)) + (cond + ;; Only display deadlines at their base date, at future + ;; repeat occurrences or in today agenda. + ((= current deadline) nil) + ((= current repeat) nil) + ((not today?) (throw :skip nil)) + ;; Upcoming deadline: display within warning period WDAYS. + ((> deadline current) (when (> diff wdays) (throw :skip nil))) + ;; Overdue deadline: warn about it for + ;; `org-deadline-past-days' duration. + (t (when (< org-deadline-past-days (- diff)) (throw :skip nil)))) ;; Possibly skip done tasks. (when (and done? (or org-agenda-skip-deadline-if-done @@ -6131,8 +5988,8 @@ specification like [h]h:mm." (re-search-backward "^\\*+[ \t]+" nil t) (goto-char (match-end 0)) (let* ((category (org-get-category)) - (level - (make-string (org-reduced-level (org-outline-level)) ?\s)) + (level (make-string (org-reduced-level (org-outline-level)) + ?\s)) (head (buffer-substring (point) (line-end-position))) (inherited-tags (or (eq org-agenda-show-inherited-tags 'always) @@ -6154,23 +6011,16 @@ specification like [h]h:mm." (item (org-agenda-format-item ;; Insert appropriate suffixes before deadlines. + ;; Those only apply to today agenda. (pcase-let ((`(,now ,future ,past) org-agenda-deadline-leaders)) (cond - ;; Future (i.e., repeated) deadlines are - ;; displayed as new headlines. - ((> current today) now) - ;; When SHOW-ALL is nil, prefer repeated - ;; deadlines over reminders of past deadlines. - ((and (not show-all) (= repeat today)) now) - ((= deadline current) now) - ((< deadline current) (format past (- diff))) - (t (format future diff)))) - head level category tags - (and (or (= repeat current) (= deadline current)) - time))) + ((and today? (< deadline today)) (format past (- diff))) + ((and today? (> deadline today)) (format future diff)) + (t now))) + head level category tags time)) (face (org-agenda-deadline-face - (- 1 (/ (float (- deadline current)) (max wdays 1))))) + (- 1 (/ (float diff) (max wdays 1))))) (upcoming? (and today? (> deadline today))) (warntime (get-text-property (point) 'org-appt-warntime))) (org-add-props item props @@ -6184,9 +6034,7 @@ specification like [h]h:mm." ;; Overdue deadlines get the highest priority ;; increase, then imminent deadlines and eventually ;; more distant deadlines. - (let ((adjust (cond ((not today?) 0) - ((and (not show-all) (= repeat current)) 0) - (t (- diff))))) + (let ((adjust (if today? (- diff) 0))) (+ adjust (org-get-priority item))) 'todo-state todo-state 'type (if upcoming? "upcoming-deadline" "deadline") @@ -6236,28 +6084,33 @@ scheduled items with an hour specification like [h]h:mm." (pos (1- (match-beginning 1))) (todo-state (save-match-data (org-get-todo-state))) (donep (member todo-state org-done-keywords)) - (show-all (or (eq org-agenda-repeating-timestamp-show-all t) - (member todo-state - org-agenda-repeating-timestamp-show-all))) (sexp? (string-prefix-p "%%" s)) - ;; SCHEDULE is the bare scheduled date, i.e., without - ;; any repeater if non-nil, or last repeat if SHOW-ALL - ;; is nil. REPEAT is the closest repeat after CURRENT, - ;; if all repeated time stamps are to be shown, or - ;; after TODAY otherwise. REPEAT only applies to - ;; future dates. - (schedule (cond - (sexp? (org-agenda--timestamp-to-absolute s current)) - (show-all (org-agenda--timestamp-to-absolute s)) - (t (org-agenda--timestamp-to-absolute - s today 'past (current-buffer) pos)))) - (repeat (cond - (sexp? schedule) - ((< current today) schedule) - (t - (org-agenda--timestamp-to-absolute - s (if show-all current today) 'future - (current-buffer) pos)))) + ;; SCHEDULE is the scheduled date for the entry. It is + ;; either the bare date or the last repeat, according + ;; to `org-agenda-prefer-last-repeat'. + (schedule + (cond + (sexp? (org-agenda--timestamp-to-absolute s current)) + ((or (eq org-agenda-prefer-last-repeat t) + (member todo-state org-agenda-prefer-last-repeat)) + (org-agenda--timestamp-to-absolute + s today 'past (current-buffer) pos)) + (t (org-agenda--timestamp-to-absolute s)))) + ;; REPEAT is the future repeat closest from CURRENT, + ;; according to `org-agenda-show-future-repeats'. If + ;; the latter is nil, or if the time stamp has no + ;; repeat part, default to SCHEDULE. + (repeat + (cond + (sexp? schedule) + ((<= current today) schedule) + ((not org-agenda-show-future-repeats) schedule) + (t + (let ((base (if (eq org-agenda-show-future-repeats 'next) + (1+ today) + current))) + (org-agenda--timestamp-to-absolute + s base 'future (current-buffer) pos))))) (diff (- current schedule)) (warntime (get-text-property (point) 'org-appt-warntime)) (pastschedp (< schedule today)) @@ -6300,9 +6153,9 @@ scheduled items with an hour specification like [h]h:mm." (when (or (and (> ddays 0) (< diff ddays)) (> diff org-scheduled-past-days) (> schedule current) - (and (< schedule current) - (not todayp) - (/= repeat current))) + (and (/= current schedule) + (/= current today) + (/= current repeat))) (throw :skip nil))) ;; Possibly skip done tasks. (when (and donep @@ -6318,7 +6171,9 @@ scheduled items with an hour specification like [h]h:mm." habitp)) nil) (`repeated-after-deadline - (>= repeat (time-to-days (org-get-deadline-time (point))))) + (let ((deadline (time-to-days + (org-get-deadline-time (point))))) + (and (<= schedule deadline) (> current deadline)))) (`not-today pastschedp) (`t t) (_ nil)) @@ -6345,8 +6200,8 @@ scheduled items with an hour specification like [h]h:mm." (memq 'agenda org-agenda-use-tag-inheritance))))) (tags (org-get-tags-at nil (not inherited-tags))) - (level - (make-string (org-reduced-level (org-outline-level)) ?\s)) + (level (make-string (org-reduced-level (org-outline-level)) + ?\s)) (head (buffer-substring (point) (line-end-position))) (time (cond @@ -6358,21 +6213,11 @@ scheduled items with an hour specification like [h]h:mm." (t 'time))) (item (org-agenda-format-item - (pcase-let ((`(,first ,next) org-agenda-scheduled-leaders)) - (cond - ;; If CURRENT is in the future, don't use past - ;; scheduled prefix. - ((> current today) first) - ;; SHOW-ALL focuses on future repeats. If one - ;; such repeat happens today, ignore late - ;; schedule reminder. However, still report - ;; such reminders when repeat happens later. - ((and (not show-all) (= repeat today)) first) - ;; Initial report. - ((= schedule current) first) - ;; Subsequent reminders. Count from base - ;; schedule. - (t (format next (1+ diff))))) + (pcase-let ((`(,first ,past) org-agenda-scheduled-leaders)) + ;; Show a reminder of a past scheduled today. + (if (and todayp pastschedp) + (format past diff) + first)) head level category tags time nil habitp)) (face (cond ((and (not habitp) pastschedp) 'org-scheduled-previously) @@ -6588,18 +6433,19 @@ Any match of REMOVE-RE will be removed from TXT." (if s1 (setq s1 (org-get-time-of-day s1 'string t))) (if s2 (setq s2 (org-get-time-of-day s2 'string t))) - ;; Try to set s2 if s1 and `org-agenda-default-appointment-duration' are set - (let (org-time-clocksum-use-effort-durations) - (when (and s1 (not s2) org-agenda-default-appointment-duration) - (setq s2 - (org-minutes-to-clocksum-string - (+ (org-hh:mm-string-to-minutes s1) - org-agenda-default-appointment-duration))))) + ;; Try to set s2 if s1 and + ;; `org-agenda-default-appointment-duration' are set + (when (and s1 (not s2) org-agenda-default-appointment-duration) + (setq s2 + (org-duration-from-minutes + (+ (org-duration-to-minutes s1 t) + org-agenda-default-appointment-duration) + nil t))) ;; Compute the duration (when s2 - (setq duration (- (org-hh:mm-string-to-minutes s2) - (org-hh:mm-string-to-minutes s1))))) + (setq duration (- (org-duration-to-minutes s2) + (org-duration-to-minutes s1))))) (when (string-match "\\([ \t]+\\)\\(:[[:alnum:]_@#%:]+:\\)[ \t]*$" txt) ;; Tags are in the string @@ -7181,6 +7027,22 @@ their type." 'help-echo "Agendas are currently limited to this subtree.") (delete-overlay org-agenda-restriction-lock-overlay) +(defun org-agenda-set-restriction-lock-from-agenda (arg) + "Set the restriction lock to the agenda item at point from within the agenda. +When called with a `\\[universal-argument]' prefix, restrict to +the file which contains the item. +Argument ARG is the prefix argument." + (interactive "P") + (unless (derived-mode-p 'org-agenda-mode) + (user-error "Not in an Org agenda buffer")) + (let* ((marker (or (org-get-at-bol 'org-marker) + (org-agenda-error))) + (buffer (marker-buffer marker)) + (pos (marker-position marker))) + (with-current-buffer buffer + (goto-char pos) + (org-agenda-set-restriction-lock arg)))) + ;;;###autoload (defun org-agenda-set-restriction-lock (&optional type) "Set restriction lock for agenda, to current subtree or file. @@ -7445,14 +7307,15 @@ With a prefix argument, exclude the lines of that category. (t (error "No category at point")))))) (defun org-find-top-headline (&optional pos) - "Find the topmost parent headline and return it." + "Find the topmost parent headline and return it. +POS when non-nil is the marker or buffer position to start the +search from." (save-excursion - (with-current-buffer (if pos (marker-buffer pos) (current-buffer)) - (if pos (goto-char pos)) - ;; Skip up to the topmost parent - (while (ignore-errors (outline-up-heading 1) t)) - (ignore-errors - (nth 4 (org-heading-components)))))) + (with-current-buffer (if (markerp pos) (marker-buffer pos) (current-buffer)) + (when pos (goto-char pos)) + ;; Skip up to the topmost parent. + (while (org-up-heading-safe)) + (ignore-errors (nth 4 (org-heading-components)))))) (defvar org-agenda-filtered-by-top-headline nil) (defun org-agenda-filter-by-top-headline (strip) @@ -7715,7 +7578,7 @@ E looks like \"+<2:25\"." ((equal op ??) op) (t '=))) (list 'org-agenda-compare-effort (list 'quote op) - (org-duration-string-to-minutes e)))) + (org-duration-to-minutes e)))) (defun org-agenda-compare-effort (op value) "Compare the effort of the current line with VALUE, using OP. diff --git a/elpa/org-20170210/org-archive.el b/elpa/org-20170407/org-archive.el similarity index 100% rename from elpa/org-20170210/org-archive.el rename to elpa/org-20170407/org-archive.el diff --git a/elpa/org-20170210/org-attach.el b/elpa/org-20170407/org-attach.el similarity index 97% rename from elpa/org-20170210/org-attach.el rename to elpa/org-20170407/org-attach.el index 75157a1e..da2bd0e9 100644 --- a/elpa/org-20170210/org-attach.el +++ b/elpa/org-20170407/org-attach.el @@ -173,6 +173,7 @@ Shows a list of commands and prompts for another key to execute a command." a Select a file and attach it to the task, using `org-attach-method'. c/m/l/y Attach a file using copy/move/link/symbolic-link method. +u Attach a file from URL (downloading it). n Create a new attachment, as an Emacs buffer. z Synchronize the current task with its attachment directory, in case you added attachments yourself. @@ -202,6 +203,8 @@ i Make children of the current entry inherit its attachment directory."))) (let ((org-attach-method 'ln)) (call-interactively 'org-attach-attach))) ((memq c '(?y ?\C-y)) (let ((org-attach-method 'lns)) (call-interactively 'org-attach-attach))) + ((memq c '(?u ?\C-u)) + (let ((org-attach-method 'url)) (call-interactively 'org-attach-url))) ((memq c '(?n ?\C-n)) (call-interactively 'org-attach-new)) ((memq c '(?z ?\C-z)) (call-interactively 'org-attach-sync)) ((memq c '(?o ?\C-o)) (call-interactively 'org-attach-open)) @@ -363,10 +366,14 @@ Only do this when `org-attach-store-link-p' is non-nil." (file-name-nondirectory file)) org-stored-links))) +(defun org-attach-url (url) + (interactive "MURL of the file to attach: \n") + (org-attach-attach url)) + (defun org-attach-attach (file &optional visit-dir method) "Move/copy/link FILE into the attachment directory of the current task. If VISIT-DIR is non-nil, visit the directory with dired. -METHOD may be `cp', `mv', `ln', or `lns' default taken from +METHOD may be `cp', `mv', `ln', `lns' or `url' default taken from `org-attach-method'." (interactive "fFile to keep as an attachment: \nP") (setq method (or method org-attach-method)) @@ -380,7 +387,8 @@ METHOD may be `cp', `mv', `ln', or `lns' default taken from ((eq method 'mv) (rename-file file fname)) ((eq method 'cp) (copy-file file fname)) ((eq method 'ln) (add-name-to-file file fname)) - ((eq method 'lns) (make-symbolic-link file fname))) + ((eq method 'lns) (make-symbolic-link file fname)) + ((eq method 'url) (url-copy-file file fname))) (when org-attach-commit (org-attach-commit)) (org-attach-tag) diff --git a/elpa/org-20170210/org-bbdb.el b/elpa/org-20170407/org-bbdb.el similarity index 90% rename from elpa/org-20170210/org-bbdb.el rename to elpa/org-20170407/org-bbdb.el index f8516681..a4ccbca0 100644 --- a/elpa/org-20170210/org-bbdb.el +++ b/elpa/org-20170407/org-bbdb.el @@ -138,6 +138,24 @@ :group 'org-bbdb-anniversaries :require 'bbdb) +(defcustom org-bbdb-general-anniversary-description-after 7 + "When to switch anniversary descriptions to a more general format. + +Anniversary descriptions include the point in time, when the +anniversary appears. This is, in its most general form, just the +date of the anniversary. Or more specific terms, like \"today\", +\"tomorrow\" or \"in n days\" are used to describe the time span. + +If the anniversary happens in less than that number of days, the +specific description is used. Otherwise, the general one is +used." + :group 'org-bbdb-anniversaries + :version "26.1" + :package-version '(Org . "9.1") + :type 'integer + :require 'bbdb + :safe #'integerp) + (defcustom org-bbdb-anniversary-format-alist '(("birthday" . (lambda (name years suffix) @@ -412,7 +430,25 @@ This is used by Org to re-create the anniversary hash table." (mapcar (lambda (i) (calendar-gregorian-from-absolute (+ abs i))) (number-sequence 0 (1- n))))) -;;;###autoload +(defun org-bbdb-anniversary-description (agenda-date anniv-date) + "Return a string used to incorporate into an agenda anniversary entry. +The calculation of the anniversary description string is based on +the difference between the anniversary date, given as ANNIV-DATE, +and the date on which the entry appears in the agenda, given as +AGENDA-DATE. This makes it possible to have different entries +for the same event depending on if it occurs in the next few days +or far away in the future." + (let ((delta (- (calendar-absolute-from-gregorian anniv-date) + (calendar-absolute-from-gregorian agenda-date)))) + + (cond + ((= delta 0) " -- today\\&") + ((= delta 1) " -- tomorrow\\&") + ((< delta org-bbdb-general-anniversary-description-after) (format " -- in %d days\\&" delta)) + ((pcase-let ((`(,month ,day ,year) anniv-date)) + (format " -- %d-%02d-%02d\\&" year month day)))))) + + (defun org-bbdb-anniversaries-future (&optional n) "Return list of anniversaries for today and the next n-1 days (default n=7)." (let ((n (or n 7))) @@ -425,19 +461,17 @@ must be positive")) ;; Function to annotate text of each element of l with the ;; anniversary date d. (annotate-descriptions - (lambda (d l) + (lambda (agenda-date d l) (mapcar (lambda (x) ;; The assumption here is that x is a bbdb link ;; of the form [[bbdb:name][description]]. ;; This function rather arbitrarily modifies ;; the description by adding the date to it in ;; a fixed format. - (string-match "]]" x) - (replace-match (format " -- %d-%02d-%02d\\&" - (nth 2 d) - (nth 0 d) - (nth 1 d)) - nil nil x)) + (let ((desc (org-bbdb-anniversary-description + agenda-date d))) + (string-match "]]" x) + (replace-match desc nil nil x))) l)))) ;; Map a function that generates anniversaries for each date ;; over the dates and nconc the results into a single list. When @@ -447,12 +481,13 @@ must be positive")) (apply #'nconc (mapcar (lambda (d) - (let ((date d)) + (let ((agenda-date date) + (date d)) ;; Rebind 'date' so that org-bbdb-anniversaries will ;; be fooled into giving us the list for the given ;; date and then annotate the descriptions for that ;; date. - (funcall annotate-descriptions d (org-bbdb-anniversaries)))) + (funcall annotate-descriptions agenda-date d (org-bbdb-anniversaries)))) dates))))) (defun org-bbdb-complete-link () diff --git a/elpa/org-20170210/org-bibtex.el b/elpa/org-20170407/org-bibtex.el similarity index 98% rename from elpa/org-20170210/org-bibtex.el rename to elpa/org-20170407/org-bibtex.el index d81c9f18..0d4bd22c 100644 --- a/elpa/org-20170210/org-bibtex.el +++ b/elpa/org-20170407/org-bibtex.el @@ -237,6 +237,17 @@ a missing title field." :version "24.1" :type 'boolean) +(defcustom org-bibtex-headline-format-function + (lambda (entry) (cdr (assq :title entry))) + "Function returning the headline text for `org-bibtex-write'. +It should take a single argument, the bibtex entry (an alist as +returned by `org-bibtex-read'). The default value simply returns +the entry title." + :group 'org-bibtex + :version "26.1" + :package-version '(Org . "9.1") + :type 'function) + (defcustom org-bibtex-export-arbitrary-fields nil "When converting to bibtex allow fields not defined in `org-bibtex-fields'. This only has effect if `org-bibtex-prefix' is defined, so as to @@ -678,7 +689,7 @@ Return the number of saved entries." (val (lambda (field) (cdr (assoc field entry)))) (togtag (lambda (tag) (org-toggle-tag tag 'on)))) (org-insert-heading) - (insert (funcall val :title)) + (insert (funcall org-bibtex-headline-format-function entry)) (org-bibtex-put "TITLE" (funcall val :title)) (org-bibtex-put org-bibtex-type-property-name (downcase (funcall val :type))) diff --git a/elpa/org-20170210/org-capture.el b/elpa/org-20170407/org-capture.el similarity index 86% rename from elpa/org-20170210/org-capture.el rename to elpa/org-20170407/org-capture.el index ae5ee50c..03e5230e 100644 --- a/elpa/org-20170210/org-capture.el +++ b/elpa/org-20170407/org-capture.el @@ -56,6 +56,7 @@ (declare-function org-decrypt-entry "org-crypt" ()) (declare-function org-encrypt-entry "org-crypt" ()) (declare-function org-table-analyze "org-table" ()) +(declare-function org-table-current-dline "org-table" ()) (declare-function org-table-goto-line "org-table" (N)) (defvar org-end-time-was-given) @@ -83,6 +84,36 @@ :tag "Org Capture" :group 'org) +(defun org-capture-upgrade-templates (templates) + "Update the template list to the new format. +TEMPLATES is a template list, as in `org-capture-templates'. The +new format unifies all the date/week tree targets into one that +also allows for an optional outline path to specify a target." + (let ((modified-templates + (mapcar + (lambda (entry) + (pcase entry + ;; Match templates with an obsolete "tree" target type. Replace + ;; it with common `file+olp-datetree'. Add new properties + ;; (i.e., `:time-prompt' and `:tree-type') if needed. + (`(,key ,desc ,type (file+datetree . ,path) ,tpl . ,props) + `(,key ,desc ,type (file+olp+datetree ,@path) ,tpl ,@props)) + (`(,key ,desc ,type (file+datetree+prompt . ,path) ,tpl . ,props) + `(,key ,desc ,type (file+olp+datetree ,@path) ,tpl + :time-prompt t ,@props)) + (`(,key ,desc ,type (file+weektree . ,path) ,tpl . ,props) + `(,key ,desc ,type (file+olp+datetree ,@path) ,tpl + :tree-type week ,@props)) + (`(,key ,desc ,type (file+weektree+prompt . ,path) ,tpl . ,props) + `(,key ,desc ,type (file+olp+datetree ,@path) ,tpl + :tree-type week :time-prompt t ,@props)) + ;; Other templates are left unchanged. + (_ entry))) + templates))) + (unless (equal modified-templates templates) + (message "Deprecated date/weektree capture templates changed to `file+olp+datetree'.")) + modified-templates)) + (defcustom org-capture-templates nil "Templates for the creation of new entries. @@ -124,8 +155,8 @@ target Specification of where the captured item should be placed. Most target specifications contain a file name. If that file name is the empty string, it defaults to `org-default-notes-file'. - A file can also be given as a variable, function, or Emacs Lisp - form. When an absolute path is not specified for a + A file can also be given as a variable or as a function called + with no argument. When an absolute path is not specified for a target, it is taken as relative to `org-directory'. Valid values are: @@ -140,22 +171,17 @@ target Specification of where the captured item should be placed. Fast configuration if the target heading is unique in the file (file+olp \"path/to/file\" \"Level 1 heading\" \"Level 2\" ...) - For non-unique headings, the full path is safer + For non-unique headings, the full outline path is safer (file+regexp \"path/to/file\" \"regexp to find location\") File to the entry matching regexp - (file+datetree \"path/to/file\") - Will create a heading in a date tree for today's date - - (file+datetree+prompt \"path/to/file\") - Will create a heading in a date tree, prompts for date - - (file+weektree \"path/to/file\") - Will create a heading in a week tree for today's date - - (file+weektree+prompt \"path/to/file\") - Will create a heading in a week tree, prompts for date + (file+olp+datetree \"path/to/file\" \"Level 1 heading\" ...) + Will create a heading in a date tree for today's date. + If no heading is given, the tree will be on top level. + To prompt for date instead of using TODAY, use the + :time-prompt property. To create a week-tree, use the + :tree-type property. (file+function \"path/to/file\" function-finding-location) A function to find the right location in the file @@ -213,6 +239,11 @@ properties are: When setting both to t, the current clock will run and the previous one will not be resumed. + :time-prompt Prompt for a date/time to be used for date/week trees + and when filling the template. + + :tree-type When `week', make a week tree instead of the month tree. + :unnarrowed Do not narrow the target buffer, simply show the full buffer. Default is to narrow it so that you only see the new stuff. @@ -296,6 +327,7 @@ When you need to insert a literal percent sign in the template, you can escape ambiguous cases with a backward slash, e.g., \\%i." :group 'org-capture :version "24.1" + :set (lambda (s v) (set s (org-capture-upgrade-templates v))) :type (let ((file-variants '(choice :tag "Filename " (file :tag "Literal") @@ -336,18 +368,11 @@ you can escape ambiguous cases with a backward slash, e.g., \\%i." (const :format "" file+regexp) ,file-variants (regexp :tag " Regexp")) - (list :tag "File & Date tree" - (const :format "" file+datetree) - ,file-variants) - (list :tag "File & Date tree, prompt for date" - (const :format "" file+datetree+prompt) - ,file-variants) - (list :tag "File & Week tree" - (const :format "" file+weektree) - ,file-variants) - (list :tag "File & Week tree, prompt for date" - (const :format "" file+weektree+prompt) - ,file-variants) + (list :tag "File [ & Outline path ] & Date tree" + (const :format "" file+olp+datetree) + ,file-variants + (option (repeat :tag "Outline path" :inline t + (string :tag "Headline")))) (list :tag "File & function" (const :format "" file+function) ,file-variants @@ -376,8 +401,10 @@ you can escape ambiguous cases with a backward slash, e.g., \\%i." ((const :format "%v " :clock-in) (const t)) ((const :format "%v " :clock-keep) (const t)) ((const :format "%v " :clock-resume) (const t)) + ((const :format "%v " :time-prompt) (const t)) + ((const :format "%v " :tree-type) (const week)) ((const :format "%v " :unnarrowed) (const t)) - ((const :format "%v " :table-line-pos) (const t)) + ((const :format "%v " :table-line-pos) (string)) ((const :format "%v " :kill-buffer) (const t))))))))) (defcustom org-capture-before-finalize-hook nil @@ -561,6 +588,9 @@ the last note stored. When called with a `C-0' (zero) prefix, insert a template at point. +When called with a `C-1' (one) prefix, force prompting for a date when +a datetree entry is made. + ELisp programs can set KEYS to a string associated with a template in `org-capture-templates'. In this case, interactive selection will be bypassed. @@ -578,7 +608,6 @@ of the day at point (if any) or the current HH:MM time." ((equal goto '(4)) (org-capture-goto-target)) ((equal goto '(16)) (org-capture-goto-last-stored)) (t - ;; FIXME: Are these needed? (let* ((orig-buf (current-buffer)) (annotation (if (and (boundp 'org-capture-link-is-already-stored) org-capture-link-is-already-stored) @@ -820,20 +849,28 @@ Refiling is done from the base buffer, because the indirect buffer is then already gone. Any prefix argument will be passed to the refile command." (interactive) (unless (eq (org-capture-get :type 'local) 'entry) - (error - "Refiling from a capture buffer makes only sense for `entry'-type templates")) - (let ((pos (point)) - (base (buffer-base-buffer (current-buffer))) - (org-capture-is-refiling t) - (kill-buffer (org-capture-get :kill-buffer 'local))) + (user-error "Refiling from a capture buffer makes only sense \ +for `entry'-type templates")) + (let* ((base (or (buffer-base-buffer) (current-buffer))) + (pos (make-marker)) + (org-capture-is-refiling t) + (kill-buffer (org-capture-get :kill-buffer 'local))) + ;; Since `org-capture-finalize' may alter buffer contents (e.g., + ;; empty lines) around entry, use a marker to refer to the + ;; headline to be refiled. Place the marker in the base buffer, + ;; as the current indirect one is going to be killed. + (set-marker pos (save-excursion (org-back-to-heading t) (point)) base) (org-capture-put :kill-buffer nil) - (org-capture-finalize) - (save-window-excursion - (with-current-buffer (or base (current-buffer)) - (org-with-wide-buffer - (goto-char pos) - (call-interactively 'org-refile)))) - (when kill-buffer (kill-buffer base)))) + (unwind-protect + (progn + (org-capture-finalize) + (save-window-excursion + (with-current-buffer base + (org-with-wide-buffer + (goto-char pos) + (call-interactively 'org-refile)))) + (when kill-buffer (kill-buffer base))) + (set-marker pos nil)))) (defun org-capture-kill () "Abort the current capture process." @@ -868,170 +905,171 @@ already gone. Any prefix argument will be passed to the refile command." (defun org-capture-set-target-location (&optional target) "Find TARGET buffer and position. Store them in the capture property list." - (let ((target-entry-p t) decrypted-hl-pos) - (setq target (or target (org-capture-get :target))) + (let ((target-entry-p t)) (save-excursion - (cond - ((eq (car target) 'file) - (set-buffer (org-capture-target-buffer (nth 1 target))) - (org-capture-put-target-region-and-position) - (widen) - (setq target-entry-p nil)) - - ((eq (car target) 'id) - (let ((loc (org-id-find (nth 1 target)))) - (if (not loc) - (error "Cannot find target ID \"%s\"" (nth 1 target)) - (set-buffer (org-capture-target-buffer (car loc))) + (pcase (or target (org-capture-get :target)) + (`(file ,path) + (set-buffer (org-capture-target-buffer path)) + (org-capture-put-target-region-and-position) + (widen) + (setq target-entry-p nil)) + (`(id ,id) + (pcase (org-id-find id) + (`(,path . ,position) + (set-buffer (org-capture-target-buffer path)) (widen) (org-capture-put-target-region-and-position) - (goto-char (cdr loc))))) - - ((eq (car target) 'file+headline) - (set-buffer (org-capture-target-buffer (nth 1 target))) - (unless (derived-mode-p 'org-mode) - (error - "Target buffer \"%s\" for file+headline should be in Org mode" - (current-buffer))) - (org-capture-put-target-region-and-position) - (widen) - (let ((hd (nth 2 target))) - (goto-char (point-min)) - (if (re-search-forward - (format org-complex-heading-regexp-format (regexp-quote hd)) - nil t) - (goto-char (point-at-bol)) - (goto-char (point-max)) - (or (bolp) (insert "\n")) - (insert "* " hd "\n") - (beginning-of-line 0)))) - - ((eq (car target) 'file+olp) - (let ((m (org-find-olp - (cons (org-capture-expand-file (nth 1 target)) - (cddr target))))) - (set-buffer (marker-buffer m)) - (org-capture-put-target-region-and-position) - (widen) - (goto-char m))) - - ((eq (car target) 'file+regexp) - (set-buffer (org-capture-target-buffer (nth 1 target))) - (org-capture-put-target-region-and-position) - (widen) - (goto-char (point-min)) - (if (re-search-forward (nth 2 target) nil t) - (progn - (goto-char (if (org-capture-get :prepend) - (match-beginning 0) (match-end 0))) - (org-capture-put :exact-position (point)) - (setq target-entry-p (and (derived-mode-p 'org-mode) (org-at-heading-p)))) - (error "No match for target regexp in file %s" (nth 1 target)))) - - ((memq (car target) '(file+datetree file+datetree+prompt file+weektree file+weektree+prompt)) - (require 'org-datetree) - (set-buffer (org-capture-target-buffer (nth 1 target))) - (unless (derived-mode-p 'org-mode) - (error "Target buffer \"%s\" for %s should be in Org mode" - (current-buffer) - (car target))) - (org-capture-put-target-region-and-position) - (widen) - ;; Make a date/week tree entry, with the current date (or - ;; yesterday, if we are extending dates for a couple of hours) - (funcall - (cond - ((memq (car target) '(file+weektree file+weektree+prompt)) - #'org-datetree-find-iso-week-create) - (t #'org-datetree-find-date-create)) - (calendar-gregorian-from-absolute - (cond - (org-overriding-default-time - ;; use the overriding default time - (time-to-days org-overriding-default-time)) - - ((memq (car target) '(file+datetree+prompt file+weektree+prompt)) - ;; prompt for date - (let ((prompt-time (org-read-date - nil t nil "Date for tree entry:" - (current-time)))) - (org-capture-put - :default-time - (cond ((and (or (not (boundp 'org-time-was-given)) - (not org-time-was-given)) - (not (= (time-to-days prompt-time) (org-today)))) - ;; Use 00:00 when no time is given for another date than today? - (apply #'encode-time - (append '(0 0 0) - (cl-cdddr (decode-time prompt-time))))) - ((string-match "\\([^ ]+\\)--?[^ ]+[ ]+\\(.*\\)" org-read-date-final-answer) - ;; Replace any time range by its start - (apply 'encode-time - (org-read-date-analyze - (replace-match "\\1 \\2" nil nil org-read-date-final-answer) - prompt-time (decode-time prompt-time)))) - (t prompt-time))) - (time-to-days prompt-time))) - (t - ;; current date, possibly corrected for late night workers - (org-today)))))) - - ((eq (car target) 'file+function) - (set-buffer (org-capture-target-buffer (nth 1 target))) - (org-capture-put-target-region-and-position) - (widen) - (funcall (nth 2 target)) - (org-capture-put :exact-position (point)) - (setq target-entry-p (and (derived-mode-p 'org-mode) (org-at-heading-p)))) - - ((eq (car target) 'function) - (funcall (nth 1 target)) - (org-capture-put :exact-position (point)) - (setq target-entry-p (and (derived-mode-p 'org-mode) (org-at-heading-p)))) - - ((eq (car target) 'clock) - (if (and (markerp org-clock-hd-marker) - (marker-buffer org-clock-hd-marker)) - (progn (set-buffer (marker-buffer org-clock-hd-marker)) - (org-capture-put-target-region-and-position) - (widen) - (goto-char org-clock-hd-marker)) - (error "No running clock that could be used as capture target"))) - - (t (error "Invalid capture target specification"))) - - (when (and (featurep 'org-crypt) (org-at-encrypted-entry-p)) - (org-decrypt-entry) - (setq decrypted-hl-pos - (save-excursion (and (org-back-to-heading t) (point))))) - - (org-capture-put :buffer (current-buffer) :pos (point) + (goto-char position)) + (_ (error "Cannot find target ID \"%s\"" id)))) + (`(file+headline ,path ,headline) + (set-buffer (org-capture-target-buffer path)) + (unless (derived-mode-p 'org-mode) + (error "Target buffer \"%s\" for file+headline not in Org mode" + (current-buffer))) + (org-capture-put-target-region-and-position) + (widen) + (goto-char (point-min)) + (if (re-search-forward (format org-complex-heading-regexp-format + (regexp-quote headline)) + nil t) + (goto-char (line-beginning-position)) + (goto-char (point-max)) + (or (bolp) (insert "\n")) + (insert "* " headline "\n") + (beginning-of-line 0))) + (`(file+olp ,path . ,outline-path) + (let ((m (org-find-olp (cons (org-capture-expand-file path) + outline-path)))) + (set-buffer (marker-buffer m)) + (org-capture-put-target-region-and-position) + (widen) + (goto-char m) + (set-marker m nil))) + (`(file+regexp ,path ,regexp) + (set-buffer (org-capture-target-buffer path)) + (org-capture-put-target-region-and-position) + (widen) + (goto-char (point-min)) + (if (not (re-search-forward regexp nil t)) + (error "No match for target regexp in file %s" path) + (goto-char (if (org-capture-get :prepend) + (match-beginning 0) + (match-end 0))) + (org-capture-put :exact-position (point)) + (setq target-entry-p + (and (derived-mode-p 'org-mode) (org-at-heading-p))))) + (`(file+olp+datetree ,path . ,outline-path) + (let ((m (if outline-path + (org-find-olp (cons (org-capture-expand-file path) + outline-path)) + (set-buffer (org-capture-target-buffer path)) + (point-marker)))) + (set-buffer (marker-buffer m)) + (org-capture-put-target-region-and-position) + (widen) + (goto-char m) + (set-marker m nil) + (require 'org-datetree) + (org-capture-put-target-region-and-position) + (widen) + ;; Make a date/week tree entry, with the current date (or + ;; yesterday, if we are extending dates for a couple of hours) + (funcall + (if (eq (org-capture-get :tree-type) 'week) + #'org-datetree-find-iso-week-create + #'org-datetree-find-date-create) + (calendar-gregorian-from-absolute + (cond + (org-overriding-default-time + ;; Use the overriding default time. + (time-to-days org-overriding-default-time)) + ((or (org-capture-get :time-prompt) + (equal current-prefix-arg 1)) + ;; Prompt for date. + (let ((prompt-time (org-read-date + nil t nil "Date for tree entry:" + (current-time)))) + (org-capture-put + :default-time + (cond ((and (or (not (boundp 'org-time-was-given)) + (not org-time-was-given)) + (not (= (time-to-days prompt-time) (org-today)))) + ;; Use 00:00 when no time is given for another + ;; date than today? + (apply #'encode-time + (append '(0 0 0) + (cl-cdddr (decode-time prompt-time))))) + ((string-match "\\([^ ]+\\)--?[^ ]+[ ]+\\(.*\\)" + org-read-date-final-answer) + ;; Replace any time range by its start. + (apply #'encode-time + (org-read-date-analyze + (replace-match "\\1 \\2" nil nil + org-read-date-final-answer) + prompt-time (decode-time prompt-time)))) + (t prompt-time))) + (time-to-days prompt-time))) + (t + ;; Current date, possibly corrected for late night + ;; workers. + (org-today)))) + ;; the following is the keep-restriction argument for + ;; org-datetree-find-date-create + (if outline-path 'subtree-at-point)))) + (`(file+function ,path ,function) + (set-buffer (org-capture-target-buffer path)) + (org-capture-put-target-region-and-position) + (widen) + (funcall function) + (org-capture-put :exact-position (point)) + (setq target-entry-p + (and (derived-mode-p 'org-mode) (org-at-heading-p)))) + (`(function ,fun) + (funcall fun) + (org-capture-put :exact-position (point)) + (setq target-entry-p + (and (derived-mode-p 'org-mode) (org-at-heading-p)))) + (`(clock) + (if (and (markerp org-clock-hd-marker) + (marker-buffer org-clock-hd-marker)) + (progn (set-buffer (marker-buffer org-clock-hd-marker)) + (org-capture-put-target-region-and-position) + (widen) + (goto-char org-clock-hd-marker)) + (error "No running clock that could be used as capture target"))) + (target (error "Invalid capture target specification: %S" target))) + + (org-capture-put :buffer (current-buffer) + :pos (point) :target-entry-p target-entry-p - :decrypted decrypted-hl-pos)))) + :decrypted + (and (featurep 'org-crypt) + (org-at-encrypted-entry-p) + (save-excursion + (org-decrypt-entry) + (and (org-back-to-heading t) (point)))))))) (defun org-capture-expand-file (file) "Expand functions, symbols and file names for FILE. When FILE is a function, call it. When it is a form, evaluate -it. When it is a variable, retrieve the value. When it is +it. When it is a variable, return its value. When it is a string, treat it as a file name, possibly expanding it according to `org-directory', and return it. If it is the empty string, however, return `org-default-notes-file'. In any other case, raise an error." - (cond - ((equal file "") org-default-notes-file) - ((stringp file) (expand-file-name file org-directory)) - ((functionp file) (funcall file)) - ((and (symbolp file) (boundp file)) (symbol-value file)) - ((consp file) (eval file)) - (t file))) + (let ((location (cond ((equal file "") org-default-notes-file) + ((stringp file) (expand-file-name file org-directory)) + ((functionp file) (funcall file)) + ((and (symbolp file) (bound-and-true-p file))) + (t nil)))) + (or (org-string-nw-p location) + (error "Invalid file location: %S" location)))) (defun org-capture-target-buffer (file) "Get a buffer for FILE. FILE is a generalized file location, as handled by `org-capture-expand-file'." - (let ((file (or (org-string-nw-p (org-capture-expand-file file)) - org-default-notes-file - (error "No notes file specified, and no default available")))) + (let ((file (org-capture-expand-file file))) (or (org-find-base-buffer-visiting file) (progn (org-capture-put :new-buffer t) (find-file-noselect file))))) @@ -1529,7 +1567,8 @@ is selected, only the bare key is returned." Lisp programs can force the template by setting KEYS to a string." (let ((org-capture-templates (or (org-contextualize-keys - org-capture-templates org-capture-templates-contexts) + (org-capture-upgrade-templates org-capture-templates) + org-capture-templates-contexts) '(("t" "Task" entry (file+headline "" "Tasks") "* TODO %?\n %u\n %a"))))) (if keys @@ -1646,34 +1685,41 @@ The template may still contain \"%?\" for cursor positioning." (delete-region pos end) (set-marker pos nil) (set-marker end nil) - (let ((replacement - (pcase (string-to-char value) - (?< (format-time-string time-string)) - (?: - (or (plist-get org-store-link-plist (intern value)) - "")) - (?i (let ((lead (buffer-substring-no-properties + (let* ((inside-sexp? (org-capture-inside-embedded-elisp-p)) + (replacement + (pcase (string-to-char value) + (?< (format-time-string time-string time)) + (?: + (or (plist-get org-store-link-plist (intern value)) + "")) + (?i + (if inside-sexp? v-i + ;; Outside embedded Lisp, repeat leading + ;; characters before initial place holder + ;; every line. + (let ((lead (buffer-substring-no-properties (line-beginning-position) (point)))) - (mapconcat #'identity - (split-string v-i "\n") - (concat "\n" lead)))) - (?a v-a) - (?A v-A) - (?c v-c) - (?f v-f) - (?F v-F) - (?k v-k) - (?K v-K) - (?l v-l) - (?n v-n) - (?t v-t) - (?T v-T) - (?u v-u) - (?U v-U) - (?x v-x)))) + (replace-regexp-in-string "\n\\(.\\)" + (concat lead "\\1") + v-i nil nil 1)))) + (?a v-a) + (?A v-A) + (?c v-c) + (?f v-f) + (?F v-F) + (?k v-k) + (?K v-K) + (?l v-l) + (?n v-n) + (?t v-t) + (?T v-T) + (?u v-u) + (?U v-U) + (?x v-x)))) (insert - (if (org-capture-inside-embedded-elisp-p) - (replace-regexp-in-string "\"" "\\\\\"" replacement) + (if inside-sexp? + ;; Escape sensitive characters. + (replace-regexp-in-string "[\\\"]" "\\\\\\&" replacement) replacement)))))))) ;; Expand %() embedded Elisp. Limit to Sexp originally marked. diff --git a/elpa/org-20170210/org-clock.el b/elpa/org-20170407/org-clock.el similarity index 92% rename from elpa/org-20170210/org-clock.el rename to elpa/org-20170407/org-clock.el index 649f11b4..0973cc21 100644 --- a/elpa/org-20170210/org-clock.el +++ b/elpa/org-20170407/org-clock.el @@ -39,7 +39,6 @@ (defvar org-frame-title-format-backup frame-title-format) (defvar org-time-stamp-formats) -(defvar org-ts-what) (defgroup org-clock nil @@ -321,7 +320,8 @@ For more information, see `org-clocktable-write-default'." '(("en" "File" "L" "Timestamp" "Headline" "Time" "ALL" "Total time" "File time" "Clock summary at") ("es" "Archivo" "N" "Fecha y hora" "Tarea" "Tiempo" "TODO" "Tiempo total" "Tiempo archivo" "Clock summary at") ("fr" "Fichier" "N" "Horodatage" "En-tête" "Durée" "TOUT" "Durée totale" "Durée fichier" "Horodatage sommaire à") - ("nl" "Bestand" "N" "Tijdstip" "Hoofding" "Duur" "ALLES" "Totale duur" "Bestandstijd" "Clock summary at")) + ("nl" "Bestand" "N" "Tijdstip" "Hoofding" "Duur" "ALLES" "Totale duur" "Bestandstijd" "Clock summary at") + ("de" "Datei" "N" "Timestamp" "Tätigkeit" "Dauer" "ALLES" "Gesamtdauer" "Datei Zeit" "Erstellt am")) "Terms used in clocktable, translated to different languages." :group 'org-clocktable :version "24.1" @@ -521,6 +521,16 @@ of a different task.") (define-key org-clock-mode-line-map [mode-line mouse-2] 'org-clock-goto) (define-key org-clock-mode-line-map [mode-line mouse-1] 'org-clock-menu) +(defun org-clock--translate (s language) + "Translate string S into using string LANGUAGE. +Assume S in the English term to translate. Return S as-is if it +cannot be translated." + (or (nth (pcase s + ("File" 1) ("L" 2) ("Timestamp" 3) ("Headline" 4) ("Time" 5) + ("ALL" 6) ("Total time" 7) ("File time" 8) ("Clock summary at" 9)) + (assoc-string language org-clock-clocktable-language-setup t)) + s)) + (defun org-clock-menu () (interactive) (popup-menu @@ -666,20 +676,19 @@ If an effort estimate was defined for the current item, use If not, show simply the clocked time like 01:50." (let ((clocked-time (org-clock-get-clocked-time))) (if org-clock-effort - (let* ((effort-in-minutes - (org-duration-string-to-minutes org-clock-effort)) + (let* ((effort-in-minutes (org-duration-to-minutes org-clock-effort)) (work-done-str (propertize - (org-minutes-to-clocksum-string clocked-time) + (org-duration-from-minutes clocked-time) 'face (if (and org-clock-task-overrun (not org-clock-task-overrun-text)) 'org-mode-line-clock-overrun 'org-mode-line-clock))) - (effort-str (org-minutes-to-clocksum-string effort-in-minutes)) + (effort-str (org-duration-from-minutes effort-in-minutes)) (clockstr (propertize (concat " [%s/" effort-str "] (" (replace-regexp-in-string "%" "%%" org-clock-heading) ")") 'face 'org-mode-line-clock))) (format clockstr work-done-str)) - (propertize (concat " [" (org-minutes-to-clocksum-string clocked-time) + (propertize (concat " [" (org-duration-from-minutes clocked-time) "]" (format " (%s)" org-clock-heading)) 'face 'org-mode-line-clock)))) @@ -749,15 +758,15 @@ clocked item, and the value displayed in the mode line." ;; A string. See if it is a delta (setq sign (string-to-char value)) (if (member sign '(?- ?+)) - (setq current (org-duration-string-to-minutes current) + (setq current (org-duration-to-minutes current) value (substring value 1)) (setq current 0)) - (setq value (org-duration-string-to-minutes value)) + (setq value (org-duration-to-minutes value)) (if (equal ?- sign) (setq value (- current value)) (if (equal ?+ sign) (setq value (+ current value))))) (setq value (max 0 value) - org-clock-effort (org-minutes-to-clocksum-string value)) + org-clock-effort (org-duration-from-minutes value)) (org-entry-put org-clock-marker "Effort" org-clock-effort) (org-clock-update-mode-line) (message "Effort is now %s" org-clock-effort)) @@ -770,7 +779,7 @@ clocked item, and the value displayed in the mode line." "Show notification if we spent more time than we estimated before. Notification is shown only once." (when (org-clocking-p) - (let ((effort-in-minutes (org-duration-string-to-minutes org-clock-effort)) + (let ((effort-in-minutes (org-duration-to-minutes org-clock-effort)) (clocked-time (org-clock-get-clocked-time))) (if (setq org-clock-task-overrun (if (or (null effort-in-minutes) (zerop effort-in-minutes)) @@ -1191,9 +1200,7 @@ time as the start time. See `org-clock-continuously' to make this the default behavior." (interactive "P") (setq org-clock-notification-was-shown nil) - (org-refresh-properties - org-effort-property '((effort . identity) - (effort-minutes . org-duration-string-to-minutes))) + (org-refresh-effort-properties) (catch 'abort (let ((interrupting (and (not org-clock-resolving-clocks-due-to-idleness) (org-clocking-p))) @@ -1634,7 +1641,7 @@ to, overriding the existing value of `org-clock-out-switch-to-state'." (org-todo org-clock-out-switch-to-state)))))) (force-mode-line-update) (message (concat "Clock stopped at %s after " - (org-minutes-to-clocksum-string (+ (* 60 h) m)) "%s") + (org-duration-from-minutes (+ (* 60 h) m)) "%s") te (if remove " => LINE REMOVED" "")) (run-hooks 'org-clock-out-hook) (unless (org-clocking-p) @@ -1672,11 +1679,11 @@ Optional argument N tells to change by that many units." "Change CLOCK timestamps synchronously at cursor. UPDOWN tells whether to change `up' or `down'. Optional argument N tells to change by that many units." - (setq org-ts-what nil) - (when (org-at-timestamp-p t) - (let ((tschange (if (eq updown 'up) 'org-timestamp-up - 'org-timestamp-down)) - ts1 begts1 ts2 begts2 updatets1 tdiff) + (let ((tschange (if (eq updown 'up) 'org-timestamp-up + 'org-timestamp-down)) + (timestamp? (org-at-timestamp-p t)) + ts1 begts1 ts2 begts2 updatets1 tdiff) + (when timestamp? (save-excursion (move-beginning-of-line 1) (re-search-forward org-ts-regexp3 nil t) @@ -1688,7 +1695,6 @@ Optional argument N tells to change by that many units." (if (not ts2) ;; fall back on org-timestamp-up if there is only one (funcall tschange n) - ;; setq this so that (boundp 'org-ts-what is non-nil) (funcall tschange n) (let ((ts (if updatets1 ts2 ts1)) (begts (if updatets1 begts1 begts2))) @@ -1700,12 +1706,13 @@ Optional argument N tells to change by that many units." (goto-char begts) (org-timestamp-change (round (/ (float-time tdiff) - (cond ((eq org-ts-what 'minute) 60) - ((eq org-ts-what 'hour) 3600) - ((eq org-ts-what 'day) (* 24 3600)) - ((eq org-ts-what 'month) (* 24 3600 31)) - ((eq org-ts-what 'year) (* 24 3600 365.2))))) - org-ts-what 'updown))))))) + (pcase timestamp? + (`minute 60) + (`hour 3600) + (`day (* 24 3600)) + (`month (* 24 3600 31)) + (`year (* 24 3600 365.2))))) + timestamp? 'updown))))))) ;;;###autoload (defun org-clock-cancel () @@ -1938,7 +1945,7 @@ Use `\\[org-clock-remove-overlays]' to remove the subtree times." (cond (todayp " for today") (customp " (custom)") (t ""))) - (org-minutes-to-clocksum-string + (org-duration-from-minutes org-clock-file-total-minutes) " (%d hours and %d minutes)") h m))) @@ -1963,7 +1970,7 @@ will be easy to remove." (length (org-get-at-bol 'line-prefix)))) ?·) '(face shadow)) (org-add-props - (format " %9s " (org-minutes-to-clocksum-string time)) + (format " %9s " (org-duration-from-minutes time)) '(face org-clock-overlay)) "")) (overlay-put ov 'display tx) @@ -2371,6 +2378,7 @@ the currently selected interval size." (`file-with-archives (and buffer-file-name (org-add-archive-files (list buffer-file-name)))) + ((pred functionp) (funcall scope)) ((pred consp) scope) (_ (or (buffer-file-name) (current-buffer))))) (block (plist-get params :block)) @@ -2408,26 +2416,27 @@ the currently selected interval size." (org-clock-get-table-data file params))))) files) ;; Get the right restriction for the scope. - (cond - ((not scope)) ;use the restriction as it is now - ((eq scope 'file) (widen)) - ((eq scope 'subtree) (org-narrow-to-subtree)) - ((eq scope 'tree) - (while (org-up-heading-safe)) - (org-narrow-to-subtree)) - ((and (symbolp scope) - (string-match "\\`tree\\([0-9]+\\)\\'" - (symbol-name scope))) - (let ((level (string-to-number - (match-string 1 (symbol-name scope))))) - (catch 'exit - (while (org-up-heading-safe) - (looking-at org-outline-regexp) - (when (<= (org-reduced-level (funcall outline-level)) - level) - (throw 'exit nil)))) - (org-narrow-to-subtree)))) - (list (org-clock-get-table-data nil params)))) + (save-restriction + (cond + ((not scope)) ;use the restriction as it is now + ((eq scope 'file) (widen)) + ((eq scope 'subtree) (org-narrow-to-subtree)) + ((eq scope 'tree) + (while (org-up-heading-safe)) + (org-narrow-to-subtree)) + ((and (symbolp scope) + (string-match "\\`tree\\([0-9]+\\)\\'" + (symbol-name scope))) + (let ((level (string-to-number + (match-string 1 (symbol-name scope))))) + (catch 'exit + (while (org-up-heading-safe) + (looking-at org-outline-regexp) + (when (<= (org-reduced-level (funcall outline-level)) + level) + (throw 'exit nil)))) + (org-narrow-to-subtree)))) + (list (org-clock-get-table-data nil params))))) (multifile ;; Even though `file-with-archives' can consist of ;; multiple files, we consider this is one extended file @@ -2450,185 +2459,177 @@ from the dynamic block definition." ;; someone wants to write their own special formatter, this maybe ;; much easier because there can be a fixed format with a ;; well-defined number of columns... - (let* ((hlchars '((1 . "*") (2 . "/"))) - (lwords (assoc (or (plist-get params :lang) - (bound-and-true-p org-export-default-language) - "en") - org-clock-clocktable-language-setup)) + (let* ((lang (or (plist-get params :lang) "en")) (multifile (plist-get params :multifile)) (block (plist-get params :block)) (sort (plist-get params :sort)) - (header (plist-get params :header)) - (narrow (plist-get params :narrow)) - (ws (or (plist-get params :wstart) 1)) - (ms (or (plist-get params :mstart) 1)) + (header (plist-get params :header)) (link (plist-get params :link)) (maxlevel (or (plist-get params :maxlevel) 3)) (emph (plist-get params :emphasize)) - (level-p (plist-get params :level)) - (org-time-clocksum-use-effort-durations - (plist-get params :effort-durations)) + (compact? (plist-get params :compact)) + (narrow (or (plist-get params :narrow) (and compact? '40!))) + (level? (and (not compact?) (plist-get params :level))) (timestamp (plist-get params :timestamp)) (properties (plist-get params :properties)) - (ntcol (max 1 (or (plist-get params :tcolumns) 100))) - (indent (plist-get params :indent)) + (time-columns (if compact? 1 + (min maxlevel (or (plist-get params :tcolumns) 100)))) + (indent (or compact? (plist-get params :indent))) (formula (plist-get params :formula)) (case-fold-search t) - range-text total-time tbl level hlc - file-time entries entry headline + (total-time (apply #'+ (mapcar #'cadr tables))) recalc narrow-cut-p) - ;; Implement abbreviations - (when (plist-get params :compact) - (setq level nil indent t narrow (or narrow '40!) ntcol 1)) - - ;; Some consistency test for parameters - (unless (integerp ntcol) - (setq params (plist-put params :tcolumns (setq ntcol 100)))) - (when (and narrow (integerp narrow) link) - ;; We cannot have both integer narrow and link - (message - "Using hard narrowing in clocktable to allow for links") + ;; We cannot have both integer narrow and link. + (message "Using hard narrowing in clocktable to allow for links") (setq narrow (intern (format "%d!" narrow)))) - (when narrow - (cond - ((integerp narrow)) - ((and (symbolp narrow) - (string-match "\\`[0-9]+!\\'" (symbol-name narrow))) - (setq narrow-cut-p t - narrow (string-to-number (substring (symbol-name narrow) - 0 -1)))) - (t - (error "Invalid value %s of :narrow property in clock table" - narrow)))) - - (when block - ;; Get the range text for the header - (setq range-text (nth 2 (org-clock-special-range block nil t ws ms)))) - - ;; Compute the total time - (setq total-time (apply '+ (mapcar 'cadr tables))) + (pcase narrow + ((or `nil (pred integerp)) nil) ;nothing to do + ((and (pred symbolp) + (guard (string-match-p "\\`[0-9]+!\\'" (symbol-name narrow)))) + (setq narrow-cut-p t) + (setq narrow (string-to-number (symbol-name narrow)))) + (_ (error "Invalid value %s of :narrow property in clock table" narrow))) - ;; Now we need to output this tsuff + ;; Now we need to output this table stuff. (goto-char ipos) - ;; Insert the text *before* the actual table + ;; Insert the text *before* the actual table. (insert-before-markers (or header - ;; Format the standard header - (concat - "#+CAPTION: " - (nth 9 lwords) " [" - (substring - (format-time-string (cdr org-time-stamp-formats)) - 1 -1) - "]" - (if block (concat ", for " range-text ".") "") - "\n"))) + ;; Format the standard header. + (format "#+CAPTION: %s %s%s\n" + (org-clock--translate "Clock summary at" lang) + (format-time-string (org-time-stamp-format t t)) + (if block + (let ((range-text + (nth 2 (org-clock-special-range + block nil t + (plist-get params :wstart) + (plist-get params :mstart))))) + (format ", for %s." range-text)) + "")))) ;; Insert the narrowing line (when (and narrow (integerp narrow) (not narrow-cut-p)) (insert-before-markers - "|" ; table line starter - (if multifile "|" "") ; file column, maybe - (if level-p "|" "") ; level column, maybe - (if timestamp "|" "") ; timestamp column, maybe - (if properties (make-string (length properties) ?|) "") ;properties columns, maybe - (format "<%d>| |\n" narrow))) ; headline and time columns + "|" ;table line starter + (if multifile "|" "") ;file column, maybe + (if level? "|" "") ;level column, maybe + (if timestamp "|" "") ;timestamp column, maybe + (if properties ;properties columns, maybe + (make-string (length properties) ?|) + "") + (format "<%d>| |\n" narrow))) ;headline and time columns ;; Insert the table header line (insert-before-markers - "|" ; table line starter - (if multifile (concat (nth 1 lwords) "|") "") ; file column, maybe - (if level-p (concat (nth 2 lwords) "|") "") ; level column, maybe - (if timestamp (concat (nth 3 lwords) "|") "") ; timestamp column, maybe - (if properties (concat (mapconcat 'identity properties "|") "|") "") ;properties columns, maybe - (nth 4 lwords) "|" ;headline - (nth 5 lwords) "|" ;time column - (make-string (1- (min maxlevel (or ntcol 100))) ?|) + "|" ;table line starter + (if multifile ;file column, maybe + (concat (org-clock--translate "File" lang) "|") + "") + (if level? ;level column, maybe + (concat (org-clock--translate "L" lang) "|") + "") + (if timestamp ;timestamp column, maybe + (concat (org-clock--translate "Timestamp" lang) "|") + "") + (if properties ;properties columns, maybe + (concat (mapconcat #'identity properties "|") "|") + "") + (concat (org-clock--translate "Headline" lang)"|") + (concat (org-clock--translate "Time" lang) "|") + (make-string (max 0 (1- time-columns)) ?|) ;other time columns (if (eq formula '%) "%|\n" "\n")) ;; Insert the total time in the table (insert-before-markers - "|-\n" ; a hline - "|" ; table line starter - (if multifile (concat "| " (nth 6 lwords) " ") "") - ; file column, maybe - (if level-p "|" "") ; level column, maybe - (if timestamp "|" "") ; timestamp column, maybe - (make-string (length properties) ?|) ; properties columns, maybe - (concat (format org-clock-total-time-cell-format (nth 7 lwords)) "| ") ; instead of a headline + "|-\n" ;a hline + "|" ;table line starter + (if multifile (format "| %s " (org-clock--translate "ALL" lang)) "") + ;file column, maybe + (if level? "|" "") ;level column, maybe + (if timestamp "|" "") ;timestamp column, maybe + (make-string (length properties) ?|) ;properties columns, maybe + (concat (format org-clock-total-time-cell-format + (org-clock--translate "Total time" lang)) + "| ") (format org-clock-total-time-cell-format - (org-minutes-to-clocksum-string (or total-time 0))) ;time + (org-duration-from-minutes (or total-time 0))) ;time "|" - (make-string (1- (min maxlevel (or ntcol 100))) ?|) + (make-string (max 0 (1- time-columns)) ?|) (cond ((not (eq formula '%)) "") ((or (not total-time) (= total-time 0)) "0.0|") (t "100.0|")) "\n") - ;; Now iterate over the tables and insert the data - ;; but only if any time has been collected + ;; Now iterate over the tables and insert the data but only if any + ;; time has been collected. (when (and total-time (> total-time 0)) - - (while (setq tbl (pop tables)) - ;; now tbl is the table resulting from one file. - (setq file-time (nth 1 tbl)) + (pcase-dolist (`(,file-name ,file-time ,entries) tables) (when (or (and file-time (> file-time 0)) (not (plist-get params :fileskip0))) - (insert-before-markers "|-\n") ; a hline because a new file starts - ;; First the file time, if we have multiple files + (insert-before-markers "|-\n") ;hline at new file + ;; First the file time, if we have multiple files. (when multifile - ;; Summarize the time collected from this file + ;; Summarize the time collected from this file. (insert-before-markers (format (concat "| %s %s | %s%s" - (format org-clock-file-time-cell-format (nth 8 lwords)) + (format org-clock-file-time-cell-format + (org-clock--translate "File time" lang)) " | *%s*|\n") - (file-name-nondirectory (car tbl)) - (if level-p "| " "") ; level column, maybe - (if timestamp "| " "") ; timestamp column, maybe - (if properties (make-string (length properties) ?|) "") ;properties columns, maybe - (org-minutes-to-clocksum-string (nth 1 tbl))))) ; the time + (file-name-nondirectory file-name) + (if level? "| " "") ;level column, maybe + (if timestamp "| " "") ;timestamp column, maybe + (if properties ;properties columns, maybe + (make-string (length properties) ?|) + "") + (org-duration-from-minutes file-time)))) ;time ;; Get the list of node entries and iterate over it - (setq entries (nth 2 tbl)) - (while (setq entry (pop entries)) - (setq level (car entry) - headline (nth 1 entry) - hlc (if emph (or (cdr (assoc level hlchars)) "") "")) - (when narrow-cut-p - (if (and (string-match (concat "\\`" org-bracket-link-regexp - "\\'") - headline) - (match-end 3)) - (setq headline - (format "[[%s][%s]]" - (match-string 1 headline) - (org-shorten-string (match-string 3 headline) - narrow))) - (setq headline (org-shorten-string headline narrow)))) - (insert-before-markers - "|" ; start the table line - (if multifile "|" "") ; free space for file name column? - (if level-p (format "%d|" (car entry)) "") ; level, maybe - (if timestamp (concat (nth 2 entry) "|") "") ; timestamp, maybe - (if properties - (concat - (mapconcat - (lambda (p) (or (cdr (assoc p (nth 4 entry))) "")) - properties "|") "|") "") ;properties columns, maybe - (if indent (org-clocktable-indent-string level) "") ; indentation - hlc headline hlc "|" ; headline - (make-string (1- (min ntcol level)) ?|) ; empty fields for higher levels - hlc (org-minutes-to-clocksum-string (nth 3 entry)) hlc ; time - (make-string (1+ (- maxlevel level)) ?|) - (if (eq formula '%) - (format "%.1f |" (* 100 (/ (nth 3 entry) (float total-time)))) - "") - "\n" ; close line - ))))) + (when (> maxlevel 0) + (pcase-dolist (`(,level ,headline ,ts ,time ,props) entries) + (when narrow-cut-p + (setq headline + (if (and (string-match + (format "\\`%s\\'" org-bracket-link-regexp) + headline) + (match-end 3)) + (format "[[%s][%s]]" + (match-string 1 headline) + (org-shorten-string (match-string 3 headline) + narrow)) + (org-shorten-string headline narrow)))) + (cl-flet ((format-field (f) (format (cond ((not emph) "%s |") + ((= level 1) "*%s* |") + ((= level 2) "/%s/ |") + (t "%s |")) + f))) + (insert-before-markers + "|" ;start the table line + (if multifile "|" "") ;free space for file name column? + (if level? (format "%d|" level) "") ;level, maybe + (if timestamp (concat ts "|") "") ;timestamp, maybe + (if properties ;properties columns, maybe + (concat (mapconcat (lambda (p) (or (cdr (assoc p props)) "")) + properties + "|") + "|") + "") + (if indent ;indentation + (org-clocktable-indent-string level) + "") + (format-field headline) + ;; Empty fields for higher levels. + (make-string (max 0 (1- (min time-columns level))) ?|) + (format-field (org-duration-from-minutes time)) + (make-string (max 0 (- time-columns level)) ?|) + (if (eq formula '%) + (format "%.1f |" (* 100 (/ time (float total-time)))) + "") + "\n"))))))) (delete-char -1) (cond ;; Possibly rescue old formula? @@ -2644,12 +2645,12 @@ from the dynamic block definition." (setq recalc t)) (t (user-error "Invalid :formula parameter in clocktable"))) - ;; Back to beginning, align the table, recalculate if necessary + ;; Back to beginning, align the table, recalculate if necessary. (goto-char ipos) (skip-chars-forward "^|") (org-table-align) (when org-hide-emphasis-markers - ;; we need to align a second time + ;; We need to align a second time. (org-table-align)) (when sort (save-excursion diff --git a/elpa/org-20170210/org-colview.el b/elpa/org-20170407/org-colview.el similarity index 96% rename from elpa/org-20170210/org-colview.el rename to elpa/org-20170407/org-colview.el index 6a75f70d..1d068d32 100644 --- a/elpa/org-20170210/org-colview.el +++ b/elpa/org-20170407/org-colview.el @@ -261,7 +261,7 @@ possible to override it with optional argument COMPILED-FMT." org-agenda-columns-add-appointments-to-effort-sum (string= p (upcase org-effort-property)) (get-text-property (point) 'duration) - (propertize (org-minutes-to-clocksum-string + (propertize (org-duration-from-minutes (get-text-property (point) 'duration)) 'face 'org-warning)) ""))) @@ -1056,63 +1056,40 @@ This function updates `org-columns-current-fmt-compiled'." ;;;; Column View Summary -(defconst org-columns--duration-re - (concat "[0-9.]+ *" (regexp-opt (mapcar #'car org-effort-durations))) - "Regexp matching a duration.") - -(defun org-columns--time-to-seconds (s) - "Turn time string S into a number of seconds. -A time is expressed as HH:MM, HH:MM:SS, or with units defined in -`org-effort-durations'. Plain numbers are considered as hours." - (cond - ((string-match-p org-columns--duration-re s) - (* 60 (org-duration-string-to-minutes s))) - ((string-match "\\`\\([0-9]+\\):\\([0-9]+\\)\\(?::\\([0-9]+\\)\\)?\\'" s) - (+ (* 3600 (string-to-number (match-string 1 s))) - (* 60 (string-to-number (match-string 2 s))) - (if (match-end 3) (string-to-number (match-string 3 s)) 0))) - (t (* 3600 (string-to-number s))))) - -(defun org-columns--age-to-seconds (s) - "Turn age string S into a number of seconds. +(defun org-columns--age-to-minutes (s) + "Turn age string S into a number of minutes. An age is either computed from a given time-stamp, or indicated -as days/hours/minutes/seconds." +as a canonical duration, i.e., using units defined in +`org-duration-canonical-units'." (cond ((string-match-p org-ts-regexp s) - (floor - (- org-columns--time - (float-time (apply #'encode-time (org-parse-time-string s)))))) - ;; Match own output for computations in upper levels. - ((string-match "\\([0-9]+\\)d \\([0-9]+\\)h \\([0-9]+\\)m \\([0-9]+\\)s" s) - (+ (* 86400 (string-to-number (match-string 1 s))) - (* 3600 (string-to-number (match-string 2 s))) - (* 60 (string-to-number (match-string 3 s))) - (string-to-number (match-string 4 s)))) + (/ (- org-columns--time + (float-time (apply #'encode-time (org-parse-time-string s)))) + 60)) + ((org-duration-p s) (org-duration-to-minutes s t)) ;skip user units (t (user-error "Invalid age: %S" s)))) +(defun org-columns--format-age (minutes) + "Format MINUTES float as an age string." + (org-duration-from-minutes minutes + '(("d" . nil) ("h" . nil) ("min" . nil)) + t)) ;ignore user's custom units + (defun org-columns--summary-apply-times (fun times) "Apply FUN to time values TIMES. -If TIMES contains any time value expressed as a duration, return -the result as a duration. If it contains any H:M:S, use that -format instead. Otherwise, use H:M format." - (let* ((hms-flag nil) - (duration-flag nil) - (seconds - (apply fun - (mapcar - (lambda (time) - (cond - (duration-flag) - ((string-match-p org-columns--duration-re time) - (setq duration-flag t)) - (hms-flag) - ((string-match-p "\\`[0-9]+:[0-9]+:[0-9]+\\'" time) - (setq hms-flag t))) - (org-columns--time-to-seconds time)) - times)))) - (cond (duration-flag (org-minutes-to-clocksum-string (/ seconds 60.0))) - (hms-flag (format-seconds "%h:%.2m:%.2s" seconds)) - (t (format-seconds "%h:%.2m" seconds))))) +Return the result as a duration." + (org-duration-from-minutes + (apply fun + (mapcar (lambda (time) + ;; Unlike to `org-duration-to-minutes' standard + ;; behavior, we want to consider plain numbers as + ;; hours. As a consequence, we treat them + ;; differently. + (if (string-match-p "\\`[0-9]+\\(?:\\.[0-9]*\\)?\\'" time) + (* 60 (string-to-number time)) + (org-duration-to-minutes time))) + times)) + (org-duration-h:mm-only-p times))) (defun org-columns--compute-spec (spec &optional update) "Update tree according to SPEC. @@ -1271,21 +1248,18 @@ When PRINTF is non-nil, use it to format the result." (defun org-columns--summary-min-age (ages _) "Compute the minimum time among AGES." - (format-seconds - "%dd %.2hh %mm %ss" - (apply #'min (mapcar #'org-columns--age-to-seconds ages)))) + (org-columns--format-age + (apply #'min (mapcar #'org-columns--age-to-minutes ages)))) (defun org-columns--summary-max-age (ages _) "Compute the maximum time among AGES." - (format-seconds - "%dd %.2hh %mm %ss" - (apply #'max (mapcar #'org-columns--age-to-seconds ages)))) + (org-columns--format-age + (apply #'max (mapcar #'org-columns--age-to-minutes ages)))) (defun org-columns--summary-mean-age (ages _) "Compute the minimum time among AGES." - (format-seconds - "%dd %.2hh %mm %ss" - (/ (apply #'+ (mapcar #'org-columns--age-to-seconds ages)) + (org-columns--format-age + (/ (apply #'+ (mapcar #'org-columns--age-to-minutes ages)) (float (length ages))))) (defun org-columns--summary-estimate (estimates printf) diff --git a/elpa/org-20170210/org-compat.el b/elpa/org-20170407/org-compat.el similarity index 64% rename from elpa/org-20170210/org-compat.el rename to elpa/org-20170407/org-compat.el index f4d389e5..8106c5e2 100644 --- a/elpa/org-20170210/org-compat.el +++ b/elpa/org-20170407/org-compat.el @@ -35,8 +35,10 @@ (declare-function org-at-table.el-p "org" (&optional table-type)) (declare-function org-element-at-point "org-element" ()) (declare-function org-element-type "org-element" (element)) +(declare-function org-end-of-subtree "org" (&optional invisible-ok to-heading)) (declare-function org-link-set-parameters "org" (type &rest rest)) (declare-function org-table-end (&optional table-type)) +(declare-function outline-next-heading "outline" ()) (declare-function table--at-cell-p "table" (position &optional object at-column)) (defvar org-table-any-border-regexp) @@ -44,9 +46,8 @@ (defvar org-table-tab-recognizes-table.el) (defvar org-table1-hline-regexp) -;; As of Emacs 25.1, `outline-mode' functions are under the 'outline-' -;; prefix, `find-tag' is replaced with `xref-find-definition' and -;; `x-get-selection' with `gui-get-selection'. +;;; Emacs < 25.1 compatibility + (when (< emacs-major-version 25) (defalias 'outline-hide-entry 'hide-entry) (defalias 'outline-hide-sublevels 'hide-sublevels) @@ -60,6 +61,48 @@ (defalias 'format-message 'format) (defalias 'gui-get-selection 'x-get-selection)) +(unless (fboundp 'directory-name-p) + (defun directory-name-p (name) + "Return non-nil if NAME ends with a directory separator character." + (let ((len (length name)) + (lastc ?.)) + (if (> len 0) + (setq lastc (aref name (1- len)))) + (or (= lastc ?/) + (and (memq system-type '(windows-nt ms-dos)) + (= lastc ?\\)))))) + +(unless (fboundp 'directory-files-recursively) + (defun directory-files-recursively (dir regexp &optional include-directories) + "Return list of all files under DIR that have file names matching REGEXP. +This function works recursively. Files are returned in \"depth first\" +order, and files from each directory are sorted in alphabetical order. +Each file name appears in the returned list in its absolute form. +Optional argument INCLUDE-DIRECTORIES non-nil means also include in the +output directories whose names match REGEXP." + (let ((result nil) + (files nil) + ;; When DIR is "/", remote file names like "/method:" could + ;; also be offered. We shall suppress them. + (tramp-mode (and tramp-mode (file-remote-p (expand-file-name dir))))) + (dolist (file (sort (file-name-all-completions "" dir) + 'string<)) + (unless (member file '("./" "../")) + (if (directory-name-p file) + (let* ((leaf (substring file 0 (1- (length file)))) + (full-file (expand-file-name leaf dir))) + ;; Don't follow symlinks to other directories. + (unless (file-symlink-p full-file) + (setq result + (nconc result (directory-files-recursively + full-file regexp include-directories)))) + (when (and include-directories + (string-match regexp leaf)) + (setq result (nconc result (list full-file))))) + (when (string-match regexp file) + (push (expand-file-name file dir) files))))) + (nconc result (nreverse files))))) + ;;; Obsolete aliases (remove them once the next major release is released). @@ -83,7 +126,7 @@ (defmacro org-re (s) "Replace posix classes in regular expression S." (declare (debug (form)) - (obsolete "you can safely remove it." "Org 9.0")) + (obsolete "you can safely remove it." "Org 9.0")) s) ;;;; Functions from cl-lib that Org used to have its own implementation of. @@ -101,8 +144,8 @@ Counting starts at 1." (cl-subseq list (1- start) end)) (make-obsolete 'org-sublist - "use cl-subseq (note the 0-based counting)." - "Org 9.0") + "use cl-subseq (note the 0-based counting)." + "Org 9.0") ;;;; Functions available since Emacs 24.3 @@ -120,25 +163,15 @@ Counting starts at 1." ;;;; Functions and variables from previous releases now obsolete. (define-obsolete-function-alias 'org-element-remove-indentation 'org-remove-indentation "Org 9.0") -(define-obsolete-variable-alias 'org-hierarchical-checkbox-statistics - 'org-checkbox-hierarchical-statistics "Org 8.0") -(define-obsolete-variable-alias 'org-description-max-indent - 'org-list-description-max-indent "Org 8.0") (define-obsolete-variable-alias 'org-latex-create-formula-image-program 'org-preview-latex-default-process "Org 9.0") (define-obsolete-variable-alias 'org-latex-preview-ltxpng-directory - 'org-preview-latex-image-directory "Org 9.0") + 'org-preview-latex-image-directory "Org 9.0") (define-obsolete-function-alias 'org-table-p 'org-at-table-p "Org 9.0") (define-obsolete-function-alias 'org-on-heading-p 'org-at-heading-p "Org 9.0") (define-obsolete-function-alias 'org-at-regexp-p 'org-in-regexp "Org 8.3") -(define-obsolete-function-alias 'org-speed-command-default-hook - 'org-speed-command-activate "Org 8.0") -(define-obsolete-function-alias 'org-babel-speed-command-hook - 'org-babel-speed-command-activate "Org 8.0") (define-obsolete-function-alias 'org-image-file-name-regexp 'image-file-name-regexp "Org 9.0") -(define-obsolete-function-alias 'org-get-legal-level - 'org-get-valid-level "Org 7.8") (define-obsolete-function-alias 'org-completing-read-no-i 'completing-read "Org 9.0") (define-obsolete-function-alias 'org-icompleting-read @@ -150,65 +183,35 @@ Counting starts at 1." 'org-agenda-ignore-properties "Org 9.0") (define-obsolete-function-alias 'org-preview-latex-fragment 'org-toggle-latex-fragment "Org 8.3") -(define-obsolete-function-alias 'org-display-inline-modification-hook - 'org-display-inline-remove-overlay "Org 8.0") (define-obsolete-function-alias 'org-export-get-genealogy 'org-element-lineage "Org 9.0") (define-obsolete-variable-alias 'org-latex-with-hyperref 'org-latex-hyperref-template "Org 9.0") -(define-obsolete-variable-alias 'org-link-to-org-use-id - 'org-id-link-to-org-use-id "Org 8.0") (define-obsolete-variable-alias 'hfy-optimisations 'hfy-optimizations "Org 9.0") -(define-obsolete-variable-alias 'org-clock-modeline-total - 'org-clock-mode-line-total "Org 8.0") -(define-obsolete-function-alias 'org-protocol-unhex-compound - 'org-link-unescape-compound "Org 7.8") -(define-obsolete-function-alias 'org-protocol-unhex-string - 'org-link-unescape "Org 7.8") -(define-obsolete-function-alias 'org-protocol-unhex-single-byte-sequence - 'org-link-unescape-single-byte-sequence "Org 7.8") (define-obsolete-variable-alias 'org-export-htmlized-org-css-url 'org-org-htmlized-css-url "Org 8.2") -(define-obsolete-variable-alias 'org-alphabetical-lists - 'org-list-allow-alphabetical "Org 8.0") (define-obsolete-function-alias 'org-list-parse-list 'org-list-to-lisp "Org 9.0") -(define-obsolete-variable-alias 'org-agenda-menu-two-column - 'org-agenda-menu-two-columns "Org 8.0") -(define-obsolete-variable-alias 'org-finalize-agenda-hook - 'org-agenda-finalize-hook "Org 8.0") -(make-obsolete-variable 'org-agenda-ndays 'org-agenda-span "Org 7.8") -(define-obsolete-function-alias 'org-agenda-post-command-hook - 'org-agenda-update-agenda-type "Org 8.0") (define-obsolete-function-alias 'org-agenda-todayp 'org-agenda-today-p "Org 9.0") (define-obsolete-function-alias 'org-babel-examplize-region 'org-babel-examplify-region "Org 9.0") +(define-obsolete-variable-alias 'org-babel-capitalize-example-region-markers + 'org-babel-uppercase-example-markers "Org 9.1") + (define-obsolete-function-alias 'org-babel-trim 'org-trim "Org 9.0") -(define-obsolete-variable-alias 'org-html-style-include-scripts - 'org-html-head-include-scripts "Org 8.0") -(define-obsolete-variable-alias 'org-html-style-include-default - 'org-html-head-include-default-style "Org 8.0") (define-obsolete-variable-alias 'org-html-style 'org-html-head "24.4") (define-obsolete-function-alias 'org-insert-columns-dblock 'org-columns-insert-dblock "Org 9.0") +(define-obsolete-variable-alias 'org-export-babel-evaluate + 'org-export-use-babel "Org 9.1") (defun org-in-fixed-width-region-p () "Non-nil if point in a fixed-width region." (save-match-data (eq 'fixed-width (org-element-type (org-element-at-point))))) (make-obsolete 'org-in-fixed-width-region-p - "use `org-element' library" - "Org 9.0") - -(defcustom org-read-date-minibuffer-setup-hook nil - "Hook to be used to set up keys for the date/time interface. -Add key definitions to `minibuffer-local-map', which will be a -temporary copy." - :group 'org-time - :type 'hook) -(make-obsolete-variable - 'org-read-date-minibuffer-setup-hook - "set `org-read-date-minibuffer-local-map' instead." "Org 8.0") + "use `org-element' library" + "Org 9.0") (defun org-compatible-face (inherits specs) "Make a compatible face specification. @@ -257,26 +260,23 @@ See `org-link-parameters' for documentation on the other parameters." (when (and org-table-tab-recognizes-table.el (org-at-table.el-p)) (beginning-of-line) (unless (or (looking-at org-table-dataline-regexp) - (not (looking-at org-table1-hline-regexp))) + (not (looking-at org-table1-hline-regexp))) (forward-line) (when (looking-at org-table-any-border-regexp) - (forward-line -2))) + (forward-line -2))) (if (re-search-forward "|" (org-table-end t) t) - (progn - (require 'table) - (if (table--at-cell-p (point)) t - (message "recognizing table.el table...") - (table-recognize-table) - (message "recognizing table.el table...done"))) + (progn + (require 'table) + (if (table--at-cell-p (point)) t + (message "recognizing table.el table...") + (table-recognize-table) + (message "recognizing table.el table...done"))) (error "This should not happen")))) ;; Not used by Org core since commit 6d1e3082, Feb 2010. (make-obsolete 'org-table-recognize-table.el - "please notify the org mailing list if you use this function." - "Org 9.0") - -(define-obsolete-function-alias - 'org-minutes-to-hh:mm-string 'org-minutes-to-clocksum-string "Org 8.0") + "please notify the org mailing list if you use this function." + "Org 9.0") (defun org-remove-angle-brackets (s) (org-unbracket-string "<" ">" s)) @@ -286,6 +286,83 @@ See `org-link-parameters' for documentation on the other parameters." (org-unbracket-string "\"" "\"" s)) (make-obsolete 'org-remove-double-quotes 'org-unbracket-string "Org 9.0") +(defcustom org-publish-sitemap-file-entry-format "%t" + "Format string for site-map file entry. +You could use brackets to delimit on what part the link will be. + +%t is the title. +%a is the author. +%d is the date formatted using `org-publish-sitemap-date-format'." + :group 'org-export-publish + :type 'string) +(make-obsolete-variable + 'org-publish-sitemap-file-entry-format + "set `:sitemap-format-entry' in `org-publish-project-alist' instead." + "Org 9.1") + +(defvar org-agenda-skip-regexp) +(defun org-agenda-skip-entry-when-regexp-matches () + "Check if the current entry contains match for `org-agenda-skip-regexp'. +If yes, it returns the end position of this entry, causing agenda commands +to skip the entry but continuing the search in the subtree. This is a +function that can be put into `org-agenda-skip-function' for the duration +of a command." + (declare (obsolete "use `org-agenda-skip-if' instead." "Org 9.1")) + (let ((end (save-excursion (org-end-of-subtree t))) + skip) + (save-excursion + (setq skip (re-search-forward org-agenda-skip-regexp end t))) + (and skip end))) + +(defun org-agenda-skip-subtree-when-regexp-matches () + "Check if the current subtree contains match for `org-agenda-skip-regexp'. +If yes, it returns the end position of this tree, causing agenda commands +to skip this subtree. This is a function that can be put into +`org-agenda-skip-function' for the duration of a command." + (declare (obsolete "use `org-agenda-skip-if' instead." "Org 9.1")) + (let ((end (save-excursion (org-end-of-subtree t))) + skip) + (save-excursion + (setq skip (re-search-forward org-agenda-skip-regexp end t))) + (and skip end))) + +(defun org-agenda-skip-entry-when-regexp-matches-in-subtree () + "Check if the current subtree contains match for `org-agenda-skip-regexp'. +If yes, it returns the end position of the current entry (NOT the tree), +causing agenda commands to skip the entry but continuing the search in +the subtree. This is a function that can be put into +`org-agenda-skip-function' for the duration of a command. An important +use of this function is for the stuck project list." + (declare (obsolete "use `org-agenda-skip-if' instead." "Org 9.1")) + (let ((end (save-excursion (org-end-of-subtree t))) + (entry-end (save-excursion (outline-next-heading) (1- (point)))) + skip) + (save-excursion + (setq skip (re-search-forward org-agenda-skip-regexp end t))) + (and skip entry-end))) + +(define-obsolete-function-alias 'org-minutes-to-clocksum-string + 'org-duration-from-minutes "Org 9.1") + +(define-obsolete-function-alias 'org-hh:mm-string-to-minutes + 'org-duration-to-minutes "Org 9.1") + +(define-obsolete-function-alias 'org-duration-string-to-minutes + 'org-duration-to-minutes "Org 9.1") + +(make-obsolete-variable 'org-time-clocksum-format + "set `org-duration-format' instead." "Org 9.1") + +(make-obsolete-variable 'org-time-clocksum-use-fractional + "set `org-duration-format' instead." "Org 9.1") + +(make-obsolete-variable 'org-time-clocksum-fractional-format + "set `org-duration-format' instead." "Org 9.1") + +(make-obsolete-variable 'org-time-clocksum-use-effort-durations + "set `org-duration-units' instead." "Org 9.1") + + ;;;; Obsolete link types (eval-after-load 'org @@ -299,40 +376,40 @@ See `org-link-parameters' for documentation on the other parameters." (defun org-version-check (version feature level) (let* ((v1 (mapcar 'string-to-number (split-string version "[.]"))) - (v2 (mapcar 'string-to-number (split-string emacs-version "[.]"))) - (rmaj (or (nth 0 v1) 99)) - (rmin (or (nth 1 v1) 99)) - (rbld (or (nth 2 v1) 99)) - (maj (or (nth 0 v2) 0)) - (min (or (nth 1 v2) 0)) - (bld (or (nth 2 v2) 0))) + (v2 (mapcar 'string-to-number (split-string emacs-version "[.]"))) + (rmaj (or (nth 0 v1) 99)) + (rmin (or (nth 1 v1) 99)) + (rbld (or (nth 2 v1) 99)) + (maj (or (nth 0 v2) 0)) + (min (or (nth 1 v2) 0)) + (bld (or (nth 2 v2) 0))) (if (or (< maj rmaj) - (and (= maj rmaj) - (< min rmin)) - (and (= maj rmaj) - (= min rmin) - (< bld rbld))) - (if (eq level :predicate) - ;; just return if we have the version - nil - (let ((msg (format "Emacs %s or greater is recommended for %s" - version feature))) - (display-warning 'org msg level) - t)) + (and (= maj rmaj) + (< min rmin)) + (and (= maj rmaj) + (= min rmin) + (< bld rbld))) + (if (eq level :predicate) + ;; just return if we have the version + nil + (let ((msg (format "Emacs %s or greater is recommended for %s" + version feature))) + (display-warning 'org msg level) + t)) t))) (defun org-get-x-clipboard (value) "Get the value of the X or Windows clipboard." (cond ((and (eq window-system 'x) - (fboundp 'gui-get-selection)) ;Silence byte-compiler. - (org-no-properties - (ignore-errors - (or (gui-get-selection value 'UTF8_STRING) - (gui-get-selection value 'COMPOUND_TEXT) - (gui-get-selection value 'STRING) - (gui-get-selection value 'TEXT))))) - ((and (eq window-system 'w32) (fboundp 'w32-get-clipboard-data)) - (w32-get-clipboard-data)))) + (fboundp 'gui-get-selection)) ;Silence byte-compiler. + (org-no-properties + (ignore-errors + (or (gui-get-selection value 'UTF8_STRING) + (gui-get-selection value 'COMPOUND_TEXT) + (gui-get-selection value 'STRING) + (gui-get-selection value 'TEXT))))) + ((and (eq window-system 'w32) (fboundp 'w32-get-clipboard-data)) + (w32-get-clipboard-data)))) (defun org-add-props (string plist &rest props) "Add text properties to entire string, from beginning to end. @@ -344,20 +421,20 @@ that will be added to PLIST. Returns the string that was modified." (put 'org-add-props 'lisp-indent-function 2) (defun org-fit-window-to-buffer (&optional window max-height min-height - shrink-only) + shrink-only) "Fit WINDOW to the buffer, but only if it is not a side-by-side window. WINDOW defaults to the selected window. MAX-HEIGHT and MIN-HEIGHT are passed through to `fit-window-to-buffer'. If SHRINK-ONLY is set, call `shrink-window-if-larger-than-buffer' instead, the height limit is ignored in this case." (cond ((if (fboundp 'window-full-width-p) - (not (window-full-width-p window)) - ;; do nothing if another window would suffer - (> (frame-width) (window-width window)))) - ((and (fboundp 'fit-window-to-buffer) (not shrink-only)) - (fit-window-to-buffer window max-height min-height)) - ((fboundp 'shrink-window-if-larger-than-buffer) - (shrink-window-if-larger-than-buffer window))) + (not (window-full-width-p window)) + ;; do nothing if another window would suffer + (> (frame-width) (window-width window)))) + ((and (fboundp 'fit-window-to-buffer) (not shrink-only)) + (fit-window-to-buffer window max-height min-height)) + ((fboundp 'shrink-window-if-larger-than-buffer) + (shrink-window-if-larger-than-buffer window))) (or window (selected-window))) ;; `set-transient-map' is only in Emacs >= 24.4 @@ -379,7 +456,7 @@ Unlike to `use-region-p', this function also checks (defun org-cursor-to-region-beginning () (when (and (org-region-active-p) - (> (point) (region-beginning))) + (> (point) (region-beginning))) (exchange-point-and-mark))) ;;; Invisibility compatibility @@ -389,8 +466,8 @@ Unlike to `use-region-p', this function also checks (if (fboundp 'remove-from-invisibility-spec) (remove-from-invisibility-spec arg) (if (consp buffer-invisibility-spec) - (setq buffer-invisibility-spec - (delete arg buffer-invisibility-spec))))) + (setq buffer-invisibility-spec + (delete arg buffer-invisibility-spec))))) (defun org-in-invisibility-spec-p (arg) "Is ARG a member of `buffer-invisibility-spec'?" @@ -401,9 +478,9 @@ Unlike to `use-region-p', this function also checks "Move to column COLUMN. Pass COLUMN and FORCE to `move-to-column'." (let ((buffer-invisibility-spec - (if (listp buffer-invisibility-spec) - (remove '(org-filtered) buffer-invisibility-spec) - buffer-invisibility-spec))) + (if (listp buffer-invisibility-spec) + (remove '(org-filtered) buffer-invisibility-spec) + buffer-invisibility-spec))) (move-to-column column force))) (defmacro org-find-library-dir (library) @@ -415,12 +492,12 @@ Pass COLUMN and FORCE to `move-to-column'." (while (string-match "\n" s start) (setq start (match-end 0) n (1+ n))) (if (and (> (length s) 0) (= (aref s (1- (length s))) ?\n)) - (setq n (1- n))) + (setq n (1- n))) n)) (defun org-kill-new (string &rest args) (remove-text-properties 0 (length string) '(line-prefix t wrap-prefix t) - string) + string) (apply 'kill-new string args)) ;; `font-lock-ensure' is only available from 24.4.50 on @@ -444,7 +521,7 @@ Let-bind some variables to nil around BODY to achieve the desired effect, which variables to use depends on the Emacs version." (if (org-version-check "24.2.50" "" :predicate) `(let (pop-up-frames display-buffer-alist) - ,@body) + ,@body) `(let (pop-up-frames special-display-buffer-names special-display-regexps special-display-function) ,@body))) @@ -452,19 +529,19 @@ effect, which variables to use depends on the Emacs version." (defmacro org-check-version () "Try very hard to provide sensible version strings." (let* ((org-dir (org-find-library-dir "org")) - (org-version.el (concat org-dir "org-version.el")) - (org-fixup.el (concat org-dir "../mk/org-fixup.el"))) + (org-version.el (concat org-dir "org-version.el")) + (org-fixup.el (concat org-dir "../mk/org-fixup.el"))) (if (require 'org-version org-version.el 'noerror) - '(progn - (autoload 'org-release "org-version.el") - (autoload 'org-git-version "org-version.el")) + '(progn + (autoload 'org-release "org-version.el") + (autoload 'org-git-version "org-version.el")) (if (require 'org-fixup org-fixup.el 'noerror) - '(org-fixup) - ;; provide fallback definitions and complain - (warn "Could not define org version correctly. Check installation!") - '(progn - (defun org-release () "N/A") - (defun org-git-version () "N/A !!check installation!!")))))) + '(org-fixup) + ;; provide fallback definitions and complain + (warn "Could not define org version correctly. Check installation!") + '(progn + (defun org-release () "N/A") + (defun org-git-version () "N/A !!check installation!!")))))) (defmacro org-with-silent-modifications (&rest body) (if (fboundp 'with-silent-modifications) @@ -480,7 +557,7 @@ an error is signaled without being caught by a `condition-case'. Implements `define-error' for older emacsen." (if (fboundp 'define-error) (define-error name message) (put name 'error-conditions - (copy-sequence (cons name (get 'error 'error-conditions)))))) + (copy-sequence (cons name (get 'error 'error-conditions)))))) (unless (fboundp 'string-suffix-p) ;; From Emacs subr.el. @@ -490,8 +567,8 @@ If IGNORE-CASE is non-nil, the comparison is done without paying attention to case differences." (let ((start-pos (- (length string) (length suffix)))) (and (>= start-pos 0) - (eq t (compare-strings suffix nil nil - string start-pos nil ignore-case)))))) + (eq t (compare-strings suffix nil nil + string start-pos nil ignore-case)))))) (provide 'org-compat) diff --git a/elpa/org-20170210/org-crypt.el b/elpa/org-20170407/org-crypt.el similarity index 100% rename from elpa/org-20170210/org-crypt.el rename to elpa/org-20170407/org-crypt.el diff --git a/elpa/org-20170210/org-ctags.el b/elpa/org-20170407/org-ctags.el similarity index 100% rename from elpa/org-20170210/org-ctags.el rename to elpa/org-20170407/org-ctags.el diff --git a/elpa/org-20170210/org-datetree.el b/elpa/org-20170407/org-datetree.el similarity index 84% rename from elpa/org-20170210/org-datetree.el rename to elpa/org-20170407/org-datetree.el index 540753d6..843e078a 100644 --- a/elpa/org-20170210/org-datetree.el +++ b/elpa/org-20170407/org-datetree.el @@ -54,16 +54,25 @@ Added time stamp is active unless value is `inactive'." "Find or create an entry for date D. If KEEP-RESTRICTION is non-nil, do not widen the buffer. When it is nil, the buffer will be widened to make sure an existing date -tree can be found." +tree can be found. If it is the sympol `subtree-at-point', then the tree +will be built under the headline at point." (setq-local org-datetree-base-level 1) - (or keep-restriction (widen)) (save-restriction - (let ((prop (org-find-property "DATE_TREE"))) - (when prop - (goto-char prop) - (setq-local org-datetree-base-level - (org-get-valid-level (org-current-level) 1)) - (org-narrow-to-subtree))) + (if (eq keep-restriction 'subtree-at-point) + (progn + (unless (org-at-heading-p) (error "Not at heading")) + (widen) + (org-narrow-to-subtree) + (setq-local org-datetree-base-level + (org-get-valid-level (org-current-level) 1))) + (unless keep-restriction (widen)) + ;; Support the old way of tree placement, using a property + (let ((prop (org-find-property "DATE_TREE"))) + (when prop + (goto-char prop) + (setq-local org-datetree-base-level + (org-get-valid-level (org-current-level) 1)) + (org-narrow-to-subtree)))) (goto-char (point-min)) (let ((year (calendar-extract-year d)) (month (calendar-extract-month d)) @@ -84,18 +93,26 @@ tree can be found." "Find or create an ISO week entry for date D. Compared to `org-datetree-find-date-create' this function creates entries ordered by week instead of months. -If KEEP-RESTRICTION is non-nil, do not widen the buffer. When it -is nil, the buffer will be widened to make sure an existing date -tree can be found." +When it is nil, the buffer will be widened to make sure an existing date +tree can be found. If it is the sympol `subtree-at-point', then the tree +will be built under the headline at point." (setq-local org-datetree-base-level 1) - (or keep-restriction (widen)) (save-restriction - (let ((prop (org-find-property "WEEK_TREE"))) - (when prop - (goto-char prop) - (setq-local org-datetree-base-level - (org-get-valid-level (org-current-level) 1)) - (org-narrow-to-subtree))) + (if (eq keep-restriction 'subtree-at-point) + (progn + (unless (org-at-heading-p) (error "Not at heading")) + (widen) + (org-narrow-to-subtree) + (setq-local org-datetree-base-level + (org-get-valid-level (org-current-level) 1))) + (unless keep-restriction (widen)) + ;; Support the old way of tree placement, using a property + (let ((prop (org-find-property "WEEK_TREE"))) + (when prop + (goto-char prop) + (setq-local org-datetree-base-level + (org-get-valid-level (org-current-level) 1)) + (org-narrow-to-subtree)))) (goto-char (point-min)) (require 'cal-iso) (let* ((year (calendar-extract-year d)) diff --git a/elpa/org-20170210/org-docview.el b/elpa/org-20170407/org-docview.el similarity index 100% rename from elpa/org-20170210/org-docview.el rename to elpa/org-20170407/org-docview.el diff --git a/elpa/org-20170407/org-duration.el b/elpa/org-20170407/org-duration.el new file mode 100644 index 00000000..51513d8c --- /dev/null +++ b/elpa/org-20170407/org-duration.el @@ -0,0 +1,447 @@ +;;; org-duration.el --- Library handling durations -*- lexical-binding: t; -*- + +;; Copyright (C) 2017 Nicolas Goaziou + +;; Author: Nicolas Goaziou +;; Keywords: outlines, hypermedia, calendar, wp + +;; 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 of the License, 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 this program. If not, see . + +;;; Commentary: + +;; This library provides tools to manipulate durations. A duration +;; can have multiple formats: +;; +;; - 3:12 +;; - 1:23:45 +;; - 1y 3d 3h 4min +;; - 3d 13:35 +;; - 2.35h +;; +;; More accurately, it consists of numbers and units, as defined in +;; variable `org-duration-units', separated with white spaces, and +;; a "H:MM" or "H:MM:SS" part. White spaces are tolerated between the +;; number and its relative unit. Variable `org-duration-format' +;; controls durations default representation. +;; +;; The library provides functions allowing to convert a duration to, +;; and from, a number of minutes: `org-duration-to-minutes' and +;; `org-duration-from-minutes'. It also provides two lesser tools: +;; `org-duration-p', and `org-duration-h:mm-only-p'. +;; +;; Users can set the number of minutes per unit, or define new units, +;; in `org-duration-units'. The library also supports canonical +;; duration, i.e., a duration that doesn't depend on user's settings, +;; through optional arguments. + +;;; Code: + +(require 'cl-lib) +(require 'org-macs) +(declare-function org-trim "org-trim" (s &optional keep-lead)) + + +;;; Public variables + +(defconst org-duration-canonical-units + `(("min" . 1) + ("h" . 60) + ("d" . ,(* 60 24))) + "Canonical time duration units. +See `org-duration-units' for details.") + +(defcustom org-duration-units + `(("min" . 1) + ("h" . 60) + ("d" . ,(* 60 24)) + ("w" . ,(* 60 24 7)) + ("m" . ,(* 60 24 30)) + ("y" . ,(* 60 24 365.25))) + "Conversion factor to minutes for a duration. + +Each entry has the form (UNIT . MODIFIER). + +In a duration string, a number followed by UNIT is multiplied by +the specified number of MODIFIER to obtain a duration in minutes. + +For example, the following value + + \\=`((\"min\" . 1) + (\"h\" . 60) + (\"d\" . ,(* 60 8)) + (\"w\" . ,(* 60 8 5)) + (\"m\" . ,(* 60 8 5 4)) + (\"y\" . ,(* 60 8 5 4 10))) + +is meaningful if you work an average of 8 hours per day, 5 days +a week, 4 weeks a month and 10 months a year. + +When setting this variable outside the Customize interface, make +sure to call the following command: + + \\[org-duration-set-regexps]" + :group 'org-agenda + :version "26.1" + :package-version '(Org . "9.1") + :set (lambda (var val) (set-default var val) (org-duration-set-regexps)) + :initialize 'custom-initialize-changed + :type '(choice + (const :tag "H:MM" 'h:mm) + (const :tag "H:MM:SS" 'h:mm:ss) + (alist :key-type (string :tag "Unit") + :value-type (number :tag "Modifier")))) + +(defcustom org-duration-format '(("d" . nil) (special . h:mm)) + "Format definition for a duration. + +The value can be set to, respectively, the symbols `h:mm:ss' or +`h:mm', which means a duration is expressed as, respectively, +a \"H:MM:SS\" or \"H:MM\" string. + +Alternatively, the value can be a list of entries following the +pattern: + + (UNIT . REQUIRED?) + +UNIT is a unit string, as defined in `org-duration-units'. The +time duration is formatted using only the time components that +are specified here. If a time unit in missing, it falls back to +the next smallest unit. + +A non-nil REQUIRED? value for these keys indicates that the +corresponding time component should always be included, even if +its value is 0. + +Eventually, the list can contain one of the following special +entries: + + (special . h:mm) + (special . h:mm:ss) + + Units shorter than an hour are ignored. The hours and + minutes part of the duration is expressed unconditionally + with H:MM, or H:MM:SS, pattern. + + (special . PRECISION) + + A duration is expressed with a single unit, PRECISION being + the number of decimal places to show. The unit chosen is the + first one required or with a non-zero integer part. If there + is no such unit, the smallest one is used. + +For example, + + ((\"d\" . nil) (\"h\" . t) (\"min\" . t)) + +means a duration longer than a day is expressed in days, hours +and minutes, whereas a duration shorter than a day is always +expressed in hours and minutes, even when shorter than an hour. + +On the other hand, the value + + ((\"d\" . nil) (\"min\" . nil)) + +means a duration longer than a day is expressed in days and +minutes, whereas a duration shorter than a day is expressed +entirely in minutes, even when longer than an hour. + +The following format + + ((\"d\" . nil) (special . h:mm)) + +means that any duration longer than a day is expressed with both +a \"d\" unit and a \"H:MM\" part, whereas a duration shorter than +a day is expressed only as a \"H:MM\" string. + +Eventually, + + ((\"d\" . nil) (\"h\" . nil) (special . 2)) + +expresses a duration longer than a day as a decimal number, with +a 2-digits fractional part, of \"d\" unit. A duration shorter +than a day uses \"h\" unit instead." + :group 'org-time + :group 'org-clock + :version "26.1" + :package-version '(Org . "9.1") + :type '(choice + (const :tag "Use H:MM" h:mm) + (const :tag "Use H:MM:SS" h:mm:ss) + (repeat :tag "Use units" + (choice + (cons :tag "Use units" + (string :tag "Unit") + (choice (const :tag "Skip when zero" nil) + (const :tag "Always used" t))) + (cons :tag "Use a single decimal unit" + (const special) + (integer :tag "Number of decimals")) + (cons :tag "Use both units and H:MM" + (const special) + (const h:mm)) + (cons :tag "Use both units and H:MM:SS" + (const special) + (const h:mm:ss)))))) + + +;;; Internal variables and functions + +(defconst org-duration--h:mm-re + "\\`[ \t]*[0-9]+\\(?::[0-9]\\{2\\}\\)\\{1,2\\}[ \t]*\\'" + "Regexp matching a duration expressed with H:MM or H:MM:SS format. +See `org-duration--h:mm:ss-re' to only match the latter. Hours +can use any number of digits.") + +(defconst org-duration--h:mm:ss-re + "\\`[ \t]*[0-9]+\\(?::[0-9]\\{2\\}\\)\\{2\\}[ \t]*\\'" + "Regexp matching a duration expressed H:MM:SS format. +See `org-duration--h:mm-re' to also support H:MM format. Hours +can use any number of digits.") + +(defvar org-duration--unit-re nil + "Regexp matching a duration with an unit. +Allowed units are defined in `org-duration-units'. Match group +1 contains the bare number. Match group 2 contains the unit.") + +(defvar org-duration--full-re nil + "Regexp matching a duration expressed with units. +Allowed units are defined in `org-duration-units'.") + +(defvar org-duration--mixed-re nil + "Regexp matching a duration expressed with units and H:MM or H:MM:SS format. +Allowed units are defined in `org-duration-units'. Match group +1 contains units part. Match group 2 contains H:MM or H:MM:SS +part.") + +(defun org-duration--modifier (unit &optional canonical) + "Return modifier associated to string UNIT. +When optional argument CANONICAL is non-nil, refer to +`org-duration-canonical-units' instead of `org-duration-units'." + (or (cdr (assoc unit (if canonical + org-duration-canonical-units + org-duration-units))) + (error "Unknown unit: %S" unit))) + + +;;; Public functions + +;;;###autoload +(defun org-duration-set-regexps () + "Set duration related regexps." + (interactive) + (setq org-duration--unit-re + (concat "\\([0-9]+\\(?:\\.[0-9]*\\)?\\)[ \t]*" + ;; Since user-defined units in `org-duration-units' + ;; can differ from canonical units in + ;; `org-duration-canonical-units', include both in + ;; regexp. + (regexp-opt (mapcar #'car (append org-duration-canonical-units + org-duration-units)) + t))) + (setq org-duration--full-re + (format "\\`[ \t]*%s\\(?:[ \t]+%s\\)*[ \t]*\\'" + org-duration--unit-re + org-duration--unit-re)) + (setq org-duration--mixed-re + (format "\\`[ \t]*\\(?1:%s\\(?:[ \t]+%s\\)*\\)[ \t]+\ +\\(?2:[0-9]+\\(?::[0-9][0-9]\\)\\{1,2\\}\\)[ \t]*\\'" + org-duration--unit-re + org-duration--unit-re))) + +;;;###autoload +(defun org-duration-p (s) + "Non-nil when string S is a time duration." + (and (stringp s) + (or (string-match-p org-duration--full-re s) + (string-match-p org-duration--mixed-re s) + (string-match-p org-duration--h:mm-re s)))) + +;;;###autoload +(defun org-duration-to-minutes (duration &optional canonical) + "Return number of minutes of DURATION string. + +When optional argument CANONICAL is non-nil, ignore +`org-duration-units' and use standard time units value. + +As a special case, a bare number represents minutes. + +Return value as a float. Raise an error if duration format is +not recognized." + (cond + ((numberp duration) (float duration)) + ((string-match-p org-duration--h:mm-re duration) + (pcase-let ((`(,hours ,minutes ,seconds) + (mapcar #'string-to-number (split-string duration ":")))) + (+ (/ (or seconds 0) 60.0) minutes (* 60 hours)))) + ((string-match-p org-duration--full-re duration) + (let ((minutes 0) + (s 0)) + (while (string-match org-duration--unit-re duration s) + (setq s (match-end 0)) + (let ((value (string-to-number (match-string 1 duration))) + (unit (match-string 2 duration))) + (cl-incf minutes (* value (org-duration--modifier unit canonical))))) + (float minutes))) + ((string-match org-duration--mixed-re duration) + (let ((units-part (match-string 1 duration)) + (hms-part (match-string 2 duration))) + (+ (org-duration-to-minutes units-part) + (org-duration-to-minutes hms-part)))) + ((string-match-p "\\`[0-9]+\\(\\.[0-9]*\\)?\\'" duration) + (float (string-to-number duration))) + (t (error "Invalid duration format: %S" duration)))) + +;;;###autoload +(defun org-duration-from-minutes (minutes &optional fmt canonical) + "Return duration string for a given number of MINUTES. + +Format duration according to `org-duration-format' or FMT, when +non-nil. + +When optional argument CANONICAL is non-nil, ignore +`org-duration-units' and use standard time units value. + +Raise an error if expected format is unknown." + (pcase (or fmt org-duration-format) + (`h:mm + (let ((minutes (floor minutes))) + (format "%d:%02d" (/ minutes 60) (mod minutes 60)))) + (`h:mm:ss + (let ((seconds (floor (* 60 minutes)) )) + (format "%s:%02d" + (org-duration-from-minutes (/ seconds 60) 'h:mm) + (mod seconds 60)))) + ((pred atom) (error "Invalid duration format specification: %S" fmt)) + ;; Mixed format. Call recursively the function on both parts. + ((and duration-format + (let `(special . ,(and mode (or `h:mm:ss `h:mm))) + (assq 'special duration-format))) + (let* ((truncated-format + ;; Remove "special" mode from duration format in order to + ;; recurse properly. Also remove units smaller or equal + ;; to an hour since H:MM part takes care of it. + (cl-remove-if-not + (lambda (pair) + (pcase pair + (`(,(and unit (pred stringp)) . ,_) + (> (org-duration--modifier unit canonical) 60)) + (_ nil))) + duration-format)) + (min-modifier ;smallest modifier above hour + (and truncated-format + (apply #'min + (mapcar (lambda (p) + (org-duration--modifier (car p) canonical)) + truncated-format))))) + (if (or (null min-modifier) (< minutes min-modifier)) + ;; There is not unit above the hour or the smallest unit + ;; above the hour is too large for the number of minutes we + ;; need to represent. Use H:MM or H:MM:SS syntax. + (org-duration-from-minutes minutes mode canonical) + ;; Represent minutes above hour using provided units and H:MM + ;; or H:MM:SS below. + (let* ((units-part (* min-modifier (floor (/ minutes min-modifier)))) + (minutes-part (- minutes units-part))) + (concat + (org-duration-from-minutes units-part truncated-format canonical) + " " + (org-duration-from-minutes minutes-part mode)))))) + ;; Units format. + (duration-format + (let* ((fractional + (let ((digits (cdr (assq 'special duration-format)))) + (and digits + (or (wholenump digits) + (error "Unknown formatting directive: %S" digits)) + (format "%%.%df" digits)))) + (selected-units + (sort (cl-remove-if + ;; Ignore special format cells. + (lambda (pair) (pcase pair (`(special . ,_) t) (_ nil))) + duration-format) + (lambda (a b) + (> (org-duration--modifier (car a) canonical) + (org-duration--modifier (car b) canonical)))))) + (cond + ;; Fractional duration: use first unit that is either required + ;; or smaller than MINUTES. + (fractional + (let* ((unit (car + (or (cl-find-if + (lambda (pair) + (pcase pair + (`(,u . ,req?) + (or req? + (<= (org-duration--modifier u canonical) + minutes))))) + selected-units) + ;; Fall back to smallest unit. + (org-last selected-units)))) + (modifier (org-duration--modifier unit canonical))) + (concat (format fractional (/ (float minutes) modifier)) unit))) + ;; Otherwise build duration string according to available + ;; units. + ((org-string-nw-p + (org-trim + (mapconcat + (lambda (units) + (pcase-let* ((`(,unit . ,required?) units) + (modifier (org-duration--modifier unit canonical))) + (cond ((<= modifier minutes) + (let ((value (floor (/ minutes modifier)))) + (cl-decf minutes (* value modifier)) + (format " %d%s" value unit))) + (required? (concat " 0" unit)) + (t "")))) + selected-units + "")))) + ;; No unit can properly represent MINUTES. Use the smallest + ;; one anyway. + (t + (pcase-let ((`((,unit . ,_)) (last selected-units))) + (concat + (if (not fractional) "0" + (let ((modifier (org-duration--modifier unit canonical))) + (format fractional (/ (float minutes) modifier)))) + unit)))))))) + +;;;###autoload +(defun org-duration-h:mm-only-p (times) + "Non-nil when every duration in TIMES has \"H:MM\" or \"H:MM:SS\" format. + +TIMES is a list of duration strings. + +Return nil if any duration is expressed with units, as defined in +`org-duration-units'. Otherwise, if any duration is expressed +with \"H:MM:SS\" format, return `h:mm:ss'. Otherwise, return +`h:mm'." + (let (hms-flag) + (catch :exit + (dolist (time times) + (cond ((string-match-p org-duration--full-re time) + (throw :exit nil)) + ((string-match-p org-duration--mixed-re time) + (throw :exit nil)) + (hms-flag nil) + ((string-match-p org-duration--h:mm:ss-re time) + (setq hms-flag 'h:mm:ss)))) + (or hms-flag 'h:mm)))) + + +;;; Initialization + +(org-duration-set-regexps) + +(provide 'org-duration) +;;; org-duration.el ends here diff --git a/elpa/org-20170210/org-element.el b/elpa/org-20170407/org-element.el similarity index 96% rename from elpa/org-20170210/org-element.el rename to elpa/org-20170407/org-element.el index 9d7e4359..bec36a00 100644 --- a/elpa/org-20170210/org-element.el +++ b/elpa/org-20170407/org-element.el @@ -352,12 +352,11 @@ Don't modify it, set `org-element-affiliated-keywords' instead.") (italic ,@standard-set) (item ,@standard-set-no-line-break) (keyword ,@(remq 'footnote-reference standard-set)) - ;; Ignore all links excepted plain links and angular links in - ;; a link description. Also ignore radio-targets and line - ;; breaks. + ;; Ignore all links in a link description. Also ignore + ;; radio-targets and line breaks. (link bold code entity export-snippet inline-babel-call inline-src-block - italic latex-fragment macro simple-link statistics-cookie - strike-through subscript superscript underline verbatim) + italic latex-fragment macro statistics-cookie strike-through + subscript superscript underline verbatim) (paragraph ,@standard-set) ;; Remove any variable object from radio target as it would ;; prevent it from being properly recognized. @@ -516,7 +515,7 @@ Return value is the property name, as a keyword, or nil." (and (memq object (org-element-property p parent)) (throw 'exit p)))))) -(defun org-element-class (datum &optional parent) +(defsubst org-element-class (datum &optional parent) "Return class for ELEMENT, as a symbol. Class is either `element' or `object'. Optional argument PARENT is the element or object containing DATUM. It defaults to the @@ -593,16 +592,15 @@ Parse tree is modified by side effect." (specialp (and (not property) (eq siblings parent) (eq (car parent) location)))) - ;; Install ELEMENT at the appropriate POSITION within SIBLINGS. + ;; Install ELEMENT at the appropriate LOCATION within SIBLINGS. (cond (specialp) ((or (null siblings) (eq (car siblings) location)) (push element siblings)) ((null location) (nconc siblings (list element))) - (t (let ((previous (cadr (memq location (reverse siblings))))) - (if (not previous) - (error "No location found to insert element") - (let ((next (memq previous siblings))) - (setcdr next (cons element (cdr next)))))))) + (t + (let ((index (cl-position location siblings))) + (unless index (error "No location found to insert element")) + (push element (cdr (nthcdr (1- index) siblings)))))) ;; Store SIBLINGS at appropriate place in parse tree. (cond (specialp (setcdr parent (copy-sequence parent)) (setcar parent element)) @@ -2754,7 +2752,7 @@ keywords. Otherwise, return nil. Assume point is at the first tilde marker." (save-excursion (unless (bolp) (backward-char 1)) - (when (looking-at org-emph-re) + (when (looking-at org-verbatim-re) (let ((begin (match-beginning 2)) (value (match-string-no-properties 4)) (post-blank (progn (goto-char (match-end 2)) @@ -3196,7 +3194,7 @@ Assume point is at the beginning of the link." (when (string-match "::\\(.*\\)\\'" path) (setq search-option (match-string 1 path)) (setq path (replace-match "" nil nil path))) - (setq path (replace-regexp-in-string "\\`///+" "/" path))) + (setq path (replace-regexp-in-string "\\`///*\\(.:\\)?/" "\\1/" path))) ;; Translate link, if `org-link-translation-function' is set. (let ((trans (and (functionp org-link-translation-function) (funcall org-link-translation-function type path)))) @@ -3765,7 +3763,7 @@ and cdr is a plist with `:value', `:begin', `:end' and Assume point is at the first equal sign marker." (save-excursion (unless (bolp) (backward-char 1)) - (when (looking-at org-emph-re) + (when (looking-at org-verbatim-re) (let ((begin (match-beginning 2)) (value (match-string-no-properties 4)) (post-blank (progn (goto-char (match-end 2)) @@ -4430,8 +4428,7 @@ to an appropriate container (e.g., a paragraph)." (org-element-target-parser))) (or (and (memq 'timestamp restriction) (org-element-timestamp-parser)) - (and (or (memq 'link restriction) - (memq 'simple-link restriction)) + (and (memq 'link restriction) (org-element-link-parser))))) (?\\ (if (eq (aref result 1) ?\\) @@ -4452,8 +4449,7 @@ to an appropriate container (e.g., a paragraph)." (and (memq 'statistics-cookie restriction) (org-element-statistics-cookie-parser))))) ;; This is probably a plain link. - (_ (and (or (memq 'link restriction) - (memq 'simple-link restriction)) + (_ (and (memq 'link restriction) (org-element-link-parser))))))) (or (eobp) (forward-char)))) (cond (found) @@ -4799,9 +4795,6 @@ indentation removed from its contents." ;; associated to a key, obtained with `org-element--cache-key'. This ;; mechanism is robust enough to preserve total order among elements ;; even when the tree is only partially synchronized. -;; -;; Objects contained in an element are stored in a hash table, -;; `org-element--cache-objects'. (defvar org-element-use-cache nil @@ -4833,34 +4826,6 @@ Each node of the tree contains an element. Comparison is done with `org-element--cache-compare'. This cache is used in `org-element-at-point'.") -(defvar org-element--cache-objects nil - "Hash table used as to cache objects. -Key is an element, as returned by `org-element-at-point', and -value is an alist where each association is: - - (PARENT COMPLETEP . OBJECTS) - -where PARENT is an element or object, COMPLETEP is a boolean, -non-nil when all direct children of parent are already cached and -OBJECTS is a list of such children, as objects, from farthest to -closest. - -In the following example, \\alpha, bold object and \\beta are -contained within a paragraph - - \\alpha *\\beta* - -If the paragraph is completely parsed, OBJECTS-DATA will be - - ((PARAGRAPH t BOLD-OBJECT ENTITY-OBJECT) - (BOLD-OBJECT t ENTITY-OBJECT)) - -whereas in a partially parsed paragraph, it could be - - ((PARAGRAPH nil ENTITY-OBJECT)) - -This cache is used in `org-element-context'.") - (defvar org-element--cache-sync-requests nil "List of pending synchronization requests. @@ -5097,36 +5062,28 @@ the cache." (`nil lower) (_ upper)))) -(defun org-element--cache-put (element &optional data) - "Store ELEMENT in current buffer's cache, if allowed. -When optional argument DATA is non-nil, assume is it object data -relative to ELEMENT and store it in the objects cache." - (cond ((not (org-element--cache-active-p)) nil) - ((not data) - (when org-element--cache-sync-requests - ;; During synchronization, first build an appropriate key - ;; for the new element so `avl-tree-enter' can insert it at - ;; the right spot in the cache. - (let ((keys (org-element--cache-find - (org-element-property :begin element) 'both))) - (puthash element - (org-element--cache-generate-key - (and (car keys) (org-element--cache-key (car keys))) - (cond ((cdr keys) (org-element--cache-key (cdr keys))) - (org-element--cache-sync-requests - (aref (car org-element--cache-sync-requests) 0)))) - org-element--cache-sync-keys))) - (avl-tree-enter org-element--cache element)) - ;; Headlines are not stored in cache, so objects in titles are - ;; not stored either. - ((eq (org-element-type element) 'headline) nil) - (t (puthash element data org-element--cache-objects)))) +(defun org-element--cache-put (element) + "Store ELEMENT in current buffer's cache, if allowed." + (when (org-element--cache-active-p) + (when org-element--cache-sync-requests + ;; During synchronization, first build an appropriate key for + ;; the new element so `avl-tree-enter' can insert it at the + ;; right spot in the cache. + (let ((keys (org-element--cache-find + (org-element-property :begin element) 'both))) + (puthash element + (org-element--cache-generate-key + (and (car keys) (org-element--cache-key (car keys))) + (cond ((cdr keys) (org-element--cache-key (cdr keys))) + (org-element--cache-sync-requests + (aref (car org-element--cache-sync-requests) 0)))) + org-element--cache-sync-keys))) + (avl-tree-enter org-element--cache element))) (defsubst org-element--cache-remove (element) "Remove ELEMENT from cache. Assume ELEMENT belongs to cache and that a cache is active." - (avl-tree-delete org-element--cache element) - (remhash element org-element--cache-objects)) + (avl-tree-delete org-element--cache element)) ;;;; Synchronization @@ -5382,11 +5339,7 @@ request." (throw 'interrupt nil)) ;; Shift element. (unless (zerop offset) - (org-element--cache-shift-positions data offset) - ;; Shift associated objects data, if any. - (dolist (object-data (gethash data org-element--cache-objects)) - (dolist (object (cddr object-data)) - (org-element--cache-shift-positions object offset)))) + (org-element--cache-shift-positions data offset)) (let ((begin (org-element-property :begin data))) ;; Update PARENT and re-parent DATA, only when ;; necessary. Propagate new structures for lists. @@ -5752,7 +5705,6 @@ buffers." (when (and org-element-use-cache (derived-mode-p 'org-mode)) (setq-local org-element--cache (avl-tree-create #'org-element--cache-compare)) - (setq-local org-element--cache-objects (make-hash-table :test #'eq)) (setq-local org-element--cache-sync-keys (make-hash-table :weakness 'key :test #'eq)) (setq-local org-element--cache-change-warning nil) @@ -5924,99 +5876,50 @@ Providing it allows for quicker computation." (goto-char (point-min)) (let ((restriction (org-element-restriction type)) (parent element) - (cache (cond ((not (org-element--cache-active-p)) nil) - (org-element--cache-objects - (gethash element org-element--cache-objects)) - (t (org-element-cache-reset) nil))) - next object-data last) - (prog1 - (catch 'exit - (while t - ;; When entering PARENT for the first time, get list - ;; of objects within known so far. Store it in - ;; OBJECT-DATA. - (unless next - (let ((data (assq parent cache))) - (if data (setq object-data data) - (push (setq object-data (list parent nil)) cache)))) - ;; Find NEXT object for analysis. - (catch 'found - ;; If NEXT is non-nil, we already exhausted the - ;; cache so we can parse buffer to find the object - ;; after it. - (if next (setq next (org-element--object-lex restriction)) - ;; Otherwise, check if cache can help us. - (let ((objects (cddr object-data)) - (completep (nth 1 object-data))) - (cond - ((and (not objects) completep) (throw 'exit parent)) - ((not objects) - (setq next (org-element--object-lex restriction))) - (t - (let ((cache-limit - (org-element-property :end (car objects)))) - (if (>= cache-limit pos) - ;; Cache contains the information needed. - (dolist (object objects (throw 'exit parent)) - (when (<= (org-element-property :begin object) - pos) - (if (>= (org-element-property :end object) - pos) - (throw 'found (setq next object)) - (throw 'exit parent)))) - (goto-char cache-limit) - (setq next - (org-element--object-lex restriction)))))))) - ;; If we have a new object to analyze, store it in - ;; cache. Otherwise record that there is nothing - ;; more to parse in this element at this depth. - (if next - (progn (org-element-put-property next :parent parent) - (push next (cddr object-data))) - (setcar (cdr object-data) t))) - ;; Process NEXT, if any, in order to know if we need - ;; to skip it, return it or move into it. - (if (or (not next) (> (org-element-property :begin next) pos)) - (throw 'exit (or last parent)) - (let ((end (org-element-property :end next)) - (cbeg (org-element-property :contents-begin next)) - (cend (org-element-property :contents-end next))) - (cond - ;; Skip objects ending before point. Also skip - ;; objects ending at point unless it is also the - ;; end of buffer, since we want to return the - ;; innermost object. - ((and (<= end pos) (/= (point-max) end)) - (goto-char end) - ;; For convenience, when object ends at POS, - ;; without any space, store it in LAST, as we - ;; will return it if no object starts here. - (when (and (= end pos) - (not (memq (char-before) '(?\s ?\t)))) - (setq last next))) - ;; If POS is within a container object, move - ;; into that object. - ((and cbeg cend - (>= pos cbeg) - (or (< pos cend) - ;; At contents' end, if there is no - ;; space before point, also move into - ;; object, for consistency with - ;; convenience feature above. - (and (= pos cend) - (or (= (point-max) pos) - (not (memq (char-before pos) - '(?\s ?\t))))))) - (goto-char cbeg) - (narrow-to-region (point) cend) - (setq parent next - restriction (org-element-restriction next) - next nil - object-data nil)) - ;; Otherwise, return NEXT. - (t (throw 'exit next))))))) - ;; Store results in cache, if applicable. - (org-element--cache-put element cache))))))) + last) + (catch 'exit + (while t + (let ((next (org-element--object-lex restriction))) + (when next (org-element-put-property next :parent parent)) + ;; Process NEXT, if any, in order to know if we need to + ;; skip it, return it or move into it. + (if (or (not next) (> (org-element-property :begin next) pos)) + (throw 'exit (or last parent)) + (let ((end (org-element-property :end next)) + (cbeg (org-element-property :contents-begin next)) + (cend (org-element-property :contents-end next))) + (cond + ;; Skip objects ending before point. Also skip + ;; objects ending at point unless it is also the + ;; end of buffer, since we want to return the + ;; innermost object. + ((and (<= end pos) (/= (point-max) end)) + (goto-char end) + ;; For convenience, when object ends at POS, + ;; without any space, store it in LAST, as we + ;; will return it if no object starts here. + (when (and (= end pos) + (not (memq (char-before) '(?\s ?\t)))) + (setq last next))) + ;; If POS is within a container object, move into + ;; that object. + ((and cbeg cend + (>= pos cbeg) + (or (< pos cend) + ;; At contents' end, if there is no + ;; space before point, also move into + ;; object, for consistency with + ;; convenience feature above. + (and (= pos cend) + (or (= (point-max) pos) + (not (memq (char-before pos) + '(?\s ?\t))))))) + (goto-char cbeg) + (narrow-to-region (point) cend) + (setq parent next) + (setq restriction (org-element-restriction next))) + ;; Otherwise, return NEXT. + (t (throw 'exit next))))))))))))) (defun org-element-lineage (blob &optional types with-self) "List all ancestors of a given element or object. diff --git a/elpa/org-20170210/org-entities.el b/elpa/org-20170407/org-entities.el similarity index 100% rename from elpa/org-20170210/org-entities.el rename to elpa/org-20170407/org-entities.el diff --git a/elpa/org-20170210/org-eshell.el b/elpa/org-20170407/org-eshell.el similarity index 100% rename from elpa/org-20170210/org-eshell.el rename to elpa/org-20170407/org-eshell.el diff --git a/elpa/org-20170210/org-eww.el b/elpa/org-20170407/org-eww.el similarity index 96% rename from elpa/org-20170210/org-eww.el rename to elpa/org-20170407/org-eww.el index d5b7b620..7bc248d4 100644 --- a/elpa/org-20170210/org-eww.el +++ b/elpa/org-20170407/org-eww.el @@ -138,9 +138,12 @@ the structure of the Org file." (point) (org-eww-goto-next-url-property-change))) ;; concat `org-mode' style url to `return-content'. - (setq return-content (concat return-content - (org-make-link-string - link-location link-title)))) + (setq return-content + (concat return-content + (if (stringp link-location) + ;; hint: link-location is different for form-elements. + (org-make-link-string link-location link-title) + link-title)))) (goto-char temp-position) ; reset point before jump next anchor (setq out-bound t) ; for break out `while' loop )) diff --git a/elpa/org-20170210/org-faces.el b/elpa/org-20170407/org-faces.el similarity index 100% rename from elpa/org-20170210/org-faces.el rename to elpa/org-20170407/org-faces.el diff --git a/elpa/org-20170210/org-feed.el b/elpa/org-20170407/org-feed.el similarity index 100% rename from elpa/org-20170210/org-feed.el rename to elpa/org-20170407/org-feed.el diff --git a/elpa/org-20170210/org-footnote.el b/elpa/org-20170407/org-footnote.el similarity index 100% rename from elpa/org-20170210/org-footnote.el rename to elpa/org-20170407/org-footnote.el diff --git a/elpa/org-20170210/org-gnus.el b/elpa/org-20170407/org-gnus.el similarity index 100% rename from elpa/org-20170210/org-gnus.el rename to elpa/org-20170407/org-gnus.el diff --git a/elpa/org-20170210/org-habit.el b/elpa/org-20170407/org-habit.el similarity index 99% rename from elpa/org-20170210/org-habit.el rename to elpa/org-20170407/org-habit.el index 1f615657..52a0628d 100644 --- a/elpa/org-20170210/org-habit.el +++ b/elpa/org-20170407/org-habit.el @@ -170,7 +170,7 @@ This list represents a \"habit\" for the rest of this module." (if pom (goto-char pom)) (cl-assert (org-is-habit-p (point))) (let* ((scheduled (org-get-scheduled-time (point))) - (scheduled-repeat (org-get-repeat org-scheduled-string)) + (scheduled-repeat (org-get-repeat (org-entry-get (point) "SCHEDULED"))) (end (org-entry-end-position)) (habit-entry (org-no-properties (nth 4 (org-heading-components)))) closed-dates deadline dr-days sr-days sr-type) diff --git a/elpa/org-20170210/org-id.el b/elpa/org-20170407/org-id.el similarity index 100% rename from elpa/org-20170210/org-id.el rename to elpa/org-20170407/org-id.el diff --git a/elpa/org-20170210/org-indent.el b/elpa/org-20170407/org-indent.el similarity index 100% rename from elpa/org-20170210/org-indent.el rename to elpa/org-20170407/org-indent.el diff --git a/elpa/org-20170210/org-info.el b/elpa/org-20170407/org-info.el similarity index 92% rename from elpa/org-20170210/org-info.el rename to elpa/org-20170407/org-info.el index 79b9bcc3..a13903a9 100644 --- a/elpa/org-20170210/org-info.el +++ b/elpa/org-20170407/org-info.el @@ -129,15 +129,19 @@ See `org-info-emacs-documents' and `org-info-other-documents' for details." (defun org-info-export (path desc format) "Export an info link. See `org-link-parameters' for details about PATH, DESC and FORMAT." - (when (eq format 'html) - (or (string-match "\\(.*\\)[#:]:?\\(.*\\)" path) - (string-match "\\(.*\\)" path)) - (let ((filename (match-string 1 path)) - (node (or (match-string 2 path) "Top"))) - (format "%s" - (org-info-map-html-url filename) - (org-info--expand-node-name node) - (or desc path))))) + (let* ((parts (split-string path "[#:]:?")) + (manual (car parts)) + (node (or (nth 1 parts) "Top"))) + (pcase format + (`html + (format "%s" + (org-info-map-html-url manual) + (org-info--expand-node-name node) + (or desc path))) + (`texinfo + (let ((title (or desc ""))) + (format "@ref{%s,%s,,%s,}" node title manual))) + (_ nil)))) (provide 'org-info) diff --git a/elpa/org-20170210/org-inlinetask.el b/elpa/org-20170407/org-inlinetask.el similarity index 100% rename from elpa/org-20170210/org-inlinetask.el rename to elpa/org-20170407/org-inlinetask.el diff --git a/elpa/org-20170210/org-install.el b/elpa/org-20170407/org-install.el similarity index 100% rename from elpa/org-20170210/org-install.el rename to elpa/org-20170407/org-install.el diff --git a/elpa/org-20170210/org-irc.el b/elpa/org-20170407/org-irc.el similarity index 100% rename from elpa/org-20170210/org-irc.el rename to elpa/org-20170407/org-irc.el diff --git a/elpa/org-20170210/org-lint.el b/elpa/org-20170407/org-lint.el similarity index 97% rename from elpa/org-20170210/org-lint.el rename to elpa/org-20170407/org-lint.el index b734a37b..735c06e5 100644 --- a/elpa/org-20170210/org-lint.el +++ b/elpa/org-20170407/org-lint.el @@ -87,6 +87,7 @@ ;; - spurious macro arguments or invalid macro templates ;; - special properties in properties drawer ;; - obsolete syntax for PROPERTIES drawers +;; - Invalid EFFORT property value ;; - missing definition for footnote references ;; - missing reference for footnote definitions ;; - non-footnote definitions in footnote section @@ -97,6 +98,7 @@ ;; - indented diary-sexps ;; - obsolete QUOTE section ;; - obsolete "file+application" link +;; - blank headlines with tags ;;; Code: @@ -238,6 +240,10 @@ :name 'obsolete-properties-drawer :description "Report obsolete syntax for properties drawers" :categories '(obsolete properties)) + (make-org-lint-checker + :name 'invalid-effort-property + :description "Report invalid duration in EFFORT property" + :categories '(properties)) (make-org-lint-checker :name 'undefined-footnote-reference :description "Report missing definition for footnote references" @@ -278,7 +284,12 @@ (make-org-lint-checker :name 'file-application :description "Report obsolete \"file+application\" link" - :categories '(link obsolete))) + :categories '(link obsolete)) + (make-org-lint-checker + :name 'empty-headline-with-tags + :description "Report ambiguous empty headlines with tags" + :categories '(headline) + :trust 'low)) "List of all available checkers.") (defun org-lint--collect-duplicates @@ -534,6 +545,16 @@ Use :header-args: instead" "Incorrect contents for PROPERTIES drawer" "Incorrect location for PROPERTIES drawer")))))))) +(defun org-lint-invalid-effort-property (ast) + (org-element-map ast 'node-property + (lambda (p) + (when (equal "EFFORT" (org-element-property :key p)) + (let ((value (org-element-property :value p))) + (and (org-string-nw-p value) + (not (org-duration-p value)) + (list (org-element-property :begin p) + (format "Invalid effort duration format: %S" value)))))))) + (defun org-lint-link-to-local-file (ast) (org-element-map ast 'link (lambda (l) @@ -1014,6 +1035,15 @@ Use \"export %s\" instead" reports)))))))))))) reports)) +(defun org-lint-empty-headline-with-tags (ast) + (org-element-map ast '(headline inlinetask) + (lambda (h) + (let ((title (org-element-property :raw-value h))) + (and (string-match-p "\\`:[[:alnum:]_@#%:]+:\\'" title) + (list (org-element-property :begin h) + (format "Headline containing only tags is ambiguous: %S" + title))))))) + ;;; Reports UI diff --git a/elpa/org-20170210/org-list.el b/elpa/org-20170407/org-list.el similarity index 98% rename from elpa/org-20170210/org-list.el rename to elpa/org-20170407/org-list.el index df4cb1c7..ddcf85cf 100644 --- a/elpa/org-20170210/org-list.el +++ b/elpa/org-20170407/org-list.el @@ -2250,6 +2250,7 @@ If CHECKBOX is non-nil, add a checkbox next to the bullet. Return t when things worked, nil when we are not in an item, or item is invisible." + (interactive "P") (let ((itemp (org-in-item-p)) (pos (point))) ;; If cursor isn't is a list or if list is invisible, return nil. @@ -3313,23 +3314,28 @@ Valid parameters are: Strings to start or end a list item, and to start a list item with a counter. They can also be set to a function returning - a string or nil, which will be called with the depth of the - item, counting from 1. + a string or nil, which will be called with two arguments: the + type of list and the depth of the item, counting from 1. :icount Strings to start a list item with a counter. It can also be set to a function returning a string or nil, which will be - called with two arguments: the depth of the item, counting from - 1, and the counter. Its value, when non-nil, has precedence - over `:istart'. + called with three arguments: the type of list, the depth of the + item, counting from 1, and the counter. Its value, when + non-nil, has precedence over `:istart'. :isep String used to separate items. It can also be set to a function returning a string or nil, which will be called with - the depth of the items, counting from 1. It always start on - a new line. + two arguments: the type of list and the depth of the item, + counting from 1. It always start on a new line. + +:ifmt + + Function to be applied to the contents of every item. It is + called with two arguments: the type of list and the contents. :cbon, :cboff, :cbtrans @@ -3460,6 +3466,7 @@ PARAMS is a plist used to tweak the behavior of the transcoder." (iend (plist-get params :iend)) (isep (plist-get params :isep)) (icount (plist-get params :icount)) + (ifmt (plist-get params :ifmt)) (cboff (plist-get params :cboff)) (cbon (plist-get params :cbon)) (cbtrans (plist-get params :cbtrans)) @@ -3473,9 +3480,9 @@ PARAMS is a plist used to tweak the behavior of the transcoder." (tag (org-element-property :tag item)) (depth (org-list--depth item)) (separator (and (org-export-get-next-element item info) - (org-list--generic-eval isep depth))) - (closing (pcase (org-list--generic-eval iend depth) - ((or `nil `"") "\n") + (org-list--generic-eval isep type depth))) + (closing (pcase (org-list--generic-eval iend type depth) + ((or `nil "") "\n") ((and (guard separator) s) (if (equal (substring s -1) "\n") s (concat s "\n"))) (s s)))) @@ -3492,10 +3499,10 @@ PARAMS is a plist used to tweak the behavior of the transcoder." ;; Build output. (concat (let ((c (org-element-property :counter item))) - (if c (org-list--generic-eval icount depth c) - (org-list--generic-eval istart depth))) + (if (and c icount) (org-list--generic-eval icount type depth c) + (org-list--generic-eval istart type depth))) (let ((body - (if (or istart iend icount cbon cboff cbtrans (not backend) + (if (or istart iend icount ifmt cbon cboff cbtrans (not backend) (and (eq type 'descriptive) (or dtstart dtend ddstart ddend))) (concat @@ -3511,7 +3518,11 @@ PARAMS is a plist used to tweak the behavior of the transcoder." (org-element-interpret-data tag)) dtend)) (and tag ddstart) - (if (= (length contents) 0) "" (substring contents 0 -1)) + (let ((contents + (if (= (length contents) 0) "" + (substring contents 0 -1)))) + (if ifmt (org-list--generic-eval ifmt type contents) + contents)) (and tag ddend)) (org-export-with-backend backend item contents info)))) ;; Remove final newline. @@ -3544,6 +3555,25 @@ PARAMS is a property list with overruling parameters for (require 'ox-texinfo) (org-list-to-generic list (org-combine-plists '(:backend texinfo) params))) +(defun org-list-to-org (list &optional params) + "Convert LIST into an Org plain list. +LIST is as returned by `org-list-parse-list'. PARAMS is a property list +with overruling parameters for `org-list-to-generic'." + (let* ((make-item + (lambda (type _depth &optional c) + (concat (if (eq type 'ordered) "1. " "- ") + (and c (format "[@%d] " c))))) + (defaults + (list :istart make-item + :icount make-item + :ifmt (lambda (_type contents) + (replace-regexp-in-string "\n" "\n " contents)) + :dtend " :: " + :cbon "[X] " + :cboff "[ ] " + :cbtrans "[-] "))) + (org-list-to-generic list (org-combine-plists defaults params)))) + (defun org-list-to-subtree (list &optional params) "Convert LIST into an Org subtree. LIST is as returned by `org-list-to-lisp'. PARAMS is a property @@ -3555,7 +3585,7 @@ list with overruling parameters for `org-list-to-generic'." (org-previous-line-empty-p))))) (level (org-reduced-level (or (org-current-level) 0))) (make-stars - (lambda (depth) + (lambda (_type depth &optional _count) ;; Return the string for the heading, depending on DEPTH ;; of current sub-list. (let ((oddeven-level (+ level depth))) diff --git a/elpa/org-20170210/org-loaddefs.el b/elpa/org-20170407/org-loaddefs.el similarity index 79% rename from elpa/org-20170210/org-loaddefs.el rename to elpa/org-20170407/org-loaddefs.el index 95bae237..ed1543a8 100644 --- a/elpa/org-20170210/org-loaddefs.el +++ b/elpa/org-20170407/org-loaddefs.el @@ -2,77 +2,7 @@ ;; ;;; Code: -;;;### (autoloads nil "ob-C" "ob-C.el" (0 0 0 0)) -;;; Generated autoloads from ob-C.el - -(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ob-C" '("org-babel-"))) - -;;;*** - -;;;### (autoloads nil "ob-J" "ob-J.el" (0 0 0 0)) -;;; Generated autoloads from ob-J.el - -(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ob-J" '("obj-" "org-babel-"))) - -;;;*** - -;;;### (autoloads nil "ob-R" "ob-R.el" (0 0 0 0)) -;;; Generated autoloads from ob-R.el - -(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ob-R" '("ob-R-" "org-babel-"))) - -;;;*** - -;;;### (autoloads nil "ob-abc" "ob-abc.el" (0 0 0 0)) -;;; Generated autoloads from ob-abc.el - -(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ob-abc" '("org-babel-"))) - -;;;*** - -;;;### (autoloads nil "ob-asymptote" "ob-asymptote.el" (0 0 0 0)) -;;; Generated autoloads from ob-asymptote.el - -(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ob-asymptote" '("org-babel-"))) - -;;;*** - -;;;### (autoloads nil "ob-awk" "ob-awk.el" (0 0 0 0)) -;;; Generated autoloads from ob-awk.el - -(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ob-awk" '("org-babel-"))) - -;;;*** - -;;;### (autoloads nil "ob-calc" "ob-calc.el" (0 0 0 0)) -;;; Generated autoloads from ob-calc.el - -(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ob-calc" '("org-babel-"))) - -;;;*** - -;;;### (autoloads nil "ob-clojure" "ob-clojure.el" (0 0 0 0)) -;;; Generated autoloads from ob-clojure.el - -(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ob-clojure" '("org-babel-"))) - -;;;*** - -;;;### (autoloads nil "ob-comint" "ob-comint.el" (0 0 0 0)) -;;; Generated autoloads from ob-comint.el - -(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ob-comint" '("org-babel-comint-"))) - -;;;*** - -;;;### (autoloads nil "ob-coq" "ob-coq.el" (0 0 0 0)) -;;; Generated autoloads from ob-coq.el - -(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ob-coq" '("org-babel-" "coq-program-name"))) - -;;;*** - -;;;### (autoloads nil "ob-core" "ob-core.el" "db51cea35fa29cfc12253a82317a2cd2") +;;;### (autoloads nil "ob-core" "ob-core.el" (22757 57238 0 0)) ;;; Generated autoloads from ob-core.el (autoload 'org-babel-execute-safely-maybe "ob-core" "\ @@ -302,112 +232,7 @@ Mark current src block. ;;;*** -;;;### (autoloads nil "ob-css" "ob-css.el" (0 0 0 0)) -;;; Generated autoloads from ob-css.el - -(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ob-css" '("org-babel-"))) - -;;;*** - -;;;### (autoloads nil "ob-ditaa" "ob-ditaa.el" (0 0 0 0)) -;;; Generated autoloads from ob-ditaa.el - -(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ob-ditaa" '("org-"))) - -;;;*** - -;;;### (autoloads nil "ob-dot" "ob-dot.el" (0 0 0 0)) -;;; Generated autoloads from ob-dot.el - -(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ob-dot" '("org-babel-"))) - -;;;*** - -;;;### (autoloads nil "ob-ebnf" "ob-ebnf.el" (0 0 0 0)) -;;; Generated autoloads from ob-ebnf.el - -(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ob-ebnf" '("org-babel-"))) - -;;;*** - -;;;### (autoloads nil "ob-emacs-lisp" "ob-emacs-lisp.el" (0 0 0 0)) -;;; Generated autoloads from ob-emacs-lisp.el - -(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ob-emacs-lisp" '("org-babel-"))) - -;;;*** - -;;;### (autoloads nil "ob-eval" "ob-eval.el" (0 0 0 0)) -;;; Generated autoloads from ob-eval.el - -(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ob-eval" '("org-babel-"))) - -;;;*** - -;;;### (autoloads nil "ob-exp" "ob-exp.el" (0 0 0 0)) -;;; Generated autoloads from ob-exp.el - -(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ob-exp" '("org-"))) - -;;;*** - -;;;### (autoloads nil "ob-forth" "ob-forth.el" (0 0 0 0)) -;;; Generated autoloads from ob-forth.el - -(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ob-forth" '("org-babel-"))) - -;;;*** - -;;;### (autoloads nil "ob-fortran" "ob-fortran.el" (0 0 0 0)) -;;; Generated autoloads from ob-fortran.el - -(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ob-fortran" '("org-babel-"))) - -;;;*** - -;;;### (autoloads nil "ob-gnuplot" "ob-gnuplot.el" (0 0 0 0)) -;;; Generated autoloads from ob-gnuplot.el - -(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ob-gnuplot" '("org-babel-" "*org-babel-gnuplot-"))) - -;;;*** - -;;;### (autoloads nil "ob-groovy" "ob-groovy.el" (0 0 0 0)) -;;; Generated autoloads from ob-groovy.el - -(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ob-groovy" '("org-babel-"))) - -;;;*** - -;;;### (autoloads nil "ob-haskell" "ob-haskell.el" (0 0 0 0)) -;;; Generated autoloads from ob-haskell.el - -(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ob-haskell" '("org-babel-"))) - -;;;*** - -;;;### (autoloads nil "ob-io" "ob-io.el" (0 0 0 0)) -;;; Generated autoloads from ob-io.el - -(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ob-io" '("org-babel-"))) - -;;;*** - -;;;### (autoloads nil "ob-java" "ob-java.el" (0 0 0 0)) -;;; Generated autoloads from ob-java.el - -(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ob-java" '("org-babel-"))) - -;;;*** - -;;;### (autoloads nil "ob-js" "ob-js.el" (0 0 0 0)) -;;; Generated autoloads from ob-js.el - -(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ob-js" '("org-babel-"))) - -;;;*** - -;;;### (autoloads nil "ob-keys" "ob-keys.el" "aef8e17375204895ffacafab4505b19f") +;;;### (autoloads nil "ob-keys" "ob-keys.el" (22757 57238 0 0)) ;;; Generated autoloads from ob-keys.el (autoload 'org-babel-describe-bindings "ob-keys" "\ @@ -417,35 +242,7 @@ Describe all keybindings behind `org-babel-key-prefix'. ;;;*** -;;;### (autoloads nil "ob-latex" "ob-latex.el" (0 0 0 0)) -;;; Generated autoloads from ob-latex.el - -(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ob-latex" '("org-babel-"))) - -;;;*** - -;;;### (autoloads nil "ob-ledger" "ob-ledger.el" (0 0 0 0)) -;;; Generated autoloads from ob-ledger.el - -(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ob-ledger" '("org-babel-"))) - -;;;*** - -;;;### (autoloads nil "ob-lilypond" "ob-lilypond.el" (0 0 0 0)) -;;; Generated autoloads from ob-lilypond.el - -(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ob-lilypond" '("org-babel-" "lilypond-mode"))) - -;;;*** - -;;;### (autoloads nil "ob-lisp" "ob-lisp.el" (0 0 0 0)) -;;; Generated autoloads from ob-lisp.el - -(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ob-lisp" '("org-babel-"))) - -;;;*** - -;;;### (autoloads nil "ob-lob" "ob-lob.el" "2391a67c5342826bbd67ef40462b1239") +;;;### (autoloads nil "ob-lob" "ob-lob.el" (22757 57238 0 0)) ;;; Generated autoloads from ob-lob.el (autoload 'org-babel-lob-execute-maybe "ob-lob" "\ @@ -465,182 +262,7 @@ compatible with `org-babel-get-src-block-info', which see. ;;;*** -;;;### (autoloads nil "ob-lua" "ob-lua.el" (0 0 0 0)) -;;; Generated autoloads from ob-lua.el - -(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ob-lua" '("org-babel-"))) - -;;;*** - -;;;### (autoloads nil "ob-makefile" "ob-makefile.el" (0 0 0 0)) -;;; Generated autoloads from ob-makefile.el - -(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ob-makefile" '("org-babel-"))) - -;;;*** - -;;;### (autoloads nil "ob-maxima" "ob-maxima.el" (0 0 0 0)) -;;; Generated autoloads from ob-maxima.el - -(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ob-maxima" '("org-babel-"))) - -;;;*** - -;;;### (autoloads nil "ob-mscgen" "ob-mscgen.el" (0 0 0 0)) -;;; Generated autoloads from ob-mscgen.el - -(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ob-mscgen" '("org-babel-"))) - -;;;*** - -;;;### (autoloads nil "ob-ocaml" "ob-ocaml.el" (0 0 0 0)) -;;; Generated autoloads from ob-ocaml.el - -(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ob-ocaml" '("org-babel-"))) - -;;;*** - -;;;### (autoloads nil "ob-octave" "ob-octave.el" (0 0 0 0)) -;;; Generated autoloads from ob-octave.el - -(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ob-octave" '("org-babel-"))) - -;;;*** - -;;;### (autoloads nil "ob-org" "ob-org.el" (0 0 0 0)) -;;; Generated autoloads from ob-org.el - -(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ob-org" '("org-babel-"))) - -;;;*** - -;;;### (autoloads nil "ob-perl" "ob-perl.el" (0 0 0 0)) -;;; Generated autoloads from ob-perl.el - -(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ob-perl" '("org-babel-"))) - -;;;*** - -;;;### (autoloads nil "ob-picolisp" "ob-picolisp.el" (0 0 0 0)) -;;; Generated autoloads from ob-picolisp.el - -(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ob-picolisp" '("org-babel-"))) - -;;;*** - -;;;### (autoloads nil "ob-plantuml" "ob-plantuml.el" (0 0 0 0)) -;;; Generated autoloads from ob-plantuml.el - -(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ob-plantuml" '("org-"))) - -;;;*** - -;;;### (autoloads nil "ob-processing" "ob-processing.el" (0 0 0 0)) -;;; Generated autoloads from ob-processing.el - -(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ob-processing" '("org-babel-"))) - -;;;*** - -;;;### (autoloads nil "ob-python" "ob-python.el" (0 0 0 0)) -;;; Generated autoloads from ob-python.el - -(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ob-python" '("org-babel-"))) - -;;;*** - -;;;### (autoloads nil "ob-ref" "ob-ref.el" (0 0 0 0)) -;;; Generated autoloads from ob-ref.el - -(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ob-ref" '("org-babel-"))) - -;;;*** - -;;;### (autoloads nil "ob-ruby" "ob-ruby.el" (0 0 0 0)) -;;; Generated autoloads from ob-ruby.el - -(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ob-ruby" '("org-babel-"))) - -;;;*** - -;;;### (autoloads nil "ob-sass" "ob-sass.el" (0 0 0 0)) -;;; Generated autoloads from ob-sass.el - -(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ob-sass" '("org-babel-"))) - -;;;*** - -;;;### (autoloads nil "ob-scala" "ob-scala.el" (0 0 0 0)) -;;; Generated autoloads from ob-scala.el - -(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ob-scala" '("org-babel-"))) - -;;;*** - -;;;### (autoloads nil "ob-scheme" "ob-scheme.el" (0 0 0 0)) -;;; Generated autoloads from ob-scheme.el - -(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ob-scheme" '("org-babel-"))) - -;;;*** - -;;;### (autoloads nil "ob-screen" "ob-screen.el" (0 0 0 0)) -;;; Generated autoloads from ob-screen.el - -(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ob-screen" '("org-babel-"))) - -;;;*** - -;;;### (autoloads nil "ob-sed" "ob-sed.el" (0 0 0 0)) -;;; Generated autoloads from ob-sed.el - -(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ob-sed" '("org-babel-"))) - -;;;*** - -;;;### (autoloads nil "ob-shell" "ob-shell.el" (0 0 0 0)) -;;; Generated autoloads from ob-shell.el - -(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ob-shell" '("org-babel-"))) - -;;;*** - -;;;### (autoloads nil "ob-shen" "ob-shen.el" (0 0 0 0)) -;;; Generated autoloads from ob-shen.el - -(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ob-shen" '("org-babel-"))) - -;;;*** - -;;;### (autoloads nil "ob-sql" "ob-sql.el" (0 0 0 0)) -;;; Generated autoloads from ob-sql.el - -(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ob-sql" '("org-babel-"))) - -;;;*** - -;;;### (autoloads nil "ob-sqlite" "ob-sqlite.el" (0 0 0 0)) -;;; Generated autoloads from ob-sqlite.el - -(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ob-sqlite" '("org-babel-"))) - -;;;*** - -;;;### (autoloads nil "ob-stan" "ob-stan.el" (0 0 0 0)) -;;; Generated autoloads from ob-stan.el - -(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ob-stan" '("org-babel-"))) - -;;;*** - -;;;### (autoloads nil "ob-table" "ob-table.el" (0 0 0 0)) -;;; Generated autoloads from ob-table.el - -(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ob-table" '("org-"))) - -;;;*** - -;;;### (autoloads nil "ob-tangle" "ob-tangle.el" "3bdf344e899ac5f06aef01f914cf7c2a") +;;;### (autoloads nil "ob-tangle" "ob-tangle.el" (22757 57238 0 0)) ;;; Generated autoloads from ob-tangle.el (autoload 'org-babel-tangle-file "ob-tangle" "\ @@ -668,7 +290,8 @@ used to limit the exported source code blocks by language. ;;;*** -;;;### (autoloads nil "org-agenda" "org-agenda.el" (0 0 0 0)) +;;;### (autoloads nil "org-agenda" "org-agenda.el" (22757 57238 0 +;;;;;; 0)) ;;; Generated autoloads from org-agenda.el (autoload 'org-toggle-sticky-agenda "org-agenda" "\ @@ -688,7 +311,6 @@ T Call `org-todo-list' to display the global todo list, select only m Call `org-tags-view' to display headlines with tags matching a condition (the user is prompted for the condition). M Like `m', but select only TODO entries, no ordinary headlines. -L Create a timeline for the current buffer. e Export views to associated files. s Search entries for keywords. S Search entries for keywords, only with TODO keywords. @@ -939,11 +561,10 @@ to override `appt-message-warning-time'. \(fn &optional REFRESH FILTER &rest ARGS)" t nil) -(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "org-agenda" '("org-"))) - ;;;*** -;;;### (autoloads nil "org-archive" "org-archive.el" "95ef7e30d8accb91b0e8c6a094901eda") +;;;### (autoloads nil "org-archive" "org-archive.el" (22757 57238 +;;;;;; 0 0)) ;;; Generated autoloads from org-archive.el (autoload 'org-add-archive-files "org-archive" "\ @@ -1001,7 +622,8 @@ This command is set with the variable `org-archive-default-command'. ;;;*** -;;;### (autoloads nil "org-attach" "org-attach.el" "275d0ad05b7179d6056c3209f534665e") +;;;### (autoloads nil "org-attach" "org-attach.el" (22757 57238 0 +;;;;;; 0)) ;;; Generated autoloads from org-attach.el (autoload 'org-attach "org-attach" "\ @@ -1012,7 +634,7 @@ Shows a list of commands and prompts for another key to execute a command. ;;;*** -;;;### (autoloads nil "org-bbdb" "org-bbdb.el" "44fa870e8a88e187148b1fe228b4dbd5") +;;;### (autoloads nil "org-bbdb" "org-bbdb.el" (22757 57238 0 0)) ;;; Generated autoloads from org-bbdb.el (autoload 'org-bbdb-anniversaries "org-bbdb" "\ @@ -1020,21 +642,10 @@ Extract anniversaries from BBDB for display in the agenda. \(fn)" nil nil) -(autoload 'org-bbdb-anniversaries-future "org-bbdb" "\ -Return list of anniversaries for today and the next n-1 days (default n=7). - -\(fn &optional N)" nil nil) - -;;;*** - -;;;### (autoloads nil "org-bibtex" "org-bibtex.el" (0 0 0 0)) -;;; Generated autoloads from org-bibtex.el - -(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "org-bibtex" '("org-"))) - ;;;*** -;;;### (autoloads nil "org-capture" "org-capture.el" (0 0 0 0)) +;;;### (autoloads nil "org-capture" "org-capture.el" (22757 57238 +;;;;;; 0 0)) ;;; Generated autoloads from org-capture.el (autoload 'org-capture-string "org-capture" "\ @@ -1059,6 +670,9 @@ With a `\\[universal-argument] \\[universal-argument]' prefix argument, go to th When called with a `C-0' (zero) prefix, insert a template at point. +When called with a `C-1' (one) prefix, force prompting for a date when +a datetree entry is made. + ELisp programs can set KEYS to a string associated with a template in `org-capture-templates'. In this case, interactive selection will be bypassed. @@ -1075,11 +689,9 @@ Set `org-capture-templates' to be similar to `org-remember-templates'. \(fn)" t nil) -(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "org-capture" '("org-"))) - ;;;*** -;;;### (autoloads nil "org-clock" "org-clock.el" "ed7cf422f023bb9ecc064c262a7dfc24") +;;;### (autoloads nil "org-clock" "org-clock.el" (22757 57238 0 0)) ;;; Generated autoloads from org-clock.el (autoload 'org-resolve-clocks "org-clock" "\ @@ -1217,7 +829,8 @@ Otherwise, return nil. ;;;*** -;;;### (autoloads nil "org-colview" "org-colview.el" (0 0 0 0)) +;;;### (autoloads nil "org-colview" "org-colview.el" (22757 57238 +;;;;;; 0 0)) ;;; Generated autoloads from org-colview.el (autoload 'org-columns-remove-overlays "org-colview" "\ @@ -1283,11 +896,10 @@ Turn on or update column view in the agenda. \(fn)" t nil) -(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "org-colview" '("org-"))) - ;;;*** -;;;### (autoloads nil "org-compat" "org-compat.el" (0 0 0 0)) +;;;### (autoloads nil "org-compat" "org-compat.el" (22757 57238 0 +;;;;;; 0)) ;;; Generated autoloads from org-compat.el (autoload 'org-check-version "org-compat" "\ @@ -1295,32 +907,18 @@ Try very hard to provide sensible version strings. \(fn)" nil t) -(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "org-compat" '("org-"))) - -;;;*** - -;;;### (autoloads nil "org-crypt" "org-crypt.el" (0 0 0 0)) -;;; Generated autoloads from org-crypt.el - -(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "org-crypt" '("org-"))) - ;;;*** -;;;### (autoloads nil "org-ctags" "org-ctags.el" (0 0 0 0)) -;;; Generated autoloads from org-ctags.el - -(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "org-ctags" '("org-ctags-"))) - -;;;*** - -;;;### (autoloads nil "org-datetree" "org-datetree.el" "344cb8b21572a5db9627e15cd726b75a") +;;;### (autoloads nil "org-datetree" "org-datetree.el" (22757 57238 +;;;;;; 0 0)) ;;; Generated autoloads from org-datetree.el (autoload 'org-datetree-find-date-create "org-datetree" "\ Find or create an entry for date D. If KEEP-RESTRICTION is non-nil, do not widen the buffer. When it is nil, the buffer will be widened to make sure an existing date -tree can be found. +tree can be found. If it is the sympol `subtree-at-point', then the tree +will be built under the headline at point. \(fn D &optional KEEP-RESTRICTION)" nil nil) @@ -1328,22 +926,70 @@ tree can be found. Find or create an ISO week entry for date D. Compared to `org-datetree-find-date-create' this function creates entries ordered by week instead of months. -If KEEP-RESTRICTION is non-nil, do not widen the buffer. When it -is nil, the buffer will be widened to make sure an existing date -tree can be found. +When it is nil, the buffer will be widened to make sure an existing date +tree can be found. If it is the sympol `subtree-at-point', then the tree +will be built under the headline at point. \(fn D &optional KEEP-RESTRICTION)" nil nil) ;;;*** -;;;### (autoloads nil "org-docview" "org-docview.el" (0 0 0 0)) -;;; Generated autoloads from org-docview.el +;;;### (autoloads nil "org-duration" "org-duration.el" (22757 57238 +;;;;;; 0 0)) +;;; Generated autoloads from org-duration.el + +(autoload 'org-duration-set-regexps "org-duration" "\ +Set duration related regexps. + +\(fn)" t nil) + +(autoload 'org-duration-p "org-duration" "\ +Non-nil when string S is a time duration. + +\(fn S)" nil nil) + +(autoload 'org-duration-to-minutes "org-duration" "\ +Return number of minutes of DURATION string. + +When optional argument CANONICAL is non-nil, ignore +`org-duration-units' and use standard time units value. + +As a special case, a bare number represents minutes. + +Return value as a float. Raise an error if duration format is +not recognized. + +\(fn DURATION &optional CANONICAL)" nil nil) -(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "org-docview" '("org-docview-"))) +(autoload 'org-duration-from-minutes "org-duration" "\ +Return duration string for a given number of MINUTES. + +Format duration according to `org-duration-format' or FMT, when +non-nil. + +When optional argument CANONICAL is non-nil, ignore +`org-duration-units' and use standard time units value. + +Raise an error if expected format is unknown. + +\(fn MINUTES &optional FMT CANONICAL)" nil nil) + +(autoload 'org-duration-h:mm-only-p "org-duration" "\ +Non-nil when every duration in TIMES has \"H:MM\" or \"H:MM:SS\" format. + +TIMES is a list of duration strings. + +Return nil if any duration is expressed with units, as defined in +`org-duration-units'. Otherwise, if any duration is expressed +with \"H:MM:SS\" format, return `h:mm:ss'. Otherwise, return +`h:mm'. + +\(fn TIMES)" nil nil) ;;;*** -;;;### (autoloads nil "org-element" "org-element.el" "c4ce6b7b82c57a87233ddc00b913b514") +;;;### (autoloads nil "org-element" "org-element.el" (22757 57238 +;;;;;; 0 0)) ;;; Generated autoloads from org-element.el (autoload 'org-element-update-syntax "org-element" "\ @@ -1415,35 +1061,7 @@ Providing it allows for quicker computation. ;;;*** -;;;### (autoloads nil "org-entities" "org-entities.el" (0 0 0 0)) -;;; Generated autoloads from org-entities.el - -(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "org-entities" '("org-entit"))) - -;;;*** - -;;;### (autoloads nil "org-eshell" "org-eshell.el" (0 0 0 0)) -;;; Generated autoloads from org-eshell.el - -(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "org-eshell" '("org-eshell-"))) - -;;;*** - -;;;### (autoloads nil "org-eww" "org-eww.el" (0 0 0 0)) -;;; Generated autoloads from org-eww.el - -(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "org-eww" '("org-eww-"))) - -;;;*** - -;;;### (autoloads nil "org-faces" "org-faces.el" (0 0 0 0)) -;;; Generated autoloads from org-faces.el - -(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "org-faces" '("org-"))) - -;;;*** - -;;;### (autoloads nil "org-feed" "org-feed.el" "608074d7ed60ce9f56348bfcce5183ec") +;;;### (autoloads nil "org-feed" "org-feed.el" (22757 57238 0 0)) ;;; Generated autoloads from org-feed.el (autoload 'org-feed-update-all "org-feed" "\ @@ -1470,7 +1088,8 @@ Show the raw feed buffer of a feed. ;;;*** -;;;### (autoloads nil "org-footnote" "org-footnote.el" "77ebf00295a588116899b29f5c171e47") +;;;### (autoloads nil "org-footnote" "org-footnote.el" (22757 57238 +;;;;;; 0 0)) ;;; Generated autoloads from org-footnote.el (autoload 'org-footnote-action "org-footnote" "\ @@ -1485,27 +1104,13 @@ When neither at definition or reference, create a new footnote, interactively if possible. With prefix arg SPECIAL, or when no footnote can be created, -offer additional commands in a menu. - -\(fn &optional SPECIAL)" t nil) - -;;;*** - -;;;### (autoloads nil "org-gnus" "org-gnus.el" (0 0 0 0)) -;;; Generated autoloads from org-gnus.el - -(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "org-gnus" '("org-"))) - -;;;*** - -;;;### (autoloads nil "org-habit" "org-habit.el" (0 0 0 0)) -;;; Generated autoloads from org-habit.el +offer additional commands in a menu. -(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "org-habit" '("org-"))) +\(fn &optional SPECIAL)" t nil) ;;;*** -;;;### (autoloads nil "org-id" "org-id.el" "cc516afc6179f3d06aa3fb530949a7e9") +;;;### (autoloads nil "org-id" "org-id.el" (22757 57238 0 0)) ;;; Generated autoloads from org-id.el (autoload 'org-id-get-create "org-id" "\ @@ -1597,7 +1202,8 @@ Store a link to the current entry, using its ID. ;;;*** -;;;### (autoloads nil "org-indent" "org-indent.el" "5387df02530b7f6d2c06073af3d39b87") +;;;### (autoloads nil "org-indent" "org-indent.el" (22757 57238 0 +;;;;;; 0)) ;;; Generated autoloads from org-indent.el (autoload 'org-indent-mode "org-indent" "\ @@ -1614,22 +1220,7 @@ during idle time. ;;;*** -;;;### (autoloads nil "org-info" "org-info.el" (0 0 0 0)) -;;; Generated autoloads from org-info.el - -(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "org-info" '("org-info-"))) - -;;;*** - -;;;### (autoloads nil "org-inlinetask" "org-inlinetask.el" (0 0 0 -;;;;;; 0)) -;;; Generated autoloads from org-inlinetask.el - -(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "org-inlinetask" '("org-inlinetask-"))) - -;;;*** - -;;;### (autoloads nil "org-irc" "org-irc.el" "7cbdd6fc2f77dda7a2e3b24d6161adc9") +;;;### (autoloads nil "org-irc" "org-irc.el" (22757 57238 0 0)) ;;; Generated autoloads from org-irc.el (autoload 'org-irc-store-link "org-irc" "\ @@ -1639,7 +1230,7 @@ Dispatch to the appropriate function to store a link to an IRC session. ;;;*** -;;;### (autoloads nil "org-lint" "org-lint.el" (0 0 0 0)) +;;;### (autoloads nil "org-lint" "org-lint.el" (22757 57238 0 0)) ;;; Generated autoloads from org-lint.el (autoload 'org-lint "org-lint" "\ @@ -1653,25 +1244,9 @@ ARG can also be a list of checker names, as symbols, to run. \(fn &optional ARG)" t nil) -(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "org-lint" '("org-lint-"))) - -;;;*** - -;;;### (autoloads nil "org-list" "org-list.el" (0 0 0 0)) -;;; Generated autoloads from org-list.el - -(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "org-list" '("org-"))) - -;;;*** - -;;;### (autoloads nil "org-macro" "org-macro.el" (0 0 0 0)) -;;; Generated autoloads from org-macro.el - -(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "org-macro" '("org-macro-"))) - ;;;*** -;;;### (autoloads nil "org-macs" "org-macs.el" (0 0 0 0)) +;;;### (autoloads nil "org-macs" "org-macs.el" (22757 57238 0 0)) ;;; Generated autoloads from org-macs.el (autoload 'org-load-noerror-mustsuffix "org-macs" "\ @@ -1679,18 +1254,10 @@ Load FILE with optional arguments NOERROR and MUSTSUFFIX. \(fn FILE)" nil t) -(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "org-macs" '("org-"))) - -;;;*** - -;;;### (autoloads nil "org-mhe" "org-mhe.el" (0 0 0 0)) -;;; Generated autoloads from org-mhe.el - -(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "org-mhe" '("org-mhe-"))) - ;;;*** -;;;### (autoloads nil "org-mobile" "org-mobile.el" "bfa675ecf4e4d2836f8acb6018917e68") +;;;### (autoloads nil "org-mobile" "org-mobile.el" (22757 57238 0 +;;;;;; 0)) ;;; Generated autoloads from org-mobile.el (autoload 'org-mobile-push "org-mobile" "\ @@ -1709,21 +1276,7 @@ agenda view showing the flagged items. ;;;*** -;;;### (autoloads nil "org-mouse" "org-mouse.el" (0 0 0 0)) -;;; Generated autoloads from org-mouse.el - -(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "org-mouse" '("org-mouse-"))) - -;;;*** - -;;;### (autoloads nil "org-pcomplete" "org-pcomplete.el" (0 0 0 0)) -;;; Generated autoloads from org-pcomplete.el - -(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "org-pcomplete" '("org-" "pcomplete/org-mode/"))) - -;;;*** - -;;;### (autoloads nil "org-plot" "org-plot.el" "03f6cfa8c21082c9ad6f01d1963728fc") +;;;### (autoloads nil "org-plot" "org-plot.el" (22757 57238 0 0)) ;;; Generated autoloads from org-plot.el (autoload 'org-plot/gnuplot "org-plot" "\ @@ -1735,28 +1288,7 @@ line directly before or after the table. ;;;*** -;;;### (autoloads nil "org-protocol" "org-protocol.el" (0 0 0 0)) -;;; Generated autoloads from org-protocol.el - -(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "org-protocol" '("org-protocol-"))) - -;;;*** - -;;;### (autoloads nil "org-rmail" "org-rmail.el" (0 0 0 0)) -;;; Generated autoloads from org-rmail.el - -(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "org-rmail" '("org-rmail-"))) - -;;;*** - -;;;### (autoloads nil "org-src" "org-src.el" (0 0 0 0)) -;;; Generated autoloads from org-src.el - -(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "org-src" '("org-"))) - -;;;*** - -;;;### (autoloads nil "org-table" "org-table.el" "80e55c91865f9a597aba7ace1babd95b") +;;;### (autoloads nil "org-table" "org-table.el" (22757 57238 0 0)) ;;; Generated autoloads from org-table.el (autoload 'org-table-create-with-table\.el "org-table" "\ @@ -1904,12 +1436,6 @@ Show info about the current field, and highlight any reference at point. \(fn ARG)" t nil) -(autoload 'org-table-current-dline "org-table" "\ -Find out what table data line we are in. -Only data lines count for this. - -\(fn)" t nil) - (autoload 'org-table-goto-column "org-table" "\ Move the cursor to the Nth column in the current table line. With optional argument ON-DELIM, stop with point before the left delimiter @@ -2074,9 +1600,12 @@ blank, and the content is appended to the field above. (autoload 'org-table-edit-field "org-table" "\ Edit table field in a different window. -This is mainly useful for fields that contain hidden parts. When called -with a `\\[universal-argument]' prefix, just make the full field visible so that it can be -edited in place. +This is mainly useful for fields that contain hidden parts. + +When called with a `\\[universal-argument]' prefix, just make the full field +visible so that it can be edited in place. + +When called with a `\\[universal-argument] \\[universal-argument]' prefix, toggle `org-table-follow-field-mode'. \(fn ARG)" t nil) @@ -2168,14 +1697,21 @@ For details, see the Org mode manual. This function can also be called from Lisp programs and offers additional arguments: EQUATION can be the formula to apply. If this -argument is given, the user will not be prompted. SUPPRESS-ALIGN is -used to speed-up recursive calls by by-passing unnecessary aligns. +argument is given, the user will not be prompted. + +SUPPRESS-ALIGN is used to speed-up recursive calls by by-passing +unnecessary aligns. + SUPPRESS-CONST suppresses the interpretation of constants in the -formula, assuming that this has been done already outside the function. -SUPPRESS-STORE means the formula should not be stored, either because -it is already stored, or because it is a modified equation that should -not overwrite the stored one. SUPPRESS-ANALYSIS prevents any call to -`org-table-analyze'. +formula, assuming that this has been done already outside the +function. + +SUPPRESS-STORE means the formula should not be stored, either +because it is already stored, or because it is a modified +equation that should not overwrite the stored one. + +SUPPRESS-ANALYSIS prevents analyzing the table and checking +location of point. \(fn &optional ARG EQUATION SUPPRESS-ALIGN SUPPRESS-CONST SUPPRESS-STORE SUPPRESS-ANALYSIS)" t nil) @@ -2436,7 +1972,7 @@ which will prompt for the width. ;;;*** -;;;### (autoloads nil "org-timer" "org-timer.el" "3e7535f8a06b8928041f0625e81614b7") +;;;### (autoloads nil "org-timer" "org-timer.el" (22757 57238 0 0)) ;;; Generated autoloads from org-timer.el (autoload 'org-timer-start "org-timer" "\ @@ -2502,7 +2038,8 @@ using three `C-u' prefix arguments. ;;;*** -;;;### (autoloads nil "org-version" "org-version.el" (0 0 0 0)) +;;;### (autoloads nil "org-version" "org-version.el" (22759 18835 +;;;;;; 813382 284000)) ;;; Generated autoloads from org-version.el (autoload 'org-release "org-version" "\ @@ -2522,14 +2059,7 @@ The location of ODT styles.") ;;;*** -;;;### (autoloads nil "org-w3m" "org-w3m.el" (0 0 0 0)) -;;; Generated autoloads from org-w3m.el - -(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "org-w3m" '("org-w3m-"))) - -;;;*** - -;;;### (autoloads nil "org" "org.el" (0 0 0 0)) +;;;### (autoloads nil "org" "org.el" (22757 57238 0 0)) ;;; Generated autoloads from org.el (autoload 'org-babel-do-load-languages "org" "\ @@ -2749,200 +2279,9 @@ Call the customize function with org as argument. \(fn)" t nil) -(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "org" '("org" "turn-on-org-cdlatex"))) - -;;;*** - -;;;### (autoloads nil "ox" "ox.el" "05bb28760552014600de6c6647d967bb") -;;; Generated autoloads from ox.el - -(autoload 'org-export-get-backend "ox" "\ -Return export back-end named after NAME. -NAME is a symbol. Return nil if no such back-end is found. - -\(fn NAME)" nil nil) - -(autoload 'org-export-get-environment "ox" "\ -Collect export options from the current buffer. - -Optional argument BACKEND is an export back-end, as returned by -`org-export-create-backend'. - -When optional argument SUBTREEP is non-nil, assume the export is -done against the current sub-tree. - -Third optional argument EXT-PLIST is a property list with -external parameters overriding Org default settings, but still -inferior to file-local settings. - -\(fn &optional BACKEND SUBTREEP EXT-PLIST)" nil nil) - -(autoload 'org-export-as "ox" "\ -Transcode current Org buffer into BACKEND code. - -BACKEND is either an export back-end, as returned by, e.g., -`org-export-create-backend', or a symbol referring to -a registered back-end. - -If narrowing is active in the current buffer, only transcode its -narrowed part. - -If a region is active, transcode that region. - -When optional argument SUBTREEP is non-nil, transcode the -sub-tree at point, extracting information from the headline -properties first. - -When optional argument VISIBLE-ONLY is non-nil, don't export -contents of hidden elements. - -When optional argument BODY-ONLY is non-nil, only return body -code, without surrounding template. - -Optional argument EXT-PLIST, when provided, is a property list -with external parameters overriding Org default settings, but -still inferior to file-local settings. - -Return code as a string. - -\(fn BACKEND &optional SUBTREEP VISIBLE-ONLY BODY-ONLY EXT-PLIST)" nil nil) - -(autoload 'org-export-string-as "ox" "\ -Transcode STRING into BACKEND code. - -BACKEND is either an export back-end, as returned by, e.g., -`org-export-create-backend', or a symbol referring to -a registered back-end. - -When optional argument BODY-ONLY is non-nil, only return body -code, without preamble nor postamble. - -Optional argument EXT-PLIST, when provided, is a property list -with external parameters overriding Org default settings, but -still inferior to file-local settings. - -Return code as a string. - -\(fn STRING BACKEND &optional BODY-ONLY EXT-PLIST)" nil nil) - -(autoload 'org-export-replace-region-by "ox" "\ -Replace the active region by its export to BACKEND. -BACKEND is either an export back-end, as returned by, e.g., -`org-export-create-backend', or a symbol referring to -a registered back-end. - -\(fn BACKEND)" nil nil) - -(autoload 'org-export-insert-default-template "ox" "\ -Insert all export keywords with default values at beginning of line. - -BACKEND is a symbol referring to the name of a registered export -back-end, for which specific export options should be added to -the template, or `default' for default template. When it is nil, -the user will be prompted for a category. - -If SUBTREEP is non-nil, export configuration will be set up -locally for the subtree through node properties. - -\(fn &optional BACKEND SUBTREEP)" t nil) - -(autoload 'org-export-to-buffer "ox" "\ -Call `org-export-as' with output to a specified buffer. - -BACKEND is either an export back-end, as returned by, e.g., -`org-export-create-backend', or a symbol referring to -a registered back-end. - -BUFFER is the name of the output buffer. If it already exists, -it will be erased first, otherwise, it will be created. - -A non-nil optional argument ASYNC means the process should happen -asynchronously. The resulting buffer should then be accessible -through the `org-export-stack' interface. When ASYNC is nil, the -buffer is displayed if `org-export-show-temporary-export-buffer' -is non-nil. - -Optional arguments SUBTREEP, VISIBLE-ONLY, BODY-ONLY and -EXT-PLIST are similar to those used in `org-export-as', which -see. - -Optional argument POST-PROCESS is a function which should accept -no argument. It is always called within the current process, -from BUFFER, with point at its beginning. Export back-ends can -use it to set a major mode there, e.g, - - (defun org-latex-export-as-latex - (&optional async subtreep visible-only body-only ext-plist) - (interactive) - (org-export-to-buffer \\='latex \"*Org LATEX Export*\" - async subtreep visible-only body-only ext-plist (lambda () (LaTeX-mode)))) - -This function returns BUFFER. - -\(fn BACKEND BUFFER &optional ASYNC SUBTREEP VISIBLE-ONLY BODY-ONLY EXT-PLIST POST-PROCESS)" nil nil) - -(function-put 'org-export-to-buffer 'lisp-indent-function '2) - -(autoload 'org-export-to-file "ox" "\ -Call `org-export-as' with output to a specified file. - -BACKEND is either an export back-end, as returned by, e.g., -`org-export-create-backend', or a symbol referring to -a registered back-end. FILE is the name of the output file, as -a string. - -A non-nil optional argument ASYNC means the process should happen -asynchronously. The resulting buffer will then be accessible -through the `org-export-stack' interface. - -Optional arguments SUBTREEP, VISIBLE-ONLY, BODY-ONLY and -EXT-PLIST are similar to those used in `org-export-as', which -see. - -Optional argument POST-PROCESS is called with FILE as its -argument and happens asynchronously when ASYNC is non-nil. It -has to return a file name, or nil. Export back-ends can use this -to send the output file through additional processing, e.g, - - (defun org-latex-export-to-latex - (&optional async subtreep visible-only body-only ext-plist) - (interactive) - (let ((outfile (org-export-output-file-name \".tex\" subtreep))) - (org-export-to-file \\='latex outfile - async subtreep visible-only body-only ext-plist - (lambda (file) (org-latex-compile file))) - -The function returns either a file name returned by POST-PROCESS, -or FILE. - -\(fn BACKEND FILE &optional ASYNC SUBTREEP VISIBLE-ONLY BODY-ONLY EXT-PLIST POST-PROCESS)" nil nil) - -(function-put 'org-export-to-file 'lisp-indent-function '2) - -(autoload 'org-export-dispatch "ox" "\ -Export dispatcher for Org mode. - -It provides an access to common export related tasks in a buffer. -Its interface comes in two flavors: standard and expert. - -While both share the same set of bindings, only the former -displays the valid keys associations in a dedicated buffer. -Scrolling (resp. line-wise motion) in this buffer is done with -SPC and DEL (resp. C-n and C-p) keys. - -Set variable `org-export-dispatch-use-expert-ui' to switch to one -flavor or the other. - -When ARG is `\\[universal-argument]', repeat the last export action, with the same -set of options used back then, on the current buffer. - -When ARG is `\\[universal-argument] \\[universal-argument]', display the asynchronous export stack. - -\(fn &optional ARG)" t nil) - ;;;*** -;;;### (autoloads nil "ox-ascii" "ox-ascii.el" "95b3c37f08fb0ebe5273efafd0f988f1") +;;;### (autoloads nil "ox-ascii" "ox-ascii.el" (22757 57238 0 0)) ;;; Generated autoloads from ox-ascii.el (autoload 'org-ascii-export-as-ascii "ox-ascii" "\ @@ -3042,7 +2381,7 @@ Return output file name. ;;;*** -;;;### (autoloads nil "ox-beamer" "ox-beamer.el" "4198cac31feb4fffae98088664bf6115") +;;;### (autoloads nil "ox-beamer" "ox-beamer.el" (22757 57238 0 0)) ;;; Generated autoloads from ox-beamer.el (autoload 'org-beamer-mode "ox-beamer" "\ @@ -3177,7 +2516,7 @@ Return output file name. ;;;*** -;;;### (autoloads nil "ox-html" "ox-html.el" "920d50a595bad039c4953b886a95b048") +;;;### (autoloads nil "ox-html" "ox-html.el" (22757 57238 0 0)) ;;; Generated autoloads from ox-html.el (put 'org-html-head-include-default-style 'safe-local-variable 'booleanp) @@ -3283,7 +2622,8 @@ Return output file name. ;;;*** -;;;### (autoloads nil "ox-icalendar" "ox-icalendar.el" "4aba56b7a031259feef0494c7c4ab4ba") +;;;### (autoloads nil "ox-icalendar" "ox-icalendar.el" (22757 57238 +;;;;;; 0 0)) ;;; Generated autoloads from ox-icalendar.el (autoload 'org-icalendar-export-to-ics "ox-icalendar" "\ @@ -3333,16 +2673,19 @@ The file is stored under the name chosen in ;;;*** -;;;### (autoloads nil "ox-latex" "ox-latex.el" "57c8c5fa4f77f6160c7017cad7111c2d") +;;;### (autoloads nil "ox-latex" "ox-latex.el" (22757 57238 0 0)) ;;; Generated autoloads from ox-latex.el (autoload 'org-latex-make-preamble "ox-latex" "\ Return a formatted LaTeX preamble. INFO is a plist used as a communication channel. Optional argument TEMPLATE, when non-nil, is the header template string, -as expected by `org-splice-latex-header'. +as expected by `org-splice-latex-header'. When SNIPPET? is +non-nil, only includes packages relevant to image generation, as +specified in `org-latex-default-packages-alist' or +`org-latex-packages-alist'. -\(fn INFO &optional TEMPLATE)" nil nil) +\(fn INFO &optional TEMPLATE SNIPPET\\=\\?)" nil nil) (autoload 'org-latex-export-as-latex "ox-latex" "\ Export current buffer as a LaTeX buffer. @@ -3466,14 +2809,7 @@ Return output file name. ;;;*** -;;;### (autoloads nil "ox-man" "ox-man.el" (0 0 0 0)) -;;; Generated autoloads from ox-man.el - -(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ox-man" '("org-man-"))) - -;;;*** - -;;;### (autoloads nil "ox-md" "ox-md.el" "b1c6278e891677457394317d4b226b3e") +;;;### (autoloads nil "ox-md" "ox-md.el" (22757 57238 0 0)) ;;; Generated autoloads from ox-md.el (autoload 'org-md-export-as-markdown "ox-md" "\ @@ -3545,7 +2881,7 @@ Return output file name. ;;;*** -;;;### (autoloads nil "ox-odt" "ox-odt.el" "62715edd080b6dc8d5baa9f4ea6b296c") +;;;### (autoloads nil "ox-odt" "ox-odt.el" (22757 57238 0 0)) ;;; Generated autoloads from ox-odt.el (put 'org-odt-preferred-output-format 'safe-local-variable 'stringp) @@ -3607,7 +2943,7 @@ is non-nil then the newly converted file is opened using ;;;*** -;;;### (autoloads nil "ox-org" "ox-org.el" "d126e8a4348dd5d8538b072fd888fd59") +;;;### (autoloads nil "ox-org" "ox-org.el" (22757 57238 0 0)) ;;; Generated autoloads from ox-org.el (autoload 'org-org-export-as-org "ox-org" "\ @@ -3685,7 +3021,8 @@ Return output file name. ;;;*** -;;;### (autoloads nil "ox-publish" "ox-publish.el" "db00755d9c0d3d8c71597adf15a2512a") +;;;### (autoloads nil "ox-publish" "ox-publish.el" (22757 57238 0 +;;;;;; 0)) ;;; Generated autoloads from ox-publish.el (defalias 'org-publish-project 'org-publish) @@ -3728,7 +3065,8 @@ the project. ;;;*** -;;;### (autoloads nil "ox-texinfo" "ox-texinfo.el" "aaad8d4c3a538744acc5bc6f623616a7") +;;;### (autoloads nil "ox-texinfo" "ox-texinfo.el" (22757 57238 0 +;;;;;; 0)) ;;; Generated autoloads from ox-texinfo.el (autoload 'org-texinfo-publish-to-texinfo "ox-texinfo" "\ @@ -3752,7 +3090,7 @@ command to convert it. ;;;*** -;;;### (autoloads nil "ox" "ox.el" (0 0 0 0)) +;;;### (autoloads nil "ox" "ox.el" (22757 57238 0 0)) ;;; Generated autoloads from ox.el (autoload 'org-export-get-backend "ox" "\ @@ -3939,8 +3277,6 @@ When ARG is `\\[universal-argument] \\[universal-argument]', display the asynchr \(fn &optional ARG)" t nil) -(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ox" '("org-export-"))) - ;;;*** (provide 'org-loaddefs) diff --git a/elpa/org-20170210/org-macro.el b/elpa/org-20170407/org-macro.el similarity index 100% rename from elpa/org-20170210/org-macro.el rename to elpa/org-20170407/org-macro.el diff --git a/elpa/org-20170210/org-macs.el b/elpa/org-20170407/org-macs.el similarity index 100% rename from elpa/org-20170210/org-macs.el rename to elpa/org-20170407/org-macs.el diff --git a/elpa/org-20170210/org-mhe.el b/elpa/org-20170407/org-mhe.el similarity index 100% rename from elpa/org-20170210/org-mhe.el rename to elpa/org-20170407/org-mhe.el diff --git a/elpa/org-20170210/org-mobile.el b/elpa/org-20170407/org-mobile.el similarity index 100% rename from elpa/org-20170210/org-mobile.el rename to elpa/org-20170407/org-mobile.el diff --git a/elpa/org-20170210/org-mouse.el b/elpa/org-20170407/org-mouse.el similarity index 99% rename from elpa/org-20170210/org-mouse.el rename to elpa/org-20170407/org-mouse.el index d6a47278..34a57005 100644 --- a/elpa/org-20170210/org-mouse.el +++ b/elpa/org-20170407/org-mouse.el @@ -516,7 +516,6 @@ SCHEDULED: or DEADLINE: or ANYTHINGLIKETHIS:" ["Check Phrase ..." org-occur] "--" ["Display Agenda" org-agenda-list t] - ["Display Timeline" org-timeline t] ["Display TODO List" org-todo-list t] ("Display Tags" ,@(org-mouse-keyword-menu diff --git a/elpa/org-20170210/org-pcomplete.el b/elpa/org-20170407/org-pcomplete.el similarity index 100% rename from elpa/org-20170210/org-pcomplete.el rename to elpa/org-20170407/org-pcomplete.el diff --git a/elpa/org-20170407/org-pkg.el b/elpa/org-20170407/org-pkg.el new file mode 100644 index 00000000..ce53e693 --- /dev/null +++ b/elpa/org-20170407/org-pkg.el @@ -0,0 +1,5 @@ +(define-package "org" + "20170407" "Outline-based notes management and organizer" ( )) +;; Local Variables: +;; no-byte-compile: t +;; End: diff --git a/elpa/org-20170210/org-plot.el b/elpa/org-20170407/org-plot.el similarity index 100% rename from elpa/org-20170210/org-plot.el rename to elpa/org-20170407/org-plot.el diff --git a/elpa/org-20170210/org-protocol.el b/elpa/org-20170407/org-protocol.el similarity index 99% rename from elpa/org-20170210/org-protocol.el rename to elpa/org-20170407/org-protocol.el index c2abb2f2..a031d51d 100644 --- a/elpa/org-20170210/org-protocol.el +++ b/elpa/org-20170407/org-protocol.el @@ -651,11 +651,13 @@ The visited file needs to be part of a publishing project in `org-publish-project-alist' for this to work. The function delegates most of the work to `org-protocol-create'." (interactive) - (require 'org-publish) + (require 'ox-publish) (let ((all (or (org-publish-get-project-from-filename buffer-file-name)))) (if all (org-protocol-create (cdr all)) - (message "Not in an org-project. Did you mean `%s'?" - (substitute-command-keys "`\\[org-protocol-create]'"))))) + (message "%s" + (substitute-command-keys + "Not in an Org project. \ +Did you mean `\\[org-protocol-create]'?"))))) (defun org-protocol-create (&optional project-plist) "Create a new org-protocol project interactively. diff --git a/elpa/org-20170210/org-rmail.el b/elpa/org-20170407/org-rmail.el similarity index 100% rename from elpa/org-20170210/org-rmail.el rename to elpa/org-20170407/org-rmail.el diff --git a/elpa/org-20170210/org-src.el b/elpa/org-20170407/org-src.el similarity index 96% rename from elpa/org-20170210/org-src.el rename to elpa/org-20170407/org-src.el index b45306ef..b0f952fa 100644 --- a/elpa/org-20170210/org-src.el +++ b/elpa/org-20170407/org-src.el @@ -332,7 +332,7 @@ where BEG and END are buffer positions and CONTENTS is a string." (skip-chars-backward " \r\t\n") (line-beginning-position 1)) (org-element-property :value datum))) - ((memq type '(fixed-width table)) + ((memq type '(fixed-width latex-environment table)) (let ((beg (org-element-property :post-affiliated datum)) (end (progn (goto-char (org-element-property :end datum)) (skip-chars-backward " \r\t\n") @@ -525,19 +525,19 @@ as `org-src-fontify-natively' is non-nil." (let ((inhibit-modification-hooks nil)) (erase-buffer) ;; Add string and a final space to ensure property change. - (insert string " ") - (unless (eq major-mode lang-mode) (funcall lang-mode)) - (org-font-lock-ensure) - (let ((pos (point-min)) next) - (while (setq next (next-property-change pos)) - ;; Handle additional properties from font-lock, so as to - ;; preserve, e.g., composition. - (dolist (prop (cons 'face font-lock-extra-managed-props)) - (let ((new-prop (get-text-property pos prop))) - (put-text-property - (+ start (1- pos)) (1- (+ start next)) prop new-prop - org-buffer))) - (setq pos next))))) + (insert string " ")) + (unless (eq major-mode lang-mode) (funcall lang-mode)) + (org-font-lock-ensure) + (let ((pos (point-min)) next) + (while (setq next (next-property-change pos)) + ;; Handle additional properties from font-lock, so as to + ;; preserve, e.g., composition. + (dolist (prop (cons 'face font-lock-extra-managed-props)) + (let ((new-prop (get-text-property pos prop))) + (put-text-property + (+ start (1- pos)) (1- (+ start next)) prop new-prop + org-buffer))) + (setq pos next)))) ;; Add Org faces. (let ((src-face (nth 1 (assoc-string lang org-src-block-faces t)))) (when (or (facep src-face) (listp src-face)) @@ -646,7 +646,8 @@ See also `org-src-mode-hook'." (setq buffer-offer-save t) (setq buffer-file-name (concat (buffer-file-name (marker-buffer org-src--beg-marker)) - "[" (buffer-name) "]"))) + "[" (buffer-name) "]")) + (setq-local write-contents-functions '(org-edit-src-save))) (setq buffer-read-only t)))) (add-hook 'org-src-mode-hook #'org-src-mode-configure-edit-buffer) @@ -853,6 +854,28 @@ Throw an error when not at such a table." (table-recognize) t)) +(defun org-edit-latex-environment () + "Edit LaTeX environment at point. +\\ +The LaTeX environment is copied into a new buffer. Major mode is +set to the one associated to \"latex\" in `org-src-lang-modes', +or to `latex-mode' if there is none. + +When done, exit with `\\[org-edit-src-exit]'. The edited text \ +will then replace +the LaTeX environment in the Org mode buffer." + (interactive) + (let ((element (org-element-at-point))) + (unless (and (eq (org-element-type element) 'latex-environment) + (org-src--on-datum-p element)) + (user-error "Not in a LaTeX environment")) + (org-src--edit-element + element + (org-src--construct-edit-buffer-name (buffer-name) "LaTeX environment") + (org-src--get-lang-mode "latex") + t) + t)) + (defun org-edit-export-block () "Edit export block at point. \\ @@ -1032,7 +1055,10 @@ Throw an error if there is no such buffer." (insert edited-code) (when (and expecting-bol (not (bolp))) (insert "\n"))) (save-buffer) - (move-overlay overlay beg (point))))) + (move-overlay overlay beg (point)))) + ;; `write-contents-functions' requires the function to return + ;; a non-nil value so that other functions are not called. + t) (defun org-edit-src-exit () "Kill current sub-editing buffer and return to source buffer." diff --git a/elpa/org-20170210/org-table.el b/elpa/org-20170407/org-table.el similarity index 98% rename from elpa/org-20170210/org-table.el rename to elpa/org-20170407/org-table.el index f6d43d39..488762f1 100644 --- a/elpa/org-20170210/org-table.el +++ b/elpa/org-20170407/org-table.el @@ -65,11 +65,12 @@ (declare-function calc-eval "calc" (str &optional separator &rest args)) -(defvar orgtbl-mode) ; defined below -(defvar orgtbl-mode-menu) ; defined when orgtbl mode get initialized (defvar constants-unit-system) +(defvar org-element-use-cache) (defvar org-export-filters-alist) (defvar org-table-follow-field-mode) +(defvar orgtbl-mode) ; defined below +(defvar orgtbl-mode-menu) ; defined when orgtbl mode get initialized (defvar sort-fold-case) (defvar orgtbl-after-send-table-hook nil @@ -1155,7 +1156,7 @@ to a number. In the case of a timestamp, increment by days." (- (org-time-string-to-absolute txt) (org-time-string-to-absolute txt-up))) ((string-match org-ts-regexp3 txt) 1) - ((string-match "^[0-9]+\\(\.[0-9]+\\)?" txt-up) + ((string-match "\\([-+]\\)?[0-9]+\\(?:\.[0-9]+\\)?" txt-up) (- (string-to-number txt) (string-to-number (match-string 0 txt-up)))) (t 1))) @@ -1317,22 +1318,15 @@ value." (defun org-table-current-column () "Find out which column we are in." (interactive) - (when (called-interactively-p 'any) (org-table-check-inside-data-field)) (save-excursion (let ((column 0) (pos (point))) (beginning-of-line) (while (search-forward "|" pos t) (cl-incf column)) - (when (called-interactively-p 'interactive) - (message "In table column %d" column)) column))) -;;;###autoload (defun org-table-current-dline () "Find out what table data line we are in. Only data lines count for this." - (interactive) - (when (called-interactively-p 'any) - (org-table-check-inside-data-field)) (save-excursion (let ((c 0) (pos (point))) @@ -1340,8 +1334,6 @@ Only data lines count for this." (while (<= (point) pos) (when (looking-at org-table-dataline-regexp) (cl-incf c)) (forward-line)) - (when (called-interactively-p 'any) - (message "This is table line %d" c)) c))) ;;;###autoload @@ -1494,7 +1486,9 @@ non-nil, the one above is used." (unless (org-at-table-hline-p) (org-table-goto-column col1 t) (when (looking-at "|\\([^|\n]+\\)|\\([^|\n]+\\)|") - (replace-match "|\\2|\\1|"))) + (transpose-regions + (match-beginning 1) (match-end 1) + (match-beginning 2) (match-end 2)))) (forward-line))) (set-marker end nil) (org-table-goto-column colpos) @@ -1728,7 +1722,7 @@ numeric compare based on the type of the first key in the table." (float-time (org-time-string-to-time (match-string 0 f)))) ((string-match "[0-9]\\{1,2\\}:[0-9]\\{2\\}" f) - (org-hh:mm-string-to-minutes f)) + (org-duration-to-minutes (match-string 0 f))) (t 0)))) ((?f ?F) (or getkey-func @@ -1991,11 +1985,15 @@ blank, and the content is appended to the field above." ;;;###autoload (defun org-table-edit-field (arg) "Edit table field in a different window. -This is mainly useful for fields that contain hidden parts. When called -with a `\\[universal-argument]' prefix, just make the full field \ -visible so that it can be -edited in place." +This is mainly useful for fields that contain hidden parts. + +When called with a `\\[universal-argument]' prefix, just make the full field +visible so that it can be edited in place. + +When called with a `\\[universal-argument] \\[universal-argument]' prefix, \ +toggle `org-table-follow-field-mode'." (interactive "P") + (unless (org-at-table-p) (user-error "Not at a table")) (cond ((equal arg '(16)) (org-table-follow-field-mode (if org-table-follow-field-mode -1 1))) @@ -2662,17 +2660,25 @@ For details, see the Org mode manual. This function can also be called from Lisp programs and offers additional arguments: EQUATION can be the formula to apply. If this -argument is given, the user will not be prompted. SUPPRESS-ALIGN is -used to speed-up recursive calls by by-passing unnecessary aligns. +argument is given, the user will not be prompted. + +SUPPRESS-ALIGN is used to speed-up recursive calls by by-passing +unnecessary aligns. + SUPPRESS-CONST suppresses the interpretation of constants in the -formula, assuming that this has been done already outside the function. -SUPPRESS-STORE means the formula should not be stored, either because -it is already stored, or because it is a modified equation that should -not overwrite the stored one. SUPPRESS-ANALYSIS prevents any call to -`org-table-analyze'." +formula, assuming that this has been done already outside the +function. + +SUPPRESS-STORE means the formula should not be stored, either +because it is already stored, or because it is a modified +equation that should not overwrite the stored one. + +SUPPRESS-ANALYSIS prevents analyzing the table and checking +location of point." (interactive "P") - (org-table-check-inside-data-field) - (or suppress-analysis (org-table-analyze)) + (unless suppress-analysis + (org-table-check-inside-data-field) + (org-table-analyze)) (if (equal arg '(16)) (let ((eq (org-table-current-field-formula))) (org-table-get-field nil eq) @@ -2907,7 +2913,14 @@ $1-> %s\n" orig formula form0 form)) (when (consp ev) (setq fmt nil ev "#ERROR")) (org-table-justify-field-maybe (format org-table-formula-field-format - (if fmt (format fmt (string-to-number ev)) ev))) + (cond + ((not (stringp ev)) ev) + (fmt (format fmt (string-to-number ev))) + ;; Replace any active time stamp in the result with + ;; an inactive one. Dates in tables are likely + ;; piece of regular data, not meant to appear in the + ;; agenda. + (t (replace-regexp-in-string org-ts-regexp "[\\1]" ev))))) (if (and down (> ndown 0) (looking-at ".*\n[ \t]*|[^-]")) (call-interactively 'org-return) (setq ndown 0))) @@ -4856,7 +4869,8 @@ This may be either a string or a function of two arguments: ;; Initialize communication channel in INFO. (with-temp-buffer (let ((org-inhibit-startup t)) (org-mode)) - (let ((standard-output (current-buffer))) + (let ((standard-output (current-buffer)) + (org-element-use-cache nil)) (dolist (e table) (cond ((eq e 'hline) (princ "|--\n")) ((consp e) @@ -4980,9 +4994,12 @@ information." ((plist-member params :hline) (org-table--generic-apply (plist-get params :hline) ":hline")) (backend `(org-export-with-backend ',backend row nil info))) - (let ((headerp (org-export-table-row-in-header-p row info)) - (lastp (not (org-export-get-next-element row info))) - (last-header-p (org-export-table-row-ends-header-p row info))) + (let ((headerp ,(and (or hlfmt hlstart hlend) + '(org-export-table-row-in-header-p row info))) + (last-header-p + ,(and (or hllfmt hllstart hllend) + '(org-export-table-row-ends-header-p row info))) + (lastp (not (org-export-get-next-element row info)))) (when contents ;; Check if we can apply `:lfmt', `:llfmt', `:hlfmt', or ;; `:hllfmt' to CONTENTS. Otherwise, fallback on @@ -5059,25 +5076,33 @@ information." (sep (plist-get params :sep)) (hsep (plist-get params :hsep))) `(lambda (cell contents info) - (let ((headerp (org-export-table-row-in-header-p - (org-export-get-parent-element cell) info)) - (column (1+ (cdr (org-export-table-cell-address cell info))))) - ;; Make sure that contents are exported as Org data when :raw - ;; parameter is non-nil. - ,(when (and backend (plist-get params :raw)) - `(setq contents - ;; Since we don't know what are the pseudo object - ;; types defined in backend, we cannot pass them to - ;; `org-element-interpret-data'. As a consequence, - ;; they will be treated as pseudo elements, and - ;; will have newlines appended instead of spaces. - ;; Therefore, we must make sure :post-blank value - ;; is really turned into spaces. - (replace-regexp-in-string - "\n" " " - (org-trim - (org-element-interpret-data - (org-element-contents cell)))))) + ;; Make sure that contents are exported as Org data when :raw + ;; parameter is non-nil. + ,(when (and backend (plist-get params :raw)) + `(setq contents + ;; Since we don't know what are the pseudo object + ;; types defined in backend, we cannot pass them to + ;; `org-element-interpret-data'. As a consequence, + ;; they will be treated as pseudo elements, and will + ;; have newlines appended instead of spaces. + ;; Therefore, we must make sure :post-blank value is + ;; really turned into spaces. + (replace-regexp-in-string + "\n" " " + (org-trim + (org-element-interpret-data + (org-element-contents cell)))))) + + (let ((headerp ,(and (or hfmt hsep) + '(org-export-table-row-in-header-p + (org-export-get-parent-element cell) info))) + (column + ;; Call costly `org-export-table-cell-address' only if + ;; absolutely necessary, i.e., if one + ;; of :fmt :efmt :hmft has a "plist type" value. + ,(and (cl-some (lambda (v) (integerp (car-safe v))) + (list efmt hfmt fmt)) + '(1+ (cdr (org-export-table-cell-address cell info)))))) (when contents ;; Check if we can apply `:efmt' on CONTENTS. ,(when efmt diff --git a/elpa/org-20170210/org-timer.el b/elpa/org-20170407/org-timer.el similarity index 100% rename from elpa/org-20170210/org-timer.el rename to elpa/org-20170407/org-timer.el diff --git a/elpa/org-20170210/org-version.el b/elpa/org-20170407/org-version.el similarity index 91% rename from elpa/org-20170210/org-version.el rename to elpa/org-20170407/org-version.el index 3736c5b9..91806878 100644 --- a/elpa/org-20170210/org-version.el +++ b/elpa/org-20170407/org-version.el @@ -11,7 +11,7 @@ Inserted by installing Org mode or when a release is made." (defun org-git-version () "The Git version of org-mode. Inserted by installing Org or when a release is made." - (let ((org-git-version "9.0.5-elpa")) + (let ((org-git-version "9.0.5-436-g8ba336.dirty-elpa")) org-git-version)) ;;;###autoload (defvar org-odt-data-dir "/usr/share/emacs/etc/org" diff --git a/elpa/org-20170210/org-w3m.el b/elpa/org-20170407/org-w3m.el similarity index 100% rename from elpa/org-20170210/org-w3m.el rename to elpa/org-20170407/org-w3m.el diff --git a/elpa/org-20170210/org.el b/elpa/org-20170407/org.el similarity index 96% rename from elpa/org-20170210/org.el rename to elpa/org-20170407/org.el index 1c514d4c..b73f9091 100644 --- a/elpa/org-20170210/org.el +++ b/elpa/org-20170407/org.el @@ -173,7 +173,7 @@ Stars are put in group 1 and the trimmed body in group 2.") (declare-function orgtbl-mode "org-table" (&optional arg)) (declare-function org-export-get-backend "ox" (name)) (declare-function org-export-get-environment "ox" (&optional backend subtreep ext-plist)) -(declare-function org-latex-make-preamble "ox-latex" (info &optional template)) +(declare-function org-latex-make-preamble "ox-latex" (info &optional template snippet?)) (defsubst org-uniquify (list) "Non-destructively remove duplicate elements from LIST." @@ -268,6 +268,7 @@ requirements) is loaded." (const :tag "Fortran" fortran) (const :tag "Gnuplot" gnuplot) (const :tag "Haskell" haskell) + (const :tag "hledger" hledger) (const :tag "IO" io) (const :tag "J" J) (const :tag "Java" java) @@ -711,7 +712,6 @@ For export specific modules, see also `org-export-backends'." (const :tag "C annotate-file: Annotate a file with org syntax" org-annotate-file) (const :tag "C bookmark: Org links to bookmarks" org-bookmark) - (const :tag "C bullets: Add overlays to headlines stars" org-bullets) (const :tag "C checklist: Extra functions for checklists in repeated tasks" org-checklist) (const :tag "C choose: Use TODO keywords to mark decisions states" org-choose) (const :tag "C collector: Collect properties into tables" org-collector) @@ -1787,7 +1787,6 @@ The value of this is taken from the #+LINK lines.") ("http" :follow (lambda (path) (browse-url (concat "http:" path)))) ("https" :follow (lambda (path) (browse-url (concat "https:" path)))) ("mailto" :follow (lambda (path) (browse-url (concat "mailto:" path)))) - ("message" :follow (lambda (path) (browse-url (concat "message:" path)))) ("news" :follow (lambda (path) (browse-url (concat "news:" path)))) ("shell" :follow org--open-shell-link)) "An alist of properties that defines all the links in Org mode. @@ -1828,7 +1827,9 @@ activation. The function must accept (link-start link-end path bracketp) as arguments." :group 'org-link :type '(alist :tag "Link display parameters" - :value-type plist)) + :value-type plist) + :version "26.1" + :package-version '(Org . "9.1")) (defun org-link-get-parameter (type key) "Get TYPE link property for KEY. @@ -3250,135 +3251,6 @@ commands, if custom time display is turned on at the time of export." (concat "[" (substring f 1 -1) "]") f))) -(defcustom org-time-clocksum-format - '(:days "%dd " :hours "%d" :require-hours t :minutes ":%02d" :require-minutes t) - "The format string used when creating CLOCKSUM lines. -This is also used when Org mode generates a time duration. - -The value can be a single format string containing two -%-sequences, which will be filled with the number of hours and -minutes in that order. - -Alternatively, the value can be a plist associating any of the -keys :years, :months, :weeks, :days, :hours or :minutes with -format strings. The time duration is formatted using only the -time components that are needed and concatenating the results. -If a time unit in absent, it falls back to the next smallest -unit. - -The keys :require-years, :require-months, :require-days, -:require-weeks, :require-hours, :require-minutes are also -meaningful. A non-nil value for these keys indicates that the -corresponding time component should always be included, even if -its value is 0. - - -For example, - - (:days \"%dd\" :hours \"%d\" :require-hours t :minutes \":%02d\" - :require-minutes t) - -means durations longer than a day will be expressed in days, -hours and minutes, and durations less than a day will always be -expressed in hours and minutes (even for durations less than an -hour). - -The value - - (:days \"%dd\" :minutes \"%dm\") - -means durations longer than a day will be expressed in days and -minutes, and durations less than a day will be expressed entirely -in minutes (even for durations longer than an hour)." - :group 'org-time - :group 'org-clock - :version "24.4" - :package-version '(Org . "8.0") - :type '(choice (string :tag "Format string") - (set :tag "Plist" - (group :inline t (const :tag "Years" :years) - (string :tag "Format string")) - (group :inline t - (const :tag "Always show years" :require-years) - (const t)) - (group :inline t (const :tag "Months" :months) - (string :tag "Format string")) - (group :inline t - (const :tag "Always show months" :require-months) - (const t)) - (group :inline t (const :tag "Weeks" :weeks) - (string :tag "Format string")) - (group :inline t - (const :tag "Always show weeks" :require-weeks) - (const t)) - (group :inline t (const :tag "Days" :days) - (string :tag "Format string")) - (group :inline t - (const :tag "Always show days" :require-days) - (const t)) - (group :inline t (const :tag "Hours" :hours) - (string :tag "Format string")) - (group :inline t - (const :tag "Always show hours" :require-hours) - (const t)) - (group :inline t (const :tag "Minutes" :minutes) - (string :tag "Format string")) - (group :inline t - (const :tag "Always show minutes" :require-minutes) - (const t))))) - -(defcustom org-time-clocksum-use-fractional nil - "When non-nil, `\\[org-clock-display]' uses fractional times. -See `org-time-clocksum-format' for more on time clock formats." - :group 'org-time - :group 'org-clock - :version "24.3" - :type 'boolean) - -(defcustom org-time-clocksum-use-effort-durations nil - "When non-nil, `\\[org-clock-display]' uses effort durations. -E.g. by default, one day is considered to be a 8 hours effort, -so a task that has been clocked for 16 hours will be displayed -as during 2 days in the clock display or in the clocktable. - -See `org-effort-durations' on how to set effort durations -and `org-time-clocksum-format' for more on time clock formats." - :group 'org-time - :group 'org-clock - :version "24.4" - :package-version '(Org . "8.0") - :type 'boolean) - -(defcustom org-time-clocksum-fractional-format "%.2f" - "The format string used when creating CLOCKSUM lines, -or when Org mode generates a time duration, if -`org-time-clocksum-use-fractional' is enabled. - -The value can be a single format string containing one -%-sequence, which will be filled with the number of hours as -a float. - -Alternatively, the value can be a plist associating any of the -keys :years, :months, :weeks, :days, :hours or :minutes with -a format string. The time duration is formatted using the -largest time unit which gives a non-zero integer part. If all -specified formats have zero integer part, the smallest time unit -is used." - :group 'org-time - :type '(choice (string :tag "Format string") - (set (group :inline t (const :tag "Years" :years) - (string :tag "Format string")) - (group :inline t (const :tag "Months" :months) - (string :tag "Format string")) - (group :inline t (const :tag "Weeks" :weeks) - (string :tag "Format string")) - (group :inline t (const :tag "Days" :days) - (string :tag "Format string")) - (group :inline t (const :tag "Hours" :hours) - (string :tag "Format string")) - (group :inline t (const :tag "Minutes" :minutes) - (string :tag "Format string"))))) - (defcustom org-deadline-warning-days 14 "Number of days before expiration during which a deadline becomes active. This variable governs the display in sparse trees and in the agenda. @@ -3789,7 +3661,7 @@ and the clock summary: ((\"Remaining\" (lambda(value) (let ((clocksum (org-clock-sum-current-item)) - (effort (org-duration-string-to-minutes + (effort (org-duration-to-minutes (org-entry-get (point) \"Effort\")))) (org-minutes-to-clocksum-string (- effort clocksum))))))" :group 'org-properties @@ -4464,8 +4336,10 @@ After a match, the match groups contain these elements: 3 The leading marker like * or /, indicating the type of highlighting 4 The text between the emphasis markers, not including the markers 5 The character after the match, empty at the end of a line") + (defvar org-verbatim-re nil "Regular expression for matching verbatim text.") + (defvar org-emphasis-regexp-components) ; defined just below (defvar org-emphasis-alist) ; defined just below (defun org-set-emph-re (var val) @@ -4474,54 +4348,17 @@ After a match, the match groups contain these elements: (when (and (boundp 'org-emphasis-alist) (boundp 'org-emphasis-regexp-components) org-emphasis-alist org-emphasis-regexp-components) - (let* ((e org-emphasis-regexp-components) - (pre (car e)) - (post (nth 1 e)) - (border (nth 2 e)) - (body (nth 3 e)) - (nl (nth 4 e)) - (body1 (concat body "*?")) - (markers (mapconcat 'car org-emphasis-alist "")) - (vmarkers (mapconcat - (lambda (x) (if (eq (nth 2 x) 'verbatim) (car x) "")) - org-emphasis-alist ""))) - ;; make sure special characters appear at the right position in the class - (if (string-match "\\^" markers) - (setq markers (concat (replace-match "" t t markers) "^"))) - (if (string-match "-" markers) - (setq markers (concat (replace-match "" t t markers) "-"))) - (if (string-match "\\^" vmarkers) - (setq vmarkers (concat (replace-match "" t t vmarkers) "^"))) - (if (string-match "-" vmarkers) - (setq vmarkers (concat (replace-match "" t t vmarkers) "-"))) - (if (> nl 0) - (setq body1 (concat body1 "\\(?:\n" body "*?\\)\\{0," - (int-to-string nl) "\\}"))) - ;; Make the regexp - (setq org-emph-re - (concat "\\([" pre "]\\|^\\)" - "\\(" - "\\([" markers "]\\)" - "\\(" - "[^" border "]\\|" - "[^" border "]" - body1 - "[^" border "]" - "\\)" - "\\3\\)" - "\\([" post "]\\|$\\)")) - (setq org-verbatim-re - (concat "\\([" pre "]\\|^\\)" - "\\(" - "\\([" vmarkers "]\\)" - "\\(" - "[^" border "]\\|" - "[^" border "]" - body1 - "[^" border "]" - "\\)" - "\\3\\)" - "\\([" post "]\\|$\\)"))))) + (pcase-let* + ((`(,pre ,post ,border ,body ,nl) org-emphasis-regexp-components) + (body (if (<= nl 0) body + (format "%s*?\\(?:\n%s*?\\)\\{0,%d\\}" body body nl))) + (template + (format (concat "\\([%s]\\|^\\)" ;before markers + "\\(\\([%%s]\\)\\([^%s]\\|[^%s]%s[^%s]\\)\\3\\)" + "\\([%s]\\|$\\)") ;after markers + pre border border body border post))) + (setq org-emph-re (format template "*/_+")) + (setq org-verbatim-re (format template "=~"))))) ;; This used to be a defcustom (Org <8.0) but allowing the users to ;; set this option proved cumbersome. See this message/thread: @@ -5679,7 +5516,7 @@ The following commands are available: (when org-startup-align-all-tables (org-table-map-tables #'org-table-align t)) (when org-startup-with-inline-images (org-display-inline-images)) - (when org-startup-with-latex-preview (org-toggle-latex-fragment)) + (when org-startup-with-latex-preview (org-toggle-latex-fragment '(16))) (unless org-inhibit-startup-visibility-stuff (org-set-startup-visibility)) (when org-startup-truncated (setq truncate-lines t)) (when org-startup-indented (require 'org-indent) (org-indent-mode 1)) @@ -5878,32 +5715,36 @@ This should be called after the variable `org-link-parameters' has changed." (defun org-do-emphasis-faces (limit) "Run through the buffer and emphasize strings." - (let (rtn a) - (while (and (not rtn) (re-search-forward org-emph-re limit t)) - (let* ((border (char-after (match-beginning 3))) - (bre (regexp-quote (char-to-string border)))) - (when (and (not (= border (char-after (match-beginning 4)))) - (not (string-match-p (concat bre ".*" bre) - (replace-regexp-in-string - "\n" " " - (substring (match-string 2) 1 -1))))) - (setq rtn t) - (setq a (assoc (match-string 3) org-emphasis-alist)) - (font-lock-prepend-text-property (match-beginning 2) (match-end 2) - 'face - (nth 1 a)) - (and (nth 2 a) - (org-remove-flyspell-overlays-in - (match-beginning 0) (match-end 0))) - (add-text-properties (match-beginning 2) (match-end 2) - '(font-lock-multiline t org-emphasis t)) - (when org-hide-emphasis-markers - (add-text-properties (match-end 4) (match-beginning 5) - '(invisible org-link)) - (add-text-properties (match-beginning 3) (match-end 3) - '(invisible org-link))))) - (goto-char (1+ (match-beginning 0)))) - rtn)) + (let ((quick-re (format "\\([%s]\\|^\\)\\([~=*/_+]\\)" + (car org-emphasis-regexp-components)))) + (catch :exit + (while (re-search-forward quick-re limit t) + (let* ((marker (match-string 2)) + (verbatim? (member marker '("~" "=")))) + (when (save-excursion + (goto-char (match-beginning 0)) + ;; Do not match headline stars. Do not consider + ;; stars of a headline as closing marker for bold + ;; markup either. + (and (not (looking-at-p org-outline-regexp-bol)) + (looking-at (if verbatim? org-verbatim-re org-emph-re)) + (not (string-match-p + (concat org-outline-regexp-bol "\\'") + (match-string 0))))) + (pcase-let ((`(,_ ,face ,_) (assoc marker org-emphasis-alist))) + (font-lock-prepend-text-property + (match-beginning 2) (match-end 2) 'face face) + (when verbatim? + (org-remove-flyspell-overlays-in + (match-beginning 0) (match-end 0))) + (add-text-properties (match-beginning 2) (match-end 2) + '(font-lock-multiline t org-emphasis t)) + (when org-hide-emphasis-markers + (add-text-properties (match-end 4) (match-beginning 5) + '(invisible org-link)) + (add-text-properties (match-beginning 3) (match-end 3) + '(invisible org-link))) + (throw :exit t)))))))) (defun org-emphasize (&optional char) "Insert or change an emphasis, i.e. a font like bold or italic. @@ -6094,9 +5935,11 @@ by a #." '(org-block))))))) ; end of source block ((not org-fontify-quote-and-verse-blocks)) ((string= block-type "quote") - (add-text-properties beg1 (min (point-max) (1+ end1)) '(face org-quote))) + (add-face-text-property + beg1 (min (point-max) (1+ end1)) 'org-quote t)) ((string= block-type "verse") - (add-text-properties beg1 (min (point-max) (1+ end1)) '(face org-verse)))) + (add-face-text-property + beg1 (min (point-max) (1+ end1)) 'org-verse t))) (add-text-properties beg beg1 '(face org-block-begin-line)) (add-text-properties (min (point-max) (1+ end)) (min (point-max) (1+ end1)) '(face org-block-end-line)) @@ -7916,15 +7759,38 @@ When NEXT is non-nil, check the next line instead." When NEXT is non-nil, check the next line instead." (org--line-empty-p 2)) +(defun org--blank-before-heading-p (&optional parent) + "Non-nil when an empty line should precede a new heading here. +When optional argument PARENT is non-nil, consider parent +headline instead of current one." + (pcase (assq 'heading org-blank-before-new-entry) + (`(heading . auto) + (save-excursion + (org-with-limited-levels + (unless (and (org-before-first-heading-p) + (not (outline-next-heading))) + (org-back-to-heading t) + (when parent (org-up-heading-safe)) + (cond ((not (bobp)) + (org-previous-line-empty-p)) + ((outline-next-heading) + (org-previous-line-empty-p)) + ;; Ignore trailing spaces on last buffer line. + ((progn (skip-chars-backward " \t") (bolp)) + (org-previous-line-empty-p)) + (t nil)))))) + (`(heading . ,value) value) + (_ nil))) + (defun org-insert-heading (&optional arg invisible-ok top) "Insert a new heading or an item with the same depth at point. -If point is at the beginning of a heading or a list item, insert -a new heading or a new item above the current one. When at the -beginning of a regular line of text, turn it into a heading. +If point is at the beginning of a heading, insert a new heading +or a new headline above the current one. When at the beginning +of a regular line of text, turn it into a heading. If point is in the middle of a line, split it and create a new -headline/item with the text in the current line after point (see +headline with the text in the current line after point (see `org-M-RET-may-split-line' on how to modify this behavior). As a special case, on a headline, splitting can only happen on the title itself. E.g., this excludes breaking stars or tags. @@ -7948,186 +7814,106 @@ command. When optional argument TOP is non-nil, insert a level 1 heading, unconditionally." (interactive "P") - (let ((itemp (and (not top) (org-in-item-p))) - (may-split (org-get-alist-option org-M-RET-may-split-line 'headline)) - (respect-content (or org-insert-heading-respect-content - (equal arg '(4)))) - (initial-content "")) - + (let* ((blank? (org--blank-before-heading-p (equal arg '(16)))) + (level (org-current-level)) + (stars (make-string (if (and level (not top)) level 1) ?*))) (cond - - ((or (= (buffer-size) 0) - (and (not (save-excursion - (and (ignore-errors (org-back-to-heading invisible-ok)) - (org-at-heading-p)))) - (or arg (not itemp)))) - ;; At beginning of buffer or so high up that only a heading - ;; makes sense. - (cond ((and (bolp) (not respect-content)) (insert "* ")) - ((not respect-content) - (unless may-split (end-of-line)) - (insert "\n* ")) - ((re-search-forward org-outline-regexp-bol nil t) - (beginning-of-line) - (insert "* \n") - (backward-char)) - (t (goto-char (point-max)) - (insert "\n* "))) - (run-hooks 'org-insert-heading-hook)) - - ((and itemp (not (member arg '((4) (16)))) (org-insert-item))) - + ((or org-insert-heading-respect-content + (member arg '((4) (16))) + (and (not invisible-ok) + (invisible-p (max (1- (point)) (point-min))))) + ;; Position point at the location of insertion. + (if (not level) ;before first headline + (org-with-limited-levels (outline-next-heading)) + ;; Make sure we end up on a visible headline if INVISIBLE-OK + ;; is nil. + (org-with-limited-levels (org-back-to-heading invisible-ok)) + (cond ((equal arg '(16)) + (org-up-heading-safe) + (org-end-of-subtree t t)) + (t + (org-end-of-subtree t t)))) + (unless (bolp) (insert "\n")) ;ensure final newline + (unless (and blank? (org-previous-line-empty-p)) + (org-N-empty-lines-before-current (if blank? 1 0))) + (insert stars " \n") + (forward-char -1)) + ;; At a headline... + ((org-at-heading-p) + (cond ((bolp) + (when blank? (save-excursion (insert "\n"))) + (save-excursion (insert stars " \n")) + (unless (and blank? (org-previous-line-empty-p)) + (org-N-empty-lines-before-current (if blank? 1 0))) + (end-of-line)) + ((and (org-get-alist-option org-M-RET-may-split-line 'headline) + (org-match-line org-complex-heading-regexp) + (org-pos-in-match-range (point) 4)) + ;; Grab the text that should moved to the new headline. + ;; Preserve tags. + (let ((split (delete-and-extract-region (point) (match-end 4)))) + (if (looking-at "[ \t]*$") (replace-match "") + (org-set-tags nil t)) + (end-of-line) + (when blank? (insert "\n")) + (insert "\n" stars " ") + (when (org-string-nw-p split) (insert split)) + (when (eobp) (save-excursion (insert "\n"))))) + (t + (end-of-line) + (when blank? (insert "\n")) + (insert "\n" stars " ") + (when (eobp) (save-excursion (insert "\n")))))) + ;; On regular text, turn line into a headline or split, if + ;; appropriate. + ((bolp) + (insert stars " ") + (unless (and blank? (org-previous-line-empty-p)) + (org-N-empty-lines-before-current (if blank? 1 0)))) (t - ;; Maybe move at the end of the subtree - (when (equal arg '(16)) - (org-up-heading-safe) - (org-end-of-subtree t)) - ;; Insert a heading - (save-restriction - (widen) - (let* ((level nil) - (on-heading (org-at-heading-p)) - (empty-line-p (if on-heading - (org-previous-line-empty-p) - ;; We will decide later - nil)) - ;; Get a level string to fall back on. - (fix-level - (if (org-before-first-heading-p) "*" - (save-excursion - (org-back-to-heading t) - (when (org-previous-line-empty-p) (setq empty-line-p t)) - (looking-at org-outline-regexp) - (make-string (1- (length (match-string 0))) ?*)))) - (stars - (save-excursion - (condition-case nil - (if top "* " - (org-back-to-heading invisible-ok) - (when (and (not on-heading) - (featurep 'org-inlinetask) - (integerp org-inlinetask-min-level) - (>= (length (match-string 0)) - org-inlinetask-min-level)) - ;; Find a heading level before the inline - ;; task. - (while (and (setq level (org-up-heading-safe)) - (>= level org-inlinetask-min-level))) - (if (org-at-heading-p) - (org-back-to-heading invisible-ok) - (error "This should not happen"))) - (unless (and (save-excursion - (save-match-data - (org-backward-heading-same-level - 1 invisible-ok)) - (= (point) (match-beginning 0))) - (not (org-next-line-empty-p))) - (setq empty-line-p (or empty-line-p - (org-previous-line-empty-p)))) - (match-string 0)) - (error (or fix-level "* "))))) - (blank-a (cdr (assq 'heading org-blank-before-new-entry))) - (blank (if (eq blank-a 'auto) empty-line-p blank-a))) - - ;; If we insert after content, move there and clean up - ;; whitespace. - (when respect-content - (if (not (org-before-first-heading-p)) - (org-end-of-subtree nil t) - (re-search-forward org-outline-regexp-bol) - (beginning-of-line 0)) - (skip-chars-backward " \r\t\n") - (and (not (looking-back "^\\*+" (line-beginning-position))) - (looking-at "[ \t]+") (replace-match "")) - (unless (eobp) (forward-char 1)) - (when (looking-at "^\\*") - (unless (bobp) (backward-char 1)) - (insert "\n"))) - - ;; If we are splitting, grab the text that should be moved - ;; to the new headline. - (when may-split - (if (org-at-heading-p) - ;; This is a heading: split intelligently (keeping - ;; tags). - (let ((pos (point))) - (beginning-of-line) - (let ((case-fold-search nil)) - (unless (looking-at org-complex-heading-regexp) - (error "This should not happen"))) - (when (and (match-beginning 4) - (> pos (match-beginning 4)) - (< pos (match-end 4))) - (setq initial-content (buffer-substring pos (match-end 4))) - (goto-char pos) - (delete-region (point) (match-end 4)) - (if (looking-at "[ \t]*$") - (replace-match "") - (insert (make-string (length initial-content) ?\s))) - (setq initial-content (org-trim initial-content))) - (goto-char pos)) - ;; A normal line. - (setq initial-content - (org-trim - (delete-and-extract-region (point) (line-end-position)))))) - - ;; If we are at the beginning of the line, insert before it. - ;; Otherwise, after it. - (cond - ((and (bolp) (looking-at "[ \t]*$"))) - ((bolp) (save-excursion (insert "\n"))) - (t (end-of-line) - (insert "\n"))) - - ;; Insert the new heading - (insert stars) - (just-one-space) - (insert initial-content) - (unless (and blank (org-previous-line-empty-p)) - (org-N-empty-lines-before-current (if blank 1 0))) - ;; Adjust visibility, which may be messed up if we removed - ;; blank lines while previous entry was hidden. - (let ((bol (line-beginning-position))) - (dolist (o (overlays-at (1- bol))) - (when (and (eq (overlay-get o 'invisible) 'outline) - (eq (overlay-end o) bol)) - (move-overlay o (overlay-start o) (1- bol))))) - (run-hooks 'org-insert-heading-hook))))))) - -(defun org-N-empty-lines-before-current (N) + (unless (org-get-alist-option org-M-RET-may-split-line 'headline) + (end-of-line)) + (insert "\n" stars " ") + (unless (and blank? (org-previous-line-empty-p)) + (org-N-empty-lines-before-current (if blank? 1 0)))))) + (run-hooks 'org-insert-heading-hook)) + +(defun org-N-empty-lines-before-current (n) "Make the number of empty lines before current exactly N. So this will delete or add empty lines." (save-excursion (beginning-of-line) - (let ((p (point))) - (skip-chars-backward " \r\t\n") - (unless (bolp) (forward-line)) - (delete-region (point) p)) - (when (> N 0) (insert (make-string N ?\n))))) - -(defun org-get-heading (&optional no-tags no-todo) + (unless (bobp) + (let ((start (save-excursion + (skip-chars-backward " \r\t\n") + (line-end-position)))) + (delete-region start (line-end-position 0)))) + (insert (make-string n ?\n)))) + +(defun org-get-heading (&optional no-tags no-todo no-priority no-comment) "Return the heading of the current entry, without the stars. When NO-TAGS is non-nil, don't include tags. -When NO-TODO is non-nil, don't include TODO keywords." +When NO-TODO is non-nil, don't include TODO keywords. +When NO-PRIORITY is non-nil, don't include priority cookie. +When NO-COMMENT is non-nil, don't include COMMENT string." (save-excursion (org-back-to-heading t) (let ((case-fold-search nil)) - (cond - ((and no-tags no-todo) - (looking-at org-complex-heading-regexp) - ;; Return value has to be a string, but match group 4 is - ;; optional. - (or (match-string 4) "")) - (no-tags - (looking-at (concat org-outline-regexp - "\\(.*?\\)" - "\\(?:[ \t]+:[[:alnum:]:_@#%]+:\\)?[ \t]*$")) - (match-string 1)) - (no-todo - (looking-at org-todo-line-regexp) - (match-string 3)) - (t (looking-at org-heading-regexp) - (match-string 2)))))) + (looking-at org-complex-heading-regexp) + (let ((todo (and (not no-todo) (match-string 2))) + (priority (and (not no-priority) (match-string 3))) + (headline (pcase (match-string 4) + (`nil "") + ((and (guard no-comment) h) + (replace-regexp-in-string + (eval-when-compile + (format "\\`%s[ \t]+" org-comment-string)) + "" h)) + (h h))) + (tags (and (not no-tags) (match-string 5)))) + (mapconcat #'identity + (delq nil (list todo priority headline tags)) + " "))))) (defvar orgstruct-mode) ; defined below @@ -8352,13 +8138,14 @@ time to headlines when structure editing, based on the value of (if org-odd-levels-only 2 1)) (defun org-get-valid-level (level &optional change) - "Rectify a level change under the influence of `org-odd-levels-only' -LEVEL is a current level, CHANGE is by how much the level should be -modified. Even if CHANGE is nil, LEVEL may be returned modified because -even level numbers will become the next higher odd number." + "Rectify a level change under the influence of `org-odd-levels-only'. +LEVEL is a current level, CHANGE is by how much the level should +be modified. Even if CHANGE is nil, LEVEL may be returned +modified because even level numbers will become the next higher +odd number. Returns values greater than 0." (if org-odd-levels-only (cond ((or (not change) (= 0 change)) (1+ (* 2 (/ level 2)))) - ((> change 0) (1+ (* 2 (/ (+ level (* 2 change)) 2)))) + ((> change 0) (1+ (* 2 (/ (+ (1- level) (* 2 change)) 2)))) ((< change 0) (max 1 (1+ (* 2 (/ (+ level (* 2 change)) 2)))))) (max 1 (+ level (or change 0))))) @@ -9066,18 +8853,14 @@ Optional argument WITH-CASE means sort case-sensitively." (org-call-with-arg 'org-sort-entries with-case)))) (defun org-sort-remove-invisible (s) - "Remove invisible links from string S." + "Remove invisible part of links and emphasis markers from string S." (remove-text-properties 0 (length s) org-rm-props s) - (while (string-match org-bracket-link-regexp s) - (setq s (replace-match (if (match-end 2) - (match-string 3 s) - (match-string 1 s)) - t t s))) - (let ((st (format " %s " s))) - (while (string-match org-emph-re st) - (setq st (replace-match (format " %s " (match-string 4 st)) t t st))) - (setq s (substring st 1 -1))) - s) + (replace-regexp-in-string + org-verbatim-re (lambda (m) (format "%s " (match-string 4 m))) + (replace-regexp-in-string + org-emph-re (lambda (m) (format " %s " (match-string 4 m))) + (org-link-display-format s) + t t) t t)) (defvar org-priority-regexp) ; defined later in the file @@ -9833,7 +9616,7 @@ sub-tree if optional argument INHERIT is non-nil." (org-refresh-properties org-effort-property '((effort . identity) - (effort-minutes . org-duration-string-to-minutes)))) + (effort-minutes . org-duration-to-minutes)))) ;;;; Link Stuff @@ -10547,43 +10330,43 @@ Use TAB to complete link prefixes, then RET for type-specific completion support ;; option If yes, simplify the link by using only the search ;; option. (when (and buffer-file-name - (string-match "^file:\\(.+?\\)::\\(.+\\)" link)) - (let* ((path (match-string 1 link)) - (case-fold-search nil) - (search (match-string 2 link))) + (let ((case-fold-search nil)) + (string-match "\\`file:\\(.+?\\)::" link))) + (let ((path (match-string-no-properties 1 link)) + (search (substring-no-properties link (match-end 0)))) (save-match-data (when (equal (file-truename buffer-file-name) (file-truename path)) ;; We are linking to this same file, with a search option (setq link search))))) ;; Check if we can/should use a relative path. If yes, simplify the link - (when (string-match "^\\(file:\\|docview:\\)\\(.*\\)" link) - (let* ((type (match-string 1 link)) - (path (match-string 2 link)) - (origpath path) - (case-fold-search nil)) - (cond - ((or (eq org-link-file-path-type 'absolute) - (equal complete-file '(16))) - (setq path (abbreviate-file-name (expand-file-name path)))) - ((eq org-link-file-path-type 'noabbrev) - (setq path (expand-file-name path))) - ((eq org-link-file-path-type 'relative) - (setq path (file-relative-name path))) - (t - (save-match-data - (if (string-match (concat "^" (regexp-quote - (expand-file-name - (file-name-as-directory - default-directory)))) - (expand-file-name path)) - ;; We are linking a file with relative path name. - (setq path (substring (expand-file-name path) - (match-end 0))) - (setq path (abbreviate-file-name (expand-file-name path))))))) - (setq link (concat type path)) - (when (equal desc origpath) - (setq desc path)))) + (let ((case-fold-search nil)) + (when (string-match "\\`\\(file:\\|docview\\):" link) + (let ((type (match-string-no-properties 0 link)) + (path (substring-no-properties link (match-end 0))) + (origpath path)) + (cond + ((or (eq org-link-file-path-type 'absolute) + (equal complete-file '(16))) + (setq path (abbreviate-file-name (expand-file-name path)))) + ((eq org-link-file-path-type 'noabbrev) + (setq path (expand-file-name path))) + ((eq org-link-file-path-type 'relative) + (setq path (file-relative-name path))) + (t + (save-match-data + (if (string-match (concat "^" (regexp-quote + (expand-file-name + (file-name-as-directory + default-directory)))) + (expand-file-name path)) + ;; We are linking a file with relative path name. + (setq path (substring (expand-file-name path) + (match-end 0))) + (setq path (abbreviate-file-name (expand-file-name path))))))) + (setq link (concat type path)) + (when (equal desc origpath) + (setq desc path))))) (if org-make-link-description-function (setq desc @@ -10925,13 +10708,8 @@ link in a property drawer line." (>= (point) (match-beginning 5))))) (org-tags-view arg (substring (match-string 5) 0 -1))) ((eq type 'link) - ;; When link is located within the description of another - ;; link (e.g., an inline image), always open the parent - ;; link. - (let* ((link (let ((up (org-element-property :parent context))) - (if (eq (org-element-type up) 'link) up context))) - (type (org-element-property :type link)) - (path (org-link-unescape (org-element-property :path link)))) + (let ((type (org-element-property :type context)) + (path (org-link-unescape (org-element-property :path context)))) ;; Switch back to REFERENCE-BUFFER needed when called in ;; a temporary buffer through `org-open-link-from-string'. (with-current-buffer (or reference-buffer (current-buffer)) @@ -10946,8 +10724,8 @@ link in a property drawer line." ;; ("open" function called with a single argument). ;; If no such function is found, fallback to ;; `org-open-file'. - (let* ((option (org-element-property :search-option link)) - (app (org-element-property :application link)) + (let* ((option (org-element-property :search-option context)) + (app (org-element-property :application context)) (dedicated-function (org-link-get-parameter (if app (concat type "+" app) type) @@ -10978,15 +10756,15 @@ link in a property drawer line." (org-with-wide-buffer (if (equal type "radio") (org-search-radio-target - (org-element-property :path link)) + (org-element-property :path context)) (org-link-search (if (member type '("custom-id" "coderef")) - (org-element-property :raw-link link) + (org-element-property :raw-link context) path) ;; Prevent fuzzy links from matching ;; themselves. (and (equal type "fuzzy") - (+ 2 (org-element-property :begin link))))) + (+ 2 (org-element-property :begin context))))) (point)))) (unless (and (<= (point-min) destination) (>= (point-max) destination)) @@ -11170,7 +10948,7 @@ of matched result, which is either `dedicated' or `fuzzy'." (normalized (replace-regexp-in-string "\n[ \t]*" " " s)) (starred (eq (string-to-char normalized) ?*)) (words (split-string (if starred (substring s 1) s))) - (s-multi-re (mapconcat #'regexp-quote words "[ \t]+\\(?:\n[ \t]*\\)?")) + (s-multi-re (mapconcat #'regexp-quote words "\\(?:[ \t\n]+\\)")) (s-single-re (mapconcat #'regexp-quote words "[ \t]+")) type) (cond @@ -11251,7 +11029,8 @@ of matched result, which is either `dedicated' or `fuzzy'." org-comment-string (mapconcat #'regexp-quote words ".+"))) (cookie-re "\\[[0-9]*\\(?:%\\|/[0-9]*\\)\\]") - (comment-re (format "\\`%s[ \t]+" org-comment-string))) + (comment-re (eval-when-compile + (format "\\`%s[ \t]+" org-comment-string)))) (goto-char (point-min)) (catch :found (while (re-search-forward title-re nil t) @@ -11260,7 +11039,7 @@ of matched result, which is either `dedicated' or `fuzzy'." (replace-regexp-in-string cookie-re "" (replace-regexp-in-string - comment-re "" (org-get-heading t t))))) + comment-re "" (org-get-heading t t t))))) (throw :found t))) nil))) (beginning-of-line) @@ -11469,12 +11248,19 @@ If the file does not exist, an error is thrown." (search (concat file "::" search)) (t file))) (dlink (downcase link)) - (old-buffer (current-buffer)) - (old-pos (point)) - (old-mode major-mode) (ext (and (string-match "\\`.*?\\.\\([a-zA-Z0-9]+\\(\\.gz\\)?\\)\\'" dfile) (match-string 1 dfile))) + (save-position-maybe + (let ((old-buffer (current-buffer)) + (old-pos (point)) + (old-mode major-mode)) + (lambda () + (and (derived-mode-p 'org-mode) + (eq old-mode 'org-mode) + (or (not (eq old-buffer (current-buffer))) + (not (eq old-pos (point)))) + (org-mark-ring-push old-pos old-buffer))))) cmd link-match-data) (cond ((member in-emacs '((16) system)) @@ -11548,7 +11334,12 @@ If the file does not exist, an error is thrown." (widen) (cond (line (org-goto-line line) (when (derived-mode-p 'org-mode) (org-reveal))) - (search (org-link-search search)))) + (search (condition-case err + (org-link-search search) + ;; Save position before error-ing out so user + ;; can easily move back to the original buffer. + (error (funcall save-position-maybe) + (error (nth 1 err))))))) ((functionp cmd) (save-match-data (set-match-data link-match-data) @@ -11557,23 +11348,18 @@ If the file does not exist, an error is thrown." ;; FIXME: Remove this check when most default installations ;; of Emacs have at least Org 9.0. ((debug wrong-number-of-arguments wrong-type-argument - invalid-function) + invalid-function) (user-error "Please see Org News for version 9.0 about \ `org-file-apps'--Lisp error: %S" cmd))))) ((consp cmd) ;; FIXME: Remove this check when most default installations of - ;; Emacs have at least Org 9.0. - ;; Heads-up instead of silently fall back to - ;; `org-link-frame-setup' for an old usage of `org-file-apps' - ;; with sexp instead of a function for `cmd'. + ;; Emacs have at least Org 9.0. Heads-up instead of silently + ;; fall back to `org-link-frame-setup' for an old usage of + ;; `org-file-apps' with sexp instead of a function for `cmd'. (user-error "Please see Org News for version 9.0 about \ `org-file-apps'--Error: Deprecated usage of %S" cmd)) (t (funcall (cdr (assq 'file org-link-frame-setup)) file))) - (and (derived-mode-p 'org-mode) - (eq old-mode 'org-mode) - (or (not (eq old-buffer (current-buffer))) - (not (eq old-pos (point)))) - (org-mark-ring-push old-pos old-buffer)))) + (funcall save-position-maybe))) (defun org-file-apps-entry-match-against-dlink-p (entry) "This function returns non-nil if `entry' uses a regular @@ -12073,7 +11859,6 @@ prefix argument (`C-u C-u C-u C-c C-w')." (if pos (progn (goto-char pos) - (looking-at org-outline-regexp) (setq level (org-get-valid-level (funcall outline-level) 1)) (goto-char (if reversed @@ -13281,16 +13066,27 @@ on INACTIVE-OK." (throw 'exit t))) nil))) -(defun org-get-repeat (&optional tagline) - "Check if there is a deadline/schedule with repeater in this entry." +(defun org-get-repeat (&optional timestamp) + "Check if there is a time-stamp with repeater in this entry. + +Return the repeater, as a string, or nil. Also return nil when +this function is called before first heading. + +When optional argument TIMESTAMP is a string, extract the +repeater from there instead." (save-match-data - (save-excursion - (org-back-to-heading t) - (and (re-search-forward (if tagline - (concat tagline "\\s-*" org-repeat-re) - org-repeat-re) - (org-entry-end-position) t) - (match-string-no-properties 1))))) + (cond (timestamp + (and (string-match org-repeat-re timestamp) + (match-string-no-properties 1 timestamp))) + ((org-before-first-heading-p) nil) + (t + (save-excursion + (org-back-to-heading t) + (let ((end (org-entry-end-position))) + (catch :repeat + (while (re-search-forward org-repeat-re end t) + (when (save-match-data (org-at-timestamp-p)) + (throw :repeat (match-string-no-properties 1))))))))))) (defvar org-last-changed-timestamp) (defvar org-last-inserted-timestamp) @@ -13312,110 +13108,116 @@ This function is run automatically after each state change to a DONE state." (whata '(("h" . hour) ("d" . day) ("m" . month) ("y" . year))) (msg "Entry repeats: ") (org-log-done nil) - (org-todo-log-states nil)) - (when (and repeat (not (zerop (string-to-number (substring repeat 1))))) - (when (eq org-log-repeat t) (setq org-log-repeat 'state)) - (let ((to-state (or (org-entry-get nil "REPEAT_TO_STATE" 'selective) - org-todo-repeat-to-state))) - (org-todo (cond ((and to-state (member to-state org-todo-keywords-1)) - to-state) - ((eq interpret 'type) org-last-state) - (head) - (t 'none)))) - (when (or org-log-repeat (org-entry-get nil "CLOCK")) - (org-entry-put nil "LAST_REPEAT" (format-time-string - (org-time-stamp-format t t)))) - (when org-log-repeat - (if (or (memq 'org-add-log-note (default-value 'post-command-hook)) - (memq 'org-add-log-note post-command-hook)) - ;; We are already setup for some record. - (when (eq org-log-repeat 'note) - ;; Make sure we take a note, not only a time stamp. - (setq org-log-note-how 'note)) - ;; Set up for taking a record. - (org-add-log-setup 'state - (or done-word (car org-done-keywords)) - org-last-state - org-log-repeat))) - (org-back-to-heading t) - (org-add-planning-info nil nil 'closed) - (let ((end (save-excursion (outline-next-heading) (point))) - (planning-re (regexp-opt - (list org-scheduled-string org-deadline-string)))) - (while (re-search-forward org-ts-regexp end t) - (let* ((ts (match-string 0)) - (planning? (org-at-planning-p)) - (type (if (not planning?) "Plain:" - (save-excursion - (re-search-backward - planning-re (line-beginning-position) t) - (match-string 0))))) - (cond - ;; Ignore fake time-stamps (e.g., within comments). - ((and (not planning?) - (not (org-at-property-p)) - (not (eq 'timestamp - (org-element-type (save-excursion - (backward-char) - (org-element-context))))))) - ;; Time-stamps without a repeater are usually skipped. - ;; However, a SCHEDULED time-stamp without one is - ;; removed, as it is considered as no longer relevant. - ((not (string-match "\\([.+]\\)?\\(\\+[0-9]+\\)\\([hdwmy]\\)" ts)) - (when (equal type org-scheduled-string) - (org-remove-timestamp-with-keyword type))) - (t - (let ((n (string-to-number (match-string 2 ts))) - (what (match-string 3 ts))) - (when (equal what "w") (setq n (* n 7) what "d")) - (when (and (equal what "h") - (not (string-match-p "[0-9]\\{1,2\\}:[0-9]\\{2\\}" - ts))) - (user-error - "Cannot repeat in Repeat in %d hour(s) because no hour \ + (org-todo-log-states nil) + (end (copy-marker (org-entry-end-position)))) + (unwind-protect + (when (and repeat (not (zerop (string-to-number (substring repeat 1))))) + (when (eq org-log-repeat t) (setq org-log-repeat 'state)) + (let ((to-state (or (org-entry-get nil "REPEAT_TO_STATE" 'selective) + org-todo-repeat-to-state))) + (org-todo (cond + ((and to-state (member to-state org-todo-keywords-1)) + to-state) + ((eq interpret 'type) org-last-state) + (head) + (t 'none)))) + (org-back-to-heading t) + (org-add-planning-info nil nil 'closed) + ;; When `org-log-repeat' is non-nil or entry contains + ;; a clock, set LAST_REPEAT property. + (when (or org-log-repeat + (catch :clock + (while (re-search-forward org-clock-line-re end t) + (when (org-at-clock-log-p) (throw :clock t))))) + (org-entry-put nil "LAST_REPEAT" (format-time-string + (org-time-stamp-format t t) + (current-time)))) + (when org-log-repeat + (if (or (memq 'org-add-log-note (default-value 'post-command-hook)) + (memq 'org-add-log-note post-command-hook)) + ;; We are already setup for some record. + (when (eq org-log-repeat 'note) + ;; Make sure we take a note, not only a time stamp. + (setq org-log-note-how 'note)) + ;; Set up for taking a record. + (org-add-log-setup 'state + (or done-word (car org-done-keywords)) + org-last-state + org-log-repeat))) + (let ((planning-re (regexp-opt + (list org-scheduled-string org-deadline-string)))) + (while (re-search-forward org-ts-regexp end t) + (let* ((ts (match-string 0)) + (planning? (org-at-planning-p)) + (type (if (not planning?) "Plain:" + (save-excursion + (re-search-backward + planning-re (line-beginning-position) t) + (match-string 0))))) + (cond + ;; Ignore fake time-stamps (e.g., within comments). + ((not (org-at-timestamp-p t))) + ;; Time-stamps without a repeater are usually + ;; skipped. However, a SCHEDULED time-stamp without + ;; one is removed, as they are no longer relevant. + ((not (string-match "\\([.+]\\)?\\(\\+[0-9]+\\)\\([hdwmy]\\)" + ts)) + (when (equal type org-scheduled-string) + (org-remove-timestamp-with-keyword type))) + (t + (let ((n (string-to-number (match-string 2 ts))) + (what (match-string 3 ts))) + (when (equal what "w") (setq n (* n 7) what "d")) + (when (and (equal what "h") + (not (string-match-p "[0-9]\\{1,2\\}:[0-9]\\{2\\}" + ts))) + (user-error + "Cannot repeat in Repeat in %d hour(s) because no hour \ has been set" - n)) - ;; Preparation, see if we need to modify the start - ;; date for the change. - (when (match-end 1) - (let ((time (save-match-data (org-time-string-to-time ts)))) - (cond - ((equal (match-string 1 ts) ".") - ;; Shift starting date to today - (org-timestamp-change - (- (org-today) (time-to-days time)) - 'day)) - ((equal (match-string 1 ts) "+") - (let ((nshiftmax 10) - (nshift 0)) - (while (or (= nshift 0) - (not (time-less-p (current-time) time))) - (when (= (cl-incf nshift) nshiftmax) - (or (y-or-n-p - (format "%d repeater intervals were not \ + n)) + ;; Preparation, see if we need to modify the start + ;; date for the change. + (when (match-end 1) + (let ((time (save-match-data + (org-time-string-to-time ts)))) + (cond + ((equal (match-string 1 ts) ".") + ;; Shift starting date to today + (org-timestamp-change + (- (org-today) (time-to-days time)) + 'day)) + ((equal (match-string 1 ts) "+") + (let ((nshiftmax 10) + (nshift 0)) + (while (or (= nshift 0) + (not (time-less-p (current-time) time))) + (when (= (cl-incf nshift) nshiftmax) + (or (y-or-n-p + (format "%d repeater intervals were not \ enough to shift date past today. Continue? " - nshift)) - (user-error "Abort"))) - (org-timestamp-change n (cdr (assoc what whata))) - (org-at-timestamp-p t) + nshift)) + (user-error "Abort"))) + (org-timestamp-change n (cdr (assoc what whata))) + (org-in-regexp org-ts-regexp3) + (setq ts (match-string 1)) + (setq time + (save-match-data + (org-time-string-to-time ts))))) + (org-timestamp-change (- n) (cdr (assoc what whata))) + ;; Rematch, so that we have everything in place + ;; for the real shift. + (org-in-regexp org-ts-regexp3) (setq ts (match-string 1)) - (setq time - (save-match-data - (org-time-string-to-time ts))))) - (org-timestamp-change (- n) (cdr (assoc what whata))) - ;; Rematch, so that we have everything in place - ;; for the real shift. - (org-at-timestamp-p t) - (setq ts (match-string 1)) - (string-match "\\([.+]\\)?\\(\\+[0-9]+\\)\\([hdwmy]\\)" - ts))))) - (save-excursion - (org-timestamp-change n (cdr (assoc what whata)) nil t)) - (setq msg - (concat - msg type " " org-last-changed-timestamp " ")))))))) - (setq org-log-post-message msg) - (message "%s" msg)))) + (string-match "\\([.+]\\)?\\(\\+[0-9]+\\)\\([hdwmy]\\)" + ts))))) + (save-excursion + (org-timestamp-change n (cdr (assoc what whata)) nil t)) + (setq msg + (concat + msg type " " org-last-changed-timestamp " ")))))))) + (setq org-log-post-message msg) + (message "%s" msg)) + (set-marker end nil)))) (defun org-show-todo-tree (arg) "Make a compact tree which shows all headlines marked with TODO. @@ -15162,6 +14964,9 @@ When JUST-ALIGN is non-nil, only align tags." org-tags-sort-function) ":"))) + (if (or (string= ":" tags) + (string= "::" tags)) + (setq tags "")) (if (not (org-string-nw-p tags)) (setq tags "") (unless (string-suffix-p ":" tags) (setq tags (concat tags ":"))) (unless (string-prefix-p ":" tags) (setq tags (concat ":" tags)))) @@ -15733,7 +15538,6 @@ See `org-property-re' for match data, if applicable." (defun org-property-action () "Do an action on properties." (interactive) - (unless (org-at-property-p) (user-error "Not at a property")) (message "Property Action: [s]et [d]elete [D]elete globally [c]ompute") (let ((c (read-char-exclusive))) (cl-case c @@ -15795,7 +15599,7 @@ When INCREMENT is non-nil, set the property to the next allowed value." (org-entry-put nil prop val)) (org-refresh-property '((effort . identity) - (effort-minutes . org-duration-string-to-minutes)) + (effort-minutes . org-duration-to-minutes)) val) (when (equal heading (bound-and-true-p org-clock-current-task)) (setq org-clock-effort (get-text-property (point-at-bol) 'effort)) @@ -15833,8 +15637,7 @@ strings." (when (or (not specific) (string= specific "CLOCKSUM")) (let ((clocksum (get-text-property (point) :org-clock-minutes))) (when clocksum - (push (cons "CLOCKSUM" - (org-minutes-to-clocksum-string clocksum)) + (push (cons "CLOCKSUM" (org-duration-from-minutes clocksum)) props))) (when specific (throw 'exit props))) (when (or (not specific) (string= specific "CLOCKSUM_T")) @@ -15842,7 +15645,7 @@ strings." :org-clock-minutes-today))) (when clocksumt (push (cons "CLOCKSUM_T" - (org-minutes-to-clocksum-string clocksumt)) + (org-duration-from-minutes clocksumt)) props))) (when specific (throw 'exit props))) (when (or (not specific) (string= specific "ITEM")) @@ -16677,7 +16480,7 @@ completion." (when (equal prop org-effort-property) (org-refresh-property '((effort . identity) - (effort-minutes . org-duration-string-to-minutes)) + (effort-minutes . org-duration-to-minutes)) nval) (when (string= org-clock-current-task heading) (setq org-clock-effort nval) @@ -16706,6 +16509,8 @@ only headings." end found flevel) (unless buffer (error "File not found :%s" file)) (with-current-buffer buffer + (unless (derived-mode-p 'org-mode) + (error "Buffer %s needs to be in Org mode" buffer)) (org-with-wide-buffer (goto-char (point-min)) (dolist (heading path) @@ -16778,7 +16583,6 @@ Return the position where this entry starts, or nil if there is no such entry." (defvar org-last-changed-timestamp nil) (defvar org-last-inserted-timestamp nil "The last time stamp inserted with `org-insert-time-stamp'.") -(defvar org-ts-what) ; dynamically scoped parameter (defun org-time-stamp (arg &optional inactive) "Prompt for a date/time and insert a time stamp. @@ -18071,36 +17875,54 @@ inactive timestamps. When this function returns a non-nil value, match data is set according to `org-ts-regexp3' or `org-ts-regexp2', depending on -INACTIVE-OK." +INACTIVE-OK. + +Return the position of the point as a symbol among `bracket', +`after', `year', `month', `hour', `minute', `day' or a number of +character from the last know part of the time stamp. + +This function checks context and only return non-nil for valid +time stamps. If you need to match anything looking like a time +stamp, or if you are sure about the context, consider using +`org-in-regexp', e.g., + + (org-in-regexp org-ts-regexp) + +Unlike to `org-element-context', the function recognizes time +stamps in properties drawers, planning lines and clocks." (interactive) (let* ((tsr (if inactive-ok org-ts-regexp3 org-ts-regexp2)) (pos (point)) - (ans (or (looking-at tsr) - (save-excursion - (skip-chars-backward "^[<\n\r\t") - (when (> (point) (point-min)) (backward-char 1)) - (and (looking-at tsr) - (> (- (match-end 0) pos) -1)))))) - (and ans - (boundp 'org-ts-what) - (setq org-ts-what - (cond - ((= pos (match-beginning 0)) 'bracket) - ;; Point is considered to be "on the bracket" whether - ;; it's really on it or right after it. - ((= pos (1- (match-end 0))) 'bracket) - ((= pos (match-end 0)) 'after) - ((org-pos-in-match-range pos 2) 'year) - ((org-pos-in-match-range pos 3) 'month) - ((org-pos-in-match-range pos 7) 'hour) - ((org-pos-in-match-range pos 8) 'minute) - ((or (org-pos-in-match-range pos 4) - (org-pos-in-match-range pos 5)) 'day) - ((and (> pos (or (match-end 8) (match-end 5))) - (< pos (match-end 0))) - (- pos (or (match-end 8) (match-end 5)))) - (t 'day)))) - ans)) + (match + (let ((boundaries (org-in-regexp tsr))) + (save-match-data + (cond ((null boundaries) nil) + ((org-at-planning-p)) + ((org-at-property-p)) + ;; CLOCK lines only contain inactive time-stamps. + ((and inactive-ok (org-at-clock-log-p))) + (t + (eq 'timestamp + (save-excursion + (when (= pos (cdr boundaries)) (forward-char -1)) + (org-element-type (org-element-context)))))))))) + (cond + ((not match) nil) + ((= pos (match-beginning 0)) 'bracket) + ;; Distinguish location right before the closing bracket from + ;; right after it. + ((= pos (1- (match-end 0))) 'bracket) + ((= pos (match-end 0)) 'after) + ((org-pos-in-match-range pos 2) 'year) + ((org-pos-in-match-range pos 3) 'month) + ((org-pos-in-match-range pos 7) 'hour) + ((org-pos-in-match-range pos 8) 'minute) + ((or (org-pos-in-match-range pos 4) + (org-pos-in-match-range pos 5)) 'day) + ((and (> pos (or (match-end 8) (match-end 5))) + (< pos (match-end 0))) + (- pos (or (match-end 8) (match-end 5)))) + (t 'day)))) (defun org-toggle-timestamp-type () "Toggle the type ( or [inactive]) of a time stamp." @@ -18116,11 +17938,10 @@ INACTIVE-OK." (message "Timestamp is now %sactive" (if (equal (char-after beg) ?<) "" "in"))))) -(defun org-at-clock-log-p nil - "Is the cursor on the clock log line?" - (save-excursion - (beginning-of-line) - (looking-at org-clock-line-re))) +(defun org-at-clock-log-p () + "Non-nil if point is on a clock log line." + (and (org-match-line org-clock-line-re) + (eq (org-element-type (save-match-data (org-element-at-point))) 'clock))) (defvar org-clock-history) ; defined in org-clock.el (defvar org-clock-adjust-closest nil) ; defined in org-clock.el @@ -18130,26 +17951,26 @@ The date will be changed by N times WHAT. WHAT can be `day', `month', `year', `minute', `second'. If WHAT is not given, the cursor position in the timestamp determines what will be changed. When SUPPRESS-TMP-DELAY is non-nil, suppress delays like \"--2d\"." - (let ((origin (point)) origin-cat + (let ((origin (point)) + (timestamp? (org-at-timestamp-p t)) + origin-cat with-hm inactive (dm (max (nth 1 org-time-stamp-rounding-minutes) 1)) - org-ts-what extra rem ts time time0 fixnext clrgx) - (unless (org-at-timestamp-p t) - (user-error "Not at a timestamp")) - (if (and (not what) (eq org-ts-what 'bracket)) + (unless timestamp? (user-error "Not at a timestamp")) + (if (and (not what) (eq timestamp? 'bracket)) (org-toggle-timestamp-type) ;; Point isn't on brackets. Remember the part of the time-stamp ;; the point was in. Indeed, size of time-stamps may change, ;; but point must be kept in the same category nonetheless. - (setq origin-cat org-ts-what) - (when (and (not what) (not (eq org-ts-what 'day)) + (setq origin-cat timestamp?) + (when (and (not what) (not (eq timestamp? 'day)) org-display-custom-times (get-text-property (point) 'display) (not (get-text-property (1- (point)) 'display))) - (setq org-ts-what 'day)) - (setq org-ts-what (or what org-ts-what) + (setq timestamp? 'day)) + (setq timestamp? (or what timestamp?) inactive (= (char-after (match-beginning 0)) ?\[) ts (match-string 0)) (replace-match "") @@ -18163,7 +17984,7 @@ When SUPPRESS-TMP-DELAY is non-nil, suppress delays like \"--2d\"." (setq with-hm t)) (setq time0 (org-parse-time-string ts)) (when (and updown - (eq org-ts-what 'minute) + (eq timestamp? 'minute) (not current-prefix-arg)) ;; This looks like s-up and s-down. Change by one rounding step. (setq n (* dm (cond ((> n 0) 1) ((< n 0) -1) (t 0)))) @@ -18173,21 +17994,21 @@ When SUPPRESS-TMP-DELAY is non-nil, suppress delays like \"--2d\"." (setq time (apply #'encode-time (or (car time0) 0) - (+ (if (eq org-ts-what 'minute) n 0) (nth 1 time0)) - (+ (if (eq org-ts-what 'hour) n 0) (nth 2 time0)) - (+ (if (eq org-ts-what 'day) n 0) (nth 3 time0)) - (+ (if (eq org-ts-what 'month) n 0) (nth 4 time0)) - (+ (if (eq org-ts-what 'year) n 0) (nth 5 time0)) + (+ (if (eq timestamp? 'minute) n 0) (nth 1 time0)) + (+ (if (eq timestamp? 'hour) n 0) (nth 2 time0)) + (+ (if (eq timestamp? 'day) n 0) (nth 3 time0)) + (+ (if (eq timestamp? 'month) n 0) (nth 4 time0)) + (+ (if (eq timestamp? 'year) n 0) (nth 5 time0)) (nthcdr 6 time0))) - (when (and (member org-ts-what '(hour minute)) + (when (and (memq timestamp? '(hour minute)) extra (string-match "-\\([012][0-9]\\):\\([0-5][0-9]\\)" extra)) (setq extra (org-modify-ts-extra extra - (if (eq org-ts-what 'hour) 2 5) + (if (eq timestamp? 'hour) 2 5) n dm))) - (when (integerp org-ts-what) - (setq extra (org-modify-ts-extra extra org-ts-what n dm))) + (when (integerp timestamp?) + (setq extra (org-modify-ts-extra extra timestamp? n dm))) (when (eq what 'calendar) (let ((cal-date (org-get-date-from-calendar))) (setcar (nthcdr 4 time0) (nth 0 cal-date)) ; month @@ -18254,14 +18075,14 @@ When SUPPRESS-TMP-DELAY is non-nil, suppress delays like \"--2d\"." (when (re-search-forward clrgx nil t) (goto-char (match-beginning 1)) (let (org-clock-adjust-closest) - (org-timestamp-change n org-ts-what updown)) + (org-timestamp-change n timestamp? updown)) (message "Clock adjusted in %s for heading: %s" (file-name-nondirectory (buffer-file-name)) (org-get-heading t t))))))))) ;; Try to recenter the calendar window, if any. (when (and org-calendar-follow-timestamp-change (get-buffer-window "*Calendar*" t) - (memq org-ts-what '(day month year))) + (memq timestamp? '(day month year))) (org-recenter-calendar (time-to-days time)))))) (defun org-modify-ts-extra (s pos n dm) @@ -18370,113 +18191,6 @@ effort string \"2hours\" is equivalent to 120 minutes." :type '(alist :key-type (string :tag "Modifier") :value-type (number :tag "Minutes"))) -(defun org-minutes-to-clocksum-string (m) - "Format number of minutes as a clocksum string. -The format is determined by `org-time-clocksum-format', -`org-time-clocksum-use-fractional' and -`org-time-clocksum-fractional-format' and -`org-time-clocksum-use-effort-durations'." - (let ((clocksum "") - (m (round m)) ; Don't allow fractions of minutes - h d w mo y fmt n) - (setq h (if org-time-clocksum-use-effort-durations - (cdr (assoc "h" org-effort-durations)) 60) - d (if org-time-clocksum-use-effort-durations - (/ (cdr (assoc "d" org-effort-durations)) h) 24) - w (if org-time-clocksum-use-effort-durations - (/ (cdr (assoc "w" org-effort-durations)) (* d h)) 7) - mo (if org-time-clocksum-use-effort-durations - (/ (cdr (assoc "m" org-effort-durations)) (* d h)) 30) - y (if org-time-clocksum-use-effort-durations - (/ (cdr (assoc "y" org-effort-durations)) (* d h)) 365)) - ;; fractional format - (if org-time-clocksum-use-fractional - (cond - ;; single format string - ((stringp org-time-clocksum-fractional-format) - (format org-time-clocksum-fractional-format (/ m (float h)))) - ;; choice of fractional formats for different time units - ((and (setq fmt (plist-get org-time-clocksum-fractional-format :years)) - (> (/ (truncate m) (* y d h)) 0)) - (format fmt (/ m (* y d (float h))))) - ((and (setq fmt (plist-get org-time-clocksum-fractional-format :months)) - (> (/ (truncate m) (* mo d h)) 0)) - (format fmt (/ m (* mo d (float h))))) - ((and (setq fmt (plist-get org-time-clocksum-fractional-format :weeks)) - (> (/ (truncate m) (* w d h)) 0)) - (format fmt (/ m (* w d (float h))))) - ((and (setq fmt (plist-get org-time-clocksum-fractional-format :days)) - (> (/ (truncate m) (* d h)) 0)) - (format fmt (/ m (* d (float h))))) - ((and (setq fmt (plist-get org-time-clocksum-fractional-format :hours)) - (> (/ (truncate m) h) 0)) - (format fmt (/ m (float h)))) - ((setq fmt (plist-get org-time-clocksum-fractional-format :minutes)) - (format fmt m)) - ;; fall back to smallest time unit with a format - ((setq fmt (plist-get org-time-clocksum-fractional-format :hours)) - (format fmt (/ m (float h)))) - ((setq fmt (plist-get org-time-clocksum-fractional-format :days)) - (format fmt (/ m (* d (float h))))) - ((setq fmt (plist-get org-time-clocksum-fractional-format :weeks)) - (format fmt (/ m (* w d (float h))))) - ((setq fmt (plist-get org-time-clocksum-fractional-format :months)) - (format fmt (/ m (* mo d (float h))))) - ((setq fmt (plist-get org-time-clocksum-fractional-format :years)) - (format fmt (/ m (* y d (float h)))))) - ;; standard (non-fractional) format, with single format string - (if (stringp org-time-clocksum-format) - (format org-time-clocksum-format (setq n (/ m h)) (- m (* h n))) - ;; separate formats components - (and (setq fmt (plist-get org-time-clocksum-format :years)) - (or (> (setq n (/ (truncate m) (* y d h))) 0) - (plist-get org-time-clocksum-format :require-years)) - (setq clocksum (concat clocksum (format fmt n)) - m (- m (* n y d h)))) - (and (setq fmt (plist-get org-time-clocksum-format :months)) - (or (> (setq n (/ (truncate m) (* mo d h))) 0) - (plist-get org-time-clocksum-format :require-months)) - (setq clocksum (concat clocksum (format fmt n)) - m (- m (* n mo d h)))) - (and (setq fmt (plist-get org-time-clocksum-format :weeks)) - (or (> (setq n (/ (truncate m) (* w d h))) 0) - (plist-get org-time-clocksum-format :require-weeks)) - (setq clocksum (concat clocksum (format fmt n)) - m (- m (* n w d h)))) - (and (setq fmt (plist-get org-time-clocksum-format :days)) - (or (> (setq n (/ (truncate m) (* d h))) 0) - (plist-get org-time-clocksum-format :require-days)) - (setq clocksum (concat clocksum (format fmt n)) - m (- m (* n d h)))) - (and (setq fmt (plist-get org-time-clocksum-format :hours)) - (or (> (setq n (/ (truncate m) h)) 0) - (plist-get org-time-clocksum-format :require-hours)) - (setq clocksum (concat clocksum (format fmt n)) - m (- m (* n h)))) - (and (setq fmt (plist-get org-time-clocksum-format :minutes)) - (or (> m 0) (plist-get org-time-clocksum-format :require-minutes)) - (setq clocksum (concat clocksum (format fmt m)))) - ;; return formatted time duration - clocksum)))) - -(defun org-hours-to-clocksum-string (n) - (org-minutes-to-clocksum-string (* n 60))) - -(defun org-hh:mm-string-to-minutes (s) - "Convert a string H:MM to a number of minutes. -If the string is just a number, interpret it as minutes. -In fact, the first hh:mm or number in the string will be taken, -there can be extra stuff in the string. -If no number is found, the return value is 0." - (cond - ((integerp s) s) - ((string-match "\\([0-9]+\\):\\([0-9]+\\)" s) - (+ (* (string-to-number (match-string 1 s)) 60) - (string-to-number (match-string 2 s)))) - ((string-match "\\([0-9]+\\)" s) - (string-to-number (match-string 1 s))) - (t 0))) - (defcustom org-image-actual-width t "Should we use the actual width of images when inlining them? @@ -18531,26 +18245,6 @@ The value is a list, with zero or more of the symbols `effort', `appt', :package-version '(Org . "8.3") :group 'org-agenda) -(defun org-duration-string-to-minutes (s &optional output-to-string) - "Convert a duration string S to minutes. - -A bare number is interpreted as minutes, modifiers can be set by -customizing `org-effort-durations' (which see). - -Entries containing a colon are interpreted as H:MM by -`org-hh:mm-string-to-minutes'." - (let ((result 0) - (re (concat "\\([0-9.]+\\) *\\(" - (regexp-opt (mapcar 'car org-effort-durations)) - "\\)"))) - (while (string-match re s) - (cl-incf result (* (cdr (assoc (match-string 2 s) org-effort-durations)) - (string-to-number (match-string 1 s)))) - (setq s (replace-match "" nil t s))) - (setq result (floor result)) - (cl-incf result (org-hh:mm-string-to-minutes s)) - (if output-to-string (number-to-string result) result))) - ;;;; Files (defun org-save-all-org-buffers () @@ -19472,7 +19166,8 @@ a HTML file." (or (plist-get processing-info :latex-header) (org-latex-make-preamble (org-export-get-environment (org-export-get-backend 'latex)) - org-format-latex-header))) + org-format-latex-header + 'snippet))) (latex-compiler (plist-get processing-info :latex-compiler)) (image-converter (plist-get processing-info :image-converter)) (tmpdir temporary-file-directory) @@ -19944,7 +19639,6 @@ boundaries." (org-defkey org-mode-map "\C-c/" 'org-sparse-tree) ; Minor-mode reserved (org-defkey org-mode-map "\C-c\\" 'org-match-sparse-tree) ; Minor-mode res. (org-defkey org-mode-map "\C-c\C-m" 'org-ctrl-c-ret) -(org-defkey org-mode-map "\M-\C-m" 'org-insert-heading) (org-defkey org-mode-map "\C-c\C-xc" 'org-clone-subtree-with-time-shift) (org-defkey org-mode-map "\C-c\C-xv" 'org-copy-visible) (org-defkey org-mode-map [(control return)] 'org-insert-heading-respect-content) @@ -20169,7 +19863,7 @@ Use `org-speed-commands-user' for further customization." (cdr (assoc keys org-babel-key-bindings)))) (defcustom org-speed-command-hook - '(org-speed-command-default-hook org-babel-speed-command-hook) + '(org-speed-command-activate org-babel-speed-command-activate) "Hook for activating speed commands at strategic locations. Hook functions are called in sequence until a valid handler is found. @@ -20909,7 +20603,7 @@ Depending on context, this does one of the following: "Change timestamps synchronously up in CLOCK log lines. Optional argument N tells to change by that many units." (interactive "P") - (if (and (org-at-clock-log-p) (org-at-timestamp-p t)) + (if (and (org-at-clock-log-p) (org-in-regexp org-ts-regexp-inactive)) (let (org-support-shift-select) (org-clock-timestamps-up n)) (user-error "Not at a clock log"))) @@ -20918,7 +20612,7 @@ Optional argument N tells to change by that many units." "Change timestamps synchronously down in CLOCK log lines. Optional argument N tells to change by that many units." (interactive "P") - (if (and (org-at-clock-log-p) (org-at-timestamp-p t)) + (if (and (org-at-clock-log-p) (org-in-regexp org-ts-regexp-inactive)) (let (org-support-shift-select) (org-clock-timestamps-down n)) (user-error "Not at a clock log"))) @@ -21012,6 +20706,7 @@ When at a table, call the formula editor with `org-table-edit-formulas'. When in a source code block, call `org-edit-src-code'. When in a fixed-width region, call `org-edit-fixed-width-region'. When in an export block, call `org-edit-export-block'. +When in a LaTeX environment, call `org-edit-latex-environment'. When at an #+INCLUDE keyword, visit the included file. When at a footnote reference, call `org-edit-footnote-reference' On a link, call `ffap' to visit the link at point. @@ -21056,6 +20751,7 @@ Otherwise, return a user error." (`example-block (org-edit-src-code)) (`export-block (org-edit-export-block)) (`fixed-width (org-edit-fixed-width-region)) + (`latex-environment (org-edit-latex-environment)) (_ ;; No notable element at point. Though, we may be at a link or ;; a footnote reference, which are objects. Thus, scan deeper. @@ -21553,15 +21249,18 @@ number of stars to add." (forward-line))))))) (unless toggled (message "Cannot toggle heading from here")))) -(defun org-meta-return (&optional _arg) +(defun org-meta-return (&optional arg) "Insert a new heading or wrap a region in a table. -Calls `org-insert-heading' or `org-table-wrap-region', depending -on context. See the individual commands for more information." - (interactive) +Calls `org-insert-heading', `org-insert-item' or +`org-table-wrap-region', depending on context. When called with +an argument, unconditionally call `org-insert-heading'." + (interactive "P") (org-check-before-invisible-edit 'insert) (or (run-hook-with-args-until-success 'org-metareturn-hook) - (call-interactively (if (org-at-table-p) #'org-table-wrap-region - #'org-insert-heading)))) + (call-interactively (cond (arg #'org-insert-heading) + ((org-at-table-p) #'org-table-wrap-region) + ((org-in-item-p) #'org-insert-item) + (t #'org-insert-heading))))) ;;; Menu entries @@ -21795,7 +21494,6 @@ on context. See the individual commands for more information." ("Special views current file" ["TODO Tree" org-show-todo-tree t] ["Check Deadlines" org-check-deadlines t] - ["Timeline" org-timeline t] ["Tags/Property tree" org-match-sparse-tree t]) "--" ["Export/Publish..." org-export-dispatch t] @@ -22040,10 +21738,9 @@ With prefix arg UNCOMPILED, load the uncompiled versions." (defun org-in-verbatim-emphasis () (save-match-data - (and (org-in-regexp org-emph-re 2) + (and (org-in-regexp org-verbatim-re 2) (>= (point) (match-beginning 3)) - (<= (point) (match-end 4)) - (member (match-string 3) '("=" "~"))))) + (<= (point) (match-end 4))))) (defun org-overlay-display (ovl text &optional face evap) "Make overlay OVL display TEXT with face FACE." @@ -22770,7 +22467,8 @@ it for output." (?o . ,(shell-quote-argument out-dir)) (?O . ,(shell-quote-argument output)))))) (dolist (command process) - (shell-command (format-spec command spec) log-buf)))) + (shell-command (format-spec command spec) log-buf)) + (when log-buf (with-current-buffer log-buf (compilation-mode))))) (_ (error "No valid command to process %S%s" source err-msg)))) ;; Check for process failure. Output file is expected to be ;; located in the same directory as SOURCE. diff --git a/elpa/org-20170407/orgcard.pdf b/elpa/org-20170407/orgcard.pdf new file mode 100644 index 0000000000000000000000000000000000000000..0420571817df1790636cc1bf0935cdf1c5e5d1df GIT binary patch literal 81692 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

4zDCN$yWJosQv1rktyb!SxU`}FL+KECKj zd^L9I`XG=GgyTkbp`TT~-~9EWYb!%+gWZB1eUr-ig3l)9*&w{#rVtx=@)U(QXa?xZ5REMWFuHour5s~T?pPA*^WtwSVFG^`n{s}G2*iK z(TN%?s6y3G0{q*>R)kfvET-=GmF}pz$HZbTuI}`d3PZ&m9fVGDT3NQzF$q6Vu?Cd- zq&FT&E*;pB6Y&fhwUf4&-{%vW$#jUD7TtWQVnCal5RK_78COxwt`gs`LxV%A8H@TT zLPVcZ1@S@vv$-#WlKOO^l!PpTVC!DB2m>xZ9XDni+MSF9SbQG4Vp*+SXo?}D&sl(z zPA_OL7gvLZDD2$J@+*_C1$|+A9*3T)W1t_WnyNW?z`?>a5C#3tkwSsIxh2%*m3ngu;bS7l1xW^8zVS?+|bqPx3<=YSBCyO zWVtE3se`dToQ4js95r*ZGc&e<7m)tJE4MOsbo^0C`oBWUuj#da7N1^|`q-}t=Ejar z=5Refc;$a{%zq-68(W(j{*e5~BRjD>{dWxW>$=sSseeC1ZT}7>_*y~@oZRe;0qoaC z_`-|oI~q&c!a2L_BFYLHYU=QS64e007ya6J9Tg7dc22eq0MIouQTdt!=-}uiW~T1| z0ABOZ;RyMEoxtyFLf z;8!I-8W#K~pTHOE&*ixZKnDKrQf{!GZ)o{r{eSWb5MH(Yw^!gN|B?c{S$++?_R^oM z%Kt7@Zs0j@Nck;l;fwf}5-|MaPbGiEl#md>*v1Gh0R5j+@qb#L8};xvg!~q>oIfi8 zg5W#uPboLI^3VLv|IQ~j-VHaT{1&v}UzP{-w^u;dZ7_b`KEU7mVkqjH8au+@C$>;{ z5`jmVthtdRK>J6G!AalO*XyGH?N-j;7g$Um&i1x7MQ8tUCpbj)#+>k)`oCjB(ZSXT z3Qzk020J4YRbvfSAR8wK8yH^GFLs^4;faa?ZvFEVo@&M6SslP2&IjTEa&vIP8*uOd zIUpb{_y{>$qksRUs)N3rov{&sT~go5(HO2xRYHSJ5^7~-pl@SyJ-w=#xg!An^M?!o z)Y06=6kug;U}tM*XJzcb0(f%W+rric0A>Sn0wKJhe<@`Jv4H>#>c$2jF#tCkgpG?4 zU}>ihPn*X20O!9hxwil0HCG2?6Lby$CkUP6uLHmZfq)?Z6TrW0oN%H#;K#QBo4;&a z-0=6n_3^ijgX4O?|6=3j1zm5v8#XQwJZ68f@o)fn;EVB#jT=sMhX>RR8yIr)emoo; zobaHyF^-qxram4H@O7&EWgG`D1P<1{Y2$=9Q@LT|tvZEc+ZKQa{jO)70;Vhi|@d#+E!0onpU5pf`gsF);=n53ix zP*M^I=H}s$fJ2|bV(|Sf3K0VQ|3h>ELPF?{PWlc`KlU^a2N%3?6fLcUf+YI?0i0`~ Apa1{> literal 0 HcmV?d00001 diff --git a/elpa/org-20170210/ox-ascii.el b/elpa/org-20170407/ox-ascii.el similarity index 100% rename from elpa/org-20170210/ox-ascii.el rename to elpa/org-20170407/ox-ascii.el diff --git a/elpa/org-20170210/ox-beamer.el b/elpa/org-20170407/ox-beamer.el similarity index 99% rename from elpa/org-20170210/ox-beamer.el rename to elpa/org-20170407/ox-beamer.el index 0cbe2c7e..82651d38 100644 --- a/elpa/org-20170210/ox-beamer.el +++ b/elpa/org-20170407/ox-beamer.el @@ -1122,9 +1122,13 @@ Return output file name." ;; working directory and then moved to publishing directory. (org-publish-attachment plist - (org-latex-compile - (org-publish-org-to - 'beamer filename ".tex" plist (file-name-directory filename))) + ;; Default directory could be anywhere when this function is + ;; called. We ensure it is set to source file directory during + ;; compilation so as to not break links to external documents. + (let ((default-directory (file-name-directory filename))) + (org-latex-compile + (org-publish-org-to + 'beamer filename ".tex" plist (file-name-directory filename)))) pub-dir)) diff --git a/elpa/org-20170210/ox-html.el b/elpa/org-20170407/ox-html.el similarity index 97% rename from elpa/org-20170210/ox-html.el rename to elpa/org-20170407/ox-html.el index 0db5a66b..251e1be5 100644 --- a/elpa/org-20170210/ox-html.el +++ b/elpa/org-20170407/ox-html.el @@ -101,6 +101,7 @@ (verbatim . org-html-verbatim) (verse-block . org-html-verse-block)) :filters-alist '((:filter-options . org-html-infojs-install-script) + (:filter-parse-tree . org-html-image-link-filter) (:filter-final-output . org-html-final-function)) :menu-entry '(?h "Export to HTML" @@ -170,6 +171,11 @@ (:html-table-row-open-tag nil nil org-html-table-row-open-tag) (:html-table-row-close-tag nil nil org-html-table-row-close-tag) (:html-xml-declaration nil nil org-html-xml-declaration) + (:html-klipsify-src nil nil org-html-klipsify-src) + (:html-klipse-css nil nil org-html-klipse-css) + (:html-klipse-js nil nil org-html-klipse-js) + (:html-klipse-keep-old-src nil nil org-html-keep-old-src) + (:html-klipse-selection-script nil nil org-html-klipse-selection-script) (:infojs-opt "INFOJS_OPT" nil nil) ;; Redefine regular options. (:creator "CREATOR" nil org-html-creator-string) @@ -229,7 +235,7 @@ property on the headline itself.") @licstart The following is the entire license notice for the JavaScript code in this tag. -Copyright (C) 2012-2013 Free Software Foundation, Inc. +Copyright (C) 2012-2017 Free Software Foundation, Inc. The JavaScript code in this tag is free software: you can redistribute it and/or modify it under the terms of the GNU @@ -332,6 +338,7 @@ for the JavaScript code in this tag. pre.src-fortran:before { content: 'Fortran'; } pre.src-gnuplot:before { content: 'gnuplot'; } pre.src-haskell:before { content: 'Haskell'; } + pre.src-hledger:before { content: 'hledger'; } pre.src-java:before { content: 'Java'; } pre.src-js:before { content: 'Javascript'; } pre.src-latex:before { content: 'LaTeX'; } @@ -1537,6 +1544,46 @@ https://developer.mozilla.org/en-US/docs/Mozilla/Mobile/Viewport_meta_tag" (const "true") (const "false")))))) +;; Handle source code blocks with Klipse + +(defcustom org-html-klipsify-src nil + "When non-nil, source code blocks are editable in exported presentation." + :group 'org-export-html + :package-version '(Org . "9.1") + :type 'boolean) + +(defcustom org-html-klipse-css + "https://storage.googleapis.com/app.klipse.tech/css/codemirror.css" + "Location of the codemirror CSS file for use with klipse." + :group 'org-export-html + :package-version '(Org . "9.1") + :type 'string) + +(defcustom org-html-klipse-js + "https://storage.googleapis.com/app.klipse.tech/plugin_prod/js/klipse_plugin.min.js" + "Location of the klipse javascript file." + :group 'org-export-html + :type 'string) + +(defcustom org-html-klipse-selection-script + "window.klipse_settings = {selector_eval_html: '.src-html', + selector_eval_js: '.src-js', + selector_eval_python_client: '.src-python', + selector_eval_scheme: '.src-scheme', + selector: '.src-clojure', + selector_eval_ruby: '.src-ruby'};" + "Javascript snippet to activate klipse." + :group 'org-export-html + :package-version '(Org . "9.1") + :type 'string) + +(defcustom org-html-keep-old-src nil + "When non-nil, use

 instead of 
."
+  :group 'org-export-html
+  :package-version '(Org . "9.1")
+  :type 'boolean)
+
+
 ;;;; Todos
 
 (defcustom org-html-todo-kwd-class-prefix ""
@@ -1548,7 +1595,7 @@ CSS classes, then this prefix can be very useful."
   :group 'org-export-html
   :type 'string)
 
-
+
 ;;; Internal Functions
 
 (defun org-html-xhtml-p (info)
@@ -2046,6 +2093,13 @@ holding export options."
    (format "\n" (nth 1 (assq 'content (plist-get info :html-divs))))
    ;; Postamble.
    (org-html--build-pre/postamble 'postamble info)
+   ;; Possibly use the Klipse library live code blocks.
+   (if (plist-get info :html-klipsify-src)
+       (concat ""))
    ;; Closing document.
    "\n"))
 
@@ -2556,21 +2610,22 @@ holding contextual information."
 	     (cdr ids) "")))
       (if (org-export-low-level-p headline info)
           ;; This is a deep sub-tree: export it as a list item.
-          (let* ((type (if numberedp 'ordered 'unordered))
-                 (itemized-body
-                  (org-html-format-list-item
-                   contents type nil info nil
+          (let* ((html-type (if numberedp "ol" "ul")))
+	    (concat
+	     (and (org-export-first-sibling-p headline info)
+		  (apply #'format "<%s class=\"org-%s\">\n"
+			 (make-list 2 html-type)))
+	     (org-html-format-list-item
+                   contents (if numberedp 'ordered 'unordered)
+		   nil info nil
                    (concat (org-html--anchor preferred-id nil nil info)
                            extra-ids
-                           full-text))))
-            (concat (and (org-export-first-sibling-p headline info)
-                         (org-html-begin-plain-list type))
-                    itemized-body
-                    (and (org-export-last-sibling-p headline info)
-                         (org-html-end-plain-list type))))
+                           full-text)) "\n"
+	     (and (org-export-last-sibling-p headline info)
+		  (format "\n" html-type))))
+	;; Standard headline.  Export it as a section.
         (let ((extra-class (org-element-property :HTML_CONTAINER_CLASS headline))
               (first-content (car (org-element-contents headline))))
-          ;; Standard headline.  Export it as a section.
           (format "<%s id=\"%s\" class=\"%s\">%s%s\n"
                   (org-html--container headline info)
                   (concat "outline-container-"
@@ -2694,7 +2749,8 @@ INFO is a plist holding contextual information.  See
 			   (symbol-name checkbox)) ""))
 	(checkbox (concat (org-html-checkbox checkbox info)
 			  (and checkbox " ")))
-	(br (org-html-close-tag "br" nil info)))
+	(br (org-html-close-tag "br" nil info))
+	(extra-newline (if (and (org-string-nw-p contents) headline) "\n" "")))
     (concat
      (pcase type
        (`ordered
@@ -2717,7 +2773,9 @@ INFO is a plist holding contextual information.  See
 			  class (concat checkbox term))
 		  "
")))) (unless (eq type 'descriptive) checkbox) - (and contents (org-trim contents)) + extra-newline + (and (org-string-nw-p contents) (org-trim contents)) + extra-newline (pcase type (`ordered "") (`unordered "") @@ -2840,6 +2898,9 @@ CONTENTS is nil. INFO is a plist holding contextual information." ;;;; Link +(defun org-html-image-link-filter (data _backend info) + (org-export-insert-image-links data info org-html-inline-image-rules)) + (defun org-html-inline-image-p (link info) "Non-nil when LINK is meant to appear as an image. INFO is a plist used as a communication channel. LINK is an @@ -3134,34 +3195,27 @@ the plist used as a communication channel." ;;;; Plain List -;; FIXME Maybe arg1 is not needed because
  • already sets -;; the correct value for the item counter -(defun org-html-begin-plain-list (type &optional arg1) - "Insert the beginning of the HTML list depending on TYPE. -When ARG1 is a string, use it as the start parameter for ordered -lists." - (pcase type - (`ordered - (format "
      " - (if arg1 (format " start=\"%d\"" arg1) ""))) - (`unordered "
        ") - (`descriptive "
        "))) - -(defun org-html-end-plain-list (type) - "Insert the end of the HTML list depending on TYPE." - (pcase type - (`ordered "
    ") - (`unordered "") - (`descriptive ""))) - (defun org-html-plain-list (plain-list contents _info) "Transcode a PLAIN-LIST element from Org to HTML. CONTENTS is the contents of the list. INFO is a plist holding contextual information." - (let ((type (org-element-property :type plain-list))) - (format "%s\n%s%s" - (org-html-begin-plain-list type) - contents (org-html-end-plain-list type)))) + (let* ((type (pcase (org-element-property :type plain-list) + (`ordered "ol") + (`unordered "ul") + (`descriptive "dl") + (other (error "Unknown HTML list type: %s" other)))) + (class (format "org-%s" type)) + (attributes (org-export-read-attribute :attr_html plain-list))) + (format "<%s %s>\n%s" + type + (org-html--make-attribute-string + (plist-put attributes :class + (org-trim + (mapconcat #'identity + (list class (plist-get attributes :class)) + " ")))) + contents + type))) ;;;; Plain Text @@ -3269,7 +3323,7 @@ holding contextual information." #'number-to-string (org-export-get-headline-number parent info) "-")))) ;; Build return value. - (format "
    \n%s
    " + (format "
    \n%s
    \n" class-num (or (org-element-property :CUSTOM_ID parent) section-number @@ -3319,11 +3373,14 @@ CONTENTS holds the contents of the item. INFO is a plist holding contextual information." (if (org-export-read-attribute :attr_html src-block :textarea) (org-html--textarea-block src-block) - (let ((lang (org-element-property :language src-block)) + (let* ((lang (org-element-property :language src-block)) (code (org-html-format-code src-block info)) (label (let ((lbl (and (org-element-property :name src-block) (org-export-get-reference src-block info)))) - (if lbl (format " id=\"%s\"" lbl) "")))) + (if lbl (format " id=\"%s\"" lbl) ""))) + (klipsify (and (plist-get info :html-klipsify-src) + (member lang '("javascript" "js" + "ruby" "scheme" "clojure" "php" "html"))))) (if (not lang) (format "
    \n%s
    " label code) (format "
    \n%s%s\n
    " ;; Build caption. @@ -3340,8 +3397,12 @@ contextual information." listing-number (org-trim (org-export-data caption info)))))) ;; Contents. - (format "
    %s
    " - lang label code)))))) + (let ((open (if org-html-keep-old-src "" "
  • "))) + (format "%s class=\"src src-%s\"%s%s>%s%s" + open lang label (if (and klipsify (string= lang "html")) + " data-editor-type=\"html\"" "") + code close))))))) ;;;; Statistics Cookie @@ -3600,8 +3661,8 @@ contextual information." ;; remove any trailing "br" close-tag so as to avoid ;; duplicates. (let* ((br (org-html-close-tag "br" nil info)) - (re (format "\\(%s\\)[ \t]*$" (regexp-quote br)))) - (replace-regexp-in-string re br contents))))) + (re (format "\\(?:%s\\)?[ \t]*\n" (regexp-quote br)))) + (replace-regexp-in-string re (concat br "\n") contents))))) ;;; Filter Functions diff --git a/elpa/org-20170210/ox-icalendar.el b/elpa/org-20170407/ox-icalendar.el similarity index 99% rename from elpa/org-20170210/ox-icalendar.el rename to elpa/org-20170407/ox-icalendar.el index 9ccbb272..966353a1 100644 --- a/elpa/org-20170210/ox-icalendar.el +++ b/elpa/org-20170407/ox-icalendar.el @@ -879,7 +879,7 @@ The file is stored under the name chosen in "Export current agenda view to an iCalendar FILE. This function assumes major mode for current buffer is `org-agenda-mode'." - (let* ((org-export-babel-evaluate) ; Don't evaluate Babel block. + (let* ((org-export-use-babel) ; Don't evaluate Babel block. (contents (org-export-string-as (with-output-to-string diff --git a/elpa/org-20170210/ox-latex.el b/elpa/org-20170407/ox-latex.el similarity index 97% rename from elpa/org-20170210/ox-latex.el rename to elpa/org-20170407/ox-latex.el index 6e00f57e..58657c73 100644 --- a/elpa/org-20170210/ox-latex.el +++ b/elpa/org-20170407/ox-latex.el @@ -102,7 +102,8 @@ :filters-alist '((:filter-options . org-latex-math-block-options-filter) (:filter-paragraph . org-latex-clean-invalid-line-breaks) (:filter-parse-tree org-latex-math-block-tree-filter - org-latex-matrices-tree-filter) + org-latex-matrices-tree-filter + org-latex-image-link-filter) (:filter-verse-block . org-latex-clean-invalid-line-breaks)) :options-alist '((:latex-class "LATEX_CLASS" nil org-latex-default-class t) @@ -726,7 +727,8 @@ environment." :safe #'stringp) (defcustom org-latex-inline-image-rules - '(("file" . "\\.\\(pdf\\|jpeg\\|jpg\\|png\\|ps\\|eps\\|tikz\\|pgf\\|svg\\)\\'")) + `(("file" . ,(regexp-opt + '("pdf" "jpeg" "jpg" "png" "ps" "eps" "tikz" "pgf" "svg")))) "Rules characterizing image files that can be inlined into LaTeX. A rule consists in an association whose key is the type of link @@ -1310,14 +1312,19 @@ For non-floats, see `org-latex--wrap-label'." (t (format (if nonfloat "\\captionof{%s}%s{%s%s}\n" "\\caption%s%s{%s%s}\n") - (if nonfloat - (cl-case type - (paragraph "figure") - (src-block (if (plist-get info :latex-listings) - "listing" - "figure")) - (t (symbol-name type))) - "") + (let ((type* (if (eq type 'latex-environment) + (org-latex--environment-type element) + type))) + (if nonfloat + (cl-case type* + (paragraph "figure") + (image "figure") + (special-block "figure") + (src-block (if (plist-get info :latex-listings) + "listing" + "figure")) + (t (symbol-name type*))) + "")) (if short (format "[%s]" (org-export-data short info)) "") label (org-export-data main info)))))) @@ -1614,11 +1621,14 @@ INFO is a plist used as a communication channel." ;;; Template ;;;###autoload -(defun org-latex-make-preamble (info &optional template) +(defun org-latex-make-preamble (info &optional template snippet?) "Return a formatted LaTeX preamble. INFO is a plist used as a communication channel. Optional argument TEMPLATE, when non-nil, is the header template string, -as expected by `org-splice-latex-header'." +as expected by `org-splice-latex-header'. When SNIPPET? is +non-nil, only includes packages relevant to image generation, as +specified in `org-latex-default-packages-alist' or +`org-latex-packages-alist'." (let* ((class (plist-get info :latex-class)) (class-options (plist-get info :latex-class-options)) (header (nth 1 (assoc class (plist-get info :latex-classes)))) @@ -1638,7 +1648,7 @@ as expected by `org-splice-latex-header'." class-template (org-latex--remove-packages org-latex-default-packages-alist info) (org-latex--remove-packages org-latex-packages-alist info) - nil + snippet? (mapconcat #'org-element-normalize-string (list (plist-get info :latex-header) (plist-get info :latex-header-extra)) "")))) @@ -2245,24 +2255,62 @@ CONTENTS is nil. INFO is a plist holding contextual information." ;;;; Latex Environment +(defun org-latex--environment-type (latex-environment) + "Return the TYPE of LATEX-ENVIRONMENT. + +The TYPE is determined from the actual latex environment, and +could be a member of `org-latex-caption-above' or `math'." + (let* ((latex-begin-re "\\\\begin{\\([A-Za-z0-9*]+\\)}") + (value (org-remove-indentation + (org-element-property :value latex-environment))) + (env (or (and (string-match latex-begin-re value) + (match-string 1 value)) + ""))) + (cond + ((string-match-p org-latex-math-environments-re value) 'math) + ((string-match-p + (eval-when-compile + (regexp-opt '("table" "longtable" "tabular" "tabu" "longtabu"))) + env) + 'table) + ((string-match-p "figure" env) 'image) + ((string-match-p + (eval-when-compile + (regexp-opt '("lstlisting" "listing" "verbatim" "minted"))) + env) + 'src-block) + (t 'special-block)))) + (defun org-latex-latex-environment (latex-environment _contents info) "Transcode a LATEX-ENVIRONMENT element from Org to LaTeX. CONTENTS is nil. INFO is a plist holding contextual information." (when (plist-get info :with-latex) - (let ((value (org-remove-indentation - (org-element-property :value latex-environment)))) - (if (not (org-element-property :name latex-environment)) value + (let* ((value (org-remove-indentation + (org-element-property :value latex-environment))) + (type (org-latex--environment-type latex-environment)) + (caption (if (eq type 'math) + (org-latex--label latex-environment info nil t) + (org-latex--caption/label-string latex-environment info))) + (caption-above-p + (memq type (append (plist-get info :latex-caption-above) '(math))))) + (if (not (or (org-element-property :name latex-environment) + (org-element-property :caption latex-environment))) + value ;; Environment is labeled: label must be within the environment ;; (otherwise, a reference pointing to that element will count - ;; the section instead). + ;; the section instead). Also insert caption if `latex-environment' + ;; is not a math environment. (with-temp-buffer (insert value) - (goto-char (point-min)) - (forward-line) - (insert (org-latex--label latex-environment info nil t)) + (if caption-above-p + (progn + (goto-char (point-min)) + (forward-line)) + (goto-char (point-max)) + (forward-line -1)) + (insert caption) (buffer-string)))))) - ;;;; Latex Fragment (defun org-latex-latex-fragment (latex-fragment _contents _info) @@ -2286,6 +2334,9 @@ CONTENTS is nil. INFO is a plist holding contextual information." ;;;; Link +(defun org-latex-image-link-filter (data _backend info) + (org-export-insert-image-links data info org-latex-inline-image-rules)) + (defun org-latex--inline-image (link info) "Return LaTeX code for an inline image. LINK is the link pointing to the inline image. INFO is a plist @@ -3100,10 +3151,12 @@ contextual information." ;; table, insert their definition just after it. (org-latex--delayed-footnotes-definitions table info))))))) -(defun org-latex--align-string (table info) +(defun org-latex--align-string (table info &optional math?) "Return an appropriate LaTeX alignment string. TABLE is the considered table. INFO is a plist used as -a communication channel." +a communication channel. When optional argument MATH? is +non-nil, TABLE is meant to be a matrix, where all cells are +centered." (or (org-export-read-attribute :attr_latex table :align) (let (align) ;; Extract column groups and alignment from first (non-rule) @@ -3119,10 +3172,11 @@ a communication channel." ;; Check left border for the first cell only. (when (and (memq 'left borders) (not align)) (push "|" align)) - (push (cl-case (org-export-table-cell-alignment cell info) - (left "l") - (right "r") - (center "c")) + (push (if math? "c" ;center cells in matrices + (cl-case (org-export-table-cell-alignment cell info) + (left "l") + (right "r") + (center "c"))) align) (when (memq 'right borders) (push "|" align)))) info) @@ -3292,8 +3346,7 @@ This function assumes TABLE has `org' as its `:type' property and (contents (mapconcat (lambda (row) - ;; Ignore horizontal rules. - (when (eq (org-element-property :type row) 'standard) + (if (eq (org-element-property :type row) 'rule) "\\hline" ;; Return each cell unmodified. (concat (mapconcat @@ -3308,11 +3361,8 @@ This function assumes TABLE has `org' as its `:type' property and (plist-get attr :math-prefix) ;; Environment. Also treat special cases. (cond ((member env '("array" "tabular")) - ;; Make sure cells are always centered while preserving - ;; vertical separators. - (let ((align (replace-regexp-in-string - "[lr]" "c" (org-latex--align-string table info)))) - (format "\\begin{%s}{%s}\n%s\\end{%s}" env align contents env))) + (format "\\begin{%s}{%s}\n%s\\end{%s}" + env (org-latex--align-string table info t) contents env)) ((assoc env org-latex-table-matrix-macros) (format "\\%s%s{\n%s}" env @@ -3689,9 +3739,13 @@ Return output file name." ;; in working directory and then moved to publishing directory. (org-publish-attachment plist - (org-latex-compile - (org-publish-org-to - 'latex filename ".tex" plist (file-name-directory filename))) + ;; Default directory could be anywhere when this function is + ;; called. We ensure it is set to source file directory during + ;; compilation so as to not break links to external documents. + (let ((default-directory (file-name-directory filename))) + (org-latex-compile + (org-publish-org-to + 'latex filename ".tex" plist (file-name-directory filename)))) pub-dir)) diff --git a/elpa/org-20170210/ox-man.el b/elpa/org-20170407/ox-man.el similarity index 99% rename from elpa/org-20170210/ox-man.el rename to elpa/org-20170407/ox-man.el index 2bb121fb..71718ab7 100644 --- a/elpa/org-20170210/ox-man.el +++ b/elpa/org-20170407/ox-man.el @@ -590,7 +590,7 @@ CONTENTS is nil. INFO is a plist holding contextual information." (defun org-man-line-break (_line-break _contents _info) "Transcode a LINE-BREAK object from Org to Man. CONTENTS is nil. INFO is a plist holding contextual information." - ".br\n") + "\n.br\n") ;;; Link diff --git a/elpa/org-20170210/ox-md.el b/elpa/org-20170407/ox-md.el similarity index 82% rename from elpa/org-20170210/ox-md.el rename to elpa/org-20170407/ox-md.el index ad6ee35f..e2b3d29e 100644 --- a/elpa/org-20170210/ox-md.el +++ b/elpa/org-20170407/ox-md.el @@ -217,11 +217,6 @@ a communication channel." (and (plist-get info :with-priority) (let ((char (org-element-property :priority headline))) (and char (format "[#%c] " char))))) - (anchor - (and (plist-get info :with-toc) - (format "" - (or (org-element-property :CUSTOM_ID headline) - (org-export-get-reference headline info))))) ;; Headline text without tags. (heading (concat todo priority title)) (style (plist-get info :md-headline-style))) @@ -239,10 +234,56 @@ a communication channel." ".")))) (concat bullet (make-string (- 4 (length bullet)) ?\s) heading tags "\n\n" (and contents (replace-regexp-in-string "^" " " contents))))) - (t (concat (org-md--headline-title style level title anchor tags) contents)))))) - - -;; Headline Title + (t + (let ((anchor + (and (org-md--headline-referred-p headline info) + (format "" + (or (org-element-property :CUSTOM_ID headline) + (org-export-get-reference headline info)))))) + (concat (org-md--headline-title style level title anchor tags) + contents))))))) + + +(defun org-md--headline-referred-p (headline info) + "Non-nil when HEADLINE is being referred to. +INFO is a plist used as a communication channel. Links and table +of contents can refer to headlines." + (unless (org-element-property :footnote-section-p headline) + (or + ;; Global table of contents includes HEADLINE. + (and (plist-get info :with-toc) + (memq headline + (org-export-collect-headlines info (plist-get info :with-toc)))) + ;; A local table of contents includes HEADLINE. + (cl-some + (lambda (h) + (let ((section (car (org-element-contents h)))) + (and + (eq 'section (org-element-type section)) + (org-element-map section 'keyword + (lambda (keyword) + (when (equal "TOC" (org-element-property :key keyword)) + (let ((case-fold-search t) + (value (org-element-property :value keyword))) + (and (string-match-p "\\" value) + (let ((n (and + (string-match "\\<[0-9]+\\>" value) + (string-to-number (match-string 0 value)))) + (local? (string-match-p "\\" value))) + (memq headline + (org-export-collect-headlines + info n (and local? keyword)))))))) + info t)))) + (org-element-lineage headline)) + ;; A link refers internally to HEADLINE. + (org-element-map (plist-get info :parse-tree) 'link + (lambda (link) + (eq headline + (pcase (org-element-property :type link) + ((or "custom-id" "id") (org-export-resolve-id-link link info)) + ("fuzzy" (org-export-resolve-fuzzy-link link info)) + (_ nil)))) + info t)))) (defun org-md--headline-title (style level title &optional anchor tags) "Generate a headline title in the preferred Markdown headline style. @@ -314,9 +355,19 @@ a communication channel." "Transcode a KEYWORD element into Markdown format. CONTENTS is nil. INFO is a plist used as a communication channel." - (if (member (org-element-property :key keyword) '("MARKDOWN" "MD")) - (org-element-property :value keyword) - (org-export-with-backend 'html keyword contents info))) + (pcase (org-element-property :key keyword) + ((or "MARKDOWN" "MD") (org-element-property :value keyword)) + ("TOC" + (let ((case-fold-search t) + (value (org-element-property :value keyword))) + (cond + ((string-match-p "\\" value) + (let ((depth (and (string-match "\\<[0-9]+\\>" value) + (string-to-number (match-string 0 value)))) + (local? (string-match-p "\\" value))) + (org-remove-indentation + (org-md--build-toc info depth keyword local?))))))) + (_ (org-export-with-backend 'html keyword contents info)))) ;;;; Line Break @@ -498,6 +549,61 @@ a communication channel." ;;;; Template +(defun org-md--build-toc (info &optional n keyword local) + "Return a table of contents. + +INFO is a plist used as a communication channel. + +Optional argument N, when non-nil, is an integer specifying the +depth of the table. + +Optional argument KEYWORD specifies the TOC keyword, if any, from +which the table of contents generation has been initiated. + +When optional argument LOCAL is non-nil, build a table of +contents according to the current headline." + (concat + (unless local + (let ((style (plist-get info :md-headline-style)) + (title (org-html--translate "Table of Contents" info))) + (org-md--headline-title style 1 title nil))) + (mapconcat + (lambda (headline) + (let* ((indentation + (make-string + (* 4 (1- (org-export-get-relative-level headline info))) + ?\s)) + (number (format "%d." + (org-last + (org-export-get-headline-number headline info)))) + (bullet (concat number (make-string (- 4 (length number)) ?\s))) + (title + (format "[%s](#%s)" + (org-export-data-with-backend + (org-export-get-alt-title headline info) + ;; Create an anonymous back-end that will + ;; ignore any footnote-reference, link, + ;; radio-target and target in table of + ;; contents. + (org-export-create-backend + :parent 'md + :transcoders '((footnote-reference . ignore) + (link . (lambda (object c i) c)) + (radio-target . (lambda (object c i) c)) + (target . ignore))) + info) + (or (org-element-property :CUSTOM_ID headline) + (org-export-get-reference headline info)))) + (tags (and (plist-get info :with-tags) + (not (eq 'not-in-toc (plist-get info :with-tags))) + (let ((tags (org-export-get-tags headline info))) + (and tags + (format ":%s:" + (mapconcat #'identity tags ":"))))))) + (concat indentation bullet title tags))) + (org-export-collect-headlines info n (and local keyword)) "\n") + "\n")) + (defun org-md--footnote-formatted (footnote info) "Formats a single footnote entry FOOTNOTE. FOOTNOTE is a cons cell of the form (number . definition). @@ -534,7 +640,8 @@ holding export options." (concat ;; Table of contents. (let ((depth (plist-get info :with-toc))) - (when depth (org-html-toc depth info))) + (when depth + (concat (org-md--build-toc info (and (wholenump depth) depth)) "\n"))) ;; Document contents. contents "\n" diff --git a/elpa/org-20170210/ox-odt.el b/elpa/org-20170407/ox-odt.el similarity index 99% rename from elpa/org-20170210/ox-odt.el rename to elpa/org-20170407/ox-odt.el index 943a6be0..364a106b 100644 --- a/elpa/org-20170210/ox-odt.el +++ b/elpa/org-20170407/ox-odt.el @@ -85,7 +85,8 @@ :filters-alist '((:filter-parse-tree . (org-odt--translate-latex-fragments org-odt--translate-description-lists - org-odt--translate-list-tables))) + org-odt--translate-list-tables + org-odt--translate-image-links))) :menu-entry '(?o "Export to ODT" ((?o "As ODT file" org-odt-export-to-odt) @@ -3680,6 +3681,11 @@ contextual information." ;;; Filters +;;; Images + +(defun org-odt--translate-image-links (data _backend info) + (org-export-insert-image-links data info org-odt-inline-image-rules)) + ;;;; LaTeX fragments (defun org-odt--translate-latex-fragments (tree _backend info) diff --git a/elpa/org-20170210/ox-org.el b/elpa/org-20170407/ox-org.el similarity index 88% rename from elpa/org-20170210/ox-org.el rename to elpa/org-20170407/ox-org.el index d0fa3a9a..a52ecc81 100644 --- a/elpa/org-20170210/ox-org.el +++ b/elpa/org-20170407/ox-org.el @@ -107,7 +107,27 @@ setting of `org-html-htmlize-output-type' is `css'." (?v "As Org file and open" (lambda (a s v b) (if a (org-org-export-to-org t s v b) - (org-open-file (org-org-export-to-org nil s v b)))))))) + (org-open-file (org-org-export-to-org nil s v b))))))) + :filters-alist '((:filter-parse-tree . org-org--add-missing-sections))) + +(defun org-org--add-missing-sections (tree _backend _info) + "Ensure each headline has an associated section. + +TREE is the parse tree being exported. + +Footnotes relative to the headline are inserted in the section, +using `org-org-section'. However, this function is not called if +the headline doesn't contain any section in the first place, so +we make sure it is always called." + (org-element-map tree 'headline + (lambda (h) + (let ((first-child (car (org-element-contents h))) + (new-section (org-element-create 'section))) + (pcase (org-element-type first-child) + (`section nil) + (`nil (org-element-adopt-elements h new-section)) + (_ (org-element-insert-before new-section first-child)))))) + tree) (defun org-org-export-block (export-block _contents _info) "Transcode a EXPORT-BLOCK element from Org to LaTeX. @@ -193,25 +213,24 @@ a communication channel." (concat (org-element-normalize-string contents) ;; Insert footnote definitions appearing for the first time in this - ;; section. Indeed, some of them may not be available to narrowing - ;; so we make sure all of them are included in the result. - (let ((footnotes-alist - (org-element-map section 'footnote-reference + ;; section, or in the relative headline title. Indeed, some of + ;; them may not be available to narrowing so we make sure all of + ;; them are included in the result. + (let ((footnotes + (org-element-map + (list (org-export-get-parent-headline section) section) + 'footnote-reference (lambda (fn) (and (eq (org-element-property :type fn) 'standard) (org-export-footnote-first-reference-p fn info) - (cons (org-element-property :label fn) - (org-export-get-footnote-definition fn info)))) - info))) - (and footnotes-alist - (concat "\n" - (mapconcat - (lambda (d) - (org-element-normalize-string - (concat (format "[fn:%s] "(car d)) - (org-export-data (cdr d) info)))) - footnotes-alist "\n")))) - (make-string (or (org-element-property :post-blank section) 0) ?\n))) + (org-element-normalize-string + (format "[fn:%s] %s" + (org-element-property :label fn) + (org-export-data + (org-export-get-footnote-definition fn info) + info))))) + info nil 'headline t))) + (and footnotes (concat "\n" (mapconcat #'identity footnotes "\n")))))) ;;;###autoload (defun org-org-export-as-org diff --git a/elpa/org-20170210/ox-publish.el b/elpa/org-20170407/ox-publish.el similarity index 72% rename from elpa/org-20170210/ox-publish.el rename to elpa/org-20170407/ox-publish.el index 5170a9a7..7c91783e 100644 --- a/elpa/org-20170210/ox-publish.el +++ b/elpa/org-20170407/ox-publish.el @@ -46,9 +46,6 @@ ;;; Variables -(defvar org-publish-temp-files nil - "Temporary list of files to be published.") - ;; Here, so you find the variable right before it's used the first time: (defvar org-publish-cache nil "This will cache timestamps and titles for files in publishing projects. @@ -209,18 +206,12 @@ a site-map of files or summary page for a given project. `:sitemap-filename' - Filename for output of sitemap. Defaults to \"sitemap.org\". + Filename for output of site-map. Defaults to \"sitemap.org\". `:sitemap-title' Title of site-map page. Defaults to name of file. - `:sitemap-function' - - Plugin function to use for generation of site-map. Defaults - to `org-publish-org-sitemap', which generates a plain list of - links to all files in the project. - `:sitemap-style' Can be `list' (site-map is just an itemized list of the @@ -228,19 +219,42 @@ a site-map of files or summary page for a given project. structure of the source files is reflected in the site-map). Defaults to `tree'. - `:sitemap-sans-extension' + `:sitemap-format-entry' - Remove extension from site-map's file-names. Useful to have - cool URIs (see http://www.w3.org/Provider/Style/URI). - Defaults to nil. + Plugin function used to format entries in the site-map. It + is called with three arguments: the file or directory name + relative to base directory, the site map style and the + current project. It has to return a string. + + Defaults to `org-publish-sitemap-default-entry', which turns + file names into links and use document titles as + descriptions. For specific formatting needs, one can use + `org-publish-find-date', `org-publish-find-title' and + `org-publish-find-property', to retrieve additional + information about published documents. + + `:sitemap-function' + + Plugin function to use for generation of site-map. It is + called with two arguments: the title of the site-map, as + a string, and a representation of the files involved in the + project, as returned by `org-list-to-lisp'. The latter can + further be transformed using `org-list-to-generic', + `org-list-to-subtree' and alike. It has to return a string. + + Defaults to `org-publish-sitemap-default', which generates + a plain list of links to all files in the project. If you create a site-map file, adjust the sorting like this: `:sitemap-sort-folders' Where folders should appear in the site-map. Set this to - `first' (default) or `last' to display folders first or last, - respectively. Any other value will mix files and folders. + `first' or `last' to display folders first or last, + respectively. When set to `ignore' (default), folders are + ignored altogether. Any other value will mix files and + folders. This variable has no effect when site-map style is + `tree'. `:sitemap-sort-files' @@ -302,17 +316,28 @@ You can overwrite this default per project in your :group 'org-export-publish :type 'symbol) -(defcustom org-publish-sitemap-sort-folders 'first - "A symbol, denoting if folders are sorted first in sitemaps. -Possible values are `first', `last', and nil. +(defcustom org-publish-sitemap-sort-folders 'ignore + "A symbol, denoting if folders are sorted first in site-maps. + +Possible values are `first', `last', `ignore' and nil. If `first', folders will be sorted before files. If `last', folders are sorted to the end after the files. -Any other value will not mix files and folders. +If `ignore', folders do not appear in the site-map. +Any other value will mix files and folders. You can overwrite this default per project in your -`org-publish-project-alist', using `:sitemap-sort-folders'." +`org-publish-project-alist', using `:sitemap-sort-folders'. + +This variable is ignored when site-map style is `tree'." :group 'org-export-publish - :type 'symbol) + :type '(choice + (const :tag "Folders before files" first) + (const :tag "Folders after files" last) + (const :tag "No folder in site-map" ignore) + (const :tag "Mix folders and files" nil)) + :version "26.1" + :package-version '(Org . "9.1") + :safe #'symbolp) (defcustom org-publish-sitemap-sort-ignore-case nil "Non-nil when site-map sorting should ignore case. @@ -322,22 +347,6 @@ You can overwrite this default per project in your :group 'org-export-publish :type 'boolean) -(defcustom org-publish-sitemap-date-format "%Y-%m-%d" - "Format for printing a date in the sitemap. -See `format-time-string' for allowed formatters." - :group 'org-export-publish - :type 'string) - -(defcustom org-publish-sitemap-file-entry-format "%t" - "Format string for site-map file entry. -You could use brackets to delimit on what part the link will be. - -%t is the title. -%a is the author. -%d is the date formatted using `org-publish-sitemap-date-format'." - :group 'org-export-publish - :type 'string) - ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -395,6 +404,13 @@ definition." (plist-get properties property) default))) +(defun org-publish--expand-file-name (file project) + "Return full file name for FILE in PROJECT. +When FILE is a relative file name, it is expanded according to +project base directory." + (if (file-name-absolute-p file) file + (expand-file-name file (org-publish-property :base-directory project)))) + (defun org-publish-expand-projects (projects-alist) "Expand projects in PROJECTS-ALIST. This splices all the components into the list." @@ -402,138 +418,51 @@ This splices all the components into the list." (while (setq p (pop rest)) (if (setq components (plist-get (cdr p) :components)) (setq rest (append - (mapcar (lambda (x) (assoc x org-publish-project-alist)) - components) + (mapcar + (lambda (x) + (or (assoc x org-publish-project-alist) + (user-error "Unknown component %S in project %S" + x (car p)))) + components) rest)) (push p rtn))) (nreverse (delete-dups (delq nil rtn))))) -(defvar org-publish-sitemap-sort-files) -(defvar org-publish-sitemap-sort-folders) -(defvar org-publish-sitemap-ignore-case) -(defvar org-publish-sitemap-requested) -(defvar org-publish-sitemap-date-format) -(defvar org-publish-sitemap-file-entry-format) -(defun org-publish-compare-directory-files (a b) - "Predicate for `sort', that sorts folders and files for sitemap." - (let ((retval t)) - (when (or org-publish-sitemap-sort-files org-publish-sitemap-sort-folders) - ;; First we sort files: - (when org-publish-sitemap-sort-files - (pcase org-publish-sitemap-sort-files - (`alphabetically - (let* ((adir (file-directory-p a)) - (aorg (and (string-suffix-p ".org" a) (not adir))) - (bdir (file-directory-p b)) - (borg (and (string-suffix-p ".org" b) (not bdir))) - (A (if aorg (concat (file-name-directory a) - (org-publish-find-title a)) a)) - (B (if borg (concat (file-name-directory b) - (org-publish-find-title b)) b))) - (setq retval (if org-publish-sitemap-ignore-case - (not (string-lessp (upcase B) (upcase A))) - (not (string-lessp B A)))))) - ((or `anti-chronologically `chronologically) - (let* ((adate (org-publish-find-date a)) - (bdate (org-publish-find-date b)) - (A (+ (lsh (car adate) 16) (cadr adate))) - (B (+ (lsh (car bdate) 16) (cadr bdate)))) - (setq retval - (if (eq org-publish-sitemap-sort-files 'chronologically) - (<= A B) - (>= A B))))))) - ;; Directory-wise wins: - (when org-publish-sitemap-sort-folders - ;; a is directory, b not: - (cond - ((and (file-directory-p a) (not (file-directory-p b))) - (setq retval (eq org-publish-sitemap-sort-folders 'first))) - ;; a is not a directory, but b is: - ((and (not (file-directory-p a)) (file-directory-p b)) - (setq retval (eq org-publish-sitemap-sort-folders 'last)))))) - retval)) - -(defun org-publish-get-base-files-1 - (base-dir &optional recurse match skip-file skip-dir) - "Set `org-publish-temp-files' with files from BASE-DIR directory. -If RECURSE is non-nil, check BASE-DIR recursively. If MATCH is -non-nil, restrict this list to the files matching the regexp -MATCH. If SKIP-FILE is non-nil, skip file matching the regexp -SKIP-FILE. If SKIP-DIR is non-nil, don't check directories -matching the regexp SKIP-DIR when recursing through BASE-DIR." - (let ((all-files (if (not recurse) (directory-files base-dir t match) - ;; If RECURSE is non-nil, we want all files - ;; matching MATCH and sub-directories. - (cl-remove-if-not - (lambda (file) - (or (file-directory-p file) - (and match (string-match match file)))) - (directory-files base-dir t))))) - (dolist (f (if (not org-publish-sitemap-requested) all-files - (sort all-files #'org-publish-compare-directory-files))) - (let ((fd-p (file-directory-p f)) - (fnd (file-name-nondirectory f))) - (if (and fd-p recurse - (not (string-match "^\\.+$" fnd)) - (if skip-dir (not (string-match skip-dir fnd)) t)) - (org-publish-get-base-files-1 - f recurse match skip-file skip-dir) - (unless (or fd-p ; This is a directory. - (and skip-file (string-match skip-file fnd)) - (not (file-exists-p (file-truename f))) - (not (string-match match fnd))) - (cl-pushnew f org-publish-temp-files))))))) - -(defun org-publish-get-base-files (project &optional exclude-regexp) - "Return a list of all files in PROJECT. -If EXCLUDE-REGEXP is set, this will be used to filter out -matching filenames." - (let* ((project-plist (cdr project)) - (base-dir (file-name-as-directory - (plist-get project-plist :base-directory))) - (include-list (plist-get project-plist :include)) - (recurse (plist-get project-plist :recursive)) - (extension (or (plist-get project-plist :base-extension) "org")) - ;; sitemap-... variables are dynamically scoped for - ;; org-publish-compare-directory-files: - (org-publish-sitemap-requested - (plist-get project-plist :auto-sitemap)) - (sitemap-filename - (or (plist-get project-plist :sitemap-filename) "sitemap.org")) - (org-publish-sitemap-sort-folders - (if (plist-member project-plist :sitemap-sort-folders) - (plist-get project-plist :sitemap-sort-folders) - org-publish-sitemap-sort-folders)) - (org-publish-sitemap-sort-files - (cond ((plist-member project-plist :sitemap-sort-files) - (plist-get project-plist :sitemap-sort-files)) - ;; For backward compatibility: - ((plist-member project-plist :sitemap-alphabetically) - (if (plist-get project-plist :sitemap-alphabetically) - 'alphabetically nil)) - (t org-publish-sitemap-sort-files))) - (org-publish-sitemap-ignore-case - (if (plist-member project-plist :sitemap-ignore-case) - (plist-get project-plist :sitemap-ignore-case) - org-publish-sitemap-sort-ignore-case)) - (match (if (eq extension 'any) "^[^\\.]" - (concat "^[^\\.].*\\.\\(" extension "\\)$")))) - ;; Make sure `org-publish-sitemap-sort-folders' has an accepted - ;; value. - (unless (memq org-publish-sitemap-sort-folders '(first last)) - (setq org-publish-sitemap-sort-folders nil)) - - (setq org-publish-temp-files nil) - (when org-publish-sitemap-requested - (cl-pushnew (expand-file-name (concat base-dir sitemap-filename)) - org-publish-temp-files)) - (org-publish-get-base-files-1 base-dir recurse match - ;; FIXME distinguish exclude regexp - ;; for skip-file and skip-dir? - exclude-regexp exclude-regexp) - (dolist (f include-list org-publish-temp-files) - (cl-pushnew (expand-file-name (concat base-dir f)) - org-publish-temp-files)))) +(defun org-publish-get-base-files (project) + "Return a list of all files in PROJECT." + (let* ((base-dir (file-name-as-directory + (org-publish-property :base-directory project))) + (extension (or (org-publish-property :base-extension project) "org")) + (match (and (not (eq extension 'any)) + (concat "^[^\\.].*\\.\\(" extension "\\)$"))) + (base-files + (cl-remove-if #'file-directory-p + (if (org-publish-property :recursive project) + (directory-files-recursively base-dir match) + (directory-files base-dir t match t))))) + (org-uniquify + (append + ;; Files from BASE-DIR. Apply exclusion filter before adding + ;; included files. + (let ((exclude-regexp (org-publish-property :exclude project))) + (if exclude-regexp + (cl-remove-if + (lambda (f) + ;; Match against relative names, yet BASE-DIR file + ;; names are absolute. + (string-match exclude-regexp + (file-relative-name f base-dir))) + base-files) + base-files)) + ;; Sitemap file. + (and (org-publish-property :auto-sitemap project) + (list (expand-file-name + (or (org-publish-property :sitemap-filename project) + "sitemap.org") + base-dir))) + ;; Included files. + (mapcar (lambda (f) (expand-file-name f base-dir)) + (org-publish-property :include project)))))) (defun org-publish-get-project-from-filename (filename &optional up) "Return a project that FILENAME belongs to. @@ -655,8 +584,7 @@ Return output file name." -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;;; Publishing files, sets of files, and indices +;;; Publishing files, sets of files (defun org-publish-file (filename &optional project no-cache) "Publish file FILENAME from PROJECT. @@ -669,23 +597,23 @@ files, when entire projects are published (see (or (org-publish-get-project-from-filename filename) (error "File %s not part of any known project" (abbreviate-file-name filename))))) - (project-plist (cdr project)) + (plist (cdr project)) (ftname (expand-file-name filename)) (publishing-function - (let ((fun (plist-get project-plist :publishing-function))) + (let ((fun (org-publish-property :publishing-function project))) (cond ((null fun) (error "No publishing function chosen")) ((listp fun) fun) (t (list fun))))) (base-dir (file-name-as-directory (expand-file-name - (or (plist-get project-plist :base-directory) + (or (org-publish-property :base-directory project) (error "Project %s does not have :base-directory defined" (car project)))))) (pub-dir (file-name-as-directory (file-truename - (or (eval (plist-get project-plist :publishing-directory)) + (or (org-publish-property :publishing-directory project) (error "Project %s does not have :publishing-directory defined" (car project)))))) tmp-pub-dir) @@ -700,7 +628,7 @@ files, when entire projects are published (see ;; Allow chain of publishing functions. (dolist (f publishing-function) (when (org-publish-needed-p filename pub-dir f tmp-pub-dir base-dir) - (let ((output (funcall f project-plist filename tmp-pub-dir))) + (let ((output (funcall f plist filename tmp-pub-dir))) (org-publish-update-timestamp filename pub-dir f base-dir) (run-hook-with-args 'org-publish-after-publishing-hook filename @@ -714,185 +642,261 @@ files, when entire projects are published (see If `:auto-sitemap' is set, publish the sitemap too. If `:makeindex' is set, also produce a file \"theindex.org\"." (dolist (project (org-publish-expand-projects projects)) - (let ((project-plist (cdr project))) - (let ((fun (plist-get project-plist :preparation-function))) - (cond ((consp fun) (dolist (f fun) (funcall f project-plist))) - ((functionp fun) (funcall fun project-plist)))) + (let ((plist (cdr project))) + (let ((fun (org-publish-property :preparation-function project))) + (cond + ((consp fun) (dolist (f fun) (funcall f plist))) + ((functionp fun) (funcall fun plist)))) ;; Each project uses its own cache file. (org-publish-initialize-cache (car project)) - (when (plist-get project-plist :auto-sitemap) + (when (org-publish-property :auto-sitemap project) (let ((sitemap-filename - (or (plist-get project-plist :sitemap-filename) - "sitemap.org")) - (sitemap-function - (or (plist-get project-plist :sitemap-function) - #'org-publish-org-sitemap)) - (org-publish-sitemap-date-format - (or (plist-get project-plist :sitemap-date-format) - org-publish-sitemap-date-format)) - (org-publish-sitemap-file-entry-format - (or (plist-get project-plist :sitemap-file-entry-format) - org-publish-sitemap-file-entry-format))) - (funcall sitemap-function project sitemap-filename))) + (or (org-publish-property :sitemap-filename project) + "sitemap.org"))) + (org-publish-sitemap project sitemap-filename))) ;; Publish all files from PROJECT except "theindex.org". Its ;; publishing will be deferred until "theindex.inc" is ;; populated. - (let ((theindex - (expand-file-name "theindex.org" - (plist-get project-plist :base-directory))) - (exclude-regexp (plist-get project-plist :exclude))) - (dolist (file (org-publish-get-base-files project exclude-regexp)) + (let ((theindex (expand-file-name + "theindex.org" + (org-publish-property :base-directory project)))) + (dolist (file (org-publish-get-base-files project)) (unless (equal file theindex) (org-publish-file file project t))) ;; Populate "theindex.inc", if needed, and publish ;; "theindex.org". - (when (plist-get project-plist :makeindex) + (when (org-publish-property :makeindex project) (org-publish-index-generate-theindex - project (plist-get project-plist :base-directory)) + project (org-publish-property :base-directory project)) (org-publish-file theindex project t))) - (let ((fun (plist-get project-plist :completion-function))) - (cond ((consp fun) (dolist (f fun) (funcall f project-plist))) - ((functionp fun) (funcall fun project-plist)))) - (org-publish-write-cache-file)))) + (let ((fun (org-publish-property :completion-function project))) + (cond + ((consp fun) (dolist (f fun) (funcall f plist))) + ((functionp fun) (funcall fun plist))))) + (org-publish-write-cache-file))) -(defun org-publish-org-sitemap (project &optional sitemap-filename) + +;;; Site map generation + +(defun org-publish--sitemap-files-to-lisp (files project style format-entry) + "Represent FILES as a parsed plain list. +FILES is the list of files in the site map. PROJECT is the +current project. STYLE determines is either `list' or `tree'. +FORMAT-ENTRY is a function called on each file which should +return a string. Return value is a list as returned by +`org-list-to-lisp'." + (let ((root (expand-file-name + (file-name-as-directory + (org-publish-property :base-directory project))))) + (pcase style + (`list + (cons 'unordered + (mapcar + (lambda (f) + (list (funcall format-entry + (file-relative-name f root) + style + project))) + files))) + (`tree + (letrec ((files-only (cl-remove-if #'directory-name-p files)) + (directories (cl-remove-if-not #'directory-name-p files)) + (subtree-to-list + (lambda (dir) + (cons 'unordered + (nconc + ;; Files in DIR. + (mapcar + (lambda (f) + (list (funcall format-entry + (file-relative-name f root) + style + project))) + (cl-remove-if-not + (lambda (f) (string= dir (file-name-directory f))) + files-only)) + ;; Direct sub-directories. + (mapcar + (lambda (sub) + (list (funcall format-entry + (file-relative-name sub root) + style + project) + (funcall subtree-to-list sub))) + (cl-remove-if-not + (lambda (f) + (string= + dir + ;; Parent directory. + (file-name-directory (directory-file-name f)))) + directories))))))) + (funcall subtree-to-list root))) + (_ (user-error "Unknown site-map style: `%s'" style))))) + +(defun org-publish-sitemap (project &optional sitemap-filename) "Create a sitemap of pages in set defined by PROJECT. Optionally set the filename of the sitemap with SITEMAP-FILENAME. Default for SITEMAP-FILENAME is `sitemap.org'." - (let* ((project-plist (cdr project)) - (dir (file-name-as-directory - (plist-get project-plist :base-directory))) - (localdir (file-name-directory dir)) - (indent-str (make-string 2 ?\s)) - (exclude-regexp (plist-get project-plist :exclude)) - (files (nreverse - (org-publish-get-base-files project exclude-regexp))) - (sitemap-filename (concat dir (or sitemap-filename "sitemap.org"))) - (sitemap-title (or (plist-get project-plist :sitemap-title) - (concat "Sitemap for project " (car project)))) - (sitemap-style (or (plist-get project-plist :sitemap-style) - 'tree)) - (sitemap-sans-extension - (plist-get project-plist :sitemap-sans-extension)) - (visiting (find-buffer-visiting sitemap-filename)) - file sitemap-buffer) - (with-current-buffer - (let ((org-inhibit-startup t)) - (setq sitemap-buffer - (or visiting (find-file sitemap-filename)))) - (erase-buffer) - (insert (concat "#+TITLE: " sitemap-title "\n\n")) - (while (setq file (pop files)) - (let ((link (file-relative-name file dir)) - (oldlocal localdir)) - (when sitemap-sans-extension - (setq link (file-name-sans-extension link))) - ;; sitemap shouldn't list itself - (unless (equal (file-truename sitemap-filename) - (file-truename file)) - (if (eq sitemap-style 'list) - (message "Generating list-style sitemap for %s" sitemap-title) - (message "Generating tree-style sitemap for %s" sitemap-title) - (setq localdir (concat (file-name-as-directory dir) - (file-name-directory link))) - (unless (string= localdir oldlocal) - (if (string= localdir dir) - (setq indent-str (make-string 2 ?\ )) - (let ((subdirs - (split-string - (directory-file-name - (file-name-directory - (file-relative-name localdir dir))) "/")) - (subdir "") - (old-subdirs (split-string - (file-relative-name oldlocal dir) "/"))) - (setq indent-str (make-string 2 ?\ )) - (while (string= (car old-subdirs) (car subdirs)) - (setq indent-str (concat indent-str (make-string 2 ?\ ))) - (pop old-subdirs) - (pop subdirs)) - (dolist (d subdirs) - (setq subdir (concat subdir d "/")) - (insert (concat indent-str " + " d "\n")) - (setq indent-str (make-string - (+ (length indent-str) 2) ?\ ))))))) - ;; This is common to 'flat and 'tree - (let ((entry - (org-publish-format-file-entry - org-publish-sitemap-file-entry-format file project-plist)) - (regexp "\\(.*\\)\\[\\([^][]+\\)\\]\\(.*\\)")) - (cond ((string-match-p regexp entry) - (string-match regexp entry) - (insert (concat indent-str " + " (match-string 1 entry) - "[[file:" link "][" - (match-string 2 entry) - "]]" (match-string 3 entry) "\n"))) - (t - (insert (concat indent-str " + [[file:" link "][" - entry - "]]\n")))))))) - (save-buffer)) - (or visiting (kill-buffer sitemap-buffer)))) - -(defun org-publish-format-file-entry (fmt file project-plist) - (format-spec - fmt - `((?t . ,(org-publish-find-title file t)) - (?d . ,(format-time-string org-publish-sitemap-date-format - (org-publish-find-date file))) - (?a . ,(or (plist-get project-plist :author) user-full-name))))) - -(defun org-publish-find-title (file &optional reset) - "Find the title of FILE in project." - (or - (and (not reset) (org-publish-cache-get-file-property file :title nil t)) - (let* ((org-inhibit-startup t) - (visiting (find-buffer-visiting file)) - (buffer (or visiting (find-file-noselect file)))) - (with-current-buffer buffer - (let ((title - (let ((property - (plist-get - ;; protect local variables in open buffers - (if visiting - (org-export-with-buffer-copy (org-export-get-environment)) - (org-export-get-environment)) - :title))) - (if property - (org-no-properties (org-element-interpret-data property)) - (file-name-nondirectory (file-name-sans-extension file)))))) - (unless visiting (kill-buffer buffer)) - (org-publish-cache-set-file-property file :title title) - title))))) - -(defun org-publish-find-date (file) - "Find the date of FILE in project. + (let* ((root (expand-file-name + (file-name-as-directory + (org-publish-property :base-directory project)))) + (sitemap-filename (concat root (or sitemap-filename "sitemap.org"))) + (title (or (org-publish-property :sitemap-title project) + (concat "Sitemap for project " (car project)))) + (style (or (org-publish-property :sitemap-style project) + 'tree)) + (sitemap-builder (or (org-publish-property :sitemap-function project) + #'org-publish-sitemap-default)) + (format-entry (or (org-publish-property :sitemap-format-entry project) + #'org-publish-sitemap-default-entry)) + (sort-folders + (org-publish-property :sitemap-sort-folders project + org-publish-sitemap-sort-folders)) + (sort-files + (org-publish-property :sitemap-sort-files project + org-publish-sitemap-sort-files)) + (ignore-case + (org-publish-property :sitemap-ignore-case project + org-publish-sitemap-sort-ignore-case)) + (org-file-p (lambda (f) (equal "org" (file-name-extension f)))) + (sort-predicate + (lambda (a b) + (let ((retval t)) + ;; First we sort files: + (pcase sort-files + (`alphabetically + (let ((A (if (funcall org-file-p a) + (concat (file-name-directory a) + (org-publish-find-title a project)) + a)) + (B (if (funcall org-file-p b) + (concat (file-name-directory b) + (org-publish-find-title b project)) + b))) + (setq retval + (if ignore-case + (not (string-lessp (upcase B) (upcase A))) + (not (string-lessp B A)))))) + ((or `anti-chronologically `chronologically) + (let* ((adate (org-publish-find-date a project)) + (bdate (org-publish-find-date b project)) + (A (+ (lsh (car adate) 16) (cadr adate))) + (B (+ (lsh (car bdate) 16) (cadr bdate)))) + (setq retval + (if (eq sort-files 'chronologically) + (<= A B) + (>= A B))))) + (`nil nil) + (_ (user-error "Invalid sort value %s" sort-files))) + ;; Directory-wise wins: + (when (memq sort-folders '(first last)) + ;; a is directory, b not: + (cond + ((and (file-directory-p a) (not (file-directory-p b))) + (setq retval (eq sort-folders 'first))) + ;; a is not a directory, but b is: + ((and (not (file-directory-p a)) (file-directory-p b)) + (setq retval (eq sort-folders 'last))))) + retval)))) + (message "Generating sitemap for %s" title) + (with-temp-file sitemap-filename + (insert + (let ((files (remove sitemap-filename + (org-publish-get-base-files project)))) + ;; Add directories, if applicable. + (unless (and (eq style 'list) (eq sort-folders 'ignore)) + (setq files + (nconc (remove root (org-uniquify + (mapcar #'file-name-directory files))) + files))) + ;; Eventually sort all entries. + (when (or sort-files (not (memq sort-folders 'ignore))) + (setq files (sort files sort-predicate))) + (funcall sitemap-builder + title + (org-publish--sitemap-files-to-lisp + files project style format-entry))))))) + +(defun org-publish-find-property (file property project &optional backend) + "Find the PROPERTY of FILE in project. + +PROPERTY is a keyword referring to an export option, as defined +in `org-export-options-alist' or in export back-ends. In the +latter case, optional argument BACKEND has to be set to the +back-end where the option is defined, e.g., + + (org-publish-find-property file :subtitle 'latex) + +Return value may be a string or a list, depending on the type of +PROPERTY, i.e. \"behavior\" parameter from `org-export-options-alist'." + (let ((file (org-publish--expand-file-name file project))) + (when (and (file-readable-p file) (not (directory-name-p file))) + (let* ((org-inhibit-startup t) + (visiting (find-buffer-visiting file)) + (buffer (or visiting (find-file-noselect file)))) + (unwind-protect + (plist-get (with-current-buffer buffer + (if (not visiting) (org-export-get-environment backend) + ;; Protect local variables in open buffers. + (org-export-with-buffer-copy + (org-export-get-environment backend)))) + property) + (unless visiting (kill-buffer buffer))))))) + +(defun org-publish-find-title (file project) + "Find the title of FILE in PROJECT." + (let ((file (org-publish--expand-file-name file project))) + (or (org-publish-cache-get-file-property file :title nil t) + (let* ((parsed-title (org-publish-find-property file :title project)) + (title + (if parsed-title + ;; Remove property so that the return value is + ;; cache-able (i.e., it can be `read' back). + (org-no-properties + (org-element-interpret-data parsed-title)) + (file-name-nondirectory (file-name-sans-extension file))))) + (org-publish-cache-set-file-property file :title title) + title)))) + +(defun org-publish-find-date (file project) + "Find the date of FILE in PROJECT. This function assumes FILE is either a directory or an Org file. If FILE is an Org file and provides a DATE keyword use it. In any other case use the file system's modification time. Return time in `current-time' format." - (if (file-directory-p file) (nth 5 (file-attributes file)) - (let* ((org-inhibit-startup t) - (visiting (find-buffer-visiting file)) - (file-buf (or visiting (find-file-noselect file nil))) - (date (plist-get - (with-current-buffer file-buf - (if visiting - (org-export-with-buffer-copy - (org-export-get-environment)) - (org-export-get-environment))) - :date))) - (unless visiting (kill-buffer file-buf)) - ;; DATE is a secondary string. If it contains a timestamp, - ;; convert it to internal format. Otherwise, use FILE - ;; modification time. - (cond ((let ((ts (and (consp date) (assq 'timestamp date)))) - (and ts - (let ((value (org-element-interpret-data ts))) - (and (org-string-nw-p value) - (org-time-string-to-time value)))))) - ((file-exists-p file) (nth 5 (file-attributes file))) - (t (error "No such file: \"%s\"" file)))))) - + (let ((file (org-publish--expand-file-name file project))) + (if (file-directory-p file) (nth 5 (file-attributes file)) + (let ((date (org-publish-find-property file :date project))) + ;; DATE is a secondary string. If it contains a time-stamp, + ;; convert it to internal format. Otherwise, use FILE + ;; modification time. + (cond ((let ((ts (and (consp date) (assq 'timestamp date)))) + (and ts + (let ((value (org-element-interpret-data ts))) + (and (org-string-nw-p value) + (org-time-string-to-time value)))))) + ((file-exists-p file) (nth 5 (file-attributes file))) + (t (error "No such file: \"%s\"" file))))))) + +(defun org-publish-sitemap-default-entry (entry style project) + "Default format for site map ENTRY, as a string. +ENTRY is a file name. STYLE is the style of the sitemap. +PROJECT is the current project." + (cond ((not (directory-name-p entry)) + (format "[[file:%s][%s]]" + entry + (org-publish-find-title entry project))) + ((eq style 'tree) + ;; Return only last subdir. + (file-name-nondirectory (directory-file-name entry))) + (t entry))) + +(defun org-publish-sitemap-default (title list) + "Default site map, as a string. +TITLE is the the title of the site map. LIST is an internal +representation for the files to include, as returned by +`org-list-to-lisp'. PROJECT is the current project." + (concat "#+TITLE: " title "\n\n" + (org-list-to-org list))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -1036,8 +1040,7 @@ its CDR is a string." "Retrieve full index from cache and build \"theindex.org\". PROJECT is the project the index relates to. DIRECTORY is the publishing directory." - (let ((all-files (org-publish-get-base-files - project (plist-get (cdr project) :exclude))) + (let ((all-files (org-publish-get-base-files project)) full-index) ;; Compile full index and sort it alphabetically. (dolist (file all-files diff --git a/elpa/org-20170210/ox-texinfo.el b/elpa/org-20170407/ox-texinfo.el similarity index 99% rename from elpa/org-20170210/ox-texinfo.el rename to elpa/org-20170407/ox-texinfo.el index 895923f4..f06273af 100644 --- a/elpa/org-20170210/ox-texinfo.el +++ b/elpa/org-20170407/ox-texinfo.el @@ -1004,12 +1004,6 @@ INFO is a plist holding contextual information. See ;; Eventually, just return "Top" to refer to the ;; beginning of the info file. (t "Top"))))))) - ((equal type "info") - (let* ((info-path (split-string path "[:#]")) - (info-manual (car info-path)) - (info-node (or (cadr info-path) "Top")) - (title (or desc ""))) - (format "@ref{%s,%s,,%s,}" info-node title info-manual))) ((string= type "mailto") (format "@email{%s}" (concat (org-texinfo--sanitize-content path) diff --git a/elpa/org-20170210/ox.el b/elpa/org-20170407/ox.el similarity index 95% rename from elpa/org-20170210/ox.el rename to elpa/org-20170407/ox.el index 82230b6b..f35963e0 100644 --- a/elpa/org-20170210/ox.el +++ b/elpa/org-20170407/ox.el @@ -883,6 +883,29 @@ HTML code while every other back-end will ignore it." (cl-every #'stringp (mapcar #'car x)) (cl-every #'stringp (mapcar #'cdr x))))) +(defcustom org-export-global-macros nil + "Alist between macro names and expansion templates. + +This variable defines macro expansion templates available +globally. Associations follow the pattern + + (NAME . TEMPLATE) + +where NAME is a string beginning with a letter and consisting of +alphanumeric characters only. + +TEMPLATE is the string to which the macro is going to be +expanded. Inside, \"$1\", \"$2\"... are place-holders for +macro's arguments. Moreover, if the template starts with +\"(eval\", it will be parsed as an Elisp expression and evaluated +accordingly." + :group 'org-export-general + :version "26.1" + :package-version '(Org . "9.1") + :type '(repeat + (cons (string :tag "Name") + (string :tag "Template")))) + (defcustom org-export-coding-system nil "Coding system for the exported file." :group 'org-export-general @@ -1069,7 +1092,9 @@ BACKEND is an export back-end, as return by, e.g,, for the shape of the return value. Unlike to `org-export-backend-options', this function also -returns options inherited from parent back-ends, if any." +returns options inherited from parent back-ends, if any. + +Return nil if BACKEND is unknown." (when (symbolp backend) (setq backend (org-export-get-backend backend))) (when backend (let ((options (org-export-backend-options backend)) @@ -1373,7 +1398,7 @@ specific items to read, if any." alist)) alist)) ;; Priority is given to back-end specific options. - (all (append (and backend (org-export-get-all-options backend)) + (all (append (org-export-get-all-options backend) org-export-options-alist)) (plist)) (when line @@ -1410,7 +1435,7 @@ for export. Return options as a plist." (match-string-no-properties 4)))))) ;; Look for both general keywords and back-end specific ;; options, with priority given to the latter. - (options (append (and backend (org-export-get-all-options backend)) + (options (append (org-export-get-all-options backend) org-export-options-alist))) ;; Handle other keywords. Then return PLIST. (dolist (option options plist) @@ -1446,7 +1471,7 @@ Assume buffer is in Org mode. Narrowing, if any, is ignored." (let* ((case-fold-search t) (options (append ;; Priority is given to back-end specific options. - (and backend (org-export-get-all-options backend)) + (org-export-get-all-options backend) org-export-options-alist)) (regexp (format "^[ \t]*#\\+%s:" (regexp-opt (nconc (delq nil (mapcar #'cadr options)) @@ -1583,7 +1608,7 @@ which back-end specific export options should also be read in the process." (let (plist ;; Priority is given to back-end specific options. - (all (append (and backend (org-export-get-all-options backend)) + (all (append (org-export-get-all-options backend) org-export-options-alist))) (dolist (cell all plist) (let ((prop (car cell))) @@ -2878,83 +2903,67 @@ containing their first reference." (defun org-export--remove-uninterpreted-data (data info) "Change uninterpreted elements back into Org syntax. -DATA is the parse tree. INFO is a plist containing export -options. Each uninterpreted element or object is changed back -into a string. Contents, if any, are not modified. The parse -tree is modified by side effect." - (org-export--remove-uninterpreted-data-1 data info) - (dolist (entry org-export-options-alist) - (when (eq (nth 4 entry) 'parse) - (let ((p (car entry))) - (plist-put info - p - (org-export--remove-uninterpreted-data-1 - (plist-get info p) - info)))))) - -(defun org-export--remove-uninterpreted-data-1 (data info) - "Change uninterpreted elements back into Org syntax. DATA is a parse tree or a secondary string. INFO is a plist containing export options. It is modified by side effect and returned by the function." (org-element-map data '(entity bold italic latex-environment latex-fragment strike-through subscript superscript underline) - (lambda (blob) + (lambda (datum) (let ((new - (cl-case (org-element-type blob) + (cl-case (org-element-type datum) ;; ... entities... (entity (and (not (plist-get info :with-entities)) (list (concat - (org-export-expand blob nil) + (org-export-expand datum nil) (make-string - (or (org-element-property :post-blank blob) 0) + (or (org-element-property :post-blank datum) 0) ?\s))))) ;; ... emphasis... ((bold italic strike-through underline) (and (not (plist-get info :with-emphasize)) - (let ((marker (cl-case (org-element-type blob) + (let ((marker (cl-case (org-element-type datum) (bold "*") (italic "/") (strike-through "+") (underline "_")))) (append (list marker) - (org-element-contents blob) + (org-element-contents datum) (list (concat marker (make-string - (or (org-element-property :post-blank blob) + (or (org-element-property :post-blank datum) 0) ?\s))))))) ;; ... LaTeX environments and fragments... ((latex-environment latex-fragment) (and (eq (plist-get info :with-latex) 'verbatim) - (list (org-export-expand blob nil)))) + (list (org-export-expand datum nil)))) ;; ... sub/superscripts... ((subscript superscript) (let ((sub/super-p (plist-get info :with-sub-superscript)) - (bracketp (org-element-property :use-brackets-p blob))) + (bracketp (org-element-property :use-brackets-p datum))) (and (or (not sub/super-p) (and (eq sub/super-p '{}) (not bracketp))) (append (list (concat - (if (eq (org-element-type blob) 'subscript) + (if (eq (org-element-type datum) 'subscript) "_" "^") (and bracketp "{"))) - (org-element-contents blob) + (org-element-contents datum) (list (concat (and bracketp "}") - (and (org-element-property :post-blank blob) + (and (org-element-property :post-blank datum) (make-string - (org-element-property :post-blank blob) + (org-element-property :post-blank datum) ?\s))))))))))) (when new - ;; Splice NEW at BLOB location in parse tree. - (dolist (e new (org-element-extract-element blob)) - (unless (equal e "") (org-element-insert-before e blob)))))) + ;; Splice NEW at DATUM location in parse tree. + (dolist (e new (org-element-extract-element datum)) + (unless (equal e "") (org-element-insert-before e datum)))))) info nil nil t) ;; Return modified parse tree. data) @@ -3026,13 +3035,15 @@ Return code as a string." (org-export-expand-include-keyword) (org-export--delete-comment-trees) (org-macro-initialize-templates) - (org-macro-replace-all org-macro-templates nil parsed-keywords) + (org-macro-replace-all + (append org-macro-templates org-export-global-macros) + nil parsed-keywords) ;; Refresh buffer properties and radio targets after ;; potentially invasive previous changes. Likewise, do it ;; again after executing Babel code. (org-set-regexps-and-options) (org-update-radio-target-regexp) - (when org-export-babel-evaluate + (when org-export-use-babel (org-babel-exp-process-buffer) (org-set-regexps-and-options) (org-update-radio-target-regexp)) @@ -3045,12 +3056,22 @@ Return code as a string." (org-export-backend-name backend))) (org-set-regexps-and-options) (org-update-radio-target-regexp) - ;; Update communication channel with environment. Also - ;; install user's and developer's filters. + ;; Update communication channel with environment. (setq info - (org-export-install-filters - (org-combine-plists - info (org-export-get-environment backend subtreep ext-plist)))) + (org-combine-plists + info (org-export-get-environment backend subtreep ext-plist))) + ;; De-activate uninterpreted data from parsed keywords. + (dolist (entry (append (org-export-get-all-options backend) + org-export-options-alist)) + (pcase entry + (`(,p ,_ ,_ ,_ parse) + (let ((value (plist-get info p))) + (plist-put info + p + (org-export--remove-uninterpreted-data value info)))) + (_ nil))) + ;; Install user's and developer's filters. + (setq info (org-export-install-filters info)) ;; Call options filters and update export options. We do not ;; use `org-export-filter-apply-functions' here since the ;; arity of such filters is different. @@ -4140,12 +4161,56 @@ the provided rules is non-nil. The default rule is This only applies to links without a description." (and (not (org-element-contents link)) (let ((case-fold-search t)) - (catch 'exit - (dolist (rule (or rules org-export-default-inline-image-rule)) - (and (string= (org-element-property :type link) (car rule)) - (string-match-p (cdr rule) - (org-element-property :path link)) - (throw 'exit t))))))) + (cl-some (lambda (rule) + (and (string= (org-element-property :type link) (car rule)) + (string-match-p (cdr rule) + (org-element-property :path link)))) + (or rules org-export-default-inline-image-rule))))) + +(defun org-export-insert-image-links (data info &optional rules) + "Insert image links in DATA. + +Org syntax does not support nested links. Nevertheless, some +export back-ends support images as descriptions of links. Since +images are really links to image files, we need to make an +exception about links nesting. + +This function recognizes links whose contents are really images +and turn them into proper nested links. It is meant to be used +as a parse tree filter in back-ends supporting such constructs. + +DATA is a parse tree. INFO is the current state of the export +process, as a plist. + +A description is a valid images if it matches any rule in RULES, +if non-nil, or `org-export-default-inline-image-rule' otherwise. +See `org-export-inline-image-p' for more information about the +structure of RULES. + +Return modified DATA." + (let ((link-re (format "\\`\\(?:%s\\|%s\\)\\'" + org-plain-link-re + org-angle-link-re)) + (case-fold-search t)) + (org-element-map data 'link + (lambda (l) + (let ((contents (org-element-interpret-data (org-element-contents l)))) + (when (and (org-string-nw-p contents) + (string-match link-re contents)) + (let ((type (match-string 1 contents)) + (path (match-string 2 contents))) + (when (cl-some (lambda (rule) + (and (string= type (car rule)) + (string-match-p (cdr rule) path))) + (or rules org-export-default-inline-image-rule)) + ;; Replace contents with image link. + (org-element-adopt-elements + (org-element-set-contents l nil) + (with-temp-buffer + (save-excursion (insert contents)) + (org-element-link-parser)))))))) + info nil nil t)) + data) (defun org-export-resolve-coderef (ref info) "Resolve a code reference REF. @@ -4252,12 +4317,10 @@ Assume LINK type is \"fuzzy\". White spaces are not significant." (let* ((search-cells (org-export-string-to-search-cell (org-link-unescape (org-element-property :path link)))) - (link-cache - (or (plist-get info :resolve-fuzzy-link-cache) - (plist-get (plist-put info - :resolve-fuzzy-link-cache - (make-hash-table :test #'equal)) - :resolve-fuzzy-link-cache))) + (link-cache (or (plist-get info :resolve-fuzzy-link-cache) + (let ((table (make-hash-table :test #'eq))) + (plist-put info :resolve-fuzzy-link-cache table) + table))) (cached (gethash search-cells link-cache 'not-found))) (if (not (eq cached 'not-found)) cached (let ((matches @@ -4323,11 +4386,13 @@ has type \"radio\"." (defun org-export-file-uri (filename) "Return file URI associated to FILENAME." - (cond ((string-match-p "\\`//" filename) (concat "file:" filename)) + (cond ((string-prefix-p "//" filename) (concat "file:" filename)) ((not (file-name-absolute-p filename)) filename) ((org-file-remote-p filename) (concat "file:/" filename)) - (t (concat "file://" (expand-file-name filename))))) - + (t + (let ((fullname (expand-file-name filename))) + (concat (if (string-prefix-p "/" fullname) "file://" "file:///") + fullname))))) ;;;; For References ;; @@ -4660,19 +4725,20 @@ code." All special columns will be ignored during export." ;; The table has a special column when every first cell of every row ;; has an empty value or contains a symbol among "/", "#", "!", "$", - ;; "*" "_" and "^". Though, do not consider a first row containing - ;; only empty cells as special. - (let ((special-column-p 'empty)) + ;; "*" "_" and "^". Though, do not consider a first column + ;; containing only empty cells as special. + (let ((special-column? 'empty)) (catch 'exit (dolist (row (org-element-contents table)) (when (eq (org-element-property :type row) 'standard) (let ((value (org-element-contents (car (org-element-contents row))))) - (cond ((member value '(("/") ("#") ("!") ("$") ("*") ("_") ("^"))) - (setq special-column-p 'special)) - ((not value)) + (cond ((member value + '(("/") ("#") ("!") ("$") ("*") ("_") ("^"))) + (setq special-column? 'special)) + ((null value)) (t (throw 'exit nil)))))) - (eq special-column-p 'special)))) + (eq special-column? 'special)))) (defun org-export-table-has-header-p (table info) "Non-nil when TABLE has a header. @@ -4680,26 +4746,28 @@ All special columns will be ignored during export." INFO is a plist used as a communication channel. A table has a header when it contains at least two row groups." - (let ((cache (or (plist-get info :table-header-cache) - (plist-get (setq info - (plist-put info :table-header-cache - (make-hash-table :test 'eq))) - :table-header-cache)))) - (or (gethash table cache) - (let ((rowgroup 1) row-flag) - (puthash - table - (org-element-map table 'table-row - (lambda (row) - (cond - ((> rowgroup 1) t) - ((and row-flag (eq (org-element-property :type row) 'rule)) - (cl-incf rowgroup) (setq row-flag nil)) - ((and (not row-flag) (eq (org-element-property :type row) - 'standard)) - (setq row-flag t) nil))) - info 'first-match) - cache))))) + (let* ((cache (or (plist-get info :table-header-cache) + (let ((table (make-hash-table :test #'eq))) + (plist-put info :table-header-cache table) + table))) + (cached (gethash table cache 'no-cache))) + (if (not (eq cached 'no-cache)) cached + (let ((rowgroup 1) row-flag) + (puthash table + (org-element-map table 'table-row + (lambda (row) + (cond + ((> rowgroup 1) t) + ((and row-flag + (eq (org-element-property :type row) 'rule)) + (cl-incf rowgroup) + (setq row-flag nil)) + ((and (not row-flag) + (eq (org-element-property :type row) 'standard)) + (setq row-flag t) + nil))) + info 'first-match) + cache))))) (defun org-export-table-row-is-special-p (table-row _) "Non-nil if TABLE-ROW is considered special. @@ -4740,21 +4808,24 @@ INFO is a plist used as the communication channel. Return value is the group number, as an integer, or nil for special rows and rows separators. First group is also table's header." - (let ((cache (or (plist-get info :table-row-group-cache) - (plist-get (setq info - (plist-put info :table-row-group-cache - (make-hash-table :test 'eq))) - :table-row-group-cache)))) - (cond ((gethash table-row cache)) - ((eq (org-element-property :type table-row) 'rule) nil) - (t (let ((group 0) row-flag) - (org-element-map (org-export-get-parent table-row) 'table-row - (lambda (row) - (if (eq (org-element-property :type row) 'rule) - (setq row-flag nil) - (unless row-flag (cl-incf group) (setq row-flag t))) - (when (eq table-row row) (puthash table-row group cache))) - info 'first-match)))))) + (when (eq (org-element-property :type table-row) 'standard) + (let* ((cache (or (plist-get info :table-row-group-cache) + (let ((table (make-hash-table :test #'eq))) + (plist-put info :table-row-group-cache table) + table))) + (cached (gethash table-row cache 'no-cache))) + (if (not (eq cached 'no-cache)) cached + ;; First time a row is queried, populate cache with all the + ;; rows from the table. + (let ((group 0) row-flag) + (org-element-map (org-export-get-parent table-row) 'table-row + (lambda (row) + (if (eq (org-element-property :type row) 'rule) + (setq row-flag nil) + (unless row-flag (cl-incf group) (setq row-flag t)) + (puthash row group cache))) + info)) + (gethash table-row cache))))) (defun org-export-table-cell-width (table-cell info) "Return TABLE-CELL contents width. @@ -4769,10 +4840,9 @@ same column as TABLE-CELL, or nil." (columns (length cells)) (column (- columns (length (memq table-cell cells)))) (cache (or (plist-get info :table-cell-width-cache) - (plist-get (setq info - (plist-put info :table-cell-width-cache - (make-hash-table :test 'eq))) - :table-cell-width-cache))) + (let ((table (make-hash-table :test #'eq))) + (plist-put info :table-cell-width-cache table) + table))) (width-vector (or (gethash table cache) (puthash table (make-vector columns 'empty) cache))) (value (aref width-vector column))) @@ -4813,10 +4883,9 @@ Possible values are `left', `right' and `center'." (columns (length cells)) (column (- columns (length (memq table-cell cells)))) (cache (or (plist-get info :table-cell-alignment-cache) - (plist-get (setq info - (plist-put info :table-cell-alignment-cache - (make-hash-table :test 'eq))) - :table-cell-alignment-cache))) + (let ((table (make-hash-table :test #'eq))) + (plist-put info :table-cell-alignment-cache table) + table))) (align-vector (or (gethash table cache) (puthash table (make-vector columns nil) cache)))) (or (aref align-vector column) @@ -5019,17 +5088,24 @@ INFO is a plist used as a communication channel." (defun org-export-table-row-number (table-row info) "Return TABLE-ROW number. INFO is a plist used as a communication channel. Return value is -zero-based and ignores separators. The function returns nil for -special columns and separators." - (when (and (eq (org-element-property :type table-row) 'standard) - (not (org-export-table-row-is-special-p table-row info))) - (let ((number 0)) - (org-element-map (org-export-get-parent-table table-row) 'table-row - (lambda (row) - (cond ((eq row table-row) number) - ((eq (org-element-property :type row) 'standard) - (cl-incf number) nil))) - info 'first-match)))) +zero-indexed and ignores separators. The function returns nil +for special rows and separators." + (when (eq (org-element-property :type table-row) 'standard) + (let* ((cache (or (plist-get info :table-row-number-cache) + (let ((table (make-hash-table :test #'eq))) + (plist-put info :table-row-number-cache table) + table))) + (cached (gethash table-row cache 'no-cache))) + (if (not (eq cached 'no-cache)) cached + ;; First time a row is queried, populate cache with all the + ;; rows from the table. + (let ((number -1)) + (org-element-map (org-export-get-parent-table table-row) 'table-row + (lambda (row) + (when (eq (org-element-property :type row) 'standard) + (puthash row (cl-incf number) cache))) + info)) + (gethash table-row cache))))) (defun org-export-table-dimensions (table info) "Return TABLE dimensions. @@ -5202,7 +5278,19 @@ Return a list of src-block elements with a caption." ;; `org-export-smart-quotes-alist'. (defconst org-export-smart-quotes-alist - '(("da" + '(("ar" + (primary-opening + :utf-8 "«" :html "«" :latex "\\guillemotleft{}" + :texinfo "@guillemetleft{}") + (primary-closing + :utf-8 "»" :html "»" :latex "\\guillemotright{}" + :texinfo "@guillemetright{}") + (secondary-opening :utf-8 "‹" :html "‹" :latex "\\guilsinglleft{}" + :texinfo "@guilsinglleft{}") + (secondary-closing :utf-8 "›" :html "›" :latex "\\guilsinglright{}" + :texinfo "@guilsinglright{}") + (apostrophe :utf-8 "’" :html "’")) + ("da" ;; one may use: »...«, "...", ›...‹, or '...'. ;; http://sproget.dk/raad-og-regler/retskrivningsregler/retskrivningsregler/a7-40-60/a7-58-anforselstegn/ ;; LaTeX quotes require Babel! @@ -5309,8 +5397,19 @@ Return a list of src-block elements with a caption." (secondary-closing :utf-8 "“" :html "“" :latex "\\grqq{}" :texinfo "@quotedblleft{}") (apostrophe :utf-8 "’" :html: "'")) + ("sl" + ;; Based on https://sl.wikipedia.org/wiki/Narekovaj + (primary-opening :utf-8 "«" :html "«" :latex "{}<<" + :texinfo "@guillemetleft{}") + (primary-closing :utf-8 "»" :html "»" :latex ">>{}" + :texinfo "@guillemetright{}") + (secondary-opening + :utf-8 "„" :html "„" :latex "\\glqq{}" :texinfo "@quotedblbase{}") + (secondary-closing + :utf-8 "“" :html "“" :latex "\\grqq{}" :texinfo "@quotedblleft{}") + (apostrophe :utf-8 "’" :html "’")) ("sv" - ;; based on https://sv.wikipedia.org/wiki/Citattecken + ;; Based on https://sv.wikipedia.org/wiki/Citattecken (primary-opening :utf-8 "”" :html "”" :latex "’’" :texinfo "’’") (primary-closing :utf-8 "”" :html "”" :latex "’’" :texinfo "’’") (secondary-opening :utf-8 "’" :html "’" :latex "’" :texinfo "`") @@ -5526,6 +5625,7 @@ them." '(("%e %n: %c" ("fr" :default "%e %n : %c" :html "%e %n : %c")) ("Author" + ("ar" :default "تأليف") ("ca" :default "Autor") ("cs" :default "Autor") ("da" :default "Forfatter") @@ -5546,11 +5646,13 @@ them." ("pl" :default "Autor") ("pt_BR" :default "Autor") ("ru" :html "Автор" :utf-8 "Автор") + ("sl" :default "Avtor") ("sv" :html "Författare") ("uk" :html "Автор" :utf-8 "Автор") ("zh-CN" :html "作者" :utf-8 "作者") ("zh-TW" :html "作者" :utf-8 "作者")) ("Continued from previous page" + ("ar" :default "تتمة الصفحة السابقة") ("de" :default "Fortsetzung von vorheriger Seite") ("es" :html "Continúa de la página anterior" :ascii "Continua de la pagina anterior" :default "Continúa de la página anterior") ("fr" :default "Suite de la page précédente") @@ -5559,8 +5661,10 @@ them." ("nl" :default "Vervolg van vorige pagina") ("pt" :default "Continuação da página anterior") ("ru" :html "(Продолжение)" - :utf-8 "(Продолжение)")) + :utf-8 "(Продолжение)") + ("sl" :default "Nadaljevanje s prejÅ¡nje strani")) ("Continued on next page" + ("ar" :default "التتمة في الصفحة التالية") ("de" :default "Fortsetzung nächste Seite") ("es" :html "Continúa en la siguiente página" :ascii "Continua en la siguiente pagina" :default "Continúa en la siguiente página") ("fr" :default "Suite page suivante") @@ -5569,8 +5673,12 @@ them." ("nl" :default "Vervolg op volgende pagina") ("pt" :default "Continua na página seguinte") ("ru" :html "(Продолжение следует)" - :utf-8 "(Продолжение следует)")) + :utf-8 "(Продолжение следует)") + ("sl" :default "Nadaljevanje na naslednji strani")) + ("Created" + ("sl" :default "Ustvarjeno")) ("Date" + ("ar" :default "بتاريخ") ("ca" :default "Data") ("cs" :default "Datum") ("da" :default "Dato") @@ -5590,11 +5698,13 @@ them." ("pl" :default "Data") ("pt_BR" :default "Data") ("ru" :html "Дата" :utf-8 "Дата") + ("sl" :default "Datum") ("sv" :default "Datum") ("uk" :html "Дата" :utf-8 "Дата") ("zh-CN" :html "日期" :utf-8 "日期") ("zh-TW" :html "日期" :utf-8 "日期")) ("Equation" + ("ar" :default "معادلة") ("da" :default "Ligning") ("de" :default "Gleichung") ("es" :ascii "Ecuacion" :html "Ecuación" :default "Ecuación") @@ -5608,9 +5718,11 @@ them." ("pt_BR" :html "Equação" :default "Equação" :ascii "Equacao") ("ru" :html "Уравнение" :utf-8 "Уравнение") + ("sl" :default "Enačba") ("sv" :default "Ekvation") ("zh-CN" :html "方程" :utf-8 "方程")) ("Figure" + ("ar" :default "شكل") ("da" :default "Figur") ("de" :default "Abbildung") ("es" :default "Figura") @@ -5625,6 +5737,7 @@ them." ("sv" :default "Illustration") ("zh-CN" :html "图" :utf-8 "图")) ("Figure %d:" + ("ar" :default "شكل %d:") ("da" :default "Figur %d") ("de" :default "Abbildung %d:") ("es" :default "Figura %d:") @@ -5637,9 +5750,11 @@ them." ("nn" :default "Illustrasjon %d") ("pt_BR" :default "Figura %d:") ("ru" :html "Рис. %d.:" :utf-8 "Рис. %d.:") + ("sl" :default "Slika %d") ("sv" :default "Illustration %d") ("zh-CN" :html "图%d " :utf-8 "图%d ")) ("Footnotes" + ("ar" :default "الهوامش") ("ca" :html "Peus de pàgina") ("cs" :default "Pozn\xe1mky pod carou") ("da" :default "Fodnoter") @@ -5660,12 +5775,14 @@ them." ("pl" :default "Przypis") ("pt_BR" :html "Notas de Rodapé" :default "Notas de Rodapé" :ascii "Notas de Rodape") ("ru" :html "Сноски" :utf-8 "Сноски") + ("sl" :default "Opombe") ("sv" :default "Fotnoter") ("uk" :html "Примітки" :utf-8 "Примітки") ("zh-CN" :html "脚注" :utf-8 "脚注") ("zh-TW" :html "腳註" :utf-8 "腳註")) ("List of Listings" + ("ar" :default "قائمة بالبرامج") ("da" :default "Programmer") ("de" :default "Programmauflistungsverzeichnis") ("es" :ascii "Indice de Listados de programas" :html "Índice de Listados de programas" :default "Índice de Listados de programas") @@ -5676,8 +5793,10 @@ them." ("nb" :default "Dataprogrammer") ("ru" :html "Список распечаток" :utf-8 "Список распечаток") + ("sl" :default "Seznam programskih izpisov") ("zh-CN" :html "代码目录" :utf-8 "代码目录")) ("List of Tables" + ("ar" :default "قائمة بالجداول") ("da" :default "Tabeller") ("de" :default "Tabellenverzeichnis") ("es" :ascii "Indice de tablas" :html "Índice de tablas" :default "Índice de tablas") @@ -5691,9 +5810,11 @@ them." ("pt_BR" :default "Índice de Tabelas" :ascii "Indice de Tabelas") ("ru" :html "Список таблиц" :utf-8 "Список таблиц") + ("sl" :default "Seznam tabel") ("sv" :default "Tabeller") ("zh-CN" :html "表格目录" :utf-8 "表格目录")) ("Listing" + ("ar" :default "برنامج") ("da" :default "Program") ("de" :default "Programmlisting") ("es" :default "Listado de programa") @@ -5705,8 +5826,10 @@ them." ("pt_BR" :default "Listagem") ("ru" :html "Распечатка" :utf-8 "Распечатка") + ("sl" :default "Izpis programa") ("zh-CN" :html "代码" :utf-8 "代码")) ("Listing %d:" + ("ar" :default "برنامج %d:") ("da" :default "Program %d") ("de" :default "Programmlisting %d") ("es" :default "Listado de programa %d") @@ -5718,18 +5841,24 @@ them." ("pt_BR" :default "Listagem %d") ("ru" :html "Распечатка %d.:" :utf-8 "Распечатка %d.:") + ("sl" :default "Izpis programa %d") ("zh-CN" :html "代码%d " :utf-8 "代码%d ")) ("References" + ("ar" :default "المراجع") ("fr" :ascii "References" :default "Références") ("de" :default "Quellen") - ("es" :default "Referencias")) + ("es" :default "Referencias") + ("sl" :default "Reference")) ("See figure %s" ("fr" :default "cf. figure %s" - :html "cf. figure %s" :latex "cf.~figure~%s")) + :html "cf. figure %s" :latex "cf.~figure~%s") + ("sl" :default "Glej sliko %s")) ("See listing %s" ("fr" :default "cf. programme %s" - :html "cf. programme %s" :latex "cf.~programme~%s")) + :html "cf. programme %s" :latex "cf.~programme~%s") + ("sl" :default "Glej izpis programa %s")) ("See section %s" + ("ar" :default "انظر قسم %s") ("da" :default "jævnfør afsnit %s") ("de" :default "siehe Abschnitt %s") ("es" :ascii "Vea seccion %s" :html "Vea sección %s" :default "Vea sección %s") @@ -5740,11 +5869,14 @@ them." :ascii "Veja a secao %s") ("ru" :html "См. раздел %s" :utf-8 "См. раздел %s") + ("sl" :default "Glej poglavje %d") ("zh-CN" :html "参见第%s节" :utf-8 "参见第%s节")) ("See table %s" ("fr" :default "cf. tableau %s" - :html "cf. tableau %s" :latex "cf.~tableau~%s")) + :html "cf. tableau %s" :latex "cf.~tableau~%s") + ("sl" :default "Glej tabelo %s")) ("Table" + ("ar" :default "جدول") ("de" :default "Tabelle") ("es" :default "Tabla") ("et" :default "Tabel") @@ -5756,6 +5888,7 @@ them." :utf-8 "Таблица") ("zh-CN" :html "表" :utf-8 "表")) ("Table %d:" + ("ar" :default "جدول %d:") ("da" :default "Tabel %d") ("de" :default "Tabelle %d") ("es" :default "Tabla %d") @@ -5769,9 +5902,11 @@ them." ("pt_BR" :default "Tabela %d") ("ru" :html "Таблица %d.:" :utf-8 "Таблица %d.:") + ("sl" :default "Tabela %d") ("sv" :default "Tabell %d") ("zh-CN" :html "表%d " :utf-8 "表%d ")) ("Table of Contents" + ("ar" :default "قائمة المحتويات") ("ca" :html "Índex") ("cs" :default "Obsah") ("da" :default "Indhold") @@ -5793,11 +5928,13 @@ them." ("pt_BR" :html "Índice" :utf8 "Índice" :ascii "Indice") ("ru" :html "Содержание" :utf-8 "Содержание") + ("sl" :default "Kazalo") ("sv" :html "Innehåll") ("uk" :html "Зміст" :utf-8 "Зміст") ("zh-CN" :html "目录" :utf-8 "目录") ("zh-TW" :html "目錄" :utf-8 "目錄")) ("Unknown reference" + ("ar" :default "مرجع غير معرّف") ("da" :default "ukendt reference") ("de" :default "Unbekannter Verweis") ("es" :default "Referencia desconocida") @@ -5808,6 +5945,7 @@ them." :ascii "Referencia desconhecida") ("ru" :html "Неизвестная ссылка" :utf-8 "Неизвестная ссылка") + ("sl" :default "Neznana referenca") ("zh-CN" :html "未知引用" :utf-8 "未知引用"))) "Dictionary for export engine. @@ -6095,29 +6233,37 @@ directory. Return file name as a string." (let* ((visited-file (buffer-file-name (buffer-base-buffer))) (base-name - ;; File name may come from EXPORT_FILE_NAME subtree - ;; property. - (file-name-sans-extension - (or (and subtreep (org-entry-get nil "EXPORT_FILE_NAME" 'selective)) - ;; File name may be extracted from buffer's associated - ;; file, if any. - (and visited-file (file-name-nondirectory visited-file)) - ;; Can't determine file name on our own: Ask user. - (read-file-name - "Output file: " pub-dir nil nil nil - (lambda (name) - (string= (file-name-extension name t) extension)))))) + (concat + (file-name-sans-extension + (or + ;; Check EXPORT_FILE_NAME subtree property. + (and subtreep (org-entry-get nil "EXPORT_FILE_NAME" 'selective)) + ;; Check #+EXPORT_FILE_NAME keyword. + (org-with-point-at (point-min) + (catch :found + (let ((case-fold-search t)) + (while (re-search-forward + "^[ \t]*#\\+EXPORT_FILE_NAME:[ \t]+\\S-" nil t) + (let ((element (org-element-at-point))) + (when (eq 'keyword (org-element-type element)) + (throw :found + (org-element-property :value element)))))))) + ;; Extract from buffer's associated file, if any. + (and visited-file (file-name-nondirectory visited-file)) + ;; Can't determine file name on our own: ask user. + (read-file-name + "Output file: " pub-dir nil nil nil + (lambda (n) (string= extension (file-name-extension n t)))))) + extension)) (output-file ;; Build file name. Enforce EXTENSION over whatever user ;; may have come up with. PUB-DIR, if defined, always has ;; precedence over any provided path. (cond - (pub-dir - (concat (file-name-as-directory pub-dir) - (file-name-nondirectory base-name) - extension)) - ((file-name-absolute-p base-name) (concat base-name extension)) - (t (concat (file-name-as-directory ".") base-name extension))))) + (pub-dir (concat (file-name-as-directory pub-dir) + (file-name-nondirectory base-name))) + ((file-name-absolute-p base-name) base-name) + (t base-name)))) ;; If writing to OUTPUT-FILE would overwrite original file, append ;; EXTENSION another time to final name. (if (and visited-file (file-equal-p visited-file output-file)) diff --git a/init.el b/init.el index 79f60b5d..e89cfcf5 100644 --- a/init.el +++ b/init.el @@ -1,11 +1,11 @@ (setq load-path (append - (list (expand-file-name "~/.emacs.d/lisp") (expand-file-name "~/.emacs.d/elpa/org-20170210")) + (list (expand-file-name "~/.emacs.d/lisp") (expand-file-name "~/.emacs.d/elpa/org-20170407")) load-path)) (if (string-equal system-type "darwin") (delete ' "/Applications/Emacs.app/Contents/Resources/lisp/org" load-path)) (setq org-use-extra-keys t) -(require 'org "~/.emacs.d/elpa/org-20170210/org.el") +(require 'org "~/.emacs.d/elpa/org-20170407/org.el") (require 'ob-core) (require 'ob-tangle) (require 'ob-sql) -- 2.47.3