Update to Org mode 7.4

This commit is contained in:
Carsten Dominik 2010-12-11 17:42:53 +01:00
parent 39321b94bf
commit acedf35ce0
101 changed files with 4236 additions and 2707 deletions

View file

@ -1,3 +1,25 @@
2010-12-11 Carsten Dominik <carsten.dominik@gmail.com>
* org.texi (Using capture): Document using prefix arguments for
finalizing capture.
(Agenda commands): Document prefix argument for the bulk scatter
command.
(Beamer class export): Document that also overlay arguments can be
passed to the column environment.
(Template elements): Document the new entry type.
2010-12-11 Puneeth Chaganti <punchagan@gmail.com>
* org.texi (Include files): Document :minlevel.
2010-12-11 Julien Danjou <julien@danjou.info>
* org.texi (Categories): Document category icons.
2010-12-11 Eric Schulte <schulte.eric@gmail.com>
* org.texi (noweb): Fix typo.
2010-12-06 Tassilo Horn <tassilo@member.fsf.org>
* gnus.texi (Server Commands): Point to the rest of the server

File diff suppressed because it is too large Load diff

View file

@ -1,3 +1,7 @@
2010-12-11 Carsten Dominik <carsten.dominik@gmail.com>
* refcards/orgcard.tex: Cleanup.
2010-11-27 Ulrich Mueller <ulm@gentoo.org>
* HELLO: Add ancient Greek (Bug#7418).

View file

@ -1,5 +1,5 @@
% Reference Card for Org Mode
\def\orgversionnumber{7.3}
\def\orgversionnumber{7.4}
\def\versionyear{2010} % latest update
\def\year{2010} % latest copyright year
@ -266,6 +266,10 @@
\def\threecol#1#2#3{\hskip\keyindent\relax#1\hfil&\kbd{#2}\hfil\quad
&\kbd{#3}\hfil\quad\cr}
\def\noteone{{\small \hfill [1]}}
\def\notetwo{{\small \hfill [2]}}
%**end of header
@ -274,14 +278,6 @@
\centerline{(for version \orgversionnumber)}
\section{Getting Started}
%
%\vskip -2mm
%\beginexample%
%(add-to-list 'auto-mode-alist '("\\\\.org\$" . org-mode))
%(define-key global-map "\\C-cl" 'org-store-link)$^1$
%(define-key global-map "\\C-ca" 'org-agenda)$^1$
%\endexample
%
\metax{To read the on-line documentation try}{M-x org-info}
\section{Visibility Cycling}
@ -298,7 +294,7 @@ \section{Motion}
\key{next/previous heading, same level}{C-c C-f/b}
\key{backward to higher level heading}{C-c C-u}
\key{jump to another place in document}{C-c C-j}
\key{previous/next plain list item}{S-UP/DOWN$^3$}
\key{previous/next plain list item}{S-UP/DOWN\notetwo}
\section{Structure Editing}
@ -310,17 +306,16 @@ \section{Structure Editing}
\key{turn item/line into headline}{C-c *}
\key{promote/demote heading}{M-LEFT/RIGHT}
\metax{promote/demote current subtree}{M-S-LEFT/RIGHT}
\metax{move subtree/list item up/down}{M-S-UP/DOWN}
\metax{sort subtree/region/plain-list}{C-c \^{}}
\metax{clone a subtree}{C-c C-x c}
\metax{refile subtree}{C-c C-w}
\metax{kill/copy subtree}{C-c C-x C-w/M-w}
\metax{yank subtree}{C-c C-x C-y or C-y}
\metax{narrow buffer to subtree / widen}{C-x n s/w}
\section{Archiving}
\section{Capture - Refile - Archiving}
\key{capture a new item (C-u C-u = goto last)}{C-c c \noteone}
\key{refile subtree (C-u C-u = goto last)}{C-c C-w}
\key{archive subtree using the default command}{C-c C-x C-a}
\key{move subtree to archive file}{C-c C-x C-s}
\key{toggle ARCHIVE tag / to ARCHIVE sibling}{C-c C-x a/A}
@ -330,7 +325,7 @@ \section{Filtering and Sparse Trees}
\key{construct a sparse tree by various criteria}{C-c /}
\key{view TODO's in sparse tree}{C-c / t/T}
\key{global TODO list in agenda mode}{C-c a t$^1$}
\key{global TODO list in agenda mode}{C-c a t \noteone}
\key{time sorted view of current org file}{C-c a L}
\section{Tables}
@ -428,7 +423,7 @@ \section{Tables}
\section{Links}
\key{globally store link to the current location}{C-c l$^1$}
\key{globally store link to the current location}{C-c l \noteone}
\key{insert a link (TAB completes stored links)}{C-c C-l}
\key{insert file link with file name completion}{C-u C-c C-l}
\key{edit (also hidden part of) link at point}{C-c C-l}
@ -444,35 +439,6 @@ \section{Links}
\key{edit code snippet of file at point}{C-c '}
\key{toggle inline display of linked images}{C-c C-x C-v}
% {\bf Internal Links}
% \key{\kbd{<<My Target>>}}{\rm target}
% \key{\kbd{<<<My Target>>>}}{\rm radio target$^2$}
% \key{\kbd{[[*this text]]}}{\rm find headline}
% \metax{\kbd{[[this text]]}}{\rm find target or text in buffer}
% \metax{\kbd{[[this text][description]]}}{\rm optional link text}
% {\bf External Links}
% \key{\kbd{file:/home/dominik/img/mars.jpg}}{\rm file, absolute}
% \key{\kbd{file:papers/last.pdf}}{\rm file, relative}
% \key{\kbd{file:projects.org::*that text}}{\rm find headline}
% \key{\kbd{file:projects.org::find me}}{\rm find trgt/string}
% %\key{\kbd{file:projects.org::/regexp/}}{\rm regexp search}
% \key{\kbd{http://www.astro.uva.nl/~dominik}}{\rm on the web}
% \key{\kbd{mailto:adent@galaxy.net}}{\rm Email address}
% \key{\kbd{news:comp.emacs}}{\rm Usenet group}
% \key{\kbd{bbdb:Richard Stallman}}{\rm BBDB person}
% \key{\kbd{gnus:group}}{\rm GNUS group}
% \key{\kbd{gnus:group\#id}}{\rm GNUS message}
% \key{\kbd{vm|wl|mhe|rmail:folder}}{\rm Mail folder}
% \key{\kbd{vm|wl|mhe|rmail:folder\#id}}{\rm Mail message}
% \key{\kbd{info:emacs:Regexps}}{\rm Info file:node}
% \key{\kbd{shell:ls *.org}}{\rm shell command}
% \key{\kbd{elisp:(calendar)}}{\rm elisp form}
% \metax{\kbd{[[external link][description]]}}{\rm optional link text}
% %\key{\kbd{vm://myself@some.where.org/folder\#id}}{\rm VM remote}
\section{Working with Code (Babel)}
\key{execute code block at point}{C-c C-c}
@ -494,25 +460,6 @@ \section{Working with Code (Babel)}
\key{load expanded body of the current code block into a session}{C-c C-v l}
\key{view sha1 hash of the current code block}{C-c C-v a}
% \section{Remember-mode Integration}
% See the manual for how to make remember.el use Org-mode links and
% files. The note-finishing command \kbd{C-c C-c} will first prompt for
% an org file. In the file, find a location with:
% \key{rotate subtree visibility}{TAB}
% \key{next heading}{DOWN}
% \key{previous heading}{UP}
% Insert the note with one of the following:
% \key{as sublevel of heading at cursor}{RET}
% \key{right here (cursor not on heading)}{RET}
% \key{before current heading}{LEFT}
% \key{after current heading}{RIGHT}
% \key{shortcut to end of buffer (cursor at buf-start)}{RET}
% \key{Abort}{q}
\section{Completion}
In-buffer completion completes TODO keywords at headline start, TeX
@ -538,11 +485,7 @@ \section{TODO Items and Checkboxes}
\key{set the priority of the current item}{C-c , [ABC]}
\key{remove priority cookie from current item}{C-c , SPC}
\key{raise/lower priority of current item}{S-UP/DOWN$^3$}
%\key{lower priority of current item}{S-DOWN$^3$}
%\key{\kbd{\#+SEQ_TODO: TODO TRY BLUFF DONE}}{\rm todo workflow}
%\key{\kbd{\#+TYP_TODO: Phil home work DONE}}{\rm todo types}
\key{raise/lower priority of current item}{S-UP/DOWN\notetwo}
\key{insert new checkbox item in plain list}{M-S-RET}
\key{toggle checkbox(es) in region/entry/at point}{C-c C-x C-b}
@ -585,8 +528,8 @@ \section{Timestamps}
\key{insert SCHEDULED timestamp}{C-c C-s}
\key{create sparse tree with all deadlines due}{C-c / d}
\key{the time between 2 dates in a time range}{C-c C-y}
\key{change timestamp at cursor by $\pm 1$ day}{S-RIGHT/LEFT$^3$}
\key{change year/month/day at cursor by $\pm 1$}{S-UP/DOWN$^3$}
\metax{change timestamp at cursor $\pm 1$ day}{S-RIGHT/LEFT\notetwo}
\key{change year/month/day at cursor by $\pm 1$}{S-UP/DOWN\notetwo}
\key{access the calendar for the current date}{C-c >}
\key{insert timestamp matching date in calendar}{C-c <}
\key{access agenda for current date}{C-c C-o}
@ -615,15 +558,15 @@ \section{Agenda Views}
\key{cycle through agenda file list}{C-'}
\key{set/remove restriction lock}{C-c C-x </>}
\key{compile agenda for the current week}{C-c a a$^1$}
\key{compile global TODO list}{C-c a t$^1$}
\key{compile TODO list for specific keyword}{C-c a T$^1$}
\key{match tags, TODO kwds, properties}{C-c a m$^1$}
\key{match only in TODO entries}{C-c a M$^1$}
\key{find stuck projects}{C-c a \#$^1$}
\key{show timeline of current org file}{C-c a L$^1$}
\key{configure custom commands}{C-c a C$^1$}
%\key{configure stuck projects}{C-c a !$^1$}
\key{compile agenda for the current week}{C-c a a \noteone}
\key{compile global TODO list}{C-c a t \noteone}
\key{compile TODO list for specific keyword}{C-c a T \noteone}
\key{match tags, TODO kwds, properties}{C-c a m \noteone}
\key{match only in TODO entries}{C-c a M \noteone}
\key{find stuck projects}{C-c a \# \noteone}
\key{show timeline of current org file}{C-c a L \noteone}
\key{configure custom commands}{C-c a C \noteone}
%\key{configure stuck projects}{C-c a ! \noteone}
\key{agenda for date at cursor}{C-c C-o}
{\bf Commands available in an agenda buffer}
@ -664,10 +607,10 @@ \section{Agenda Views}
\key{set/show tags of current headline}{: / T}
\key{set effort property (prefix=nth)}{e}
\key{set / compute priority of current item}{, / P}
\key{raise/lower priority of current item}{S-UP/DOWN$^3$}
\key{raise/lower priority of current item}{S-UP/DOWN\notetwo}
\key{run an attachment command}{C-c C-a}
\key{schedule/set deadline for this item}{C-c C-s/d}
\key{change timestamp to one day earlier/later}{S-LEFT/RIGHT$^3$}
\metax{change timestamp one day earlier/later}{S-LEFT/RIGHT\notetwo}
\key{change timestamp to today}{>}
\key{insert new entry into diary}{i}
\newcolumn
@ -713,43 +656,6 @@ \section{Exporting and Publishing}
\key{toggle fixed width for entry or region}{C-c :}
\key{toggle pretty display of scripts, entities}{C-c C-x {\tt\char`\\}}
%{\bf HTML formatting}
%\key{make words {\bf bold}}{*bold*}
%\key{make words {\it italic}}{/italic/}
%\key{make words \underbar{underlined}}{_underlined_}
%\key{sub- and superscripts}{x\^{}3, J_dust}
%\key{\TeX{}-like macros}{\\alpha, \\to}
%\key{typeset lines in fixed width font}{start with :}
%\key{tables are exported as HTML tables}{start with |}
%\key{links become HTML links}{http:... etc}
%\key{include html tags}{@<b>...@</b>}
%{\bf Export options}
%
%Include additional information for export by putting these anywhere in the
%org file. Use {\tt M-TAB} completion to make sure to get the right
%keywords. {\tt M-TAB} again just after keyword is complete inserts examples.
%
%\key{the title to be shown}{\#+TITLE:}
%\key{the author}{\#+AUTHOR:}
%\key{authors email address}{\#+EMAIL:}
%\key{language code for html}{\#+LANGUAGE:}
%\key{free text description of file}{\#+TEXT:}
%\key{... which can carry over multiple lines}{\#+TEXT:}
%\key{settings for the export process}{\#+OPTIONS:}
%\key{set number of headline levels for export}{H:2}
%\key{turn on/off section numbers}{num:t}
%\key{turn on/off table of contents}{toc:t}
%\key{turn on/off linebreak preservation}{\\n:nil}
%\key{turn on/off quoted html tags}{@:t}
%\key{turn on/off fixed width sections}{::t}
%\key{turn on/off tables}{|:t}
%\key{turn on/off \TeX\ syntax for sub/super-scripts}{\^{}:t}
%\key{turn on/off emphasised text}{*:nil}
%\key{turn on/off \TeX\ macros}{TeX:t}
{\bf Comments: Text not being exported}
Lines starting with \kbd{\#} and subtrees starting with COMMENT are
@ -763,13 +669,10 @@ \section{Dynamic Blocks}
\metax{update all dynamic blocks}{C-u C-c C-x C-u}
\section{Notes}
$^1$ This is only a suggestion for a binding of this command. Choose
[1] This is only a suggestion for a binding of this command. Choose
your own key as shown under INSTALLATION.
$^2$ After changing a \kbd{\#+KEYWORD} or \kbd{<<<target>>>} line,
press \kbd{C-c C-c} with the cursor still in the line to update.
$^3$ Keybinding affected by {\tt org-support-shift-select} and
[2] Keybinding affected by {\tt org-support-shift-select} and also
{\tt org-replace-disputed-keys}.
\copyrightnotice

View file

@ -1,3 +1,684 @@
2010-12-11 Tassilo Horn <tassilo@member.fsf.org>
* org-footnote.el (org-footnote-create-definition): Place
Footnotes section before message-signature-separator also in modes
derived from message-mode.
2010-12-11 Julien Danjou <julien@danjou.info>
* org.el (org-make-tags-matcher): Remove useless cat-p value.
2010-12-11 Julien Danjou <julien@danjou.info>
* org.el (org-entry-properties): Enhance docstring.
2010-12-11 Nicolas Goaziou <n.goaziou@gmail.com>
* org-list.el (org-list-top-point-with-indent)
(org-list-bottom-point-with-indent): Pay also attention to
'original-indentation property of text, as blocks are put to
column 0 upon exporting.
2010-12-11 Dan Davison <dandavison7@gmail.com>
* ob.el (org-babel-remove-temporary-directory): Handle exception
with message informing of failure to remove directory.
2010-12-11 Eric Schulte <schulte.eric@gmail.com>
* ob-clojure.el (org-babel-header-arg-names:clojure): Add
`package' to the list of Clojure header arguments which will be read
from heading properties.
2010-12-11 Nicolas Goaziou <n.goaziou@gmail.com>
* org-inlinetask.el (org-inlinetask-export-templates): Add
Sébastien Vauban's suggestion for LaTeX export in docstring. This is
not default as it requires an additional LaTeX package: "todonotes".
2010-12-11 Nicolas Goaziou <n.goaziou@gmail.com>
* org-inlinetask.el (org-inlinetask-export-templates): New variable.
* org-inlinetask.el (org-inlinetask-export-handler): Make use of
templates to export inline tasks.
2010-12-11 Nicolas Goaziou <n.goaziou@gmail.com>
* org.el (org-current-level): Ignore inline tasks when getting current
level of entry.
2010-12-11 Nicolas Goaziou <n.goaziou@gmail.com>
* org.el (org-indent-line-function): Ignore drawers inside inline
tasks if the line to indent isn't inside an inline task itself.
2010-12-11 Nicolas Goaziou <n.goaziou@gmail.com>
* org-inlinetask.el (org-inlinetask-get-task-level): New function.
* org-indent.el (org-indent-add-properties): Find true level of
indentation wrt inline tasks.
2010-12-11 Nicolas Goaziou <n.goaziou@gmail.com>
* org-inlinetask.el (org-inlinetask-outline-regexp): New function.
* org-inlinetask.el (org-inlinetask-goto-beginning): New function.
* org-inlinetask.el (org-inlinetask-goto-end): New function.
* org.el (org-mark-subtree): New command.
* org.el (org-speed-commands-default, org-mode-map): Make use of
new command.
2010-12-11 Nicolas Goaziou <n.goaziou@gmail.com>
* org-inlinetask.el (org-inlinetask-export-handler): Remove protection
from @<span class...> so it can be removed during LaTeX export.
2010-12-11 Eric Schulte <schulte.eric@gmail.com>
* ob.el (org-babel-insert-result): More informative code block
evaluation messages.
2010-12-11 Matt Lundin <mdl@imapmail.org>
* org.el (org-make-heading-search-string): Optionally limit number
of lines stored in file link search strings.
(org-context-in-file-links) Add option to set to integer specifying
number of lines.
2010-12-11 Carsten Dominik <carsten.dominik@gmail.com>
* org-capture.el (org-capture-finalize): New prefix argument
STAY-WITH-CAPTURE.
(org-capture-refile): Improve docstring.
2010-12-11 Eric Schulte <schulte.eric@gmail.com>
* ob-sql.el (org-babel-execute:sql): Add msosql as optional sql
interaction engine.
2010-12-11 Carsten Dominik <carsten.dominik@gmail.com>
* org-agenda.el (org-agenda-list):
(org-agenda-goto-today): Use `org-today'.
2010-12-11 Carsten Dominik <carsten.dominik@gmail.com>
* org-latex.el (org-export-latex-make-header): Swap \begin{document}
and the title/author definitions.
2010-12-11 Carsten Dominik <carsten.dominik@gmail.com>
* org-macs.el: Better backup definition for
`with-silent-modifications'.
2010-12-11 Eric Schulte <schulte.eric@gmail.com>
* ob-python.el (org-babel-execute:python): Rename "prefix" to
"preamble".
(org-babel-python-evaluate): Rename "prefix" to "preamble".
(org-babel-python-evaluate-external-process): Rename "prefix" to
"preamble".
2010-12-11 Eric Schulte <schulte.eric@gmail.com>
* ob.el (org-babel-examplize-region): Check if `end' is a marker
or a point and handle appropriately.
2010-12-11 Eric Schulte <schulte.eric@gmail.com>
* ob-sql.el (org-babel-execute:sql): Explicitly set field
separator to \t when importing tabular data.
2010-12-11 Julien Danjou <julien@danjou.info>
* org-agenda.el (org-agenda-custom-commands-local-options):
Allow org-agenda-span to be a symbol.
(org-agenda-ndays): Make obsolete.
(org-agenda-span): New variable superseding org-agenda-ndays.
(org-agenda-menu): Use org-agenda-current-span.
(org-agenda-current-span): New local variable storing current
span.
(org-agenda-list): Take a span instead of ndays as argument.
This function is now responsible for computing the ndays based
on span.
(org-agenda-ndays-to-span): Return span only if number of days
really matches.
(org-agenda-span-to-ndays): New function.
(org-agenda-manipulate-query): Use org-agenda-compute-starting-span.
(org-agenda-goto-today): Use org-agenda-compute-starting-span.
(org-agenda-later): Do not give compute a new span, use the
current one.
(org-agenda-day-view, org-agenda-week-view)
(org-agenda-month-view, org-agenda-year-view): Stop touching
org-agenda-ndays.
(org-agenda-change-time-span): Only compute starting-span.
(org-agenda-compute-starting-span): New function derived from
the old org-agenda-compute-time-span.
(org-agenda-set-mode-name): Compute mode based on
org-agenda-current-span.
(org-agenda-span-name): New function.
2010-12-11 Robert Pluim <rpluim@gmail.com> (tiny change)
* org-agenda.el (org-agenda-toggle-deadlines): Fix docstring.
2010-12-11 Carsten Dominik <carsten.dominik@gmail.com>
* org-clock.el (org-quarter-to-date): Define variables.
(org-clock-special-range): Defin variables. Use org-floor*.
(org-clocktable-write-default): Define tcol.
* org-compat.el (org-floor*): New function.
* org-complete.el: New file.
2010-12-11 Carsten Dominik <carsten.dominik@gmail.com>
* org-clock.el (org-clocktable-write-default): Fix the % formula.
2010-12-11 Matt Lundin <mdl@imapmail.org>
* org-agenda.el: (org-format-agenda-item) The value of
org-category is not converted to a string unless it is defined.
2010-12-11 Eric Schulte <schulte.eric@gmail.com>
* ob-python.el (org-babel-execute:python): Pass the new "prefix"
header argument through to external evaluation.
(org-babel-python-evaluate): Pass the new "prefix" header argument
through to external evaluation.
(org-babel-python-evaluate-external-process): When specified prepend
"prefix" to the file used in external evaluation.
2010-12-11 Dan Davison <dandavison7@gmail.com>
* ob-python.el (org-babel-python-evaluate-session): Change python
module name from 'pp' to 'pprint'.
2010-12-11 Eric Schulte <schulte.eric@gmail.com>
* ob-R.el (org-babel-R-evaluate-session): Removing empty lines
from R session output, these are often the result of variable
assignments.
2010-12-11 Eric Schulte <schulte.eric@gmail.com>
* ob-sql.el (orgtbl-to-csv): Declaring an external function to
fix a compiler warning.
2010-12-11 Eric Schulte <schulte.eric@gmail.com>
* ob-eval.el (require): No longer require ob.el to allow
requiring by ob.el.
* ob.el (ob-eval): Require ob-eval.
2010-12-11 Eric Schulte <schulte.eric@gmail.com>
* ob.el (org-babel-confirm-evaluate): Show code block's name when
it is available during evaluation query.
2010-12-11 Eric Schulte <schulte.eric@gmail.com>
* ob-sql.el (org-babel-expand-body:sql): Expand the body of a sql
code block.
(org-babel-execute:sql): Use sql specific body expansion function.
(org-babel-sql-expand-vars): Insert variables into a sql code block.
2010-12-11 Eric Schulte <schulte.eric@gmail.com>
* ob.el (org-babel-insert-result): Using markers instead of
points for more robust buffer anchors.
2010-12-11 Julien Danjou <julien@danjou.info>
* org-capture.el: Use org-today.
2010-12-11 Julien Danjou <julien@danjou.info>
* org-habit.el: Use org-today.
2010-12-11 Julien Danjou <julien@danjou.info>
* org.el (org-auto-repeat-maybe): Use org-today.
2010-12-11 David Maus <dmaus@ictsoc.de>
* test-org.el (test-org/org-link-escape-url-with-escaped-char): Add
test for escaping and unescaping url with already escaped char.
2010-12-11 Carsten Dominik <carsten.dominik@gmail.com>
* org-clock.el (org-day-of-week): New function.
(org-quarter-to-date): New function.
(org-clock-special-range): Implement quarters.
2010-12-11 Sébastien Vauban <wxhgmqzgwmuf@spammotel.com>
* org.el (org-complete-tags-always-offer-all-agenda-tags): Fix
docstring.
2010-12-11 Julien Danjou <julien@danjou.info>
* org-agenda.el (org-format-agenda-item): Convert category to a string
if it is a symbol. This fixes the following call to
org-agenda-get-category-icon which fails if category is not a string.
2010-12-11 Eric Schulte <schulte.eric@gmail.com>
* ob-clojure.el: Updated requirements documentation to mention
the minimum version of Clojure.
(org-babel-expand-body:clojure): Fully qualified function name.
2010-12-11 Nicolas Goaziou <n.goaziou@gmail.com>
* org-latex.el (org-export-latex-lists): do not add an
unnecessary newline character after a list.
* org-list.el (org-list-bottom-point-with-indent): ensure bottom
point is just after a non blank line.
2010-12-11 Eric Schulte <schulte.eric@gmail.com>
* ob.el (org-babel-examplize-region): Remove old assertion which
no longer applies to the result insertion code.
2010-12-11 Eric Schulte <schulte.eric@gmail.com>
* ob-python.el (org-babel-execute:python): Use a :return header
argument for external evaluation in which the code block body need
be wrapped in a function
2010-12-11 Eric Schulte <schulte.eric@gmail.com>
* ob-clojure.el (org-babel-expand-body:clojure): Trapped free
variable.
2010-12-11 Carsten Dominik <carsten.dominik@gmail.com>
* org.el (org-edit-special): Edit formulas when in TBLMF line
2010-12-11 Allen S. Rout <asr@ufl.edu> (tiny change)
* org-capture.el (org-capture-after-finalize-hook): New hook.
(org-capture-finalize): Run the new hook.
2010-12-11 Eric Schulte <schulte.eric@gmail.com>
* ob-clojure.el (org-babel-expand-body:clojure): Support for
pretty printing of Clojure code and data.
2010-12-11 Eric Schulte <schulte.eric@gmail.com>
* ob.el (org-babel-insert-result): No longer escape results which
will be wrapped in a block.
2010-12-11 Eric Schulte <schulte.eric@gmail.com>
* ob-eval.el (org-babel-eval-wipe-error-buffer): Fixed compiler
warning and added documentation string.
2010-12-11 Eric Schulte <schulte.eric@gmail.com>
* ob-clojure.el (org-babel-execute:clojure): Remade using slime
for all code evaluation.
2010-12-11 Carsten Dominik <carsten.dominik@gmail.com>
* org-beamer.el (org-beamer-sectioning): Allow overlay arguments for
the column as well.
2010-12-11 Eric Schulte <schulte.eric@gmail.com>
* ob.el (org-babel-confirm-evaluate): More descriptive message
when evaluation is aborted or disabled.
2010-12-11 Eric Schulte <schulte.eric@gmail.com>
* ob.el (org-babel-insert-result): Responds to new "wrap" header
argument.
(org-babel-merge-params): Includes new "wrap" header argument in
one of the results header argument exclusive groups.
2010-12-11 David Maus <dmaus@ictsoc.de>
* org-macs.el (with-silent-modifications): Fix condition for
with-silent-modification.
2010-12-11 Eric Schulte <schulte.eric@gmail.com>
* ob.el (org-babel-parse-header-arguments): Stripping trailing
spaces off of header arguments (even the first one).
2010-12-11 Eric Schulte <schulte.eric@gmail.com>
* ob-sh.el (org-babel-sh-var-to-sh): Wrap end token of heredoc in
single quotes which is the best practice.
(org-babel-sh-table-or-results): Use `org-babel-script-escape' for
more robust parsing of shell output.
2010-12-11 Dan Davison <dandavison7@gmail.com>
* org.el (org-additional-option-like-keywords): Add more keywords,
and colons to some old ones.
2010-12-11 Dan Davison <dandavison7@gmail.com>
* ob-eval.el (org-babel-error-buffer-name): Define new variable.
2010-12-11 Eric Schulte <schulte.eric@gmail.com>
* ob-python.el (org-babel-python-table-or-string): Using
`org-babel-script-escape' for reading string input from scripting
languages.
2010-12-11 Achim Gratz <Stromeko@nexgo.de> (tiny change)
* org-macs.el (org-called-interactively-p): Wrap function call in
with-no-warnings.
(with-silent-modifications) Declare macro for Emacs < 23.2.
2010-12-11 David Maus <dmaus@ictsoc.de>
* org-test.el (org-test-current-file): New function. Run all tests
for current file.
2010-12-11 Eric Schulte <schulte.eric@gmail.com>
* ob.el (org-babel-parse-header-arguments): Removed addition of
":" to singleton first header arguments as it was leading to errors.
2010-12-11 David Maus <dmaus@ictsoc.de>
* test-org.el (test-org/org-link-escape-ascii-character)
(test-org/org-link-escape-ascii-ctrl-character)
(test-org/org-link-escape-multibyte-character)
(test-org/org-link-escape-custom-table)
(test-org/org-link-escape-custom-table-merge)
(test-org/org-link-unescape-ascii-character)
(test-org/org-link-unescape-ascii-ctrl-character)
(test-org/org-link-unescape-multibyte-character)
(test-org/org-link-unescape-ascii-extended-char): New tests for
unicode aware percent escaping.
2010-12-11 Carsten Dominik <carsten.dominik@gmail.com>
* org-latex.el (org-export-latex-make-header): Run the title through
`org-export-latex-fontify-headline'.
(org-export-latex-fontify-headline): Do the protection of math
snippets also here.
2010-12-11 Richard Lawrence <richard.lawrence@berkeley.edu>
* org-latex.el (org-export-as-latex): Sent the section title
through the preprocessor.
2010-12-11 Carsten Dominik <carsten.dominik@gmail.com>
* org-html.el (org-html-level-start): Mark listified headings
with a custom id.
2010-12-11 Carsten Dominik <carsten.dominik@gmail.com>
* org.el (org-open-at-point): Don't do footnote action if cursor is
on a bracket link.
2010-12-11 Carsten Dominik <carsten.dominik@gmail.com>
* org.el (org-edit-special): Check also for TBLFM line.
2010-12-11 Achim Gratz <Stromeko@Stromeko.DE> (tiny change)
* org-clock.el (org-get-clocktable): previous patch incorrectly
required whitespace in front of #+BEGIN: and #+END:
2010-12-11 Dan Davison <dandavison7@gmail.com>
* org-src.el (org-edit-src-code): Allow region to be inherited by
edit buffer when mark is one character beyond end of src block.
2010-12-11 Nicolas Goaziou <n.goaziou@gmail.com>
* org-list.el (org-cycle-list-bullet): ensure point is at bol before
checking item indentation.
2010-12-11 Eric Schulte <schulte.eric@gmail.com>
* ob.el (org-babel-map-src-blocks): Moved to earlier in the file
and now autoloading.
2010-12-11 Eric Schulte <schulte.eric@gmail.com>
* ob-ref.el (org-babel-ref-at-ref-p): Use higher level function
for testing list membership.
* ob.el (org-babel-read-result): Use higher level function for
testing list membership.
(org-babel-result-end): Use higher level function for testing list
membership.
2010-12-11 Eric Schulte <schulte.eric@gmail.com>
* ob-sqlite.el (ob-eval): Require ob-eval for external command
execution.
(org-babel-execute:sqlite): No longer uses the init option for
passing commands to sqlite.
2010-12-11 Nicolas Goaziou <n.goaziou@gmail.com>
* org.el (org-indent-line-function): Drawers and blocks have no
influence on indentation of text below. Also fix indentation
problem with a block at column 0 and add a special case for
literal examples.
2010-12-11 Eric Schulte <schulte.eric@gmail.com>
* ob.el (org-babel-map-src-blocks): Ensure that the file argument
is only evaluated once.
2010-12-11 Eric Schulte <schulte.eric@gmail.com>
* ob-ref.el (org-babel-ref-resolve): Recognize `list' as a unique
type of data
(org-babel-ref-at-ref-p): Recognize `list' as a unique type of data
2010-12-11 Eric Schulte <schulte.eric@gmail.com>
* ob-tangle.el (org-babel-load-file): Can be called interactively.
2010-12-11 Carsten Dominik <carsten.dominik@gmail.com> (tiny change)
* org-table.el (orgtbl-after-send-table-hook): New hook.
(orgtbl-ctrl-c-ctrl-c): Run `orgtbl-after-send-table-hook' when a
table was sent.
(orgtbl-send-table): Return the number of sent tables, or nil if no
sending has happened.
2010-12-11 Carsten Dominik <carsten.dominik@gmail.com>
* org.el (org-get-priority-function): New option.
(org-get-priority): Call `org-get-priority-function' if that
has been set.
2010-12-11 Dan Davison <dandavison7@gmail.com>
* ob-table.el (org-babel-table-truncate-at-newline): Only add
"..." if there is something after the newline.
2010-12-11 Achim Gratz <Stromeko@nexgo.de> (tiny change)
* org-clock.el (org-get-clocktable):
(org-in-clocktable-p):
(org-clocktable-shift):
(org-clocktable-steps): Fix regexp to allow for indented clock tables
2010-12-11 Puneeth Chaganti <punchagan@gmail.com>
* org-exp.el (org-export-handle-include-files): Support :minlevel
property.
(org-get-file-contents): New argument minlevel to demote included
content.
2010-12-11 Noorul Islam <noorul@noorul.com>
* org-latex.el (org-export-latex-hyperref-format): New option.
(org-export-latex-href-format): Renamed the existing variable
`org-export-latex-hyperref-format' as `org-export-latex-href-format'
(org-export-latex-links): Use `org-export-latex-hyperref-format' and
`org-export-latex-href-format'
2010-12-11 Eric Schulte <schulte.eric@gmail.com>
* ob-calc.el (org-babel-execute:calc): Ensure the *Calculator*
buffer exists before it is used.
2010-12-11 Nicolas Goaziou <n.goaziou@gmail.com>
* org-exp.el (org-export-preprocess-string): delaying code block
processing a bit to allow correct list parsing in the export string
2010-12-11 Christopher Allan Webber <cwebber@dustycloud.org>
* org-agenda.el (org-agenda-timegrid-use-ampm): New option.
(org-agenda-time-of-day-to-ampm): New function.
(org-agenda-time-of-day-to-ampm-maybe): New function.
(org-format-agenda-item): Call org-agenda-time-of-day-to-ampm-maybe.
2010-12-11 Carsten Dominik <carsten.dominik@gmail.com>
* org-faces.el (org-cycle-level-faces): New option.
* org.el (org-get-level-face): Honor org-cycle-level-faces.
2010-12-11 Julien Danjou <julien@danjou.info>
* org-agenda.el (org-agenda-today): New function.
(org-agenda-get-day-face): New function.
(org-timeline): Use org-agenda-today and org-agenda-get-day-face.
(org-agenda-list): Use org-agenda-today and org-agenda-get-day-face.
(org-todo-list): Use org-agenda-today.
(org-get-all-dates): Use org-agenda-today.
(org-agenda-day-face-function): New variable.
(org-agenda-get-day-face): Use org-agenda-day-face-function.
2010-12-11 Carsten Dominik <carsten.dominik@gmail.com>
* org.el (org-ctrl-c-ctrl-c): Consider sending a radio table also
in Org.
2010-12-11 Carsten Dominik <carsten.dominik@gmail.com>
* org-html.el (org-export-as-html): Do not treat partially
protected lines as if they were fully protected.
2010-12-11 Dan Davison <dandavison7@gmail.com>
* org-exp.el: (org-export-format-source-code-or-example):
Remove hard-wired configuration of minted export
(org-export-latex-minted-with-line-numbers): Remove variable
2010-12-11 Bastien Guerry <bzg@altern.org>
* org-clock.el (org-dblock-write:clocktable): Fix double
reference to `link' in let construct.
(org-clock-clocktable-formatter): Fix typo in docstring.
(org-clocktable-write-default): Fix typo in docstring.
2010-12-11 David Maus <dmaus@ictsoc.de>
* org-protocol.el (org-protocol-unhex-string): Normalize percent
escape sequence to upper case letters.
2010-12-11 Eric Schulte <schulte.eric@gmail.com>
* ob-lob.el (org-babel-lob-get-info): including pass-through
header arguments in results variable header argument string
2010-12-11 David Maus <dmaus@ictsoc.de>
* org-exp.el (org-export-visible): Limit search for in-buffer options
beginning of first headline.
2010-12-11 David Maus <dmaus@ictsoc.de>
* org.el (org-open-at-point): Remove stale link handler for news:
links.
2010-12-11 Carsten Dominik <carsten.dominik@gmail.com>
* org-clock.el (org-clocktable-write-default): Better handling of
narrowing.
2010-12-11 Julien Danjou <julien@danjou.info>
* list/org-agenda.el (org-agenda-category-icon-alist): Fix defcustom
type.
2010-12-11 Nicolas Goaziou <n.goaziou@gmail.com>
* org.el (org-indent-line-function): simplify code and remove bug that
would insert a tab at the beginning of the line when trying to
indent the item.
2010-12-11 Julien Danjou <julien@danjou.info>
* org.el (org-diary-sexp-entry): Split sexp result strings at semicolon.
2010-12-11 Julien Danjou <julien@danjou.info>
* org-agenda.el (org-agenda-prefix-format): Insert place holder
for icon.
(org-agenda-category-icon-alist): New option.
(org-agenda-get-category-icon): New function.
(org-format-agenda-item): Support for icons.
(org-compile-prefix-format): Support for icons.
2010-12-11 Julien Danjou <julien@danjou.info>
* org-compat.el: Create defalias for `string-match-p' and
looking-at-p.
2010-12-11 Eric Schulte <schulte.eric@gmail.com>
* ob-calc.el (org-babel-execute:calc): support for variables --
converts :var variables in calc variables
2010-12-11 Carsten Dominik <carsten.dominik@gmail.com>
* org.el (org-sparse-tree): Mention [r] in dispatch menu
2010-12-11 Carsten Dominik <carsten.dominik@gmail.com>
* org-list.el (org-list-parse-list): Use `org-looking-at-p'.
2010-12-11 Carsten Dominik <carsten.dominik@gmail.com>
* org-id.el (org-id-store-link): Test for org-mode before checking
for IDs.
2010-12-11 David Maus <dmaus@ictsoc.de>
* org-test.el (org-test-current-defun): `which-function' does not
return a list, but the name of the function.
2010-12-11 Carsten Dominik <carsten.dominik@gmail.com>
* org.el (org-shorten-string): New function.
* org-exp.el (org-export-convert-protected-spaces): New function.
(org-export-preprocess-string): Call
`org-export-convert-protected-spaces' to handle new hard spaces.
2010-12-11 David Maus <dmaus@ictsoc.de>
* org.el (org-narrow-to-subtree): Check for heading that ends at end
of buffer.
2010-11-12 Carsten Dominik <carsten.dominik@gmail.com>
* org-capture.el (org-capture-templates): Remove autoload from

View file

@ -5,7 +5,7 @@
;; Author: Eric Schulte
;; Keywords: literate programming, reproducible research
;; Homepage: http://orgmode.org
;; Version: 7.3
;; Version: 7.4
;; This file is part of GNU Emacs.

View file

@ -2,11 +2,10 @@
;; Copyright (C) 2009, 2010 Free Software Foundation, Inc.
;; Author: Eric Schulte
;; Dan Davison
;; Author: Eric Schulte, Dan Davison
;; Keywords: literate programming, reproducible research, R, statistics
;; Homepage: http://orgmode.org
;; Version: 7.3
;; Version: 7.4
;; This file is part of GNU Emacs.
@ -277,16 +276,18 @@ last statement in BODY, as elisp."
(butlast
(delq nil
(mapcar
(lambda (line) ;; cleanup extra prompts left in output
(if (string-match
"^\\([ ]*[>+][ ]?\\)+\\([[0-9]+\\|[ ]\\)" line)
(substring line (match-end 1))
line))
(org-babel-comint-with-output (session org-babel-R-eoe-output)
(insert (mapconcat #'org-babel-chomp
(list body org-babel-R-eoe-indicator)
"\n"))
(inferior-ess-send-input)))) 2) "\n"))))
(lambda (line) (when (> (length line) 0) line))
(mapcar
(lambda (line) ;; cleanup extra prompts left in output
(if (string-match
"^\\([ ]*[>+][ ]?\\)+\\([[0-9]+\\|[ ]\\)" line)
(substring line (match-end 1))
line))
(org-babel-comint-with-output (session org-babel-R-eoe-output)
(insert (mapconcat #'org-babel-chomp
(list body org-babel-R-eoe-indicator)
"\n"))
(inferior-ess-send-input)))))) "\n"))))
(defun org-babel-R-process-value-result (result column-names-p)
"R-specific processing of return value.

View file

@ -5,7 +5,7 @@
;; Author: Eric Schulte
;; Keywords: literate programming, reproducible research
;; Homepage: http://orgmode.org
;; Version: 7.3
;; Version: 7.4
;; This file is part of GNU Emacs.

View file

@ -1,11 +1,11 @@
;;; ob-calc.el --- org-babel functions for calc code evaluation
;; Copyright (C) 2010 Free Software Foundation, Inc.
;; Copyright (C) 2010 Free Software Foundation, Inc
;; Author: Eric Schulte
;; Keywords: literate programming, reproducible research
;; Homepage: http://orgmode.org
;; Version: 7.3
;; Version: 7.4
;; This file is part of GNU Emacs.
@ -40,25 +40,55 @@
(defun org-babel-execute:calc (body params)
"Execute a block of calc code with Babel."
(mapcar
(lambda (line)
(when (> (length line) 0)
(if (string= "'" (substring line 0 1))
(funcall (lookup-key calc-mode-map (substring line 1)) nil)
(calc-push-list
(list ((lambda (res)
(cond
((numberp res) res)
((listp res) (error "calc error \"%s\" on input \"%s\""
(cadr res) line))
(t res))
(if (numberp res) res (math-read-number res)))
(calc-eval line)))))))
(mapcar #'org-babel-trim
(split-string (org-babel-expand-body:calc body params) "[\n\r]")))
(unless (get-buffer "*Calculator*")
(save-window-excursion (calc) (calc-quit)))
(let* ((vars (mapcar #'cdr (org-babel-get-header params :var)))
(var-syms (mapcar #'car vars))
(var-names (mapcar #'symbol-name var-syms)))
(mapc
(lambda (pair)
(calc-push-list (list (cdr pair)))
(calc-store-into (car pair)))
vars)
(mapc
(lambda (line)
(when (> (length line) 0)
(cond
;; simple variable name
((member line var-names) (calc-recall (intern line)))
;; stack operation
((string= "'" (substring line 0 1))
(funcall (lookup-key calc-mode-map (substring line 1)) nil))
;; complex expression
(t
(calc-push-list
(list ((lambda (res)
(cond
((numberp res) res)
((math-read-number res) (math-read-number res))
((listp res) (error "calc error \"%s\" on input \"%s\""
(cadr res) line))
(t (calc-eval
(math-evaluate-expr
;; resolve user variables, calc built in
;; variables are handled automatically
;; upstream by calc
(mapcar (lambda (el)
(if (and (consp el) (equal 'var (car el))
(member (cadr el) var-syms))
(progn
(calc-recall (cadr el))
(prog1 (calc-top 1)
(calc-pop 1)))
el))
;; parse line into calc objects
(car (math-read-exprs line))))))))
(calc-eval line))))))))
(mapcar #'org-babel-trim
(split-string (org-babel-expand-body:calc body params) "[\n\r]"))))
(save-excursion
(set-buffer (get-buffer "*Calculator*"))
(calc-eval (calc-top 1))))
(with-current-buffer (get-buffer "*Calculator*")
(calc-eval (calc-top 1)))))
(provide 'ob-calc)

View file

@ -2,10 +2,10 @@
;; Copyright (C) 2009, 2010 Free Software Foundation, Inc.
;; Author: Joel Boehland
;; Author: Joel Boehland, Eric Schulte
;; Keywords: literate programming, reproducible research
;; Homepage: http://orgmode.org
;; Version: 7.3
;; Version: 7.4
;; This file is part of GNU Emacs.
@ -24,14 +24,14 @@
;;; Commentary:
;;; ob support for evaluating clojure code
;;; support for evaluating clojure code, relies on slime for all eval
;;; Requirements:
;;; A working clojure install. This also implies a working java executable
;;; clojure-mode
;;; slime
;;; swank-clojure
;;; - clojure (at least 1.2.0)
;;; - clojure-mode
;;; - slime
;;; - swank-clojure
;;; By far, the best way to install these components is by following
;;; the directions as set out by Phil Hagelberg (Technomancy) on the
@ -39,277 +39,47 @@
;;; Code:
(require 'ob)
(require 'ob-eval)
(eval-when-compile (require 'cl))
(declare-function slime-eval-async "ext:slime" (sexp &optional cont package))
(declare-function slime-eval "ext:slime" (sexp &optional package))
(declare-function swank-clojure-concat-paths "ext:slime" (paths))
(declare-function slime "ext:slime" (&optional command coding-system))
(declare-function slime-output-buffer "ext:slime" (&optional noprompt))
(declare-function slime-filter-buffers "ext:slime" (predicate))
(add-to-list 'org-babel-tangle-lang-exts '("clojure" . "clj"))
(defvar org-babel-default-header-args:clojure '())
(defvar org-babel-clojure-wrapper-method
"
(defn spit
[f content]
(with-open [#^java.io.PrintWriter w
(java.io.PrintWriter.
(java.io.BufferedWriter.
(java.io.OutputStreamWriter.
(java.io.FileOutputStream.
(java.io.File. f)))))]
(.print w content)))
(defn main
[]
%s)
(spit \"%s\" (str (main)))")
;;";; <-- syntax highlighting is messed without this double quote
;;taken mostly from clojure-test-mode.el
(defun org-babel-clojure-clojure-slime-eval (string &optional handler)
"Evaluate a STRING of clojure code using `slime-eval-async'."
(slime-eval-async `(swank:eval-and-grab-output ,string)
(or handler #'identity)))
(defun org-babel-clojure-slime-eval-sync (string)
"Evaluate a STRING of clojure code using `slime-eval'."
(slime-eval `(swank:eval-and-grab-output ,string)))
;;taken from swank-clojure.el
(defvar swank-clojure-binary)
(defvar swank-clojure-classpath)
(defvar swank-clojure-java-path)
(defvar swank-clojure-extra-vm-args)
(defvar swank-clojure-library-paths)
(defvar swank-clojure-extra-classpaths)
(defun org-babel-clojure-babel-clojure-cmd ()
"Create the command to start clojure according to current settings."
(or (when swank-clojure-binary
(if (listp swank-clojure-binary)
swank-clojure-binary
(list swank-clojure-binary)))
(when swank-clojure-classpath
(delq
nil
(append
(list swank-clojure-java-path)
swank-clojure-extra-vm-args
(list
(when swank-clojure-library-paths
(concat "-Djava.library.path="
(swank-clojure-concat-paths swank-clojure-library-paths)))
"-classpath"
(swank-clojure-concat-paths
(append
swank-clojure-classpath
swank-clojure-extra-classpaths))
"clojure.main"))))
(error "%s" (concat "You must specifiy either a `swank-clojure-binary' "
"or a `swank-clojure-classpath'"))))
(defun org-babel-clojure-table-or-string (results)
"Convert RESULTS to an elisp value.
If RESULTS looks like a table, then convert to an Emacs-lisp
table, otherwise return the results as a string."
(org-babel-read
(if (string-match "^\\[.+\\]$" results)
(org-babel-read
(concat "'"
(replace-regexp-in-string
"\\[" "(" (replace-regexp-in-string
"\\]" ")" (replace-regexp-in-string
", " " " (replace-regexp-in-string
"'" "\"" results))))))
results)))
(defun org-babel-clojure-var-to-clojure (var)
"Convert an elisp value into a clojure variable.
The elisp value VAR is converted into a string of clojure source
code specifying a variable of the same value."
(if (listp var)
(format "'%s" var)
(format "%S" var)))
(defun org-babel-clojure-build-full-form (body vars)
"Construct a clojure let form with VARS as the let variables."
(let ((vars-forms
(mapconcat ;; define any variables
(lambda (pair)
(format "%s %s"
(car pair) (org-babel-clojure-var-to-clojure (cdr pair))))
vars "\n "))
(body (org-babel-trim body)))
(if (> (length vars-forms) 0)
(format "(let [%s]\n %s)" vars-forms body)
body)))
(defun org-babel-prep-session:clojure (session params)
"Prepare SESSION according to the header arguments specified in PARAMS."
(require 'slime) (require 'swank-clojure)
(let* ((session-buf (org-babel-clojure-initiate-session session))
(vars (mapcar #'cdr (org-babel-get-header params :var)))
(var-lines (mapcar ;; define any top level session variables
(lambda (pair)
(format "(def %s %s)\n" (car pair)
(org-babel-clojure-var-to-clojure (cdr pair))))
vars)))
session-buf))
(defun org-babel-load-session:clojure (session body params)
"Load BODY into SESSION."
(require 'slime) (require 'swank-clojure)
(save-window-excursion
(let ((buffer (org-babel-prep-session:clojure session params)))
(with-current-buffer buffer
(goto-char (point-max))
(insert (org-babel-chomp body)))
buffer)))
(defvar org-babel-clojure-buffers '())
(defvar org-babel-clojure-pending-sessions '())
(defun org-babel-clojure-session-buffer (session)
"Return the buffer associated with SESSION."
(cdr (assoc session org-babel-clojure-buffers)))
(defun org-babel-clojure-initiate-session-by-key (&optional session)
"Initiate a clojure session in an inferior-process-buffer.
If there is not a current inferior-process-buffer in SESSION
then create one. Return the initialized session."
(save-window-excursion
(let* ((session (if session
(if (stringp session) (intern session)
session)
:default))
(clojure-buffer (org-babel-clojure-session-buffer session)))
(unless (and clojure-buffer (buffer-live-p clojure-buffer))
(setq org-babel-clojure-buffers
(assq-delete-all session org-babel-clojure-buffers))
(push session org-babel-clojure-pending-sessions)
(slime)
;; we are waiting to finish setting up which will be done in
;; org-babel-clojure-session-connected-hook below.
(let ((timeout 9))
(while (and (not (org-babel-clojure-session-buffer session))
(< 0 timeout))
(message "Waiting for clojure repl for session: %s ... %i"
session timeout)
(sit-for 1)
(decf timeout)))
(setq org-babel-clojure-pending-sessions
(remove session org-babel-clojure-pending-sessions))
(unless (org-babel-clojure-session-buffer session)
(error "Couldn't create slime clojure process"))
(setq clojure-buffer (org-babel-clojure-session-buffer session)))
session)))
(defun org-babel-clojure-initiate-session (&optional session params)
"Return the slime-clojure repl buffer bound to SESSION.
Returns nil if \"none\" is specified."
(require 'slime) (require 'swank-clojure)
(unless (and (stringp session) (string= session "none"))
(org-babel-clojure-session-buffer
(org-babel-clojure-initiate-session-by-key session))))
(defun org-babel-clojure-session-connected-hook ()
"Finish binding an org-babel session to a slime-clojure repl."
(let ((pending-session (pop org-babel-clojure-pending-sessions)))
(when pending-session
(save-excursion
(switch-to-buffer (slime-output-buffer))
(rename-buffer
(if (stringp pending-session)
pending-session (symbol-name pending-session)))
(org-babel-clojure-bind-session-to-repl-buffer
pending-session (slime-output-buffer))))))
(add-hook 'slime-connected-hook 'org-babel-clojure-session-connected-hook)
(defun org-babel-clojure-bind-session-to-repl-buffer (session repl-buffer)
"Associate SESSION with REPL-BUFFER."
(when (stringp session) (setq session (intern session)))
(setq org-babel-clojure-buffers
(cons (cons session repl-buffer)
(assq-delete-all session org-babel-clojure-buffers))))
(defun org-babel-clojure-repl-buffer-pred ()
"Test whether the current buffer is an active slime-clojure
repl buffer."
(and (buffer-live-p (current-buffer)) (eq major-mode 'slime-repl-mode)))
(defun org-babel-clojure-bind-session-to-repl (session)
"Bind SESSION to a clojure repl."
(interactive "sEnter session name: ")
(let ((repl-bufs (slime-filter-buffers 'org-babel-clojure-repl-buffer-pred)))
(unless repl-bufs (error "No existing slime-clojure repl buffers exist"))
(let ((repl-buf (read-buffer "Choose slime-clojure repl: " repl-bufs t)))
(org-babel-clojure-bind-session-to-repl-buffer session repl-buf))))
(defun org-babel-clojure-evaluate-external-process
(buffer body &optional result-type)
"Evaluate the body in an external process."
(let ((cmd (format "%s -" (mapconcat #'identity
(org-babel-clojure-babel-clojure-cmd)
" "))))
(case result-type
(output (org-babel-eval cmd body))
(value (let* ((tmp-file (org-babel-temp-file "clojure-")))
(org-babel-eval
cmd
(format
org-babel-clojure-wrapper-method
body
(org-babel-process-file-name tmp-file 'noquote)))
(org-babel-clojure-table-or-string
(org-babel-eval-read-file tmp-file)))))))
(defun org-babel-clojure-evaluate-session (buffer body &optional result-type)
"Evaluate the body in the context of a clojure session."
(require 'slime) (require 'swank-clojure)
(let ((raw nil)
(results nil))
(with-current-buffer buffer
(setq raw (org-babel-clojure-slime-eval-sync body))
(setq results (reverse (mapcar #'org-babel-trim raw)))
(cond
((equal result-type 'output)
(mapconcat #'identity (reverse (cdr results)) "\n"))
((equal result-type 'value)
(org-babel-clojure-table-or-string (car results)))))))
(defun org-babel-clojure-evaluate (buffer body &optional result-type)
"Pass BODY to the Clojure process in BUFFER.
If RESULT-TYPE equals 'output then return a list of the outputs
of the statements in BODY, if RESULT-TYPE equals 'value then
return the value of the last statement in BODY as elisp."
(if buffer
(org-babel-clojure-evaluate-session buffer body result-type)
(org-babel-clojure-evaluate-external-process buffer body result-type)))
(defvar org-babel-header-arg-names:clojure '(package))
(defun org-babel-expand-body:clojure (body params)
"Expand BODY according to PARAMS, return the expanded body."
(org-babel-clojure-build-full-form
body (mapcar #'cdr (org-babel-get-header params :var))))
(let* ((vars (mapcar #'cdr (org-babel-get-header params :var)))
(result-params (cdr (assoc :result-params params)))
(print-level nil) (print-length nil)
(body (org-babel-trim
(if (> (length vars) 0)
(concat "(let ["
(mapconcat
(lambda (var)
(format "%S (quote %S)" (car var) (cdr var)))
vars "\n ")
"]\n" body ")")
body))))
(if (or (member "code" result-params)
(member "pp" result-params))
(format (concat "(let [org-mode-print-catcher (java.io.StringWriter.)]"
"(clojure.pprint/with-pprint-dispatch %s-dispatch"
"(clojure.pprint/pprint %s org-mode-print-catcher)"
"(str org-mode-print-catcher)))")
(if (member "code" result-params) "code" "simple") body)
body)))
(defun org-babel-execute:clojure (body params)
"Execute a block of Clojure code."
"Execute a block of Clojure code with Babel."
(require 'slime) (require 'swank-clojure)
(let* ((body (org-babel-expand-body:clojure body params))
(session (org-babel-clojure-initiate-session
(cdr (assoc :session params)))))
(org-babel-reassemble-table
(org-babel-clojure-evaluate session body (cdr (assoc :result-type params)))
(org-babel-pick-name
(cdr (assoc :colname-names params)) (cdr (assoc :colnames params)))
(org-babel-pick-name
(cdr (assoc :rowname-names params)) (cdr (assoc :rownames params))))))
(with-temp-buffer
(insert (org-babel-expand-body:clojure body params))
(read
(slime-eval
`(swank:interactive-eval-region
,(buffer-substring-no-properties (point-min) (point-max)))
(cdr (assoc :package params))))))
(provide 'ob-clojure)

View file

@ -5,7 +5,7 @@
;; Author: Eric Schulte
;; Keywords: literate programming, reproducible research, comint
;; Homepage: http://orgmode.org
;; Version: 7.3
;; Version: 7.4
;; This file is part of GNU Emacs.

View file

@ -5,7 +5,7 @@
;; Author: Eric Schulte
;; Keywords: literate programming, reproducible research
;; Homepage: http://orgmode.org
;; Version: 7.3
;; Version: 7.4
;; This file is part of GNU Emacs.

View file

@ -5,7 +5,7 @@
;; Author: Eric Schulte
;; Keywords: literate programming, reproducible research
;; Homepage: http://orgmode.org
;; Version: 7.3
;; Version: 7.4
;; This file is part of GNU Emacs.

View file

@ -5,7 +5,7 @@
;; Author: Eric Schulte
;; Keywords: literate programming, reproducible research
;; Homepage: http://orgmode.org
;; Version: 7.3
;; Version: 7.4
;; This file is part of GNU Emacs.

View file

@ -1,11 +1,11 @@
;;; ob-emacs-lisp.el --- org-babel functions for emacs-lisp code evaluation
;; Copyright (C) 2009, 2010 Free Software Foundation, Inc.
;; Copyright (C) 2009, 2010 Free Software Foundation, Inc
;; Author: Eric Schulte
;; Keywords: literate programming, reproducible research
;; Homepage: http://orgmode.org
;; Version: 7.3
;; Version: 7.4
;; This file is part of GNU Emacs.

View file

@ -5,7 +5,7 @@
;; Author: Eric Schulte
;; Keywords: literate programming, reproducible research, comint
;; Homepage: http://orgmode.org
;; Version: 7.3
;; Version: 7.4
;; This file is part of GNU Emacs.
@ -28,12 +28,13 @@
;; shell commands.
;;; Code:
(require 'ob)
(eval-when-compile (require 'cl))
(defvar org-babel-error-buffer-name "*Org-Babel Error Output*")
(defun org-babel-eval-error-notify (exit-code stderr)
"Open a buffer to display STDERR and a message with the value of EXIT-CODE."
(let ((buf (get-buffer-create "*Org-Babel Error Output*")))
(let ((buf (get-buffer-create org-babel-error-buffer-name)))
(with-current-buffer buf
(goto-char (point-max))
(save-excursion (insert stderr)))
@ -44,7 +45,7 @@
"Run CMD on BODY.
If CMD succeeds then return its results, otherwise display
STDERR with `org-babel-eval-error-notify'."
(let ((err-buff (get-buffer-create "*Org-Babel Error*")) exit-code)
(let ((err-buff (get-buffer-create " *Org-Babel Error*")) exit-code)
(with-current-buffer err-buff (erase-buffer))
(with-temp-buffer
(insert body)
@ -138,9 +139,9 @@ specifies the value of ERROR-BUFFER."
(if error-buffer
(make-temp-file
(expand-file-name "scor"
(or (unless (featurep 'xemacs)
small-temporary-file-directory)
temporary-file-directory)))
(if (featurep 'xemacs)
(temp-directory)
temporary-file-directory)))
nil))
exit-status)
(if (or replace
@ -247,6 +248,13 @@ specifies the value of ERROR-BUFFER."
(delete-file error-file))
exit-status))
(defun org-babel-eval-wipe-error-buffer ()
"Delete the contents of the Org code block error buffer.
This buffer is named by `org-babel-error-buffer-name'."
(when (get-buffer org-babel-error-buffer-name)
(with-current-buffer org-babel-error-buffer-name
(delete-region (point-min) (point-max)))))
(provide 'ob-eval)
;; arch-tag: 5328b17f-957d-42d9-94da-a2952682d04d

View file

@ -5,7 +5,7 @@
;; Author: Eric Schulte, Dan Davison
;; Keywords: literate programming, reproducible research
;; Homepage: http://orgmode.org
;; Version: 7.3
;; Version: 7.4
;; This file is part of GNU Emacs.
@ -39,8 +39,7 @@
(defvar org-babel-lob-one-liner-regexp)
(defvar org-babel-ref-split-regexp)
(declare-function org-babel-lob-get-info "ob-lob" ())
(declare-function org-babel-ref-literal "ob-ref" (ref))
(declare-function org-babel-eval-wipe-error-buffer "ob-eval" ())
(add-to-list 'org-export-interblocks '(src org-babel-exp-inline-src-blocks))
(add-to-list 'org-export-interblocks '(lob org-babel-exp-lob-one-liners))
(add-hook 'org-export-blocks-postblock-hook 'org-exp-res/src-name-cleanup)
@ -289,6 +288,7 @@ inhibit insertion of results into the buffer."
(org-babel-process-params (nth 2 info))))
;; skip code blocks which we can't evaluate
(when (fboundp (intern (concat "org-babel-execute:" lang)))
(org-babel-eval-wipe-error-buffer)
(if (equal type 'inline)
(let ((raw (org-babel-execute-src-block
nil info '((:results . "silent"))))

View file

@ -5,7 +5,7 @@
;; Author: Eric Schulte
;; Keywords: literate programming, reproducible research
;; Homepage: http://orgmode.org
;; Version: 7.3
;; Version: 7.4
;; This file is part of GNU Emacs.

View file

@ -5,7 +5,7 @@
;; Author: Eric Schulte
;; Keywords: literate programming, reproducible research
;; Homepage: http://orgmode.org
;; Version: 7.3
;; Version: 7.4
;; This file is part of GNU Emacs.
@ -136,16 +136,7 @@ then create one. Return the initialized session."
"Convert RESULTS to an Emacs-lisp table or string.
If RESULTS look like a table, then convert them into an
Emacs-lisp table, otherwise return the results as a string."
(org-babel-read
(if (and (stringp results) (string-match "^\\[.+\\]$" results))
(org-babel-read
(concat "'"
(replace-regexp-in-string
"\\[" "(" (replace-regexp-in-string
"\\]" ")" (replace-regexp-in-string
"," " " (replace-regexp-in-string
"'" "\"" results))))))
results)))
(org-babel-script-escape results))
(defun org-babel-haskell-var-to-haskell (var)
"Convert an elisp value VAR into a haskell variable.

View file

@ -1,26 +1,28 @@
;;; ob-js.el --- org-babel functions for Javascript
;; Copyright (C) 2010 Free Software Foundation, Inc.
;; Copyright (C) 2010 Free Software Foundation
;; Author: Eric Schulte
;; Keywords: literate programming, reproducible research, js
;; Homepage: http://orgmode.org
;; Version: 7.3
;; Version: 7.4
;; This file is part of GNU Emacs.
;;; License:
;; GNU Emacs is free software: you can redistribute it and/or modify
;; 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.
;; GNU Emacs is distributed in the hope that it will be useful,
;; the Free Software Foundation; either version 3, or (at your option)
;; any later version.
;;
;; This program is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;;
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
;; along with GNU Emacs; see the file COPYING. If not, write to the
;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
;; Boston, MA 02110-1301, USA.
;;; Commentary:
@ -33,7 +35,7 @@
;; - a non-browser javascript engine such as node.js http://nodejs.org/
;; or mozrepl http://wiki.github.com/bard/mozrepl/
;;
;;
;; - for session based evaluation mozrepl and moz.el are required see
;; http://wiki.github.com/bard/mozrepl/emacs-integration for
;; configuration instructions

View file

@ -5,7 +5,7 @@
;; Author: Eric Schulte
;; Keywords: literate programming, reproducible research
;; Homepage: http://orgmode.org
;; Version: 7.3
;; Version: 7.4
;; This file is part of GNU Emacs.

View file

@ -5,7 +5,7 @@
;; Author: Eric Schulte
;; Keywords: literate programming, reproducible research
;; Homepage: http://orgmode.org
;; Version: 7.3
;; Version: 7.4
;; This file is part of GNU Emacs.

View file

@ -5,7 +5,7 @@
;; Author: Eric S Fraga
;; Keywords: literate programming, reproducible research, accounting
;; Homepage: http://orgmode.org
;; Version: 7.3
;; Version: 7.4
;; This file is part of GNU Emacs.

View file

@ -1,27 +1,28 @@
;;; ob-lisp.el --- org-babel functions for Common Lisp
;; Copyright (C) 2010 Free Software Foundation, Inc.
;; Copyright (C) 2010 Free Software Foundation
;; Author: David T. O'Toole <dto@gnu.org>
;; Eric Schulte
;; Author: David T. O'Toole <dto@gnu.org>, Eric Schulte
;; Keywords: literate programming, reproducible research, lisp
;; Homepage: http://orgmode.org
;; Version: 7.3
;; Version: 7.4
;; This file is part of GNU Emacs.
;;; License:
;; GNU Emacs is free software: you can redistribute it and/or modify
;; 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.
;; GNU Emacs is distributed in the hope that it will be useful,
;; the Free Software Foundation; either version 3, or (at your option)
;; any later version.
;;
;; This program is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;;
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
;; along with GNU Emacs; see the file COPYING. If not, write to the
;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
;; Boston, MA 02110-1301, USA.
;;; Commentary:
@ -40,16 +41,18 @@
(require 'ob-ref)
(require 'ob-comint)
(require 'ob-eval)
(declare-function slime-eval "ext:slime" (form))
(declare-function slime-eval "ext:slime" (sexp &optional package))
(declare-function slime-process "ext:slime" (&optional connection))
(declare-function slime-connected-p "ext:slime" ())
(declare-function slime-process "ext:slime" ())
(require 'slime nil 'noerror)
(defvar org-babel-default-header-args:lisp '()
"Default header arguments for lisp code blocks.")
(defcustom org-babel-lisp-cmd "sbcl --script"
"Name of command used to evaluate lisp blocks.")
"Name of command used to evaluate lisp blocks."
:group 'org-babel
:type 'string)
(defun org-babel-expand-body:lisp (body params)
"Expand BODY according to PARAMS, return the expanded body."
@ -65,6 +68,7 @@
(defun org-babel-execute:lisp (body params)
"Execute a block of Lisp code with org-babel.
This function is called by `org-babel-execute-src-block'"
(require 'slime)
(message "executing Lisp source code block")
(let* ((session (org-babel-lisp-initiate-session
(cdr (assoc :session params))))
@ -96,6 +100,7 @@ This function is called by `org-babel-execute-src-block'"
(defun org-babel-lisp-initiate-session (&optional session)
"If there is not a current inferior-process-buffer in SESSION
then create. Return the initialized session."
(require 'slime)
(unless (string= session "none")
(save-window-excursion
(or (slime-connected-p)

View file

@ -2,11 +2,10 @@
;; Copyright (C) 2009, 2010 Free Software Foundation, Inc.
;; Author: Eric Schulte
;; Dan Davison
;; Author: Eric Schulte, Dan Davison
;; Keywords: literate programming, reproducible research
;; Homepage: http://orgmode.org
;; Version: 7.3
;; Version: 7.4
;; This file is part of GNU Emacs.
@ -26,7 +25,7 @@
;;; Commentary:
;; See the online documentation for more information
;;
;;
;; http://orgmode.org/worg/org-contrib/babel/
;;; Code:
@ -72,7 +71,8 @@ If you change the value of this variable then your files may
(concat
"^\\([ \t]*\\)#\\+\\(?:"
(mapconcat #'regexp-quote org-babel-lob-call-aliases "\\|")
"\\):[ \t]+\\([^\(\)\n]+\\)\(\\([^\n]*\\)\)\\(\\[.+\\]\\|\\)[ \t]*\\([^\n]*\\)")
"\\):[ \t]+\\([^\(\)\n]+?\\)\\(\\[\\(.*\\)\\]\\|\\(\\)\\)"
"\(\\([^\n]*\\)\)\\(\\[.+\\]\\|\\)[ \t]*\\([^\n]*\\)")
"Regexp to match calls to predefined source block functions.")
;; functions for executing lob one-liners
@ -93,13 +93,16 @@ if so then run the appropriate source block from the Library."
(beginning-of-line 1)
(if (looking-at org-babel-lob-one-liner-regexp)
(append
(mapcar #'org-babel-clean-text-properties
(mapcar #'org-babel-clean-text-properties
(list
(format "%s(%s)%s"
(match-string 2) (match-string 3) (match-string 4))
(match-string 5)))
(format "%s%s(%s)%s"
(match-string 2)
(if (match-string 4)
(concat "[" (match-string 4) "]") "")
(or (match-string 6) "") (match-string 7))
(match-string 8)))
(list (length (match-string 1))))))))
(defun org-babel-lob-execute (info)
"Execute the lob call specified by INFO."
(let ((params (org-babel-process-params

View file

@ -5,7 +5,7 @@
;; Author: Dan Davison
;; Keywords: literate programming, reproducible research
;; Homepage: http://orgmode.org
;; Version: 7.3
;; Version: 7.4
;; This file is part of GNU Emacs.

View file

@ -5,7 +5,7 @@
;; Author: Juan Pechiar
;; Keywords: literate programming, reproducible research
;; Homepage: http://orgmode.org
;; Version: 7.3
;; Version: 7.4
;; This file is part of GNU Emacs.

View file

@ -5,7 +5,7 @@
;; Author: Eric Schulte
;; Keywords: literate programming, reproducible research
;; Homepage: http://orgmode.org
;; Version: 7.3
;; Version: 7.4
;; This file is part of GNU Emacs.

View file

@ -5,7 +5,7 @@
;; Author: Dan Davison
;; Keywords: literate programming, reproducible research
;; Homepage: http://orgmode.org
;; Version: 7.3
;; Version: 7.4
;; This file is part of GNU Emacs.

View file

@ -5,7 +5,7 @@
;; Author: Eric Schulte
;; Keywords: literate programming, reproducible research
;; Homepage: http://orgmode.org
;; Version: 7.3
;; Version: 7.4
;; This file is part of GNU Emacs.

View file

@ -1,12 +1,11 @@
;;; ob-perl.el --- org-babel functions for perl evaluation
;; Copyright (C) 2009, 2010 Free Software Foundation, Inc.
;; Copyright (C) 2009, 2010 Free Software Foundation
;; Author: Dan Davison
;; Eric Schulte
;; Author: Dan Davison, Eric Schulte
;; Keywords: literate programming, reproducible research
;; Homepage: http://orgmode.org
;; Version: 7.3
;; Version: 7.4
;; This file is part of GNU Emacs.

View file

@ -5,7 +5,7 @@
;; Author: Zhang Weize
;; Keywords: literate programming, reproducible research
;; Homepage: http://orgmode.org
;; Version: 7.3
;; Version: 7.4
;; This file is part of GNU Emacs.

View file

@ -1,12 +1,11 @@
;;; ob-python.el --- org-babel functions for python evaluation
;; Copyright (C) 2009, 2010 Free Software Foundation, Inc.
;; Copyright (C) 2009, 2010 Free Software Foundation
;; Author: Eric Schulte
;; Dan Davison
;; Author: Eric Schulte, Dan Davison
;; Keywords: literate programming, reproducible research
;; Homepage: http://orgmode.org
;; Version: 7.3
;; Version: 7.4
;; This file is part of GNU Emacs.
@ -57,11 +56,15 @@ This function is called by `org-babel-execute-src-block'."
(cdr (assoc :session params))))
(result-params (cdr (assoc :result-params params)))
(result-type (cdr (assoc :result-type params)))
(return-val (when (and (eq result-type 'value) (not session))
(cdr (assoc :return params))))
(preamble (cdr (assoc :preamble params)))
(full-body
(org-babel-expand-body:generic
body params (org-babel-variable-assignments:python params)))
(concat body (if return-val (format "return %s" return-val) ""))
params (org-babel-variable-assignments:python params)))
(result (org-babel-python-evaluate
session full-body result-type result-params)))
session full-body result-type result-params preamble)))
(or (cdr (assoc :file params))
(org-babel-reassemble-table
result
@ -118,20 +121,7 @@ specifying a variable of the same value."
"Convert RESULTS into an appropriate elisp value.
If the results look like a list or tuple, then convert them into an
Emacs-lisp table, otherwise return the results as a string."
((lambda (res)
(if (listp res)
(mapcar (lambda (el) (if (equal el 'None) 'hline el)) res)
res))
(org-babel-read
(if (and (stringp results) (string-match "^[([].+[])]$" results))
(org-babel-read
(concat "'"
(replace-regexp-in-string
"\\[" "(" (replace-regexp-in-string
"\\]" ")" (replace-regexp-in-string
", " " " (replace-regexp-in-string
"'" "\"" results t))))))
results))))
(org-babel-script-escape results))
(defvar org-babel-python-buffers '((:default . nil)))
@ -192,35 +182,38 @@ def main():
open('%s', 'w').write( pprint.pformat(main()) )")
(defun org-babel-python-evaluate
(session body &optional result-type result-params)
(session body &optional result-type result-params preamble)
"Evaluate BODY as python code."
(if session
(org-babel-python-evaluate-session
session body result-type result-params)
(org-babel-python-evaluate-external-process
body result-type result-params)))
body result-type result-params preamble)))
(defun org-babel-python-evaluate-external-process
(body &optional result-type result-params)
(body &optional result-type result-params preamble)
"Evaluate BODY in external python process.
If RESULT-TYPE equals 'output then return standard output as a
string. If RESULT-TYPE equals 'value then return the value of the
last statement in BODY, as elisp."
(case result-type
(output (org-babel-eval org-babel-python-command body))
(output (org-babel-eval org-babel-python-command
(concat (if preamble (concat preamble "\n") "") body)))
(value (let ((tmp-file (org-babel-temp-file "python-")))
(org-babel-eval org-babel-python-command
(format
(if (member "pp" result-params)
org-babel-python-pp-wrapper-method
org-babel-python-wrapper-method)
(mapconcat
(lambda (line) (format "\t%s" line))
(split-string
(org-remove-indentation
(org-babel-trim body))
"[\r\n]") "\n")
(org-babel-process-file-name tmp-file 'noquote)))
(concat
(if preamble (concat preamble "\n") "")
(format
(if (member "pp" result-params)
org-babel-python-pp-wrapper-method
org-babel-python-wrapper-method)
(mapconcat
(lambda (line) (format "\t%s" line))
(split-string
(org-remove-indentation
(org-babel-trim body))
"[\r\n]") "\n")
(org-babel-process-file-name tmp-file 'noquote))))
((lambda (raw)
(if (or (member "code" result-params)
(member "pp" result-params))
@ -240,7 +233,7 @@ last statement in BODY, as elisp."
(lambda (statement) (insert statement) (comint-send-input))
(if pp
(list
"import pp"
"import pprint"
(format "open('%s', 'w').write(pprint.pformat(_))"
(org-babel-process-file-name tmp-file 'noquote)))
(list (format "open('%s', 'w').write(str(_))"

View file

@ -2,11 +2,10 @@
;; Copyright (C) 2009, 2010 Free Software Foundation, Inc.
;; Author: Eric Schulte
;; Dan Davison
;; Author: Eric Schulte, Dan Davison
;; Keywords: literate programming, reproducible research
;; Homepage: http://orgmode.org
;; Version: 7.3
;; Version: 7.4
;; This file is part of GNU Emacs.
@ -52,11 +51,13 @@
;;; Code:
(require 'ob)
(eval-when-compile
(require 'org-list)
(require 'cl))
(declare-function org-remove-if-not "org" (predicate seq))
(declare-function org-at-table-p "org" (&optional table-type))
(declare-function org-count "org" (CL-ITEM CL-SEQ))
(declare-function org-in-item-p "org-list" ())
(defvar org-babel-ref-split-regexp
"[ \f\t\n\r\v]*\\(.+?\\)[ \f\t\n\r\v]*=[ \f\t\n\r\v]*\\(.+\\)[ \f\t\n\r\v]*")
@ -74,46 +75,39 @@ the variable."
(let ((var (match-string 1 assignment))
(ref (match-string 2 assignment)))
(cons (intern var)
((lambda (val)
(if (equal :ob-must-be-reference val)
(org-babel-ref-resolve ref) val))
(org-babel-ref-literal ref))))))
(defun org-babel-ref-literal (ref)
"Return the value of REF if it is a literal value.
Determine if the right side of a header argument variable
assignment is a literal value or is a reference to some external
resource. REF should be a string of the right hand side of the
assignment. If REF is literal then return it's value, otherwise
return nil."
(let ((out (org-babel-read ref)))
(if (equal out ref)
(if (string-match "^\".+\"$" ref)
(read ref)
:ob-must-be-reference)
out)))
(let ((out (org-babel-read ref)))
(if (equal out ref)
(if (string-match "^\".+\"$" ref)
(read ref)
(org-babel-ref-resolve ref))
out))))))
(defvar org-babel-library-of-babel)
(defun org-babel-ref-resolve (ref)
"Resolve the reference REF and return its value."
(save-excursion
(let ((case-fold-search t)
type args new-refere new-referent result lob-info split-file split-ref
index index-row index-col)
type args new-refere new-header-args new-referent result
lob-info split-file split-ref index index-row index-col)
;; if ref is indexed grab the indices -- beware nested indices
(when (and (string-match "\\[\\(.+\\)\\]" ref)
(when (and (string-match "\\[\\([^\\[]+\\)\\]$" ref)
(let ((str (substring ref 0 (match-beginning 0))))
(= (org-count ?( str) (org-count ?) str))))
(setq index (match-string 1 ref))
(setq ref (substring ref 0 (match-beginning 0))))
;; assign any arguments to pass to source block
(when (string-match "^\\(.+?\\)\(\\(.*\\)\)$" ref)
(setq new-refere (match-string 1 ref))
(setq new-referent (match-string 2 ref))
(when (string-match
"^\\(.+?\\)\\(\\[\\(.*\\)\\]\\|\\(\\)\\)\(\\(.*\\)\)$" ref)
(setq new-refere (match-string 1 ref))
(setq new-header-args (match-string 3 ref))
(setq new-referent (match-string 5 ref))
(when (> (length new-refere) 0)
(if (> (length new-referent) 0)
(setq args (mapcar (lambda (ref) (cons :var ref))
(org-babel-ref-split-args new-referent))))
(when (> (length new-referent) 0)
(setq args (mapcar (lambda (ref) (cons :var ref))
(org-babel-ref-split-args new-referent))))
(when (> (length new-header-args) 0)
(setq args (append (org-babel-parse-header-arguments new-header-args)
args)))
(setq ref new-refere)))
(when (string-match "^\\(.+\\):\\(.+\\)$" ref)
(setq split-file (match-string 1 ref))
@ -155,6 +149,7 @@ return nil."
(case type
('results-line (org-babel-read-result))
('table (org-babel-read-table))
('list (org-babel-read-list))
('file (org-babel-read-link))
('source-block (org-babel-execute-src-block nil nil params))
('lob (org-babel-execute-src-block nil lob-info params)))))
@ -222,6 +217,7 @@ to \"0:-1\"."
Return nil if none of the supported reference types are found.
Supported reference types are tables and source blocks."
(cond ((org-at-table-p) 'table)
((org-in-item-p) 'list)
((looking-at "^[ \t]*#\\+BEGIN_SRC") 'source-block)
((looking-at org-bracket-link-regexp) 'file)
((looking-at org-babel-result-regexp) 'results-line)))

View file

@ -1,11 +1,11 @@
;;; ob-ruby.el --- org-babel functions for ruby evaluation
;; Copyright (C) 2009, 2010 Free Software Foundation, Inc.
;; Copyright (C) 2009, 2010 Free Software Foundation
;; Author: Eric Schulte
;; Keywords: literate programming, reproducible research
;; Homepage: http://orgmode.org
;; Version: 7.3
;; Version: 7.4
;; This file is part of GNU Emacs.
@ -29,10 +29,10 @@
;;; Requirements:
;; - ruby and irb executables :: http://www.ruby-lang.org/
;;
;;
;; - ruby-mode :: Can be installed through ELPA, or from
;; http://github.com/eschulte/rinari/raw/master/util/ruby-mode.el
;;
;;
;; - inf-ruby mode :: Can be installed through ELPA, or from
;; http://github.com/eschulte/rinari/raw/master/util/inf-ruby.el
@ -116,16 +116,7 @@ specifying a variable of the same value."
"Convert RESULTS into an appropriate elisp value.
If RESULTS look like a table, then convert them into an
Emacs-lisp table, otherwise return the results as a string."
(org-babel-read
(if (and (stringp results) (string-match "^\\[.+\\]$" results))
(org-babel-read
(concat "'"
(replace-regexp-in-string
"\\[" "(" (replace-regexp-in-string
"\\]" ")" (replace-regexp-in-string
", " " " (replace-regexp-in-string
"'" "\"" results))))))
results)))
(org-babel-script-escape results))
(defun org-babel-ruby-initiate-session (&optional session params)
"Initiate a ruby session.

View file

@ -5,7 +5,7 @@
;; Author: Eric Schulte
;; Keywords: literate programming, reproducible research
;; Homepage: http://orgmode.org
;; Version: 7.3
;; Version: 7.4
;; This file is part of GNU Emacs.

View file

@ -1,26 +1,28 @@
;;; ob-scheme.el --- org-babel functions for Scheme
;; Copyright (C) 2010 Free Software Foundation, Inc.
;; Copyright (C) 2010 Free Software Foundation
;; Author: Eric Schulte
;; Keywords: literate programming, reproducible research, scheme
;; Homepage: http://orgmode.org
;; Version: 7.3
;; Version: 7.4
;; This file is part of GNU Emacs.
;;; License:
;; GNU Emacs is free software: you can redistribute it and/or modify
;; 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.
;; GNU Emacs is distributed in the hope that it will be useful,
;; the Free Software Foundation; either version 3, or (at your option)
;; any later version.
;;
;; This program is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;;
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
;; along with GNU Emacs; see the file COPYING. If not, write to the
;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
;; Boston, MA 02110-1301, USA.
;;; Commentary:
@ -33,7 +35,7 @@
;; - a working scheme implementation
;; (e.g. guile http://www.gnu.org/software/guile/guile.html)
;;
;;
;; - for session based evaluation cmuscheme.el is required which is
;; included in Emacs

View file

@ -1,11 +1,11 @@
;;; ob-screen.el --- org-babel support for interactive terminal
;; Copyright (C) 2009, 2010 Free Software Foundation, Inc.
;; Copyright (C) 2009, 2010 Free Software Foundation
;; Author: Benjamin Andresen
;; Keywords: literate programming, interactive shell
;; Homepage: http://orgmode.org
;; Version: 7.3
;; Version: 7.4
;; This file is part of GNU Emacs.

View file

@ -5,7 +5,7 @@
;; Author: Eric Schulte
;; Keywords: literate programming, reproducible research
;; Homepage: http://orgmode.org
;; Version: 7.3
;; Version: 7.4
;; This file is part of GNU Emacs.
@ -100,7 +100,7 @@ var of the same value."
(if (listp el)
(mapcar #'deep-string el)
(org-babel-sh-var-to-sh el sep))))
(format "$(cat <<BABEL_TABLE\n%s\nBABEL_TABLE\n)"
(format "$(cat <<'BABEL_TABLE'\n%s\nBABEL_TABLE\n)"
(orgtbl-to-generic
(deep-string (if (listp (car var)) var (list var)))
(list :sep (or sep "\t")))))
@ -114,16 +114,7 @@ var of the same value."
"Convert RESULTS to an appropriate elisp value.
If the results look like a table, then convert them into an
Emacs-lisp table, otherwise return the results as a string."
(org-babel-read
(if (string-match "^\\[.+\\]$" results)
(org-babel-read
(concat "'"
(replace-regexp-in-string
"\\[" "(" (replace-regexp-in-string
"\\]" ")" (replace-regexp-in-string
", " " " (replace-regexp-in-string
"'" "\"" results))))))
results)))
(org-babel-script-escape results))
(defun org-babel-sh-initiate-session (&optional session params)
"Initiate a session named SESSION according to PARAMS."

View file

@ -5,7 +5,7 @@
;; Author: Eric Schulte
;; Keywords: literate programming, reproducible research
;; Homepage: http://orgmode.org
;; Version: 7.3
;; Version: 7.4
;; This file is part of GNU Emacs.
@ -47,9 +47,15 @@
(eval-when-compile (require 'cl))
(declare-function org-table-import "org-table" (file arg))
(declare-function orgtbl-to-csv "org-table" (TABLE PARAMS))
(defvar org-babel-default-header-args:sql '())
(defun org-babel-expand-body:sql (body params)
"Expand BODY according to the values of PARAMS."
(org-babel-sql-expand-vars
body (mapcar #'cdr (org-babel-get-header params :var))))
(defun org-babel-execute:sql (body params)
"Execute a block of Sql code with Babel.
This function is called by `org-babel-execute-src-block'."
@ -60,6 +66,10 @@ This function is called by `org-babel-execute-src-block'."
(out-file (or (cdr (assoc :out-file params))
(org-babel-temp-file "sql-out-")))
(command (case (intern engine)
('msosql (format "osql %s -s \"\t\" -i %s -o %s"
(or cmdline "")
(org-babel-process-file-name in-file)
(org-babel-process-file-name out-file)))
('mysql (format "mysql %s -e \"source %s\" > %s"
(or cmdline "")
(org-babel-process-file-name in-file)
@ -70,11 +80,11 @@ This function is called by `org-babel-execute-src-block'."
(or cmdline "")))
(t (error "no support for the %s sql engine" engine)))))
(with-temp-file in-file
(insert (org-babel-expand-body:generic body params)))
(insert (org-babel-expand-body:sql body params)))
(message command)
(shell-command command)
(with-temp-buffer
(org-table-import out-file nil)
(org-table-import out-file '(16))
(org-babel-reassemble-table
(org-table-to-lisp)
(org-babel-pick-name (cdr (assoc :colname-names params))
@ -82,6 +92,28 @@ This function is called by `org-babel-execute-src-block'."
(org-babel-pick-name (cdr (assoc :rowname-names params))
(cdr (assoc :rownames params)))))))
(defun org-babel-sql-expand-vars (body vars)
"Expand the variables held in VARS in BODY."
(mapc
(lambda (pair)
(setq body
(replace-regexp-in-string
(format "\$%s" (car pair))
((lambda (val)
(if (listp val)
((lambda (data-file)
(with-temp-file data-file
(insert (orgtbl-to-csv
val '(:fmt (lambda (el) (if (stringp el)
el
(format "%S" el)))))))
data-file)
(org-babel-temp-file "sql-data-"))
(if (stringp val) val (format "%S" val))))
(cdr pair))
body)))
vars)
body)
(defun org-babel-prep-session:sql (session params)
"Raise an error because Sql sessions aren't implemented."

View file

@ -1,11 +1,11 @@
;;; ob-sqlite.el --- org-babel functions for sqlite database interaction
;; Copyright (C) 2010 Free Software Foundation, Inc.
;; Copyright (C) 2010 Free Software Foundation
;; Author: Eric Schulte
;; Keywords: literate programming, reproducible research
;; Homepage: http://orgmode.org
;; Version: 7.3
;; Version: 7.4
;; This file is part of GNU Emacs.
@ -28,6 +28,7 @@
;;; Code:
(require 'ob)
(require 'ob-eval)
(require 'ob-ref)
(declare-function org-fill-template "org" (template alist))
@ -52,7 +53,6 @@
"Execute a block of Sqlite code with Babel.
This function is called by `org-babel-execute-src-block'."
(let ((result-params (split-string (or (cdr (assoc :results params)) "")))
(vars (org-babel-get-header params :var))
(db (cdr (assoc :db params)))
(separator (cdr (assoc :separator params)))
(nullvalue (cdr (assoc :nullvalue params)))
@ -65,15 +65,10 @@ This function is called by `org-babel-execute-src-block'."
(unless db (error "ob-sqlite: can't evaluate without a database."))
(with-temp-buffer
(insert
(shell-command-to-string
(org-babel-eval
(org-fill-template
"%cmd -init %body %header %separator %nullvalue %others %csv %db "
"%cmd %header %separator %nullvalue %others %csv %db "
(list
(cons "body" ((lambda (sql-file)
(with-temp-file sql-file
(insert (org-babel-expand-body:sqlite body params)))
sql-file)
(org-babel-temp-file "sqlite-sql-")))
(cons "cmd" org-babel-sqlite3-command)
(cons "header" (if headers-p "-header" "-noheader"))
(cons "separator"
@ -90,7 +85,9 @@ This function is called by `org-babel-execute-src-block'."
(member :html others) separator)
""
"-csv"))
(cons "db " db)))))
(cons "db " db)))
;; body of the code block
(org-babel-expand-body:sqlite body params)))
(if (or (member "scalar" result-params)
(member "html" result-params)
(member "code" result-params)

View file

@ -5,7 +5,7 @@
;; Author: Eric Schulte
;; Keywords: literate programming, reproducible research
;; Homepage: http://orgmode.org
;; Version: 7.3
;; Version: 7.4
;; This file is part of GNU Emacs.
@ -57,9 +57,9 @@
"Replace newline character with ellipses.
If STRING ends in a newline character, then remove the newline
character and replace it with ellipses."
(if (and (stringp string) (string-match "[\n\r]" string))
(concat (substring string 0 (match-beginning 0)) "...")
string))
(if (and (stringp string) (string-match "[\n\r]\\(.\\)?" string))
(concat (substring string 0 (match-beginning 0))
(if (match-string 1 string) "...")) string))
(defmacro sbe (source-block &rest variables)
"Return the results of calling SOURCE-BLOCK with VARIABLES.

View file

@ -5,7 +5,7 @@
;; Author: Eric Schulte
;; Keywords: literate programming, reproducible research
;; Homepage: http://orgmode.org
;; Version: 7.3
;; Version: 7.4
;; This file is part of GNU Emacs.
@ -125,6 +125,7 @@ evaluating BODY."
This function exports the source code using
`org-babel-tangle' and then loads the resulting file using
`load-file'."
(interactive "fFile to load: ")
(flet ((age (file)
(float-time
(time-subtract (current-time)

View file

@ -2,11 +2,10 @@
;; Copyright (C) 2009, 2010 Free Software Foundation, Inc.
;; Author: Eric Schulte
;; Dan Davison
;; Author: Eric Schulte, Dan Davison
;; Keywords: literate programming, reproducible research
;; Homepage: http://orgmode.org
;; Version: 7.3
;; Version: 7.4
;; This file is part of GNU Emacs.
@ -31,7 +30,9 @@
;;; Code:
(eval-when-compile
(require 'org-list)
(require 'cl))
(require 'ob-eval)
(require 'org-macs)
(defvar org-babel-call-process-region-original)
@ -43,7 +44,7 @@
(declare-function tramp-file-name-host "tramp" (vec))
(declare-function with-parsed-tramp-file-name "tramp" (filename var &rest body))
(declare-function org-icompleting-read "org" (&rest args))
(declare-function org-edit-src-code "org-src"
(declare-function org-edit-src-code "org-src"
(&optional context code edit-buffer-name quietp))
(declare-function org-edit-src-exit "org-src" (&optional context))
(declare-function org-open-at-point "org" (&optional in-emacs reference-buffer))
@ -73,6 +74,10 @@
(declare-function org-babel-ref-resolve "ob-ref" (ref))
(declare-function org-babel-lob-execute-maybe "ob-lob" ())
(declare-function org-number-sequence "org-compat" (from &optional to inc))
(declare-function org-in-item-p "org-list" ())
(declare-function org-list-parse-list "org-list" (&optional delete))
(declare-function org-list-to-generic "org-list" (LIST PARAMS))
(declare-function org-list-bottom-point "org-list" ())
(defgroup org-babel nil
"Code block evaluation and management in `org-mode' documents."
@ -213,9 +218,13 @@ of potentially harmful code."
(if (or (equal eval "never") (equal eval "no")
(and query
(not (yes-or-no-p
(format "Evaluate this%scode on your system? "
(if info (format " %s " (nth 0 info)) " "))))))
(prog1 nil (message "evaluation aborted"))
(format "Evaluate this%scode block%son your system? "
(if info (format " %s " (nth 0 info)) " ")
(if (nth 4 info)
(format " (%s) " (nth 4 info)) " "))))))
(prog1 nil (message "Evaluation %s"
(if (or (equal eval "never") (equal eval "no"))
"Disabled" "Aborted")))
t)))
;;;###autoload
@ -238,7 +247,8 @@ then run `org-babel-execute-src-block'."
(interactive)
(let ((info (org-babel-get-src-block-info)))
(if info
(progn (org-babel-execute-src-block current-prefix-arg info) t) nil)))
(progn (org-babel-eval-wipe-error-buffer)
(org-babel-execute-src-block current-prefix-arg info) t) nil)))
;;;###autoload
(defun org-babel-expand-src-block-maybe ()
@ -363,10 +373,12 @@ block."
(new-hash (when cache? (org-babel-sha1-hash info)))
(old-hash (when cache? (org-babel-result-hash info)))
(body (setf (nth 1 info)
(if (and (cdr (assoc :noweb params))
(string= "yes" (cdr (assoc :noweb params))))
(org-babel-expand-noweb-references info)
(nth 1 info))))
(let ((noweb (cdr (assoc :noweb params))))
(if (and noweb
(or (string= "yes" noweb)
(string= "tangle" noweb)))
(org-babel-expand-noweb-references info)
(nth 1 info)))))
(cmd (intern (concat "org-babel-execute:" lang)))
(dir (cdr (assoc :dir params)))
(default-directory
@ -379,7 +391,7 @@ block."
result)
(unwind-protect
(flet ((call-process-region (&rest args)
(apply 'org-babel-tramp-handle-call-process-region args)))
(apply 'org-babel-tramp-handle-call-process-region args)))
(unless (fboundp cmd)
(error "No org-babel-execute function for %s!" lang))
(if (and (not arg) new-hash (equal new-hash old-hash))
@ -583,6 +595,60 @@ results already exist."
(insert (echo-res results))))))
t)))
;;;###autoload
(defmacro org-babel-map-src-blocks (file &rest body)
"Evaluate BODY forms on each source-block in FILE.
If FILE is nil evaluate BODY forms on source blocks in current
buffer. During evaluation of BODY the following local variables
are set relative to the currently matched code block.
full-block ------- string holding the entirety of the code block
beg-block -------- point at the beginning of the code block
end-block -------- point at the end of the matched code block
lang ------------- string holding the language of the code block
beg-lang --------- point at the beginning of the lang
end-lang --------- point at the end of the lang
switches --------- string holding the switches
beg-switches ----- point at the beginning of the switches
end-switches ----- point at the end of the switches
header-args ------ string holding the header-args
beg-header-args -- point at the beginning of the header-args
end-header-args -- point at the end of the header-args
body ------------- string holding the body of the code block
beg-body --------- point at the beginning of the body
end-body --------- point at the end of the body"
(declare (indent 1))
(let ((tempvar (make-symbol "file")))
`(let* ((,tempvar ,file)
(visited-p (or (null ,tempvar)
(get-file-buffer (expand-file-name ,tempvar))))
(point (point)) to-be-removed)
(save-window-excursion
(when ,tempvar (find-file ,tempvar))
(setq to-be-removed (current-buffer))
(goto-char (point-min))
(while (re-search-forward org-babel-src-block-regexp nil t)
(goto-char (match-beginning 0))
(let ((full-block (match-string 0))
(beg-block (match-beginning 0))
(end-block (match-end 0))
(lang (match-string 2))
(beg-lang (match-beginning 2))
(end-lang (match-end 2))
(switches (match-string 3))
(beg-switches (match-beginning 3))
(end-switches (match-end 3))
(header-args (match-string 4))
(beg-header-args (match-beginning 4))
(end-header-args (match-end 4))
(body (match-string 5))
(beg-body (match-beginning 5))
(end-body (match-end 5)))
,@body
(goto-char end-block))))
(unless visited-p (kill-buffer to-be-removed))
(goto-char point))))
;;;###autoload
(defun org-babel-execute-buffer (&optional arg)
"Execute source code blocks in a buffer.
@ -757,57 +823,6 @@ portions of results lines."
(lambda () (org-add-hook 'change-major-mode-hook
'org-babel-show-result-all 'append 'local)))
(defmacro org-babel-map-src-blocks (file &rest body)
"Evaluate BODY forms on each source-block in FILE.
If FILE is nil evaluate BODY forms on source blocks in current
buffer. During evaluation of BODY the following local variables
are set relative to the currently matched code block.
full-block ------- string holding the entirety of the code block
beg-block -------- point at the beginning of the code block
end-block -------- point at the end of the matched code block
lang ------------- string holding the language of the code block
beg-lang --------- point at the beginning of the lang
end-lang --------- point at the end of the lang
switches --------- string holding the switches
beg-switches ----- point at the beginning of the switches
end-switches ----- point at the end of the switches
header-args ------ string holding the header-args
beg-header-args -- point at the beginning of the header-args
end-header-args -- point at the end of the header-args
body ------------- string holding the body of the code block
beg-body --------- point at the beginning of the body
end-body --------- point at the end of the body"
(declare (indent 1))
`(let ((visited-p (or (null ,file)
(get-file-buffer (expand-file-name ,file))))
(point (point)) to-be-removed)
(save-window-excursion
(when ,file (find-file ,file))
(setq to-be-removed (current-buffer))
(goto-char (point-min))
(while (re-search-forward org-babel-src-block-regexp nil t)
(goto-char (match-beginning 0))
(let ((full-block (match-string 0))
(beg-block (match-beginning 0))
(end-block (match-end 0))
(lang (match-string 2))
(beg-lang (match-beginning 2))
(end-lang (match-end 2))
(switches (match-string 3))
(beg-switches (match-beginning 3))
(end-switches (match-end 3))
(header-args (match-string 4))
(beg-header-args (match-beginning 4))
(end-header-args (match-end 4))
(body (match-string 5))
(beg-body (match-beginning 5))
(end-body (match-end 5)))
,@body
(goto-char end-block))))
(unless visited-p (kill-buffer to-be-removed))
(goto-char point)))
(defvar org-file-properties)
(defun org-babel-params-from-properties (&optional lang)
"Retrieve parameters specified as properties.
@ -893,17 +908,31 @@ may be specified at the top of the current buffer."
(defun org-babel-parse-header-arguments (arg-string)
"Parse a string of header arguments returning an alist."
(if (> (length arg-string) 0)
(delq nil
(mapcar
(lambda (arg)
(if (string-match
"\\([^ \f\t\n\r\v]+\\)[ \f\t\n\r\v]+\\([^ \f\t\n\r\v]+.*\\)"
arg)
(cons (intern (concat ":" (match-string 1 arg)))
(org-babel-read (org-babel-chomp (match-string 2 arg))))
(cons (intern (concat ":" arg)) nil)))
(split-string (concat " " arg-string) "[ \f\t\n\r\v]+:" t)))))
(when (> (length arg-string) 0)
(delq nil
(mapcar
(lambda (arg)
(if (string-match
"\\([^ \f\t\n\r\v]+\\)[ \f\t\n\r\v]+\\([^ \f\t\n\r\v]+.*\\)"
arg)
(cons (intern (match-string 1 arg))
(org-babel-read (org-babel-chomp (match-string 2 arg))))
(cons (intern (org-babel-chomp arg)) nil)))
(let ((balance 0) (partial nil) (lst nil) (last 0))
(mapc (lambda (ch) ; split on [] balanced instances of [ \t]:
(setq balance (+ balance
(cond ((equal 91 ch) 1)
((equal 93 ch) -1)
(t 0))))
(setq partial (cons ch partial))
(when (and (= ch 58) (= balance 0)
(or (= last 32) (= last 9)))
(setq lst (cons (apply #'string (nreverse (cddr partial)))
lst))
(setq partial (list ch)))
(setq last ch))
(string-to-list arg-string))
(nreverse (cons (apply #'string (nreverse partial)) lst)))))))
(defun org-babel-process-params (params)
"Expand variables in PARAMS and add summary parameters."
@ -1291,6 +1320,7 @@ following the source block."
(let ((case-fold-search t) result-string)
(cond
((org-at-table-p) (org-babel-read-table))
((org-in-item-p) (org-babel-read-list))
((looking-at org-bracket-link-regexp) (org-babel-read-link))
((looking-at org-block-regexp) (org-babel-trim (match-string 4)))
((looking-at "^[ \t]*: ")
@ -1316,6 +1346,10 @@ following the source block."
(mapcar #'org-babel-read row)))
(org-table-to-lisp)))
(defun org-babel-read-list ()
"Read the list at `point' into emacs-lisp."
(mapcar #'org-babel-read (cdr (org-list-parse-list))))
(defvar org-link-types-re)
(defun org-babel-read-link ()
"Read the link at `point' into emacs-lisp.
@ -1349,7 +1383,9 @@ silent -- no results are inserted
file ---- the results are interpreted as a file path, and are
inserted into the buffer using the Org-mode file syntax
raw ----- results are added directly to the org-mode file. This
list ---- the results are interpreted as an Org-mode list.
raw ----- results are added directly to the Org-mode file. This
is a good option if you code block will output org-mode
formatted text.
@ -1406,16 +1442,24 @@ code ---- the results are extracted in the syntax of the source
((member "replace" result-params)
(delete-region (point) (org-babel-result-end)))
((member "append" result-params)
(goto-char (org-babel-result-end)) (setq beg (point)))
((member "prepend" result-params) ;; already there
)))
(goto-char (org-babel-result-end)) (setq beg (point-marker)))
((member "prepend" result-params)))) ; already there
(setq results-switches
(if results-switches (concat " " results-switches) ""))
;; insert results based on type
(cond
;; do nothing for an empty result
((= (length result) 0))
;; insert a list if preferred
((member "list" result-params)
(insert
(org-babel-trim
(org-list-to-generic (cons 'unordered
(if (listp result) result (list result)))
'(:splicep nil :istart "- " :iend "\n")))))
;; assume the result is a table if it's not a string
((not (stringp result))
(goto-char beg)
(insert (concat (orgtbl-to-orgtbl
(if (or (eq 'hline (car result))
(and (listp (car result))
@ -1425,24 +1469,34 @@ code ---- the results are extracted in the syntax of the source
(goto-char beg) (when (org-at-table-p) (org-table-align)))
((member "file" result-params)
(insert result))
((member "html" result-params)
(insert (format "#+BEGIN_HTML%s\n%s#+END_HTML\n"
results-switches result)))
((member "latex" result-params)
(insert (format "#+BEGIN_LaTeX%s\n%s#+END_LaTeX\n"
results-switches result)))
((member "code" result-params)
(insert (format "#+BEGIN_SRC %s%s\n%s#+END_SRC\n"
(or lang "none") results-switches result)))
((member "org" result-params)
(insert (format "#+BEGIN_SRC org\n%s#+END_SRC\n" result)))
((member "raw" result-params)
(save-excursion (insert result)) (if (org-at-table-p) (org-cycle)))
(t
(org-babel-examplize-region
(point) (progn (insert result) (point)) results-switches)))
(t (goto-char beg) (insert result)))
(when (listp result) (goto-char (org-table-end)))
(setq end (point-marker))
;; possibly wrap result
(flet ((wrap (start finish)
(goto-char beg) (insert start)
(goto-char end) (insert finish)
(setq end (point-marker))))
(cond
((member "html" result-params)
(wrap "#+BEGIN_HTML\n" "#+END_HTML"))
((member "latex" result-params)
(wrap "#+BEGIN_LaTeX\n" "#+END_LaTeX"))
((member "code" result-params)
(wrap (format "#+BEGIN_SRC %s%s\n" (or lang "none") results-switches)
"#+END_SRC"))
((member "org" result-params)
(wrap "#+BEGIN_ORG\n" "#+END_ORG"))
((member "raw" result-params)
(goto-char beg) (if (org-at-table-p) (org-cycle)))
((member "wrap" result-params)
(when (and (stringp result) (not (member "file" result-params)))
(org-babel-examplize-region beg end results-switches))
(wrap "#+BEGIN_RESULT\n" "#+END_RESULT"))
((and (stringp result) (not (member "file" result-params)))
(org-babel-examplize-region beg end results-switches)
(setq end (point)))))
;; possibly indent the results to match the #+results line
(setq end (if (listp result) (org-table-end) (point)))
(when (and indent (> indent 0)
;; in this case `table-align' does the work for us
(not (and (listp result)
@ -1450,9 +1504,9 @@ code ---- the results are extracted in the syntax of the source
(indent-rigidly beg end indent))))
(if (= (length result) 0)
(if (member "value" result-params)
(message "No result returned by source block")
(message "Source block produced no output"))
(message "finished"))))
(message "Code block returned no value.")
(message "Code block produced no output."))
(message "Code block evaluation complete."))))
(defun org-babel-remove-result (&optional info)
"Remove the result of the current source block."
@ -1466,25 +1520,18 @@ code ---- the results are extracted in the syntax of the source
(defun org-babel-result-end ()
"Return the point at the end of the current set of results"
(save-excursion
(if (org-at-table-p)
(progn (goto-char (org-table-end)) (point))
(let ((case-fold-search t))
(cond
((looking-at "[ \t]*#\\+begin_latex")
(re-search-forward "[ \t]*#\\+end_latex" nil t)
(forward-line 1))
((looking-at "[ \t]*#\\+begin_html")
(re-search-forward "[ \t]*#\\+end_html" nil t)
(forward-line 1))
((looking-at "[ \t]*#\\+begin_example")
(re-search-forward "[ \t]*#\\+end_example" nil t)
(forward-line 1))
((looking-at "[ \t]*#\\+begin_src")
(re-search-forward "[ \t]*#\\+end_src" nil t)
(forward-line 1))
(t (progn (while (looking-at "[ \t]*\\(: \\|\\[\\[\\)")
(forward-line 1))))))
(point))))
(cond
((org-at-table-p) (progn (goto-char (org-table-end)) (point)))
((org-in-item-p) (- (org-list-bottom-point) 1))
(t
(let ((case-fold-search t)
(blocks-re (regexp-opt
(list "latex" "html" "example" "src" "result"))))
(if (looking-at (concat "[ \t]*#\\+begin_" blocks-re))
(re-search-forward (concat "[ \t]*#\\+end_" blocks-re) nil t)
(while (looking-at "[ \t]*\\(: \\|\\[\\[\\)")
(forward-line 1))))
(point)))))
(defun org-babel-result-to-file (result)
"Convert RESULT into an `org-mode' link.
@ -1505,9 +1552,7 @@ file's directory then expand relative links."
(interactive "*r")
(let ((size (count-lines beg end)))
(save-excursion
(cond ((= size 0)
(error (concat "This should not be impossible:"
"a newline was appended to result if missing")))
(cond ((= size 0)) ; do nothing for an empty result
((< size org-babel-min-lines-for-block-output)
(goto-char beg)
(dotimes (n size)
@ -1517,7 +1562,7 @@ file's directory then expand relative links."
(insert (if results-switches
(format "#+begin_example%s\n" results-switches)
"#+begin_example\n"))
(forward-char (- end beg))
(if (markerp end) (goto-char end) (forward-char (- end beg)))
(insert "#+end_example\n"))))))
(defun org-babel-update-block-body (new-body)
@ -1534,8 +1579,8 @@ Later elements of PLISTS override the values of previous element.
This takes into account some special considerations for certain
parameters when merging lists."
(let ((results-exclusive-groups
'(("file" "vector" "table" "scalar" "raw" "org"
"html" "latex" "code" "pp")
'(("file" "list" "vector" "table" "scalar" "raw" "org"
"html" "latex" "code" "pp" "wrap")
("replace" "silent" "append" "prepend")
("output" "value")))
(exports-exclusive-groups
@ -1599,7 +1644,7 @@ parameters when merging lists."
(:tangle ;; take the latest -- always overwrite
(setq tangle (or (list (cdr pair)) tangle)))
(:noweb
(setq noweb (e-merge '(("yes" "no")) noweb
(setq noweb (e-merge '(("yes" "no" "tangle")) noweb
(split-string (or (cdr pair) "")))))
(:cache
(setq cache (e-merge '(("yes" "no")) cache
@ -1718,6 +1763,38 @@ block but are passed literally to the \"example-block\"."
"Strip protective commas from bodies of source blocks."
(replace-regexp-in-string "^,#" "#" body))
(defun org-babel-script-escape (str)
"Safely convert tables into elisp lists."
(let (in-single in-double out)
(org-babel-read
(if (and (stringp str) (string-match "^\\[.+\\]$" str))
(org-babel-read
(concat
"'"
(progn
(mapc
(lambda (ch)
(setq
out
(case ch
(91 (if (or in-double in-single) ; [
(cons 91 out)
(cons 40 out)))
(93 (if (or in-double in-single) ; ]
(cons 93 out)
(cons 41 out)))
(44 (if (or in-double in-single) (cons 44 out) out)) ; ,
(39 (if in-double ; '
(cons 39 out)
(setq in-single (not in-single)) (cons 34 out)))
(34 (if in-single ; "
(append (list 34 32) out)
(setq in-double (not in-double)) (cons 34 out)))
(t (cons ch out)))))
(string-to-list str))
(apply #'string (reverse out)))))
str))))
(defun org-babel-read (cell)
"Convert the string value of CELL to a number if appropriate.
Otherwise if cell looks like lisp (meaning it starts with a
@ -1851,7 +1928,7 @@ of `org-babel-temporary-directory'."
(if (file-remote-p default-directory)
(make-temp-file
(concat (file-remote-p default-directory)
(expand-file-name
(expand-file-name
prefix temporary-file-directory)
nil suffix))
(let ((temporary-file-directory
@ -1865,17 +1942,22 @@ of `org-babel-temporary-directory'."
(when (and (boundp 'org-babel-temporary-directory)
(file-exists-p org-babel-temporary-directory))
;; taken from `delete-directory' in files.el
(mapc (lambda (file)
;; This test is equivalent to
;; (and (file-directory-p fn) (not (file-symlink-p fn)))
;; but more efficient
(if (eq t (car (file-attributes file)))
(delete-directory file)
(delete-file file)))
;; We do not want to delete "." and "..".
(directory-files org-babel-temporary-directory 'full
"^\\([^.]\\|\\.\\([^.]\\|\\..\\)\\).*"))
(delete-directory org-babel-temporary-directory)))
(condition-case nil
(progn
(mapc (lambda (file)
;; This test is equivalent to
;; (and (file-directory-p fn) (not (file-symlink-p fn)))
;; but more efficient
(if (eq t (car (file-attributes file)))
(delete-directory file)
(delete-file file)))
;; We do not want to delete "." and "..".
(directory-files org-babel-temporary-directory 'full
"^\\([^.]\\|\\.\\([^.]\\|\\..\\)\\).*"))
(delete-directory org-babel-temporary-directory))
(error
(message "Failed to remove temporary Org-babel directory %s"
org-babel-temporary-directory)))))
(add-hook 'kill-emacs-hook 'org-babel-remove-temporary-directory)

View file

@ -6,7 +6,7 @@
;; Author: Carsten Dominik <carsten at orgmode dot org>
;; Keywords: outlines, hypermedia, calendar, wp
;; Homepage: http://orgmode.org
;; Version: 7.3
;; Version: 7.4
;;
;; This file is part of GNU Emacs.
;;
@ -242,8 +242,12 @@ you can \"misuse\" it to also add other text to the header. However,
(const org-agenda-prefix-format :value " %-12:c%?-12t% s")
(string))
(list :tag "Number of days in agenda"
(const org-agenda-ndays)
(integer :value 1))
(const org-agenda-span)
(choice (const :tag "Day" 'day)
(const :tag "Week" 'week)
(const :tag "Month" 'month)
(const :tag "Year" 'year)
(integer :tag "Custom")))
(list :tag "Fixed starting date"
(const org-agenda-start-day)
(string :value "2007-11-01"))
@ -562,6 +566,33 @@ See also the variable `org-agenda-tags-todo-honor-ignore-options'."
:group 'org-agenda-todo-list
:type 'boolean)
(defcustom org-agenda-todo-ignore-timestamp nil
"Non-nil means don't show entries with a timestamp.
This applies when creating the global todo list.
Valid values are:
past Don't show entries for today or in the past.
future Don't show entries with a timestamp in the future.
The idea behind this is that if it has a future
timestamp, you don't want to think about it until the
date.
all Don't show any entries with a timestamp in the global todo list.
The idea behind this is that by setting a timestamp, you
have already \"taken care\" of this item.
See also `org-agenda-todo-ignore-with-date'.
See also the variable `org-agenda-tags-todo-honor-ignore-options' if you want
to make his option also apply to the tags-todo list."
:group 'org-agenda-skip
:group 'org-agenda-todo-list
:type '(choice
(const :tag "Ignore future timestamp todos" future)
(const :tag "Ignore past or present timestamp todos" past)
(const :tag "Ignore all timestamp todos" all)
(const :tag "Show timestamp todos" nil)))
(defcustom org-agenda-todo-ignore-scheduled nil
"Non-nil means, ignore some scheduled TODO items when making TODO list.
This applies when creating the global todo list.
@ -632,7 +663,8 @@ to make his option also apply to the tags-todo list."
"Non-nil means honor todo-list ...ignore options also in tags-todo search.
The variables
`org-agenda-todo-ignore-with-date',
`org-agenda-todo-ignore-scheduled'
`org-agenda-todo-ignore-timestamp',
`org-agenda-todo-ignore-scheduled',
`org-agenda-todo-ignore-deadlines'
make the global TODO list skip entries that have time stamps of certain
kinds. If this option is set, the same options will also apply for the
@ -860,12 +892,25 @@ option will be ignored."
:group 'org-agenda-windows
:type 'boolean)
(defcustom org-agenda-ndays 7
"Number of days to include in overview display.
(defcustom org-agenda-ndays nil
"Number of days to include in overview display.
Should be 1 or 7.
Obsolete, see `org-agenda-span'."
:group 'org-agenda-daily/weekly
:type 'integer)
(make-obsolete-variable 'org-agenda-ndays 'org-agenda-span "24.1")
(defcustom org-agenda-span 'week
"Number of days to include in overview display.
Can be day, week, month, year, or any number of days.
Custom commands can set this variable in the options section."
:group 'org-agenda-daily/weekly
:type 'integer)
:type '(choice (const :tag "Day" day)
(const :tag "Week" week)
(const :tag "Month" month)
(const :tag "Year" year)
(integer :tag "Custom")))
(defcustom org-agenda-start-on-weekday 1
"Non-nil means start the overview always on the specified weekday.
@ -922,6 +967,35 @@ For example, 9:30am would become 09:30 rather than 9:30."
:group 'org-agenda-daily/weekly
:type 'boolean)
(defcustom org-agenda-timegrid-use-ampm nil
"When set, show AM/PM style timestamps on the timegrid."
:group 'org-agenda
:type 'boolean)
(defun org-agenda-time-of-day-to-ampm (time)
"Convert TIME of a string like '13:45' to an AM/PM style time string."
(let* ((hour-number (string-to-number (substring time 0 -3)))
(minute (substring time -2))
(ampm "am"))
(cond
((equal hour-number 12)
(setq ampm "pm"))
((> hour-number 12)
(setq ampm "pm")
(setq hour-number (- hour-number 12))))
(concat
(if org-agenda-time-leading-zero
(format "%02d" hour-number)
(format "%02s" (number-to-string hour-number)))
":" minute ampm)))
(defun org-agenda-time-of-day-to-ampm-maybe (time)
"Conditionally convert TIME to AM/PM format
based on `org-agenda-timegrid-use-ampm'"
(if org-agenda-timegrid-use-ampm
(org-agenda-time-of-day-to-ampm time)
time))
(defcustom org-agenda-weekend-days '(6 0)
"Which days are weekend?
These days get the special face `org-agenda-date-weekend' in the agenda
@ -1211,11 +1285,11 @@ When nil, such items are sorted as 0 minutes effort."
:group 'org-agenda)
(defcustom org-agenda-prefix-format
'((agenda . " %-12:c%?-12t% s")
'((agenda . " %i %-12:c%?-12t% s")
(timeline . " % s")
(todo . " %-12:c")
(tags . " %-12:c")
(search . " %-12:c"))
(todo . " %i %-12:c")
(tags . " %i %-12:c")
(search . " %i %-12:c"))
"Format specifications for the prefix of items in the agenda views.
An alist with four entries, for the different agenda types. The keys to the
sublists are `agenda', `timeline', `todo', and `tags'. The values
@ -1224,6 +1298,8 @@ This format works similar to a printf format, with the following meaning:
%c the category of the item, \"Diary\" for entries from the diary, or
as given by the CATEGORY keyword or derived from the file name.
%i the icon category of the item, as give in
`org-agenda-category-icon-alist'.
%T the *last* tag of the item. Last because inherited tags come
first in the list.
%t the time-of-day specification if one applies to the entry, in the
@ -1431,6 +1507,52 @@ determines if it is a foreground or a background color."
(string :tag "Color")
(sexp :tag "Face"))))))
(defcustom org-agenda-day-face-function nil
"Function called to determine what face should be used to display a day.
The only argument passed to that function is the day. It should
returns a face, or nil if does not want to specify a face and let
the normal rules apply."
:group 'org-agenda-line-format
:type 'function)
(defcustom org-agenda-category-icon-alist nil
"Alist of category icon to be displayed in agenda views.
Each entry should have the following format:
(CATEGORY-REGEXP FILE-OR-DATA TYPE DATA-P PROPS)
Where CATEGORY-REGEXP is a regexp matching the categories where
the icon should be displayed.
FILE-OR-DATA either a file path or a string containing image data.
The other fields can be ommited safely if not needed:
TYPE indicates the image type.
DATA-P is a boolean indicating whether the FILE-OR-DATA string is
image data.
PROPS are additional image attributes to assign to the image,
like, e.g. `:ascent center'.
(\"Org\" \"/path/to/icon.png\" nil nil :ascent center)
If you want to set the display properties yourself, just put a
list as second element:
(CATEGORY-REGEXP (MY PROPERTY LIST))
For example, to display a 16px horizontal space for Emacs
category, you can use:
(\"Emacs\" '(space . (:width (16))))"
:group 'org-agenda-line-format
:type '(alist :key-type (string :tag "Regexp matching category")
:value-type (choice (list :tag "Icon"
(string :tag "File or data")
(symbol :tag "Type")
(boolean :tag "Data?")
(repeat :tag "Extra image properties" :inline t symbol))
(list :tag "Display properties" sexp))))
(defgroup org-agenda-column-view nil
"Options concerning column view in the agenda."
:tag "Org Agenda Column View"
@ -1720,19 +1842,19 @@ The following commands are available:
("View"
["Day View" org-agenda-day-view
:active (org-agenda-check-type nil 'agenda)
:style radio :selected (equal org-agenda-ndays 1)
:style radio :selected (eq org-agenda-current-span 'day)
:keys "v d (or just d)"]
["Week View" org-agenda-week-view
:active (org-agenda-check-type nil 'agenda)
:style radio :selected (equal org-agenda-ndays 7)
:style radio :selected (eq org-agenda-current-span 'week)
:keys "v w (or just w)"]
["Month View" org-agenda-month-view
:active (org-agenda-check-type nil 'agenda)
:style radio :selected (member org-agenda-ndays '(28 29 30 31))
:style radio :selected (eq org-agenda-current-span 'month)
:keys "v m"]
["Year View" org-agenda-year-view
:active (org-agenda-check-type nil 'agenda)
:style radio :selected (member org-agenda-ndays '(365 366))
:style radio :selected (eq org-agenda-current-span 'year)
:keys "v y"]
"--"
["Include Diary" org-agenda-toggle-diary
@ -2778,6 +2900,7 @@ removed from the entry content. Currently only `planning' is allowed here."
(defvar org-agenda-columns-active nil)
(defvar org-agenda-name nil)
(defvar org-agenda-filter nil)
(defvar org-agenda-filter-while-redo nil)
(defvar org-agenda-filter-preset nil
"A preset of the tags filter used for secondary agenda filtering.
This must be a list of strings, each string must be a single tag preceded
@ -3065,6 +3188,16 @@ no longer in use."
(progn (delete-overlay o) t)))
(overlays-in (point-min) (point-max)))))
(defun org-agenda-get-day-face (date)
"Return the face DATE should be displayed with."
(or (and (functionp org-agenda-day-face-function)
(funcall org-agenda-day-face-function date))
(cond ((org-agenda-todayp date)
'org-agenda-date-today)
((member (calendar-day-of-week date) org-agenda-weekend-days)
'org-agenda-date-weekend)
(t 'org-agenda-date))))
;;; Agenda timeline
(defvar org-agenda-only-exact-dates nil) ; dynamically scoped
@ -3092,10 +3225,10 @@ dates."
org-timeline-show-empty-dates))
(org-deadline-warning-days 0)
(org-agenda-only-exact-dates t)
(today (time-to-days (current-time)))
(today (org-today))
(past t)
args
s e rtn d emptyp wd)
s e rtn d emptyp)
(setq org-agenda-redo-command
(list 'progn
(list 'org-switch-to-buffer-other-window (current-buffer))
@ -3129,8 +3262,7 @@ dates."
(progn
(setq past nil)
(insert (make-string 79 ?-) "\n")))
(setq date (calendar-gregorian-from-absolute d)
wd (calendar-day-of-week date))
(setq date (calendar-gregorian-from-absolute d))
(setq s (point))
(setq rtn (and (not emptyp)
(apply 'org-agenda-get-day-entries entry
@ -3144,9 +3276,7 @@ dates."
(funcall org-agenda-format-date date))
"\n")
(put-text-property s (1- (point)) 'face
(if (member wd org-agenda-weekend-days)
'org-agenda-date-weekend
'org-agenda-date))
(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)
@ -3172,7 +3302,7 @@ When EMPTY is non-nil, also include days without any entries."
(if inactive org-ts-regexp-both org-ts-regexp)))
dates dates1 date day day1 day2 ts1 ts2)
(if force-today
(setq dates (list (time-to-days (current-time)))))
(setq dates (list (org-today))))
(save-excursion
(goto-char beg)
(while (re-search-forward re end t)
@ -3210,7 +3340,8 @@ When EMPTY is non-nil, also include days without any entries."
(defvar org-agenda-last-arguments nil
"The arguments of the previous call to `org-agenda'.")
(defvar org-starting-day nil) ; local variable in the agenda buffer
(defvar org-agenda-span nil) ; local variable in the agenda buffer
(defvar org-agenda-current-span nil
"The current span used in the agenda view.") ; local variable in the agenda buffer
(defvar org-include-all-loc nil) ; local variable
(defvar org-agenda-entry-types '(:deadline :scheduled :timestamp :sexp)
@ -3247,7 +3378,7 @@ somewhat less efficient) way of determining what is included in
the daily/weekly agenda, see `org-agenda-skip-function'.")
;;;###autoload
(defun org-agenda-list (&optional include-all start-day ndays)
(defun org-agenda-list (&optional include-all start-day span)
"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.
@ -3258,37 +3389,36 @@ This feature is considered obsolete, please use the TODO list or a block
agenda instead.
With a numeric prefix argument in an interactive call, the agenda will
span INCLUDE-ALL days. Lisp programs should instead specify NDAYS to change
the number of days. NDAYS defaults to `org-agenda-ndays'.
span INCLUDE-ALL 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'."
(interactive "P")
(if (and (integerp include-all) (> include-all 0))
(setq ndays include-all include-all nil))
(setq ndays (or ndays org-agenda-ndays)
start-day (or start-day org-agenda-start-day))
(setq span include-all include-all nil))
(setq start-day (or start-day org-agenda-start-day))
(if org-agenda-overriding-arguments
(setq include-all (car org-agenda-overriding-arguments)
start-day (nth 1 org-agenda-overriding-arguments)
ndays (nth 2 org-agenda-overriding-arguments)))
span (nth 2 org-agenda-overriding-arguments)))
(if (stringp start-day)
;; Convert to an absolute day number
(setq start-day (time-to-days (org-read-date nil t start-day))))
(setq org-agenda-last-arguments (list include-all start-day ndays))
(setq org-agenda-last-arguments (list include-all start-day span))
(org-compile-prefix-format 'agenda)
(org-set-sorting-strategy 'agenda)
(let* ((org-agenda-start-on-weekday
(if (or (equal ndays 7) (and (null ndays) (equal 7 org-agenda-ndays)))
org-agenda-start-on-weekday nil))
(let* ((span (org-agenda-ndays-to-span (or span org-agenda-ndays org-agenda-span)))
(today (org-today))
(sd (or start-day today))
(ndays (org-agenda-span-to-ndays span sd))
(org-agenda-start-on-weekday
(if (eq ndays 7)
org-agenda-start-on-weekday))
(thefiles (org-agenda-files nil 'ifmode))
(files thefiles)
(today (time-to-days
(time-subtract (current-time)
(list 0 (* 3600 org-extend-today-until) 0))))
(sd (or start-day today))
(start (if (or (null org-agenda-start-on-weekday)
(< org-agenda-ndays 7))
(< ndays 7))
sd
(let* ((nt (calendar-day-of-week
(calendar-gregorian-from-absolute sd)))
@ -3298,24 +3428,19 @@ given in `org-agenda-start-on-weekday'."
(day-numbers (list start))
(day-cnt 0)
(inhibit-redisplay (not debug-on-error))
s e rtn rtnall file date d start-pos end-pos todayp nd wd
clocktable-start clocktable-end)
s e rtn rtnall file date d start-pos end-pos todayp
clocktable-start clocktable-end filter)
(setq org-agenda-redo-command
(list 'org-agenda-list (list 'quote include-all) start-day ndays))
;; Make the list of days
(setq ndays (or ndays org-agenda-ndays)
nd ndays)
(while (> ndays 1)
(push (1+ (car day-numbers)) day-numbers)
(setq ndays (1- ndays)))
(list 'org-agenda-list (list 'quote include-all) start-day (list 'quote span)))
(dotimes (n (1- ndays))
(push (1+ (car day-numbers)) day-numbers))
(setq day-numbers (nreverse day-numbers))
(setq clocktable-start (car day-numbers)
clocktable-end (1+ (or (org-last day-numbers) 0)))
(org-prepare-agenda "Day/Week")
(org-set-local 'org-starting-day (car day-numbers))
(org-set-local 'org-include-all-loc include-all)
(org-set-local 'org-agenda-span
(org-agenda-ndays-to-span nd))
(org-set-local 'org-agenda-current-span (org-agenda-ndays-to-span span))
(when (and (or include-all org-agenda-include-all-todo)
(member today day-numbers))
(setq files thefiles
@ -3343,7 +3468,7 @@ given in `org-agenda-start-on-weekday'."
(if org-agenda-overriding-header
(insert (org-add-props (copy-sequence org-agenda-overriding-header)
nil 'face 'org-agenda-structure) "\n")
(insert (capitalize (symbol-name (org-agenda-ndays-to-span nd)))
(insert (org-agenda-span-name span)
"-agenda"
(if (< (- d2 d1) 350)
(if (= w1 w2)
@ -3356,7 +3481,6 @@ given in `org-agenda-start-on-weekday'."
(org-agenda-mark-header-line s))
(while (setq d (pop day-numbers))
(setq date (calendar-gregorian-from-absolute d)
wd (calendar-day-of-week date)
s (point))
(if (or (setq todayp (= d today))
(and (not start-pos) (= d sd)))
@ -3400,19 +3524,16 @@ given in `org-agenda-start-on-weekday'."
(funcall org-agenda-format-date date))
"\n")
(put-text-property s (1- (point)) 'face
(if (member wd org-agenda-weekend-days)
'org-agenda-date-weekend
'org-agenda-date))
(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)
(put-text-property s (1- (point)) 'org-day-cnt day-cnt)
(when todayp
(put-text-property s (1- (point)) 'org-today t)
(put-text-property s (1- (point)) 'face 'org-agenda-date-today))
(put-text-property s (1- (point)) 'org-today t))
(if rtnall (insert
(org-finalize-agenda-entries
(org-agenda-add-time-grid-maybe
rtnall nd todayp))
rtnall ndays todayp))
"\n"))
(put-text-property s (1- (point)) 'day d)
(put-text-property s (1- (point)) 'org-day-cnt day-cnt))))
@ -3425,6 +3546,15 @@ given in `org-agenda-start-on-weekday'."
(setq p (plist-put p :tstart clocktable-start))
(setq p (plist-put p :tend clocktable-end))
(setq p (plist-put p :scope 'agenda))
(when (and (eq org-agenda-clockreport-mode 'with-filter)
(setq filter (or org-agenda-filter-while-redo
(get 'org-agenda-filter :preset-filter))))
(setq p (plist-put p :tags (mapconcat (lambda (x)
(if (string-match "[<>=]" x)
""
x))
filter ""))))
(message "%s" (plist-get p :tags)) (sit-for 2)
(setq tbl (apply 'org-get-clocktable p))
(insert tbl)))
(goto-char (point-min))
@ -3444,7 +3574,31 @@ given in `org-agenda-start-on-weekday'."
(message "")))
(defun org-agenda-ndays-to-span (n)
(cond ((< n 7) 'day) ((= n 7) 'week) ((< n 32) 'month) (t 'year)))
"Return a span symbol for a span of N days, or N if none matches."
(cond ((symbolp n) n)
((= n 1) 'day)
((= n 7) 'week)
(t n)))
(defun org-agenda-span-to-ndays (span start-day)
"Return ndays from SPAN starting at START-DAY."
(cond ((numberp span) span)
((eq span 'day) 1)
((eq span 'week) 7)
((eq span 'month)
(let ((date (calendar-gregorian-from-absolute start-day)))
(calendar-last-day-of-month (car date) (caddr date))))
((eq span 'year)
(let ((date (calendar-gregorian-from-absolute start-day)))
(if (calendar-leap-year-p (caddr date)) 366 365)))))
(defun org-agenda-span-name (span)
"Return a SPAN name."
(if (null span)
""
(if (symbolp span)
(capitalize (symbol-name span))
(format "%d days" span))))
;;; Agenda word search
@ -3723,7 +3877,7 @@ for a keyword. A numeric prefix directly selects the Nth keyword in
(org-set-sorting-strategy 'todo)
(org-prepare-agenda "TODO")
(if (and (stringp arg) (not (string-match "\\S-" arg))) (setq arg nil))
(let* ((today (time-to-days (current-time)))
(let* ((today (org-today))
(date (calendar-gregorian-from-absolute today))
(kwds org-todo-keywords-for-agenda)
(completion-ignore-case t)
@ -4347,7 +4501,8 @@ the documentation of `org-diary'."
"Do we have a reason to ignore this TODO entry because it has a time stamp?"
(when (or org-agenda-todo-ignore-with-date
org-agenda-todo-ignore-scheduled
org-agenda-todo-ignore-deadlines)
org-agenda-todo-ignore-deadlines
org-agenda-todo-ignore-timestamp)
(setq end (or end (save-excursion (outline-next-heading) (point))))
(save-excursion
(or (and org-agenda-todo-ignore-with-date
@ -4370,7 +4525,29 @@ the documentation of `org-diary'."
(> (org-days-to-time (match-string 1)) 0))
((eq org-agenda-todo-ignore-deadlines 'past)
(<= (org-days-to-time (match-string 1)) 0))
(t (org-deadline-close (match-string 1)))))))))
(t (org-deadline-close (match-string 1)))))
(and org-agenda-todo-ignore-timestamp
(let ((buffer (current-buffer))
(regexp
(concat
org-scheduled-time-regexp "\\|" org-deadline-time-regexp))
(start (point)))
;; Copy current buffer into a temporary one
(with-temp-buffer
(insert-buffer-substring buffer start end)
(goto-char (point-min))
;; Delete SCHEDULED and DEADLINE items
(while (re-search-forward regexp end t)
(delete-region (match-beginning 0) (match-end 0)))
(goto-char (point-min))
;; No search for timestamp left
(when (re-search-forward org-ts-regexp nil t)
(cond
((eq org-agenda-todo-ignore-timestamp 'future)
(> (org-days-to-time (match-string 1)) 0))
((eq org-agenda-todo-ignore-timestamp 'past)
(<= (org-days-to-time (match-string 1)) 0))
(t))))))))))
(defconst org-agenda-no-heading-message
"No heading for this item in buffer or region.")
@ -4924,6 +5101,14 @@ The flag is set if the currently compiled format contains a `%e'.")
(defvar org-prefix-category-max-length nil
"Used by `org-compile-prefix-format' to remember the category field width.")
(defun org-agenda-get-category-icon (category)
"Return an image for CATEGORY according to `org-agenda-category-icon-alist'."
(dolist (entry org-agenda-category-icon-alist)
(when (org-string-match-p (car entry) category)
(if (listp (cadr entry))
(return (cadr entry))
(return (apply 'create-image (cdr entry)))))))
(defun org-format-agenda-item (extra txt &optional category tags dotime
noprefix remove-re habitp)
"Format TXT to be inserted into the agenda buffer.
@ -4948,11 +5133,17 @@ Any match of REMOVE-RE will be removed from TXT."
org-agenda-show-inherited-tags
org-agenda-hide-tags-regexp))
(let* ((category (or category
org-category
(if (stringp org-category)
org-category
(and org-category (symbol-name org-category)))
(if buffer-file-name
(file-name-sans-extension
(file-name-nondirectory buffer-file-name))
"")))
(category-icon (org-agenda-get-category-icon category))
(category-icon (if category-icon
(propertize " " 'display category-icon)
""))
;; time, tag, effort are needed for the eval of the prefix format
(tag (if tags (nth (1- (length tags)) tags) ""))
time effort neffort
@ -5038,8 +5229,15 @@ Any match of REMOVE-RE will be removed from TXT."
(if noprefix
(setq rtn txt)
;; Prepare the variables needed in the eval of the compiled format
(setq time (cond (s2 (concat s1 "-" s2))
(s1 (concat s1 "......"))
(setq time (cond (s2 (concat
(org-agenda-time-of-day-to-ampm-maybe s1)
"-" (org-agenda-time-of-day-to-ampm-maybe s2)
(if org-agenda-timegrid-use-ampm " ")))
(s1 (concat
(org-agenda-time-of-day-to-ampm-maybe s1)
(if org-agenda-timegrid-use-ampm
"........ "
"......")))
(t ""))
extra (or (and (not habitp) extra) "")
category (if (symbolp category) (symbol-name category) category)
@ -5163,11 +5361,11 @@ The resulting form is returned and stored in the variable
(t " %-12:c%?-12t% s")))
(start 0)
varform vars var e c f opt)
(while (string-match "%\\(\\?\\)?\\([-+]?[0-9.]*\\)\\([ .;,:!?=|/<>]?\\)\\([ctse]\\)"
(while (string-match "%\\(\\?\\)?\\([-+]?[0-9.]*\\)\\([ .;,:!?=|/<>]?\\)\\([ctsei]\\)"
s start)
(setq var (cdr (assoc (match-string 4 s)
'(("c" . category) ("t" . time) ("s" . extra)
("T" . tag) ("e" . effort))))
("i" . category-icon) ("T" . tag) ("e" . effort))))
c (or (match-string 3 s) "")
opt (match-beginning 1)
start (1+ (match-beginning 0)))
@ -5567,6 +5765,7 @@ When this is the global TODO list, a prefix argument will be interpreted."
(let* ((org-agenda-keep-modes t)
(filter org-agenda-filter)
(preset (get 'org-agenda-filter :preset-filter))
(org-agenda-filter-while-redo (or filter preset))
(cols org-agenda-columns-active)
(line (org-current-line))
(window-line (- line (org-current-line (window-start))))
@ -5839,13 +6038,10 @@ Negative selection means regexp must not match for selection of an entry."
(cond
(tdpos (goto-char tdpos))
((eq org-agenda-type 'agenda)
(let* ((sd (time-to-days
(time-subtract (current-time)
(list 0 (* 3600 org-extend-today-until) 0))))
(comp (org-agenda-compute-time-span sd org-agenda-span))
(let* ((sd (org-agenda-compute-starting-span
(org-today) (or org-agenda-ndays org-agenda-span)))
(org-agenda-overriding-arguments org-agenda-last-arguments))
(setf (nth 1 org-agenda-overriding-arguments) (car comp))
(setf (nth 2 org-agenda-overriding-arguments) (cdr comp))
(setf (nth 1 org-agenda-overriding-arguments) sd)
(org-agenda-redo)
(org-agenda-find-same-or-today-or-agenda)))
(t (error "Cannot find today")))))
@ -5862,28 +6058,28 @@ Negative selection means regexp must not match for selection of an entry."
With prefix ARG, go forward that many times the current span."
(interactive "p")
(org-agenda-check-type t 'agenda)
(let* ((span org-agenda-span)
(let* ((span org-agenda-current-span)
(sd org-starting-day)
(greg (calendar-gregorian-from-absolute sd))
(cnt (org-get-at-bol 'org-day-cnt))
greg2 nd)
greg2)
(cond
((eq span 'day)
(setq sd (+ arg sd) nd 1))
(setq sd (+ arg sd)))
((eq span 'week)
(setq sd (+ (* 7 arg) sd) nd 7))
(setq sd (+ (* 7 arg) sd)))
((eq span 'month)
(setq greg2 (list (+ (car greg) arg) (nth 1 greg) (nth 2 greg))
sd (calendar-absolute-from-gregorian greg2))
(setcar greg2 (1+ (car greg2)))
(setq nd (- (calendar-absolute-from-gregorian greg2) sd)))
(setcar greg2 (1+ (car greg2))))
((eq span 'year)
(setq greg2 (list (car greg) (nth 1 greg) (+ arg (nth 2 greg)))
sd (calendar-absolute-from-gregorian greg2))
(setcar (nthcdr 2 greg2) (1+ (nth 2 greg2)))
(setq nd (- (calendar-absolute-from-gregorian greg2) sd))))
(setcar (nthcdr 2 greg2) (1+ (nth 2 greg2))))
(t
(setq sd (+ (* span arg) sd))))
(let ((org-agenda-overriding-arguments
(list (car org-agenda-last-arguments) sd nd t)))
(list (car org-agenda-last-arguments) sd span t)))
(org-agenda-redo)
(org-agenda-find-same-or-today-or-agenda cnt))))
@ -5926,7 +6122,6 @@ With prefix ARG, go backward that many times the current span."
"Switch to daily view for agenda.
With argument DAY-OF-YEAR, switch to that day of the year."
(interactive "P")
(setq org-agenda-ndays 1)
(org-agenda-change-time-span 'day day-of-year))
(defun org-agenda-week-view (&optional iso-week)
"Switch to daily view for agenda.
@ -5936,7 +6131,6 @@ week. Any digits before this encode a year. So 200712 means
week 12 of year 2007. Years in the range 1938-2037 can also be
written as 2-digit years."
(interactive "P")
(setq org-agenda-ndays 7)
(org-agenda-change-time-span 'week iso-week))
(defun org-agenda-month-view (&optional month)
"Switch to monthly view for agenda.
@ -5961,70 +6155,61 @@ written as 2-digit years."
"Change the agenda view to SPAN.
SPAN may be `day', `week', `month', `year'."
(org-agenda-check-type t 'agenda)
(if (and (not n) (equal org-agenda-span span))
(if (and (not n) (equal org-agenda-current-span span))
(error "Viewing span is already \"%s\"" span))
(let* ((sd (or (org-get-at-bol 'day)
org-starting-day))
(computed (org-agenda-compute-time-span sd span n))
(sd (org-agenda-compute-starting-span sd span n))
(org-agenda-overriding-arguments
(list (car org-agenda-last-arguments)
(car computed) (cdr computed) t)))
(list (car org-agenda-last-arguments) sd span t)))
(org-agenda-redo)
(org-agenda-find-same-or-today-or-agenda))
(org-agenda-set-mode-name)
(message "Switched to %s view" span))
(defun org-agenda-compute-time-span (sd span &optional n)
"Compute starting date and number of days for agenda.
(defun org-agenda-compute-starting-span (sd span &optional n)
"Compute starting date for agenda.
SPAN may be `day', `week', `month', `year'. The return value
is a cons cell with the starting date and the number of days,
so that the date SD will be in that range."
(let* ((greg (calendar-gregorian-from-absolute sd))
(dg (nth 1 greg))
(mg (car greg))
(yg (nth 2 greg))
nd w1 y1 m1 thisweek)
(yg (nth 2 greg)))
(cond
((eq span 'day)
(when n
(setq sd (+ (calendar-absolute-from-gregorian
(list mg 1 yg))
n -1)))
(setq nd 1))
n -1))))
((eq span 'week)
(let* ((nt (calendar-day-of-week
(calendar-gregorian-from-absolute sd)))
(d (if org-agenda-start-on-weekday
(- nt org-agenda-start-on-weekday)
0)))
0))
y1)
(setq sd (- sd (+ (if (< d 0) 7 0) d)))
(when n
(require 'cal-iso)
(setq thisweek (car (calendar-iso-from-absolute sd)))
(when (> n 99)
(setq y1 (org-small-year-to-year (/ n 100))
n (mod n 100)))
(setq sd
(calendar-absolute-from-iso
(list n 1
(or y1 (nth 2 (calendar-iso-from-absolute sd)))))))
(setq nd 7)))
(or y1 (nth 2 (calendar-iso-from-absolute sd)))))))))
((eq span 'month)
(when (and n (> n 99))
(setq y1 (org-small-year-to-year (/ n 100))
n (mod n 100)))
(setq sd (calendar-absolute-from-gregorian
(list (or n mg) 1 (or y1 yg)))
nd (- (calendar-absolute-from-gregorian
(list (1+ (or n mg)) 1 (or y1 yg)))
sd)))
(let (y1)
(when (and n (> n 99))
(setq y1 (org-small-year-to-year (/ n 100))
n (mod n 100)))
(setq sd (calendar-absolute-from-gregorian
(list (or n mg) 1 (or y1 yg))))))
((eq span 'year)
(setq sd (calendar-absolute-from-gregorian
(list 1 1 (or n yg)))
nd (- (calendar-absolute-from-gregorian
(list 1 1 (1+ (or n yg))))
sd))))
(cons sd nd)))
(list 1 1 (or n yg))))))
sd))
(defun org-agenda-next-date-line (&optional arg)
"Jump to the next line indicating a date in agenda buffer."
@ -6094,11 +6279,15 @@ so that the date SD will be in that range."
(if org-agenda-entry-text-mode "on" "off")
(if (integerp arg) arg org-agenda-entry-text-maxlines)))
(defun org-agenda-clockreport-mode ()
"Toggle clocktable mode in an agenda buffer."
(interactive)
(defun org-agenda-clockreport-mode (&optional with-filter)
"Toggle clocktable mode in an agenda buffer.
With prefix arg WITH-FILTER, make the clocktable respect the current
agenda filter."
(interactive "P")
(org-agenda-check-type t 'agenda)
(setq org-agenda-clockreport-mode (not org-agenda-clockreport-mode))
(if with-filter
(setq org-agenda-clockreport-mode 'with-filter)
(setq org-agenda-clockreport-mode (not org-agenda-clockreport-mode)))
(org-agenda-set-mode-name)
(org-agenda-redo)
(message "Clocktable mode is %s"
@ -6151,7 +6340,7 @@ When called with a prefix argument, include all archive files as well."
(if org-agenda-include-diary "on" "off")))
(defun org-agenda-toggle-deadlines ()
"Toggle diary inclusion in an agenda buffer."
"Toggle inclusion of entries with a deadline in an agenda buffer."
(interactive)
(org-agenda-check-type t 'agenda)
(setq org-agenda-include-deadlines (not org-agenda-include-deadlines))
@ -6173,33 +6362,36 @@ When called with a prefix argument, include all archive files as well."
(defun org-agenda-set-mode-name ()
"Set the mode name to indicate all the small mode settings."
(setq mode-name
(concat "Org-Agenda"
(if (get 'org-agenda-files 'org-restrict) " []" "")
(if (equal org-agenda-ndays 1) " Day" "")
(if (equal org-agenda-ndays 7) " Week" "")
(if org-agenda-follow-mode " Follow" "")
(if org-agenda-entry-text-mode " ETxt" "")
(if org-agenda-include-diary " Diary" "")
(if org-agenda-include-deadlines " Ddl" "")
(if org-agenda-use-time-grid " Grid" "")
(if (and (boundp 'org-habit-show-habits)
org-habit-show-habits) " Habit" "")
(if (consp org-agenda-show-log) " LogAll"
(if org-agenda-show-log " Log" ""))
(if (or org-agenda-filter (get 'org-agenda-filter
:preset-filter))
(concat " {" (mapconcat
'identity
(append (get 'org-agenda-filter
:preset-filter)
org-agenda-filter) "") "}")
"")
(if org-agenda-archives-mode
(if (eq org-agenda-archives-mode t)
" Archives"
(format " :%s:" org-archive-tag))
"")
(if org-agenda-clockreport-mode " Clock" "")))
(list "Org-Agenda"
(if (get 'org-agenda-files 'org-restrict) " []" "")
" "
'(:eval (org-agenda-span-name org-agenda-current-span))
(if org-agenda-follow-mode " Follow" "")
(if org-agenda-entry-text-mode " ETxt" "")
(if org-agenda-include-diary " Diary" "")
(if org-agenda-include-deadlines " Ddl" "")
(if org-agenda-use-time-grid " Grid" "")
(if (and (boundp 'org-habit-show-habits)
org-habit-show-habits) " Habit" "")
(if (consp org-agenda-show-log) " LogAll"
(if org-agenda-show-log " Log" ""))
(if (or org-agenda-filter (get 'org-agenda-filter
:preset-filter))
(concat " {" (mapconcat
'identity
(append (get 'org-agenda-filter
:preset-filter)
org-agenda-filter) "") "}")
"")
(if org-agenda-archives-mode
(if (eq org-agenda-archives-mode t)
" Archives"
(format " :%s:" org-archive-tag))
"")
(if org-agenda-clockreport-mode
(if (eq org-agenda-clockreport-mode 'with-filter)
" Clock{}" " Clock")
"")))
(force-mode-line-update))
(defun org-agenda-post-command-hook ()
@ -6216,7 +6408,6 @@ When called with a prefix argument, include all archive files as well."
(defun org-agenda-previous-line ()
"Move cursor to the previous line, and show if follow-mode is active."
(interactive)
(call-interactively 'previous-line)
(org-agenda-do-context-action))
@ -6642,8 +6833,7 @@ the same tree node, and the headline of the tree node in the Org-mode file."
(buffer (marker-buffer marker))
(pos (marker-position marker))
(hdmarker (org-get-at-bol 'org-hd-marker))
(todayp (equal (org-get-at-bol 'day)
(time-to-days (current-time))))
(todayp (org-agenda-todayp (org-get-at-bol 'day)))
(inhibit-read-only t)
org-agenda-headline-snapshot-before-repeat newhead just-one)
(org-with-remote-undo buffer
@ -7551,25 +7741,26 @@ This is a command that has to be installed in `calendar-mode-map'."
(eq (get-char-property (point-at-bol) 'type)
'org-marked-entry-overlay))
(defun org-agenda-bulk-mark ()
(defun org-agenda-bulk-mark (&optional arg)
"Mark the entry at point for future bulk action."
(interactive)
(org-agenda-check-no-diary)
(let* ((m (org-get-at-bol 'org-hd-marker))
ov)
(unless (org-agenda-bulk-marked-p)
(unless m (error "Nothing to mark at point"))
(push m org-agenda-bulk-marked-entries)
(setq ov (make-overlay (point-at-bol) (+ 2 (point-at-bol))))
(org-overlay-display ov "> "
(org-get-todo-face "TODO")
'evaporate)
(overlay-put ov 'type 'org-marked-entry-overlay))
(beginning-of-line 2)
(while (and (get-char-property (point) 'invisible) (not (eobp)))
(beginning-of-line 2))
(message "%d entries marked for bulk action"
(length org-agenda-bulk-marked-entries))))
(interactive "p")
(dotimes (i (max arg 1))
(unless (org-get-at-bol 'org-agenda-diary-link)
(let* ((m (org-get-at-bol 'org-hd-marker))
ov)
(unless (org-agenda-bulk-marked-p)
(unless m (error "Nothing to mark at point"))
(push m org-agenda-bulk-marked-entries)
(setq ov (make-overlay (point-at-bol) (+ 2 (point-at-bol))))
(org-overlay-display ov "> "
(org-get-todo-face "TODO")
'evaporate)
(overlay-put ov 'type 'org-marked-entry-overlay))
(beginning-of-line 2)
(while (and (get-char-property (point) 'invisible) (not (eobp)))
(beginning-of-line 2))
(message "%d entries marked for bulk action"
(length org-agenda-bulk-marked-entries))))))
(defun org-agenda-bulk-unmark ()
"Unmark the entry at point for future bulk action."
@ -7619,7 +7810,7 @@ The prefix arg is passed through to the command if possible."
(interactive "P")
(unless org-agenda-bulk-marked-entries
(error "No entries are marked"))
(message "Bulk: [r]efile [$]archive [A]rch->sib [t]odo [+/-]tag [s]chedule [d]eadline")
(message "Bulk: [r]efile [$]arch [A]rch->sib [t]odo [+/-]tag [s]chd [S]catter [d]eadline")
(let* ((action (read-char-exclusive))
(org-log-refile (if org-log-refile 'time nil))
(entries (reverse org-agenda-bulk-marked-entries))
@ -7681,6 +7872,29 @@ The prefix arg is passed through to the command if possible."
(if bound
(fset 'read-string old)
(fmakunbound 'read-string)))))))
((eq action '?S)
(let ((days (read-number
(format "Scatter tasks across how many %sdays: "
(if arg "week" "")) 7)))
(setq cmd
`(let ((distance (random ,(1+ days))))
(if arg
(let ((dist distance)
(day-of-week
(calendar-day-of-week
(calendar-gregorian-from-absolute (org-today)))))
(dotimes (i (1+ dist))
(while (member day-of-week org-agenda-weekend-days)
(incf distance)
(incf day-of-week)
(if (= day-of-week 7)
(setq day-of-week 0)))
(incf day-of-week)
(if (= day-of-week 7)
(setq day-of-week 0)))))
(org-agenda-date-later distance)))))
(t (error "Invalid bulk action")))
;; Sort the markers, to make sure that parents are handled before children
@ -7792,6 +8006,9 @@ belonging to the \"Work\" category."
(let* ((cnt 0) ; count added events
(org-agenda-new-buffers nil)
(org-deadline-warning-days 0)
;; Do not use `org-today' here because appt only takes
;; time and without date as argument, so it may pass wrong
;; information otherwise
(today (org-date-to-gregorian
(time-to-days (current-time))))
(org-agenda-restrict nil)
@ -7834,14 +8051,10 @@ belonging to the \"Work\" category."
(defun org-agenda-todayp (date)
"Does DATE mean today, when considering `org-extend-today-until'?"
(let (today h)
(if (listp date) (setq date (calendar-absolute-from-gregorian date)))
(setq today (calendar-absolute-from-gregorian (calendar-current-date)))
(setq h (nth 2 (decode-time (current-time))))
(or (and (>= h org-extend-today-until)
(= date today))
(and (< h org-extend-today-until)
(= date (1- today))))))
(let ((today (org-today))
(date (if (and date (listp date)) (calendar-absolute-from-gregorian date)
date)))
(eq date today)))
(provide 'org-agenda)

View file

@ -6,7 +6,7 @@
;; Author: Carsten Dominik <carsten at orgmode dot org>
;; Keywords: outlines, hypermedia, calendar, wp
;; Homepage: http://orgmode.org
;; Version: 7.3
;; Version: 7.4
;;
;; This file is part of GNU Emacs.
;;

View file

@ -6,7 +6,7 @@
;; Author: Carsten Dominik <carsten at orgmode dot org>
;; Keywords: outlines, hypermedia, calendar, wp
;; Homepage: http://orgmode.org
;; Version: 7.3
;; Version: 7.4
;;
;; This file is part of GNU Emacs.
;;

View file

@ -4,7 +4,7 @@
;; Author: John Wiegley <johnw@newartisans.com>
;; Keywords: org data task
;; Version: 7.3
;; Version: 7.4
;; This file is part of GNU Emacs.
;;

View file

@ -7,7 +7,7 @@
;; Thomas Baumann <thomas dot baumann at ch dot tum dot de>
;; Keywords: outlines, hypermedia, calendar, wp
;; Homepage: http://orgmode.org
;; Version: 7.3
;; Version: 7.4
;;
;; This file is part of GNU Emacs.
;;

View file

@ -2,7 +2,7 @@
;;
;; Copyright (C) 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
;;
;; Version: 7.3
;; Version: 7.4
;; Author: Carsten Dominik <carsten.dominik AT gmail DOT com>
;; Maintainer: Carsten Dominik <carsten.dominik AT gmail DOT com>
;; Keywords: org, wp, tex
@ -246,14 +246,14 @@ in org-export-latex-classes."
(if (and (string-match "\\`[0-9.]+\\'" tmp)
(or (= (string-to-number tmp) 1.0)
(= (string-to-number tmp) 0.0)))
;; column width 1 means cloase columns, go back to full width
;; column width 1 means close columns, go back to full width
(org-beamer-close-columns-maybe)
(when (setq ass (assoc "BEAMER_envargs" props))
(let (case-fold-search)
(when (string-match "C\\(\\[[^][]*\\]\\)" (cdr ass))
(while (string-match "C\\(\\[[^][]*\\]\\|<[^<>]*>\\)" (cdr ass))
(setq columns-option (match-string 1 (cdr ass)))
(setcdr ass (replace-match "" t t (cdr ass))))
(when (string-match "c\\(\\[[^][]*\\]\\)" (cdr ass))
(while (string-match "c\\(\\[[^][]*\\]\\|<[^<>]*>\\)" (cdr ass))
(setq column-option (match-string 1 (cdr ass)))
(setcdr ass (replace-match "" t t (cdr ass))))))
(org-beamer-open-columns-maybe columns-option)

View file

@ -5,7 +5,7 @@
;; Author: Bastien Guerry <bzg at altern dot org>
;; Carsten Dominik <carsten dot dominik at gmail dot com>
;; Keywords: org, wp, remember
;; Version: 7.3
;; Version: 7.4
;;
;; This file is part of GNU Emacs.
;;

View file

@ -5,7 +5,7 @@
;; Author: Carsten Dominik <carsten at orgmode dot org>
;; Keywords: outlines, hypermedia, calendar, wp
;; Homepage: http://orgmode.org
;; Version: 7.3
;; Version: 7.4
;;
;; This file is part of GNU Emacs.
;;
@ -133,7 +133,10 @@ target Specification of where the captured item should be placed.
File to the entry matching regexp
(file+datetree \"path/to/file\")
Will create a heading in a date tree
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, promts for date
(file+function \"path/to/file\" function-finding-location)
A function to find the right location in the file
@ -280,6 +283,9 @@ calendar | %:type %:date"
(list :tag "File & Date tree"
(const :format "" file+datetree)
(file :tag " File"))
(list :tag "File & Date tree, prompt for date"
(const :format "" file+datetree+prompt)
(file :tag " File"))
(list :tag "File & function"
(const :format "" file+function)
(file :tag " File ")
@ -313,6 +319,12 @@ The remember buffer is still current when this hook runs."
:group 'org-capture
:type 'hook)
(defcustom org-capture-after-finalize-hook nil
"Hook that is run right after a capture process is finalized.
Suitable for window cleanup"
:group 'org-capture
:type 'hook)
;;; The property list for keeping information about the capture process
(defvar org-capture-plist nil
@ -461,9 +473,11 @@ bypassed."
(t (setq txt "* Invalid capture template")))
(org-capture-put :template txt)))
(defun org-capture-finalize ()
"Finalize the capture process."
(interactive)
(defun org-capture-finalize (&optional stay-with-capture)
"Finalize the capture process.
With prefix argument STAY-WITH-CAPTURE, jump to the location of the
captured item after finalizing."
(interactive "P")
(unless (and org-capture-mode
(buffer-base-buffer (current-buffer)))
(error "This does not seem to be a capture buffer for Org-mode"))
@ -548,17 +562,25 @@ bypassed."
;; Restore the window configuration before capture
(set-window-configuration return-wconf))
(when abort-note
(run-hooks 'org-capture-after-finalize-hook)
;; Special cases
(cond
(abort-note
(cond
((equal abort-note 'clean)
(message "Capture process aborted and target buffer cleaned up"))
((equal abort-note 'dirty)
(error "Capture process aborted, but target buffer could not be cleaned up correctly"))))))
(error "Capture process aborted, but target buffer could not be cleaned up correctly"))))
(stay-with-capture
(org-capture-goto-last-stored)))
;; Return if we did store something
(not abort-note)))
(defun org-capture-refile ()
"Finalize the current capture and then refile the entry.
Refiling is done from the base buffer, because the indirect buffer is then
already gone."
already gone. Any prefix argument will be passed to the refile comand."
(interactive)
(unless (eq (org-capture-get :type 'local) 'entry)
(error
@ -640,19 +662,28 @@ already gone."
(setq target-entry-p (and (org-mode-p) (org-at-heading-p))))
(error "No match for target regexp in file %s" (nth 1 target))))
((eq (car target) 'file+datetree)
((memq (car target) '(file+datetree file+datetree+prompt))
(require 'org-datetree)
(set-buffer (org-capture-target-buffer (nth 1 target)))
;; Make a date tree entry, with the current date (or yesterday,
;; if we are extending dates for a couple of hours)
(org-datetree-find-date-create
(calendar-gregorian-from-absolute
(if org-overriding-default-time
(time-to-days org-overriding-default-time)
(time-to-days
(time-subtract (current-time)
(list 0 (* 3600 org-extend-today-until) 0)))))))
(cond
(org-overriding-default-time
;; use the overriding default time
(time-to-days org-overriding-default-time))
((eq (car target) 'file+datetree+prompt)
;; prompt for date
(time-to-days (org-read-date
nil t nil "Date for tree entry:"
(days-to-time (org-today)))))
(t
;; current date, possible corrected for late night workers
(org-today))))))
((eq (car target) 'file+function)
(set-buffer (org-capture-target-buffer (nth 1 target)))
(funcall (nth 2 target))
@ -1358,5 +1389,3 @@ The template may still contain \"%?\" for cursor positioning."
;; arch-tag: 986bf41b-8ada-4e28-bf20-e8388a7205a0
;;; org-capture.el ends here

View file

@ -6,7 +6,7 @@
;; Author: Carsten Dominik <carsten at orgmode dot org>
;; Keywords: outlines, hypermedia, calendar, wp
;; Homepage: http://orgmode.org
;; Version: 7.3
;; Version: 7.4
;;
;; This file is part of GNU Emacs.
;;
@ -34,7 +34,7 @@
(eval-when-compile
(require 'cl))
(declare-function calendar-absolute-from-iso "cal-iso" (&optional date))
(declare-function calendar-absolute-from-iso "cal-iso" (&optional date))
(declare-function notifications-notify "notifications" (&rest params))
(defvar org-time-stamp-formats)
@ -222,11 +222,48 @@ string as argument."
(string :tag "Program")
(function :tag "Function")))
(defcustom org-clock-clocktable-default-properties '(:maxlevel 2 :scope file)
"Default properties for new clocktables."
(defgroup org-clocktable nil
"Options concerning the clock table in Org-mode."
:tag "Org Clock Table"
:group 'org-clock)
(defcustom org-clocktable-defaults
(list
:maxlevel 2
:scope 'file
:block nil
:tstart nil
:tend nil
:step nil
:stepskip0 nil
:fileskip0 nil
:tags nil
:emphasize nil
:link nil
:narrow '40!
:indent t
:formula nil
:timestamp nil
:level nil
:tcolumns nil
:formatter nil)
"Default properties for clock tables."
:group 'org-clock
:type 'plist)
(defcustom org-clock-clocktable-formatter 'org-clocktable-write-default
"Function to turn clocking data into a table.
For more information, see `org-clocktable-write-default'."
:group 'org-clocktable
:type 'function)
(defcustom org-clock-clocktable-default-properties '(:maxlevel 2 :scope file)
"Default properties for new clocktables.
These will be inserted into the BEGIN line, to make it easy for users to
play with them."
:group 'org-clocktable
:type 'plist)
(defcustom org-clock-idle-time nil
"When non-nil, resolve open clocks if the user is idle more than X minutes."
:group 'org-clock
@ -1586,7 +1623,7 @@ fontified, and then returned."
(font-lock-fontify-buffer)
(forward-line 2)
(buffer-substring (point) (progn
(re-search-forward "^#\\+END" nil t)
(re-search-forward "^[ \t]*#\\+END" nil t)
(point-at-bol)))))
(defun org-clock-report (&optional arg)
@ -1611,12 +1648,68 @@ buffer and update it."
(let ((pos (point)) start)
(save-excursion
(end-of-line 1)
(and (re-search-backward "^#\\+BEGIN:[ \t]+clocktable" nil t)
(and (re-search-backward "^[ \t]*#\\+BEGIN:[ \t]+clocktable" nil t)
(setq start (match-beginning 0))
(re-search-forward "^#\\+END:.*" nil t)
(re-search-forward "^[ \t]*#\\+END:.*" nil t)
(>= (match-end 0) pos)
start))))
(defun org-day-of-week (day month year)
"Returns the day of the week as an integer."
(nth 6
(decode-time
(date-to-time
(format "%d-%02d-%02dT00:00:00" year month day)))))
(defun org-quarter-to-date (quarter year)
"Get the date (week day year) of the first day of a given quarter."
(let (startday)
(cond
((= quarter 1)
(setq startday (org-day-of-week 1 1 year))
(cond
((= startday 0)
(list 52 7 (- year 1)))
((= startday 6)
(list 52 6 (- year 1)))
((<= startday 4)
(list 1 startday year))
((> startday 4)
(list 53 startday (- year 1)))
)
)
((= quarter 2)
(setq startday (org-day-of-week 1 4 year))
(cond
((= startday 0)
(list 13 startday year))
((< startday 4)
(list 14 startday year))
((>= startday 4)
(list 13 startday year))
)
)
((= quarter 3)
(setq startday (org-day-of-week 1 7 year))
(cond
((= startday 0)
(list 26 startday year))
((< startday 4)
(list 27 startday year))
((>= startday 4)
(list 26 startday year))
)
)
((= quarter 4)
(setq startday (org-day-of-week 1 10 year))
(cond
((= startday 0)
(list 39 startday year))
((<= startday 4)
(list 40 startday year))
((> startday 4)
(list 39 startday year)))))))
(defun org-clock-special-range (key &optional time as-strings)
"Return two times bordering a special time range.
Key is a symbol specifying the range and can be one of `today', `yesterday',
@ -1633,7 +1726,12 @@ the returned times will be formatted strings."
(dow (nth 6 tm))
(skey (symbol-name key))
(shift 0)
s1 m1 h1 d1 month1 y1 diff ts te fm txt w date)
(q (cond ((>= (nth 4 tm) 10) 4)
((>= (nth 4 tm) 7) 3)
((>= (nth 4 tm) 4) 2)
((>= (nth 4 tm) 1) 1)))
s1 m1 h1 d1 month1 y1 diff ts te fm txt w date
interval tmp shiftedy shiftedm shiftedq)
(cond
((string-match "^[0-9]+$" skey)
(setq y (string-to-number skey) m 1 d 1 key 'year))
@ -1650,6 +1748,15 @@ the returned times will be formatted strings."
(setq d (nth 1 date) month (car date) y (nth 2 date)
dow 1
key 'week))
((string-match "^\\([0-9]+\\)-[qQ]\\([1-4]\\)$" skey)
(require 'cal-iso)
(setq y (string-to-number (match-string 1 skey)))
(setq q (string-to-number (match-string 2 skey)))
(setq date (calendar-gregorian-from-absolute
(calendar-absolute-from-iso (org-quarter-to-date q y))))
(setq d (nth 1 date) month (car date) y (nth 2 date)
dow 1
key 'quarter))
((string-match "^\\([0-9]+\\)-\\([0-9]\\{1,2\\}\\)-\\([0-9]\\{1,2\\}\\)$" skey)
(setq y (string-to-number (match-string 1 skey))
month (string-to-number (match-string 2 skey))
@ -1657,12 +1764,17 @@ the returned times will be formatted strings."
key 'day))
((string-match "\\([-+][0-9]+\\)$" skey)
(setq shift (string-to-number (match-string 1 skey))
key (intern (substring skey 0 (match-beginning 1))))))
key (intern (substring skey 0 (match-beginning 1))))
(if(and (memq key '(quarter thisq)) (> shift 0))
(error "Looking forward with quarters isn't implemented.")
())))
(when (= shift 0)
(cond ((eq key 'yesterday) (setq key 'today shift -1))
((eq key 'lastweek) (setq key 'week shift -1))
((eq key 'lastmonth) (setq key 'month shift -1))
((eq key 'lastyear) (setq key 'year shift -1))))
(cond ((eq key 'yesterday) (setq key 'today shift -1))
((eq key 'lastweek) (setq key 'week shift -1))
((eq key 'lastmonth) (setq key 'month shift -1))
((eq key 'lastyear) (setq key 'year shift -1))
((eq key 'lastq) (setq key 'quarter shift -1))))
(cond
((memq key '(day today))
(setq d (+ d shift) h 0 m 0 h1 24 m1 0))
@ -1671,6 +1783,28 @@ the returned times will be formatted strings."
m 0 h 0 d (- d diff) d1 (+ 7 d)))
((memq key '(month thismonth))
(setq d 1 h 0 m 0 d1 1 month (+ month shift) month1 (1+ month) h1 0 m1 0))
((memq key '(quarter thisq))
; compute if this shift remains in this year
; if not, compute how many years and quarters we have to shift (via floor*)
; and compute the shifted years, months and quarters
(cond
((< (+ (- q 1) shift) 0) ; shift not in this year
(setq interval (* -1 (+ (- q 1) shift)))
; set tmp to ((years to shift) (quarters to shift))
(setq tmp (org-floor* interval 4))
; due to the use of floor, 0 quarters actually means 4
(if (= 0 (nth 1 tmp))
(setq shiftedy (- y (nth 0 tmp))
shiftedm 1
shiftedq 1)
(setq shiftedy (- y (+ 1 (nth 0 tmp)))
shiftedm (- 13 (* 3 (nth 1 tmp)))
shiftedq (- 5 (nth 1 tmp))))
(setq d 1 h 0 m 0 d1 1 month shiftedm month1 (+ 3 shiftedm) h1 0 m1 0 y shiftedy))
((> (+ q shift) 0) ; shift is whitin this year
(setq shiftedq (+ q shift))
(setq shiftedy y)
(setq d 1 h 0 m 0 d1 1 month (+ 1 (* 3 (- (+ q shift) 1))) month1 (+ 4 (* 3 (- (+ q shift) 1))) h1 0 m1 0))))
((memq key '(year thisyear))
(setq m 0 h 0 d 1 month 1 y (+ y shift) y1 (1+ y)))
(t (error "No such time block %s" key)))
@ -1686,11 +1820,21 @@ the returned times will be formatted strings."
((memq key '(month thismonth))
(setq txt (format-time-string "%B %Y" ts)))
((memq key '(year thisyear))
(setq txt (format-time-string "the year %Y" ts))))
(setq txt (format-time-string "the year %Y" ts)))
((memq key '(quarter thisq))
(setq txt (concatenate 'string (org-count-quarter shiftedq) " quarter of " (number-to-string shiftedy))))
)
(if as-strings
(list (format-time-string fm ts) (format-time-string fm te) txt)
(list ts te txt))))
(defun org-count-quarter (n)
(cond
((= n 1) "1st")
((= n 2) "2nd")
((= n 3) "3rd")
((= n 4) "4th")))
(defun org-clocktable-shift (dir n)
"Try to shift the :block date of the clocktable at point.
Point must be in the #+BEGIN: line of a clocktable, or this function
@ -1704,7 +1848,7 @@ the currently selected interval size."
(and (memq dir '(left down)) (setq n (- n)))
(save-excursion
(goto-char (point-at-bol))
(if (not (looking-at "#\\+BEGIN: clocktable\\>.*?:block[ \t]+\\(\\S-+\\)"))
(if (not (looking-at "^[ \t]*#\\+BEGIN:[ \t]+clocktable\\>.*?:block[ \t]+\\(\\S-+\\)"))
(error "Line needs a :block definition before this command works")
(let* ((b (match-beginning 1)) (e (match-end 1))
(s (match-string 1))
@ -1713,90 +1857,95 @@ the currently selected interval size."
((equal s "yesterday") (setq s "today-1"))
((equal s "lastweek") (setq s "thisweek-1"))
((equal s "lastmonth") (setq s "thismonth-1"))
((equal s "lastyear") (setq s "thisyear-1")))
(cond
((string-match "^\\(today\\|thisweek\\|thismonth\\|thisyear\\)\\([-+][0-9]+\\)?$" s)
(setq block (match-string 1 s)
shift (if (match-end 2)
(string-to-number (match-string 2 s))
0))
(setq shift (+ shift n))
(setq ins (if (= shift 0) block (format "%s%+d" block shift))))
((string-match "\\([0-9]+\\)\\(-\\([wW]?\\)\\([0-9]\\{1,2\\}\\)\\(-\\([0-9]\\{1,2\\}\\)\\)?\\)?" s)
;; 1 1 2 3 3 4 4 5 6 6 5 2
(setq y (string-to-number (match-string 1 s))
wp (and (match-end 3) (match-string 3 s))
mw (and (match-end 4) (string-to-number (match-string 4 s)))
d (and (match-end 6) (string-to-number (match-string 6 s))))
(cond
(d (setq ins (format-time-string
"%Y-%m-%d"
(encode-time 0 0 0 (+ d n) m y))))
((and wp mw (> (length wp) 0))
(require 'cal-iso)
(setq date (calendar-gregorian-from-absolute (calendar-absolute-from-iso (list (+ mw n) 1 y))))
(setq ins (format-time-string
"%G-W%V"
(encode-time 0 0 0 (nth 1 date) (car date) (nth 2 date)))))
(mw
(setq ins (format-time-string
"%Y-%m"
(encode-time 0 0 0 1 (+ mw n) y))))
(y
(setq ins (number-to-string (+ y n))))))
(t (error "Cannot shift clocktable block")))
(when ins
(goto-char b)
(insert ins)
(delete-region (point) (+ (point) (- e b)))
(beginning-of-line 1)
(org-update-dblock)
t)))))
((equal s "lastyear") (setq s "thisyear-1"))
((equal s "lastq") (setq s "thisq-1")))
(cond
((string-match "^\\(today\\|thisweek\\|thismonth\\|thisyear\\|thisq\\)\\([-+][0-9]+\\)?$" s)
(setq block (match-string 1 s)
shift (if (match-end 2)
(string-to-number (match-string 2 s))
0))
(setq shift (+ shift n))
(setq ins (if (= shift 0) block (format "%s%+d" block shift))))
((string-match "\\([0-9]+\\)\\(-\\([wWqQ]?\\)\\([0-9]\\{1,2\\}\\)\\(-\\([0-9]\\{1,2\\}\\)\\)?\\)?" s)
;; 1 1 2 3 3 4 4 5 6 6 5 2
(setq y (string-to-number (match-string 1 s))
wp (and (match-end 3) (match-string 3 s))
mw (and (match-end 4) (string-to-number (match-string 4 s)))
d (and (match-end 6) (string-to-number (match-string 6 s))))
(cond
(d (setq ins (format-time-string
"%Y-%m-%d"
(encode-time 0 0 0 (+ d n) m y))))
((and wp (string-match "w\\|W" wp) mw (> (length wp) 0))
(require 'cal-iso)
(setq date (calendar-gregorian-from-absolute (calendar-absolute-from-iso (list (+ mw n) 1 y))))
(setq ins (format-time-string
"%G-W%V"
(encode-time 0 0 0 (nth 1 date) (car date) (nth 2 date)))))
((and wp (string-match "q\\|Q" wp) mw (> (length wp) 0))
(require 'cal-iso)
; if the 4th + 1 quarter is requested we flip to the 1st quarter of the next year
(if (> (+ mw n) 4)
(setq mw 0
y (+ 1 y))
())
; if the 1st - 1 quarter is requested we flip to the 4th quarter of the previous year
(if (= (+ mw n) 0)
(setq mw 5
y (- y 1))
())
(setq date (calendar-gregorian-from-absolute (calendar-absolute-from-iso (org-quarter-to-date (+ mw n) y))))
(setq ins (format-time-string
(concatenate 'string (number-to-string y) "-Q" (number-to-string (+ mw n)))
(encode-time 0 0 0 (nth 1 date) (car date) (nth 2 date)))))
(mw
(setq ins (format-time-string
"%Y-%m"
(encode-time 0 0 0 1 (+ mw n) y))))
(y
(setq ins (number-to-string (+ y n))))))
(t (error "Cannot shift clocktable block")))
(when ins
(goto-char b)
(insert ins)
(delete-region (point) (+ (point) (- e b)))
(beginning-of-line 1)
(org-update-dblock)
t)))))
(defun org-dblock-write:clocktable (params)
"Write the standard clocktable."
(setq params (org-combine-plists org-clocktable-defaults params))
(catch 'exit
(let* ((hlchars '((1 . "*") (2 . "/")))
(ins (make-marker))
(total-time nil)
(scope (plist-get params :scope))
(tostring (plist-get params :tostring))
(multifile (plist-get params :multifile))
(header (plist-get params :header))
(maxlevel (or (plist-get params :maxlevel) 3))
(step (plist-get params :step))
(emph (plist-get params :emphasize))
(timestamp (plist-get params :timestamp))
(let* ((scope (plist-get params :scope))
(block (plist-get params :block))
(ts (plist-get params :tstart))
(te (plist-get params :tend))
(block (plist-get params :block))
(link (plist-get params :link))
(tags (plist-get params :tags))
(matcher (if tags (cdr (org-make-tags-matcher tags))))
ipos time p level hlc hdl tsp props content recalc formula pcol
cc beg end pos tbl tbl1 range-text rm-file-column scope-is-list st)
(setq org-clock-file-total-minutes nil)
(maxlevel (or (plist-get params :maxlevel) 3))
(step (plist-get params :step))
(timestamp (plist-get params :timestamp))
(formatter (or (plist-get params :formatter)
org-clock-clocktable-formatter
'org-clocktable-write-default))
cc range-text ipos pos one-file-with-archives
scope-is-list tbls level)
;; Check if we need to do steps
(when block
;; Get the range text for the header
(setq cc (org-clock-special-range block nil t)
ts (car cc) te (nth 1 cc) range-text (nth 2 cc)))
(when step
;; Write many tables, in steps
(unless (or block (and ts te))
(error "Clocktable `:step' can only be used with `:block' or `:tstart,:end'"))
(org-clocktable-steps params)
(throw 'exit nil))
(when block
(setq cc (org-clock-special-range block nil t)
ts (car cc) te (nth 1 cc) range-text (nth 2 cc)))
(when (integerp ts) (setq ts (calendar-gregorian-from-absolute ts)))
(when (integerp te) (setq te (calendar-gregorian-from-absolute te)))
(when (and ts (listp ts))
(setq ts (format "%4d-%02d-%02d" (nth 2 ts) (car ts) (nth 1 ts))))
(when (and te (listp te))
(setq te (format "%4d-%02d-%02d" (nth 2 te) (car te) (nth 1 te))))
;; Now the times are strings we can parse.
(if ts (setq ts (org-float-time
(apply 'encode-time (org-parse-time-string ts)))))
(if te (setq te (org-float-time
(apply 'encode-time (org-parse-time-string te)))))
(move-marker ins (point))
(setq ipos (point))
(setq ipos (point)) ; remember the insertion position
;; Get the right scope
(setq pos (point))
@ -1810,166 +1959,271 @@ the currently selected interval size."
(setq scope (org-add-archive-files scope)))
((eq scope 'file-with-archives)
(setq scope (org-add-archive-files (list (buffer-file-name)))
rm-file-column t)))
one-file-with-archives t)))
(setq scope-is-list (and scope (listp scope)))
(save-restriction
(cond
((not scope))
((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)))
(setq level (string-to-number (match-string 1 (symbol-name scope))))
(catch 'exit
(while (org-up-heading-safe)
(looking-at outline-regexp)
(if (<= (org-reduced-level (funcall outline-level)) level)
(throw 'exit nil))))
(org-narrow-to-subtree))
(scope-is-list
(if scope-is-list
;; we collect from several files
(let* ((files scope)
(scope 'agenda)
(p1 (copy-sequence params))
file)
(setq p1 (plist-put p1 :tostring t))
(setq p1 (plist-put p1 :multifile t))
(setq p1 (plist-put p1 :scope 'file))
(org-prepare-agenda-buffers files)
(while (setq file (pop files))
(with-current-buffer (find-buffer-visiting file)
(setq org-clock-file-total-minutes 0)
(setq tbl1 (org-dblock-write:clocktable p1))
(when tbl1
(push (org-clocktable-add-file
file
(concat "| |*File time*|*"
(org-minutes-to-hh:mm-string
org-clock-file-total-minutes)
"*|\n"
tbl1)) tbl)
(setq total-time (+ (or total-time 0)
org-clock-file-total-minutes))))))))
(goto-char pos)
(save-excursion
(save-restriction
(push (org-clock-get-table-data file params) tbls))))))
;; Just from the current file
(save-restriction
;; get the right range into the restriction
(org-prepare-agenda-buffers (list (buffer-file-name)))
(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)))
(setq level (string-to-number (match-string 1 (symbol-name scope))))
(catch 'exit
(while (org-up-heading-safe)
(looking-at outline-regexp)
(if (<= (org-reduced-level (funcall outline-level)) level)
(throw 'exit nil))))
(org-narrow-to-subtree)))
;; do the table, with no file name.
(push (org-clock-get-table-data nil params) tbls)))
(unless scope-is-list
(org-clock-sum ts te
(unless (null matcher)
(lambda ()
(let ((tags-list
(org-split-string
(or (org-entry-get (point) "ALLTAGS") "")
":")))
(eval matcher)))))
(goto-char (point-min))
(setq st t)
(while (or (and (bobp) (prog1 st (setq st nil))
(get-text-property (point) :org-clock-minutes)
(setq p (point-min)))
(setq p (next-single-property-change (point) :org-clock-minutes)))
(goto-char p)
(when (setq time (get-text-property p :org-clock-minutes))
(save-excursion
(beginning-of-line 1)
(when (and (looking-at (org-re "\\(\\*+\\)[ \t]+\\(.*?\\)\\([ \t]+:[[:alnum:]_@#%:]+:\\)?[ \t]*$"))
(setq level (org-reduced-level
(- (match-end 1) (match-beginning 1))))
(<= level maxlevel))
(setq hlc (if emph (or (cdr (assoc level hlchars)) "") "")
hdl (if (not link)
(match-string 2)
(org-make-link-string
(format "file:%s::%s"
(buffer-file-name)
(save-match-data
(org-make-org-heading-search-string
(match-string 2))))
(match-string 2)))
tsp (when timestamp
(setq props (org-entry-properties (point)))
(or (cdr (assoc "SCHEDULED" props))
(cdr (assoc "TIMESTAMP" props))
(cdr (assoc "DEADLINE" props))
(cdr (assoc "TIMESTAMP_IA" props)))))
(if (and (not multifile) (= level 1)) (push "|-" tbl))
(push (concat
"| " (int-to-string level) "|"
(if timestamp (concat tsp "|") "")
hlc hdl hlc " |"
(make-string (1- level) ?|)
hlc (org-minutes-to-hh:mm-string time) hlc
" |") tbl))))))
(setq tbl (nreverse tbl))
(if tostring
(if tbl (mapconcat 'identity tbl "\n") nil)
(goto-char ins)
(insert-before-markers
(or header
(concat
"Clock summary at ["
(substring
(format-time-string (cdr org-time-stamp-formats))
1 -1)
"]"
(if block (concat ", for " range-text ".") "")
"\n\n"))
(if scope-is-list "|File" "")
"|L|" (if timestamp "Timestamp|" "") "Headline|Time|\n")
(setq total-time (or total-time org-clock-file-total-minutes))
(insert-before-markers
"|-\n|"
(if scope-is-list "|" "")
(if timestamp "|Timestamp|" "|")
"*Total time*| *"
(org-minutes-to-hh:mm-string (or total-time 0))
"*|\n|-\n")
(setq tbl (delq nil tbl))
(if (and (stringp (car tbl)) (> (length (car tbl)) 1)
(equal (substring (car tbl) 0 2) "|-"))
(pop tbl))
(insert-before-markers (mapconcat
'identity (delq nil tbl)
(if scope-is-list "\n|-\n" "\n")))
(backward-delete-char 1)
(if (setq formula (plist-get params :formula))
(cond
((eq formula '%)
(setq pcol (+ (if scope-is-list 1 0) maxlevel 3))
(insert
(format
"\n#+TBLFM: $%d='(org-clock-time%% @%d$%d $%d..$%d);%%.1f"
pcol
2
(+ 3 (if scope-is-list 1 0))
(+ (if scope-is-list 1 0) 3)
(1- pcol)))
(setq recalc t))
((stringp formula)
(insert "\n#+TBLFM: " formula)
(setq recalc t))
(t (error "invalid formula in clocktable")))
;; Should we rescue an old formula?
(when (stringp (setq content (plist-get params :content)))
(when (string-match "^\\([ \t]*#\\+TBLFM:.*\\)" content)
(setq recalc t)
(insert "\n" (match-string 1 (plist-get params :content)))
(beginning-of-line 0))))
(goto-char ipos)
(skip-chars-forward "^|")
(org-table-align)
(when recalc
(if (eq formula '%)
(save-excursion (org-table-goto-column pcol nil 'force)
(insert "%")))
(org-table-recalculate 'all))
(when rm-file-column
(forward-char 1)
(org-table-delete-column))
total-time)))))
;; OK, at this point we tbls as a list of tables, one per file
(setq tbls (nreverse tbls))
(setq params (plist-put params :multifile scope-is-list))
(setq params (plist-put params :one-file-with-archives
one-file-with-archives))
(funcall formatter ipos tbls params))))
(defun org-clocktable-write-default (ipos tables params)
"Write out a clock table at position IPOS in the current buffer.
TABLES is a list of tables with clocking data as produced by
`org-clock-get-table-data'. PARAMS is the parameter property list obtained
from the dynamic block defintion."
;; This function looks quite complicated, mainly because there are a lot
;; of options which can add or remove columns. I have massively commented
;; function, to I hope it is understandable. If someone want to write
;; there 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 . "/")))
(multifile (plist-get params :multifile))
(block (plist-get params :block))
(ts (plist-get params :tstart))
(te (plist-get params :tend))
(header (plist-get params :header))
(narrow (plist-get params :narrow))
(link (plist-get params :link))
(maxlevel (or (plist-get params :maxlevel) 3))
(emph (plist-get params :emphasize))
(level-p (plist-get params :level))
(timestamp (plist-get params :timestamp))
(ntcol (max 1 (or (plist-get params :tcolumns) 100)))
(rm-file-column (plist-get params :one-file-with-archives))
(indent (plist-get params :indent))
range-text total-time tbl level hlc formula pcol
file-time entries entry headline
recalc content narrow-cut-p tcol)
;; 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")
(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))))
;; Compute the total time
(setq total-time (apply '+ (mapcar 'cadr tables)))
;; Now we need to output this tsuff
(goto-char ipos)
;; Insert the text *before* the actual table
(insert-before-markers
(or header
;; Format the standard header
(concat
"Clock summary at ["
(substring
(format-time-string (cdr org-time-stamp-formats))
1 -1)
"]"
(if block (concat ", for " range-text ".") "")
"\n\n")))
;; 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
(format "<%d>| |\n" narrow))) ; headline and time columns
;; Insert the table header line
(insert-before-markers
"|" ; table line starter
(if multifile "File|" "") ; file column, maybe
(if level-p "L|" "") ; level column, maybe
(if timestamp "Timestamp|" "") ; timestamp column, maybe
"Headline|Time|\n") ; headline and time columns
;; Insert the total time in the table
(insert-before-markers
"|-\n" ; a hline
"|" ; table line starter
(if multifile "| ALL " "") ; file column, maybe
(if level-p "|" "") ; level column, maybe
(if timestamp "|" "") ; timestamp column, maybe
"*Total time*| " ; instead of a headline
"*"
(org-minutes-to-hh:mm-string (or total-time 0)) ; the time
"*|\n") ; close line
;; 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))
(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
(when multifile
;; Summarize the time colleted from this file
(insert-before-markers
(format "| %s %s | %s*File time* | *%s*|\n"
(file-name-nondirectory (car tbl))
(if level-p "| " "") ; level column, maybe
(if timestamp "| " "") ; timestamp column, maybe
(org-minutes-to-hh:mm-string (nth 1 tbl))))) ; the 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 indent (org-clocktable-indent-string level) "") ; indentation
hlc headline hlc "|" ; headline
(make-string (min (1- ntcol) (or (- level 1))) ?|)
; empty fields for higher levels
hlc (org-minutes-to-hh:mm-string (nth 3 entry)) hlc ; time
"|\n" ; close line
)))))
(backward-delete-char 1)
(if (setq formula (plist-get params :formula))
(cond
((eq formula '%)
;; compute the column where the % numbers need to go
(setq pcol (+ 2
(if multifile 1 0)
(if level-p 1 0)
(if timestamp 1 0)
(min maxlevel (or ntcol 100))))
;; compute the column where the total time is
(setq tcol (+ 2
(if multifile 1 0)
(if level-p 1 0)
(if timestamp 1 0)))
(insert
(format
"\n#+TBLFM: $%d='(org-clock-time%% @%d$%d $%d..$%d);%%.1f"
pcol ; the column where the % numbers should go
(if (and narrow (not narrow-cut-p)) 3 2) ; row of the total time
tcol ; column of the total time
tcol (1- pcol) ; range of columns where times can be found
))
(setq recalc t))
((stringp formula)
(insert "\n#+TBLFM: " formula)
(setq recalc t))
(t (error "invalid formula in clocktable")))
;; Should we rescue an old formula?
(when (stringp (setq content (plist-get params :content)))
(when (string-match "^\\([ \t]*#\\+TBLFM:.*\\)" content)
(setq recalc t)
(insert "\n" (match-string 1 (plist-get params :content)))
(beginning-of-line 0))))
;; 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
(org-table-align))
(when recalc
(if (eq formula '%)
(save-excursion
(if (and narrow (not narrow-cut-p)) (beginning-of-line 2))
(org-table-goto-column pcol nil 'force)
(insert "%")))
(org-table-recalculate 'all))
(when rm-file-column
;; The file column is actually not wanted
(forward-char 1)
(org-table-delete-column))
total-time))
(defun org-clocktable-indent-string (level)
(if (= level 1)
""
(let ((str "\\__"))
(while (> level 2)
(setq level (1- level)
str (concat str "___")))
(concat str " "))))
(defun org-clocktable-steps (params)
"Step through the range to make a number of clock tables."
(let* ((p1 (copy-sequence params))
(ts (plist-get p1 :tstart))
(te (plist-get p1 :tend))
@ -2008,29 +2262,107 @@ the currently selected interval size."
(setq p1 (plist-put p1 :tend (format-time-string
(org-time-stamp-format nil t)
(seconds-to-time (setq ts (+ ts step))))))
(insert "\n" (if (eq step0 'day) "Daily report: " "Weekly report starting on: ")
(insert "\n" (if (eq step0 'day) "Daily report: "
"Weekly report starting on: ")
(plist-get p1 :tstart) "\n")
(setq step-time (org-dblock-write:clocktable p1))
(re-search-forward "#\\+END:")
(re-search-forward "^[ \t]*#\\+END:")
(when (and (equal step-time 0) stepskip0)
;; Remove the empty table
(delete-region (point-at-bol)
(save-excursion
(re-search-backward "^\\(Daily\\|Weekly\\) report" nil t)
(re-search-backward "^\\(Daily\\|Weekly\\) report"
nil t)
(point))))
(end-of-line 0))))
(defun org-clocktable-add-file (file table)
(if table
(let ((lines (org-split-string table "\n"))
(ff (file-name-nondirectory file)))
(mapconcat 'identity
(mapcar (lambda (x)
(if (string-match org-table-dataline-regexp x)
(concat "|" ff x)
x))
lines)
"\n"))))
(defun org-clock-get-table-data (file params)
"Get the clocktable data for file FILE, with parameters PARAMS.
FILE is only for identification - this function assumes that
the correct buffer is current, and that the wanted restriction is
in place.
The return value will be a list with the file name and the total
file time (in minutes) as 1st and 2nd elements. The third element
of this list will be a list of headline entries. Each entry has the
following structure:
(LEVEL HEADLINE TIMESTAMP TIME)
LEVEL: The level of the headline, as an integer. This will be
the reduced leve, so 1,2,3,... even if only odd levels
are being used.
HEADLINE: The text of the headline. Depending on PARAMS, this may
already be formatted like a link.
TIMESTAMP: If PARAMS require it, this will be a time stamp found in the
entry, any of SCHEDULED, DEADLINE, NORMAL, or first inactive,
in this sequence.
TIME: The sum of all time spend in this tree, in minutes. This time
will of cause be restricted to the time block and tags match
specified in PARAMS."
(let* ((maxlevel (or (plist-get params :maxlevel) 3))
(timestamp (plist-get params :timestamp))
(ts (plist-get params :tstart))
(te (plist-get params :tend))
(block (plist-get params :block))
(link (plist-get params :link))
(tags (plist-get params :tags))
(matcher (if tags (cdr (org-make-tags-matcher tags))))
cc range-text st p time level hdl props tsp tbl)
(setq org-clock-file-total-minutes nil)
(when block
(setq cc (org-clock-special-range block nil t)
ts (car cc) te (nth 1 cc) range-text (nth 2 cc)))
(when (integerp ts) (setq ts (calendar-gregorian-from-absolute ts)))
(when (integerp te) (setq te (calendar-gregorian-from-absolute te)))
(when (and ts (listp ts))
(setq ts (format "%4d-%02d-%02d" (nth 2 ts) (car ts) (nth 1 ts))))
(when (and te (listp te))
(setq te (format "%4d-%02d-%02d" (nth 2 te) (car te) (nth 1 te))))
;; Now the times are strings we can parse.
(if ts (setq ts (org-float-time
(apply 'encode-time (org-parse-time-string ts)))))
(if te (setq te (org-float-time
(apply 'encode-time (org-parse-time-string te)))))
(save-excursion
(org-clock-sum ts te
(unless (null matcher)
(lambda ()
(let ((tags-list (org-get-tags-at)))
(eval matcher)))))
(goto-char (point-min))
(setq st t)
(while (or (and (bobp) (prog1 st (setq st nil))
(get-text-property (point) :org-clock-minutes)
(setq p (point-min)))
(setq p (next-single-property-change
(point) :org-clock-minutes)))
(goto-char p)
(when (setq time (get-text-property p :org-clock-minutes))
(save-excursion
(beginning-of-line 1)
(when (and (looking-at (org-re "\\(\\*+\\)[ \t]+\\(.*?\\)\\([ \t]+:[[:alnum:]_@#%:]+:\\)?[ \t]*$"))
(setq level (org-reduced-level
(- (match-end 1) (match-beginning 1))))
(<= level maxlevel))
(setq hdl (if (not link)
(match-string 2)
(org-make-link-string
(format "file:%s::%s"
(buffer-file-name)
(save-match-data
(org-make-org-heading-search-string
(match-string 2))))
(match-string 2)))
tsp (when timestamp
(setq props (org-entry-properties (point)))
(or (cdr (assoc "SCHEDULED" props))
(cdr (assoc "DEADLINE" props))
(cdr (assoc "TIMESTAMP" props))
(cdr (assoc "TIMESTAMP_IA" props)))))
(when (> time 0) (push (list level hdl tsp time) tbl))))))
(setq tbl (nreverse tbl))
(list file org-clock-file-total-minutes tbl))))
(defun org-clock-time% (total &rest strings)
"Compute a time fraction in percent.
@ -2051,7 +2383,8 @@ This function is made for clock tables."
(if (string-match "\\([0-9]+\\):\\([0-9]+\\)" s)
(throw 'exit
(/ (* 100.0 (+ (string-to-number (match-string 2 s))
(* 60 (string-to-number (match-string 1 s)))))
(* 60 (string-to-number
(match-string 1 s)))))
tot))))
0))))
@ -2081,7 +2414,8 @@ The details of what will be saved are regulated by the variable
(buffer-file-name b)
(or (not org-clock-persist-query-save)
(y-or-n-p (concat "Save current clock ("
(substring-no-properties org-clock-heading)
(substring-no-properties
org-clock-heading)
") "))))
(insert "(setq resume-clock '(\""
(buffer-file-name (org-clocking-buffer))
@ -2162,3 +2496,4 @@ The details of what will be saved are regulated by the variable
;; arch-tag: 7b42c5d4-9b36-48be-97c0-66a869daed4c
;;; org-clock.el ends here

View file

@ -6,7 +6,7 @@
;; Author: Carsten Dominik <carsten at orgmode dot org>
;; Keywords: outlines, hypermedia, calendar, wp
;; Homepage: http://orgmode.org
;; Version: 7.3
;; Version: 7.4
;;
;; This file is part of GNU Emacs.
;;

View file

@ -6,7 +6,7 @@
;; Author: Carsten Dominik <carsten at orgmode dot org>
;; Keywords: outlines, hypermedia, calendar, wp
;; Homepage: http://orgmode.org
;; Version: 7.3
;; Version: 7.4
;;
;; This file is part of GNU Emacs.
;;
@ -372,15 +372,15 @@ TIME defaults to the current time."
(time-to-seconds (or time (current-time)))
(float-time time)))
(defun org-string-match-p (&rest args)
(if (fboundp 'string-match-p)
(apply 'string-match-p args)
(if (fboundp 'string-match-p)
(defalias 'org-string-match-p 'string-match-p)
(defun org-string-match-p (regexp string &optional start)
(save-match-data
(apply 'string-match args))))
(funcall 'string-match regexp string start))))
(defun org-looking-at-p (&rest args)
(if (fboundp 'looking-at-p)
(apply 'looking-at-p args)
(if (fboundp 'looking-at-p)
(defalias 'org-looking-at-p 'looking-at-p)
(defun org-looking-at-p (&rest args)
(save-match-data
(apply 'looking-at args))))
@ -418,6 +418,12 @@ LIMIT."
(looking-at (concat "\\(?:" regexp "\\)\\'")))))
(not (null pos)))))
(defun org-floor* (x &optional y)
"Return a list of the floor of X and the fractional part of X.
With two arguments, return floor and remainder of their quotient."
(let ((q (floor x y)))
(list q (- x (if y (* y q) q)))))
(provide 'org-compat)
;; arch-tag: a0a0579f-e68c-4bdf-9e55-93768b846bbe

279
lisp/org/org-complete.el Normal file
View file

@ -0,0 +1,279 @@
;;; org-complete.el --- In-buffer completion code
;; Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010
;; Free Software Foundation, Inc.
;;
;; Author: Carsten Dominik <carsten at orgmode dot org>
;; John Wiegley <johnw at gnu dot org>
;; Keywords: outlines, hypermedia, calendar, wp
;; Homepage: http://orgmode.org
;; Version: 7.4
;;
;; 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 <http://www.gnu.org/licenses/>.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;;; Code:
;;;; Require other packages
(eval-when-compile
(require 'cl))
(require 'org-macs)
(require 'pcomplete)
(declare-function org-split-string "org" (string &optional separators))
(declare-function org-get-current-options "org-exp" ())
(declare-function org-make-org-heading-search-string "org"
(&optional string heading))
(declare-function org-get-buffer-tags "org" ())
(declare-function org-get-tags "org" ())
(declare-function org-buffer-property-keys "org"
(&optional include-specials include-defaults include-columns))
(declare-function org-entry-properties "org" (&optional pom which specific))
;;;; Customization variables
(defgroup org-complete nil
"Outline-based notes management and organizer."
:tag "Org"
:group 'org)
(defun org-thing-at-point ()
"Examine the thing at point and let the caller know what it is.
The return value is a string naming the thing at point."
(let ((beg1 (save-excursion
(skip-chars-backward (org-re "[:alnum:]_@"))
(point)))
(beg (save-excursion
(skip-chars-backward "a-zA-Z0-9_:$")
(point)))
(line-to-here (buffer-substring (point-at-bol) (point))))
(cond
((string-match "\\`[ \t]*#\\+begin: clocktable[ \t]+" line-to-here)
(cons "block-option" "clocktable"))
((string-match "\\`[ \t]*#\\+begin_src[ \t]+" line-to-here)
(cons "block-option" "src"))
((save-excursion
(re-search-backward "^[ \t]*#\\+\\([A-Z_]+\\):.*"
(line-beginning-position) t))
(cons "file-option" (match-string-no-properties 1)))
((string-match "\\`[ \t]*#\\+[a-zA-Z]*\\'" line-to-here)
(cons "file-option" nil))
((equal (char-before beg) ?\[)
(cons "link" nil))
((equal (char-before beg) ?\\)
(cons "tex" nil))
((string-match "\\`\\*+[ \t]+\\'"
(buffer-substring (point-at-bol) beg))
(cons "todo" nil))
((equal (char-before beg) ?*)
(cons "searchhead" nil))
((and (equal (char-before beg1) ?:)
(equal (char-after (point-at-bol)) ?*))
(cons "tag" nil))
((and (equal (char-before beg1) ?:)
(not (equal (char-after (point-at-bol)) ?*)))
(cons "prop" nil))
(t nil))))
(defun org-command-at-point ()
"Return the qualified name of the Org completion entity at point.
When completing for #+STARTUP, for example, this function returns
\"file-option/startup\"."
(let ((thing (org-thing-at-point)))
(cond
((string= "file-option" (car thing))
(concat (car thing) "/" (downcase (cdr thing))))
((string= "block-option" (car thing))
(concat (car thing) "/" (downcase (cdr thing))))
(t
(car thing)))))
(defun org-parse-arguments ()
"Parse whitespace separated arguments in the current region."
(let ((begin (line-beginning-position))
(end (line-end-position))
begins args)
(save-restriction
(narrow-to-region begin end)
(save-excursion
(goto-char (point-min))
(while (not (eobp))
(skip-chars-forward " \t\n[")
(setq begins (cons (point) begins))
(skip-chars-forward "^ \t\n[")
(setq args (cons (buffer-substring-no-properties
(car begins) (point))
args)))
(cons (reverse args) (reverse begins))))))
(defun org-complete-initial ()
"Calls the right completion function for first argument completions."
(ignore
(funcall (or (pcomplete-find-completion-function
(car (org-thing-at-point)))
pcomplete-default-completion-function))))
(defvar org-additional-option-like-keywords)
(defun pcomplete/org-mode/file-option ()
"Complete against all valid file options."
(require 'org-exp)
(pcomplete-here
(org-complete-case-double
(mapcar (lambda (x)
(if (= ?: (aref x (1- (length x))))
(concat x " ")
x))
(delq nil
(pcomplete-uniqify-list
(append
(mapcar (lambda (x)
(if (string-match "^#\\+\\([A-Z_]+:?\\)" x)
(match-string 1 x)))
(org-split-string (org-get-current-options) "\n"))
org-additional-option-like-keywords)))))
(substring pcomplete-stub 2)))
(defvar org-startup-options)
(defun pcomplete/org-mode/file-option/startup ()
"Complete arguments for the #+STARTUP file option."
(while (pcomplete-here
(let ((opts (pcomplete-uniqify-list
(mapcar 'car org-startup-options))))
;; Some options are mutually exclusive, and shouldn't be completed
;; against if certain other options have already been seen.
(dolist (arg pcomplete-args)
(cond
((string= arg "hidestars")
(setq opts (delete "showstars" opts)))))
opts))))
(defun pcomplete/org-mode/file-option/bind ()
"Complete arguments for the #+BIND file option, which are variable names"
(let (vars)
(mapatoms
(lambda (a) (if (boundp a) (setq vars (cons (symbol-name a) vars)))))
(pcomplete-here vars)))
(defvar org-link-abbrev-alist-local)
(defvar org-link-abbrev-alist)
(defun pcomplete/org-mode/link ()
"Complete against defined #+LINK patterns."
(pcomplete-here
(pcomplete-uniqify-list (append (mapcar 'car org-link-abbrev-alist-local)
(mapcar 'car org-link-abbrev-alist)))))
(defvar org-entities)
(defun pcomplete/org-mode/tex ()
"Complete against TeX-style HTML entity names."
(require 'org-entities)
(while (pcomplete-here
(pcomplete-uniqify-list (remove nil (mapcar 'car-safe org-entities)))
(substring pcomplete-stub 1))))
(defvar org-todo-keywords-1)
(defun pcomplete/org-mode/todo ()
"Complete against known TODO keywords."
(pcomplete-here (pcomplete-uniqify-list org-todo-keywords-1)))
(defvar org-todo-line-regexp)
(defun pcomplete/org-mode/searchhead ()
"Complete against all headings.
This needs more work, to handle headings with lots of spaces in them."
(while
(pcomplete-here
(save-excursion
(goto-char (point-min))
(let (tbl)
(while (re-search-forward org-todo-line-regexp nil t)
(push (org-make-org-heading-search-string
(match-string-no-properties 3) t)
tbl))
(pcomplete-uniqify-list tbl)))
(substring pcomplete-stub 1))))
(defvar org-tag-alist)
(defun pcomplete/org-mode/tag ()
"Complete a tag name. Omit tags already set."
(while (pcomplete-here
(mapcar (lambda (x)
(concat x ":"))
(let ((lst (pcomplete-uniqify-list
(or (remove
nil
(mapcar (lambda (x)
(and (stringp (car x)) (car x)))
org-tag-alist))
(mapcar 'car (org-get-buffer-tags))))))
(dolist (tag (org-get-tags))
(setq lst (delete tag lst)))
lst))
(and (string-match ".*:" pcomplete-stub)
(substring pcomplete-stub (match-end 0))))))
(defun pcomplete/org-mode/prop ()
"Complete a property name. Omit properties already set."
(pcomplete-here
(mapcar (lambda (x)
(concat x ": "))
(let ((lst (pcomplete-uniqify-list
(org-buffer-property-keys nil t t))))
(dolist (prop (org-entry-properties))
(setq lst (delete (car prop) lst)))
lst))
(substring pcomplete-stub 1)))
(defun pcomplete/org-mode/block-option/src ()
"Complete the arguments of a begin_src block.
Complete a language in the first field, the header arguments and switches."
(pcomplete-here
(mapcar
(lambda(x) (symbol-name (nth 3 x)))
(cdr (car (cdr (memq :key-type (plist-get
(symbol-plist
'org-babel-load-languages)
'custom-type)))))))
(while (pcomplete-here
'("-n" "-r" "-l"
":cache" ":colnames" ":comments" ":dir" ":eval" ":exports"
":file" ":hlines" ":no-expand" ":noweb" ":results" ":rownames"
":session" ":shebang" ":tangle" ":var"))))
(defun pcomplete/org-mode/block-option/clocktable ()
"Complete keywords in a clocktable line"
(while (pcomplete-here '(":maxlevel" ":scope"
":tstart" ":tend" ":block" ":step"
":stepskip0" ":fileskip0"
":emphasize" ":link" ":narrow" ":indent"
":tcolumns" ":level" ":compact" ":timestamp"
":formula" ":formatter"))))
(defun org-complete-case-double (list)
"Return list with both upcase and downcase version of all strings in LIST."
(let (e res)
(while (setq e (pop list))
(setq res (cons (downcase e) (cons (upcase e) res))))
(nreverse res)))
;;;; Finish up
(provide 'org-complete)
;; arch-tag:
;;; org-complete.el ends here

View file

@ -4,7 +4,7 @@
;; Emacs Lisp Archive Entry
;; Filename: org-crypt.el
;; Version: 7.3
;; Version: 7.4
;; Keywords: org-mode
;; Author: John Wiegley <johnw@gnu.org>
;; Maintainer: Peter Jones <pjones@pmade.com>

View file

@ -3,10 +3,10 @@
;; Copyright (C) 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
;; Author: Paul Sexton <eeeickythump@gmail.com>
;; Version: 7.3
;; Version: 7.4
;; Keywords: org, wp
;; Version: 7.3
;; Version: 7.4
;;
;; This file is part of GNU Emacs.
;;

View file

@ -5,7 +5,7 @@
;; Author: Carsten Dominik <carsten at orgmode dot org>
;; Keywords: outlines, hypermedia, calendar, wp
;; Homepage: http://orgmode.org
;; Version: 7.3
;; Version: 7.4
;;
;; This file is part of GNU Emacs.
;;

View file

@ -4,7 +4,7 @@
;;
;; Emacs Lisp Archive Entry
;; Filename: org-docbook.el
;; Version: 7.3
;; Version: 7.4
;; Author: Baoqiu Cui <cbaoqiu AT yahoo DOT com>
;; Maintainer: Baoqiu Cui <cbaoqiu AT yahoo DOT com>
;; Keywords: org, wp, docbook

View file

@ -5,7 +5,7 @@
;; Author: Jan Böcker <jan.boecker at jboecker dot de>
;; Keywords: outlines, hypermedia, calendar, wp
;; Homepage: http://orgmode.org
;; Version: 7.3
;; Version: 7.4
;;
;; This file is part of GNU Emacs.
;;

View file

@ -6,7 +6,7 @@
;; Ulf Stegemann <ulf at zeitform dot de>
;; Keywords: outlines, calendar, wp
;; Homepage: http://orgmode.org
;; Version: 7.3
;; Version: 7.4
;;
;; This file is part of GNU Emacs.
;;

View file

@ -4,7 +4,7 @@
;; Free Software Foundation, Inc.
;; Author: Eric Schulte
;; Version: 7.3
;; Version: 7.4
;; This file is part of GNU Emacs.
;;
@ -201,9 +201,6 @@ which defaults to the value of `org-export-blocks-witheld'."
(interblock start (point-max))
(run-hooks 'org-export-blocks-postblock-hook)))))
(add-hook 'org-export-preprocess-after-include-files-hook
'org-export-blocks-preprocess)
;;================================================================================
;; type specific functions

View file

@ -6,7 +6,7 @@
;; Author: Carsten Dominik <carsten at orgmode dot org>
;; Keywords: outlines, hypermedia, calendar, wp
;; Homepage: http://orgmode.org
;; Version: 7.3
;; Version: 7.4
;;
;; This file is part of GNU Emacs.
;;
@ -984,7 +984,7 @@ value of `org-export-run-in-background'."
(set-process-sentinel p 'org-export-process-sentinel)
(message "Background process \"%s\": started" p))
;; background processing not requested, or not possible
(if subtree-p (progn (outline-mark-subtree) (activate-mark)))
(if subtree-p (progn (org-mark-subtree) (activate-mark)))
(call-interactively (nth 1 ass))
(when (and bpos (get-buffer-window cbuf))
(let ((cw (selected-window)))
@ -1080,12 +1080,18 @@ on this string to produce the exported version."
;; Mark end of lists
(org-export-mark-list-ending backend)
;; Export code blocks
(org-export-blocks-preprocess)
;; Handle source code snippets
(org-export-replace-src-segments-and-examples backend)
;; Protect short examples marked by a leading colon
(org-export-protect-colon-examples)
;; Protected spaces
(org-export-convert-protected-spaces backend)
;; Normalize footnotes
(when (plist-get parameters :footnotes)
(org-footnote-normalize nil t))
@ -1536,6 +1542,26 @@ from the buffer."
(add-text-properties (point) (org-end-of-subtree t)
'(org-protected t)))))
(defun org-export-convert-protected-spaces (backend)
"Convert strings like \\____ to protected spaces in all backends."
(goto-char (point-min))
(while (re-search-forward "\\\\__+" nil t)
(org-if-unprotected-1
(replace-match
(org-add-props
(cond
((eq backend 'latex)
(format "\\hspace{%dex}" (- (match-end 0) (match-beginning 0))))
((eq backend 'html)
(org-add-props (match-string 0) nil
'org-whitespace (- (match-end 0) (match-beginning 0))))
;; ((eq backend 'docbook))
((eq backend 'ascii)
(org-add-props (match-string 0) '(org-whitespace t)))
(t (make-string (- (match-end 0) (match-beginning 0)) ?\ )))
'(org-protected t))
t t))))
(defun org-export-protect-verbatim ()
"Mark verbatim snippets with the protection property."
(goto-char (point-min))
@ -2100,12 +2126,13 @@ TYPE must be a string, any of:
(defun org-export-handle-include-files ()
"Include the contents of include files, with proper formatting."
(let ((case-fold-search t)
params file markup lang start end prefix prefix1 switches all)
params file markup lang start end prefix prefix1 switches all minlevel)
(goto-char (point-min))
(while (re-search-forward "^#\\+INCLUDE:?[ \t]+\\(.*\\)" nil t)
(setq params (read (concat "(" (match-string 1) ")"))
prefix (org-get-and-remove-property 'params :prefix)
prefix1 (org-get-and-remove-property 'params :prefix1)
minlevel (org-get-and-remove-property 'params :minlevel)
file (org-symname-or-string (pop params))
markup (org-symname-or-string (pop params))
lang (and (member markup '("src" "SRC"))
@ -2128,7 +2155,7 @@ TYPE must be a string, any of:
end (format "#+end_%s" markup))))
(insert (or start ""))
(insert (org-get-file-contents (expand-file-name file)
prefix prefix1 markup))
prefix prefix1 markup minlevel))
(or (bolp) (newline))
(insert (or end ""))))
all))
@ -2145,7 +2172,7 @@ TYPE must be a string, any of:
(when intersection
(error "Recursive #+INCLUDE: %S" intersection))))))
(defun org-get-file-contents (file &optional prefix prefix1 markup)
(defun org-get-file-contents (file &optional prefix prefix1 markup minlevel)
"Get the contents of FILE and return them as a string.
If PREFIX is a string, prepend it to each line. If PREFIX1
is a string, prepend it to the first line instead of PREFIX.
@ -2167,6 +2194,9 @@ take care of the block they are in."
(goto-char (match-beginning 0))
(insert ",")
(end-of-line 1)))
(when minlevel
(dotimes (lvl minlevel)
(org-map-region 'org-demote (point-min) (point-max))))
(buffer-string)))
(defun org-get-and-remove-property (listvar prop)
@ -2235,8 +2265,6 @@ in the list) and remove property and value from the list in LISTVAR."
(defvar org-export-latex-listings-langs) ;; defined in org-latex.el
(defvar org-export-latex-listings-w-names) ;; defined in org-latex.el
(defvar org-export-latex-minted-langs) ;; defined in org-latex.el
(defvar org-export-latex-minted-with-line-numbers) ;; defined in org-latex.el
(defun org-export-format-source-code-or-example
(backend lang code &optional opts indent caption)
"Format CODE from language LANG and return it formatted for export.
@ -2403,8 +2431,7 @@ INDENT was the original indentation of the block."
(format "\n%s $\\equiv$ \n"
(replace-regexp-in-string
"_" "\\\\_" caption)))
(format
"\\begin{minted}[mathescape,%s\nnumbersep=5pt,\nframe=lines,\nframesep=2mm]{%s}\n" (if org-export-latex-minted-with-line-numbers "\nlinenos," "") minted-lang)
(format "\\begin{minted}{%s}\n" minted-lang)
rtn "\\end{minted}\n"))))
(t (concat (car org-export-latex-verbatim-wrap)
rtn (cdr org-export-latex-verbatim-wrap))))
@ -2585,9 +2612,10 @@ command."
;; does do the trick.
(if (looking-at "#[^\r\n]*")
(append-to-buffer buffer (match-beginning 0) (1+ (match-end 0))))
(while (re-search-forward "[\n\r]#[^\n\r]*" nil t)
(append-to-buffer buffer (1+ (match-beginning 0))
(min (point-max) (1+ (match-end 0))))))
(when (re-search-forward "^\\*+[ \t]+" nil t)
(while (re-search-backward "[\n\r]#[^\n\r]*" nil t)
(append-to-buffer buffer (1+ (match-beginning 0))
(min (point-max) (1+ (match-end 0)))))))
(set-buffer buffer)
(let ((buffer-file-name file)
(org-inhibit-startup t))

View file

@ -6,7 +6,7 @@
;; Author: Carsten Dominik <carsten at orgmode dot org>
;; Keywords: outlines, hypermedia, calendar, wp
;; Homepage: http://orgmode.org
;; Version: 7.3
;; Version: 7.4
;;
;; This file is part of GNU Emacs.
;;
@ -685,6 +685,15 @@ If it is less than 8, the level-1 face gets re-used for level N+1 etc."
:type 'integer
:group 'org-faces)
(defcustom org-cycle-level-faces t
"Non-nil means level styles cycle after level `org-n-level-faces'.
Then so level org-n-level-faces+1 is styled like level 1.
If nil, then all levels >=org-n-level-faces are styled like
level org-n-level-faces"
:group 'org-appearance
:group 'org-faces
:type 'boolean)
(defface org-latex-and-export-specials
(let ((font (cond ((assq :inherit custom-face-attributes)
'(:inherit underline))

View file

@ -5,7 +5,7 @@
;; Author: Carsten Dominik <carsten at orgmode dot org>
;; Keywords: outlines, hypermedia, calendar, wp
;; Homepage: http://orgmode.org
;; Version: 7.3
;; Version: 7.4
;;
;; This file is part of GNU Emacs.
;;

View file

@ -5,7 +5,7 @@
;; Author: Carsten Dominik <carsten at orgmode dot org>
;; Keywords: outlines, hypermedia, calendar, wp
;; Homepage: http://orgmode.org
;; Version: 7.3
;; Version: 7.4
;;
;; This file is part of GNU Emacs.
;;
@ -303,7 +303,7 @@ or new, let the user edit the definition of the footnote."
(t
(setq re (concat "^" org-footnote-tag-for-non-org-mode-files "[ \t]*$"))
(unless (re-search-forward re nil t)
(let ((max (if (and (eq major-mode 'message-mode)
(let ((max (if (and (derived-mode-p 'message-mode)
(re-search-forward message-signature-separator nil t))
(progn (beginning-of-line) (point))
(goto-char (point-max)))))

View file

@ -5,7 +5,7 @@
;; Author: Lennart Borgman (lennart O borgman A gmail O com)
;; Keywords: outlines, hypermedia, calendar, wp
;; Homepage: http://orgmode.org
;; Version: 7.3
;; Version: 7.4
;;
;; This file is part of GNU Emacs.
;;

View file

@ -7,7 +7,7 @@
;; Tassilo Horn <tassilo at member dot fsf dot org>
;; Keywords: outlines, hypermedia, calendar, wp
;; Homepage: http://orgmode.org
;; Version: 7.3
;; Version: 7.4
;;
;; This file is part of GNU Emacs.
;;

View file

@ -5,7 +5,7 @@
;; Author: John Wiegley <johnw at gnu dot org>
;; Keywords: outlines, hypermedia, calendar, wp
;; Homepage: http://orgmode.org
;; Version: 7.3
;; Version: 7.4
;;
;; This file is part of GNU Emacs.
;;
@ -197,10 +197,7 @@ This list represents a \"habit\" for the rest of this module."
"Determine the relative priority of a habit.
This must take into account not just urgency, but consistency as well."
(let ((pri 1000)
(now (time-to-days
(or moment
(time-subtract (current-time)
(list 0 (* 3600 org-extend-today-until) 0)))))
(now (if moment (time-to-days moment) (org-today)))
(scheduled (org-habit-scheduled habit))
(deadline (org-habit-deadline habit)))
;; add 10 for every day past the scheduled date, and subtract for every

View file

@ -6,7 +6,7 @@
;; Author: Carsten Dominik <carsten at orgmode dot org>
;; Keywords: outlines, hypermedia, calendar, wp
;; Homepage: http://orgmode.org
;; Version: 7.3
;; Version: 7.4
;;
;; This file is part of GNU Emacs.
;;
@ -1213,7 +1213,11 @@ lang=\"%s\" xml:lang=\"%s\">
(throw 'nextline nil))
;; Protected HTML
(when (get-text-property 0 'org-protected line)
(when (and (get-text-property 0 'org-protected line)
;; Make sure it is the entire line that is protected
(not (< (or (next-single-property-change
0 'org-protected line) 10000)
(length line))))
(let (par (ind (get-text-property 0 'original-indentation line)))
(when (re-search-backward
"\\(<p>\\)\\([ \t\r\n]*\\)\\=" (- (point) 100) t)
@ -2316,10 +2320,9 @@ When TITLE is nil, just close all open levels."
(extra-class (and title (org-get-text-property-any 0 'html-container-class title)))
(preferred (and target
(cdr (assoc target org-export-preferred-target-alist))))
(remove (or preferred target))
(l org-level-max)
snumber snu href suffix)
(setq extra-targets (remove remove extra-targets))
(setq extra-targets (remove (or preferred target) extra-targets))
(setq extra-targets
(mapconcat (lambda (x)
(if (org-uuidgen-p x) (setq x (concat "ID-" x)))
@ -2358,12 +2361,13 @@ When TITLE is nil, just close all open levels."
(progn
(org-close-li)
(if target
(insert (format "<li id=\"%s\">" target) extra-targets title "<br/>\n")
(insert (format "<li id=\"%s\">" (or preferred target))
extra-targets title "<br/>\n")
(insert "<li>" title "<br/>\n")))
(aset org-levels-open (1- level) t)
(org-close-par-maybe)
(if target
(insert (format "<ul>\n<li id=\"%s\">" target)
(insert (format "<ul>\n<li id=\"%s\">" (or preferred target))
extra-targets title "<br/>\n")
(insert "<ul>\n<li>" title "<br/>\n"))))
(aset org-levels-open (1- level) t)

View file

@ -6,7 +6,7 @@
;; Author: Carsten Dominik <carsten at orgmode dot org>
;; Keywords: outlines, hypermedia, calendar, wp
;; Homepage: http://orgmode.org
;; Version: 7.3
;; Version: 7.4
;;
;; This file is part of GNU Emacs.
;;

View file

@ -5,7 +5,7 @@
;; Author: Carsten Dominik <carsten at orgmode dot org>
;; Keywords: outlines, hypermedia, calendar, wp
;; Homepage: http://orgmode.org
;; Version: 7.3
;; Version: 7.4
;;
;; This file is part of GNU Emacs.
;;
@ -600,15 +600,18 @@ optional argument MARKERP, return the position as a new marker."
(defun org-id-store-link ()
"Store a link to the current entry, using its ID."
(interactive)
(let* ((link (org-make-link "id:" (org-id-get-create)))
(case-fold-search nil)
(desc (save-excursion
(org-back-to-heading t)
(or (and (looking-at org-complex-heading-regexp)
(if (match-end 4) (match-string 4) (match-string 0)))
link))))
(org-store-link-props :link link :description desc :type "id")
link))
(when (and (buffer-file-name (buffer-base-buffer)) (org-mode-p))
(let* ((link (org-make-link "id:" (org-id-get-create)))
(case-fold-search nil)
(desc (save-excursion
(org-back-to-heading t)
(or (and (looking-at org-complex-heading-regexp)
(if (match-end 4)
(match-string 4)
(match-string 0)))
link))))
(org-store-link-props :link link :description desc :type "id")
link)))
(defun org-id-open (id)
"Go to the entry with id ID."

View file

@ -4,7 +4,7 @@
;; Author: Carsten Dominik <carsten at orgmode dot org>
;; Keywords: outlines, hypermedia, calendar, wp
;; Homepage: http://orgmode.org
;; Version: 7.3
;; Version: 7.4
;;
;; This file is part of GNU Emacs.
;;
@ -38,6 +38,10 @@
(eval-when-compile
(require 'cl))
(defvar org-inlinetask-min-level)
(declare-function org-inlinetask-get-task-level "org-inlinetask" ())
(declare-function org-inlinetask-in-task-p "org-inlinetask" ())
(defgroup org-indent nil
"Options concerning dynamic virtual outline indentation."
:tag "Org Indent"
@ -219,35 +223,49 @@ useful to make it ever so slightly different."
(defun org-indent-add-properties (beg end)
"Add indentation properties between BEG and END.
Assumes that BEG is at the beginning of a line."
(when (or t org-indent-mode)
(let ((inhibit-modification-hooks t)
ov b e n level exit nstars)
(with-silent-modifications
(save-excursion
(goto-char beg)
(while (not exit)
(setq e end)
(if (not (re-search-forward org-indent-outline-re nil t))
(setq e (point-max) exit t)
(setq e (match-beginning 0))
(if (>= e end) (setq exit t))
(setq level (- (match-end 0) (match-beginning 0) 1))
(setq nstars (- (* (1- level) org-indent-indentation-per-level)
(1- level)))
(add-text-properties
(point-at-bol) (point-at-eol)
(list 'line-prefix
(aref org-indent-stars nstars)
'wrap-prefix
(aref org-indent-strings
(* level org-indent-indentation-per-level)))))
(when (and b (> e b))
(add-text-properties
b e (list 'line-prefix (aref org-indent-strings n)
'wrap-prefix (aref org-indent-strings n))))
(setq b (1+ (point-at-eol))
n (* (or level 0) org-indent-indentation-per-level))))))))
(let* ((inhibit-modification-hooks t)
(inlinetaskp (featurep 'org-inlinetask))
(get-real-level (lambda (pos lvl)
(save-excursion
(goto-char pos)
(if (and inlinetaskp (org-inlinetask-in-task-p))
(org-inlinetask-get-task-level)
lvl))))
(b beg)
(e end)
(level 0)
(n 0)
exit nstars)
(with-silent-modifications
(save-excursion
(goto-char beg)
(while (not exit)
(setq e end)
(if (not (re-search-forward org-indent-outline-re nil t))
(setq e (point-max) exit t)
(setq e (match-beginning 0))
(if (>= e end) (setq exit t))
(unless (and inlinetaskp (org-inlinetask-in-task-p))
(setq level (- (match-end 0) (match-beginning 0) 1)))
(setq nstars (* (1- (funcall get-real-level e level))
(1- org-indent-indentation-per-level)))
(add-text-properties
(point-at-bol) (point-at-eol)
(list 'line-prefix
(aref org-indent-stars nstars)
'wrap-prefix
(aref org-indent-strings
(* (funcall get-real-level e level)
org-indent-indentation-per-level)))))
(when (> e b)
(add-text-properties
b e (list 'line-prefix (aref org-indent-strings n)
'wrap-prefix (aref org-indent-strings n))))
(setq b (1+ (point-at-eol))
n (* (funcall get-real-level b level)
org-indent-indentation-per-level)))))))
(defvar org-inlinetask-min-level)
(defun org-indent-refresh-section ()
"Refresh indentation properties in the current outline section.
Point is assumed to be at the beginning of a headline."
@ -255,7 +273,11 @@ Point is assumed to be at the beginning of a headline."
(when org-indent-mode
(let (beg end)
(save-excursion
(when (ignore-errors (org-back-to-heading))
(when (ignore-errors (let ((outline-regexp (format "\\*\\{1,%s\\}[ \t]+"
(if (featurep 'org-inlinetask)
(1- org-inlinetask-min-level)
""))))
(org-back-to-heading)))
(setq beg (point))
(setq end (or (save-excursion (or (outline-next-heading) (point)))))
(org-indent-remove-properties beg end)
@ -268,7 +290,11 @@ Point is assumed to be at the beginning of a headline."
(when org-indent-mode
(let ((beg (point)) (end limit))
(save-excursion
(and (ignore-errors (org-back-to-heading t))
(and (ignore-errors (let ((outline-regexp (format "\\*\\{1,%s\\}[ \t]+"
(if (featurep 'org-inlinetask)
(1- org-inlinetask-min-level)
""))))
(org-back-to-heading)))
(setq beg (point))))
(org-indent-remove-properties beg end)
(org-indent-add-properties beg end)))

View file

@ -6,7 +6,7 @@
;; Author: Carsten Dominik <carsten at orgmode dot org>
;; Keywords: outlines, hypermedia, calendar, wp
;; Homepage: http://orgmode.org
;; Version: 7.3
;; Version: 7.4
;;
;; This file is part of GNU Emacs.
;;

View file

@ -5,7 +5,7 @@
;; Author: Carsten Dominik <carsten at orgmode dot org>
;; Keywords: outlines, hypermedia, calendar, wp
;; Homepage: http://orgmode.org
;; Version: 7.3
;; Version: 7.4
;; This file is part of GNU Emacs.
@ -100,6 +100,60 @@ When nil, they will not be exported."
:group 'org-inlinetask
:type 'boolean)
(defvar org-inlinetask-export-templates
'((html "<pre class=\"inlinetask\"><b>%s%s</b><br>%s</pre>"
'((unless (eq todo "")
(format "<span class=\"%s %s\">%s%s</span> "
class todo todo priority))
heading content))
(latex "\\begin\{description\}\\item[%s%s]%s\\end\{description\}"
'((unless (eq todo "") (format "\\textsc\{%s%s\} " todo priority))
heading content))
(ascii " -- %s%s%s"
'((unless (eq todo "") (format "%s%s " todo priority))
heading
(unless (eq content "")
(format "\n ¦ %s"
(mapconcat 'identity (org-split-string content "\n")
"\n ¦ ")))))
(docbook "<variablelist>
<varlistentry>
<term>%s%s</term>
<listitem><para>%s</para></listitem>
</varlistentry>
</variablelist>"
'((unless (eq todo "") (format "%s%s " todo priority))
heading content)))
"Templates for inline tasks in various exporters.
This variable is an alist in the shape of (BACKEND STRING OBJECTS).
BACKEND is the name of the backend for the template (ascii, html...).
STRING is a format control string.
OBJECTS is a list of elements to be substituted into the format
string. They can be of any type, from a string to a form
returning a value (thus allowing conditional insertion). A nil
object will be substituted as the empty string. Obviously, there
must be at least as many objects as %-sequences in the format
string.
Moreover, the following special keywords are provided: `todo',
`priority', `heading', `content', `tags'. If some of them are not
defined in an inline task, their value is the empty string.
As an example, valid associations are:
(html \"<ul><li>%s <p>%s</p></li></ul>\" (heading content))
or, with the additional package \"todonotes\" for LaTeX,
(latex \"\\todo[inline]{\\textbf{\\textsf{%s %s}}\\linebreak{} %s}\"
'((unless (eq todo \"\")
(format \"\\textsc{%s%s}\" todo priority))
heading content)))")
(defvar org-odd-levels-only)
(defvar org-keyword-time-regexp)
(defvar org-drawer-regexp)
@ -131,24 +185,56 @@ If prefix arg NO-STATE is set, ignore `org-inlinetask-default-state'."
(end-of-line -1))
(define-key org-mode-map "\C-c\C-xt" 'org-inlinetask-insert-task)
(defun org-inlinetask-outline-regexp ()
"Return string matching an inline task heading.
The number of levels is controlled by `org-inlinetask-min-level'."
(let ((nstars (if org-odd-levels-only
(1- (* org-inlinetask-min-level 2))
org-inlinetask-min-level)))
(format "^\\(\\*\\{%d,\\}\\)[ \t]+" nstars)))
(defun org-inlinetask-in-task-p ()
"Return true if point is inside an inline task."
(save-excursion
(let* ((nstars (if org-odd-levels-only
(1- (* 2 (or org-inlinetask-min-level 200)))
(or org-inlinetask-min-level 200)))
(stars-re (concat "^\\(?:\\*\\{"
(format "%d" (- nstars 1))
",\\}\\)[ \t]+"))
(let* ((stars-re (org-inlinetask-outline-regexp))
(task-beg-re (concat stars-re "\\(?:.*\\)"))
(task-end-re (concat stars-re "\\(?:END\\|end\\)")))
(task-end-re (concat stars-re "\\(?:END\\|end\\)[ \t]*$")))
(beginning-of-line)
(or (looking-at task-beg-re)
(and (re-search-forward "^\\*+[ \t]+" nil t)
(progn (beginning-of-line) (looking-at task-end-re)))))))
(defvar htmlp) ; dynamically scoped into the next function
(defvar latexp) ; dynamically scoped into the next function
(defun org-inlinetask-goto-beginning ()
"Go to the beginning of the inline task at point."
(end-of-line)
(re-search-backward (org-inlinetask-outline-regexp) nil t)
(when (org-looking-at-p (concat (org-inlinetask-outline-regexp) "END[ \t]*$"))
(re-search-backward (org-inlinetask-outline-regexp) nil t)))
(defun org-inlinetask-goto-end ()
"Go to the end of the inline task at point."
(beginning-of-line)
(cond
((org-looking-at-p (concat (org-inlinetask-outline-regexp) "END[ \t]*$"))
(forward-line 1))
((org-looking-at-p (org-inlinetask-outline-regexp))
(forward-line 1)
(when (org-inlinetask-in-task-p)
(re-search-forward (org-inlinetask-outline-regexp) nil t)
(forward-line 1)))
(t
(re-search-forward (org-inlinetask-outline-regexp) nil t)
(forward-line 1))))
(defun org-inlinetask-get-task-level ()
"Get the level of the inline task around.
This assumes the point is inside an inline task."
(save-excursion
(end-of-line)
(re-search-backward (org-inlinetask-outline-regexp) nil t)
(- (match-end 1) (match-beginning 1))))
(defvar backend) ; dynamically scoped into the next function
(defun org-inlinetask-export-handler ()
"Handle headlines with level larger or equal to `org-inlinetask-min-level'.
Either remove headline and meta data, or do special formatting."
@ -158,7 +244,7 @@ Either remove headline and meta data, or do special formatting."
(or org-inlinetask-min-level 200)))
(re1 (format "^\\(\\*\\{%d,\\}\\) .*\n" nstars))
(re2 (concat "^[ \t]*" org-keyword-time-regexp))
headline beg end stars content indent)
headline beg end stars content)
(while (re-search-forward re1 nil t)
(setq headline (match-string 0)
stars (match-string 1)
@ -179,40 +265,34 @@ Either remove headline and meta data, or do special formatting."
(delete-region beg (1+ (match-end 0))))
(goto-char beg)
(when org-inlinetask-export
(when (string-match org-complex-heading-regexp headline)
(setq headline (concat
(if (match-end 2)
(concat
(org-add-props
(format
"@<span class=\"%s %s\"> %s@</span>"
(if (member (match-string 2 headline)
org-done-keywords)
"done" "todo")
(match-string 2 headline)
(match-string 2 headline))
nil 'org-protected t)
" ") "")
(match-string 4 headline)))
(when content
;; content formatting
(when content
(if (not (string-match "\\S-" content))
(setq content nil)
(if (string-match "[ \t\n]+\\'" content)
(setq content (substring content 0 (match-beginning 0))))
(setq content (org-remove-indentation content))
(if latexp (setq content (concat "\\quad \\\\\n" content)))))
(insert (make-string (org-inlinetask-get-current-indentation) ?\ )
"- ")
(setq indent (make-string (current-column) ?\ ))
(insert headline " ::")
(if content
(insert (if htmlp " " (concat "\n" indent))
(mapconcat 'identity (org-split-string content "\n")
(concat "\n" indent)) "\n")
(insert "\n"))
(insert indent)
(backward-delete-char 2)
(insert "THISISTHEINLINELISTTEMINATOR\n"))))))
(setq content (org-remove-indentation content))))
(setq content (or content ""))
;; grab elements to export
(when (string-match org-complex-heading-regexp headline)
(let* ((todo (or (match-string 2 headline) ""))
(class (or (and (eq "" todo) "")
(if (member todo org-done-keywords) "done" "todo")))
(priority (or (match-string 3 headline) ""))
(heading (or (match-string 4 headline) ""))
(tags (or (match-string 5 headline) ""))
(backend-spec (assq backend org-inlinetask-export-templates))
(format-str (nth 1 backend-spec))
(tokens (cadr (nth 2 backend-spec)))
;; change nil arguments into empty strings
(nil-to-str (lambda (el) (or (eval el) "")))
;; build and protect export string
(export-str (org-add-props
(eval (append '(format format-str)
(mapcar nil-to-str tokens)))
nil 'org-protected t)))
;; eventually insert it
(insert export-str "\n")))))))
(defun org-inlinetask-get-current-indentation ()
"Get the indentation of the last non-while line above this one."
@ -247,31 +327,11 @@ Either remove headline and meta data, or do special formatting."
org-inlinetask-min-level))
(replace-match "")))
(defun org-inlinetask-remove-terminator ()
(let (beg end)
(save-excursion
(goto-char (point-min))
(while (re-search-forward "THISISTHEINLINELISTTEMINATOR\n" nil t)
(setq beg (match-beginning 0) end (match-end 0))
(save-excursion
(beginning-of-line 1)
(and (looking-at "<p\\(ara\\)?>THISISTHEINLINELISTTEMINATOR[ \t\n]*</p\\(ara\\)?>")
(setq beg (point) end (match-end 0))))
(delete-region beg end)))))
(eval-after-load "org-exp"
'(add-hook 'org-export-preprocess-after-tree-selection-hook
'org-inlinetask-export-handler))
(eval-after-load "org"
'(add-hook 'org-font-lock-hook 'org-inlinetask-fontify))
(eval-after-load "org-html"
'(add-hook 'org-export-html-final-hook 'org-inlinetask-remove-terminator))
(eval-after-load "org-latex"
'(add-hook 'org-export-latex-final-hook 'org-inlinetask-remove-terminator))
(eval-after-load "org-ascii"
'(add-hook 'org-export-ascii-final-hook 'org-inlinetask-remove-terminator))
(eval-after-load "org-docbook"
'(add-hook 'org-export-docbook-final-hook 'org-inlinetask-remove-terminator))
(provide 'org-inlinetask)

View file

@ -4,7 +4,7 @@
;;
;; Author: Philip Jackson <emacs@shellarchive.co.uk>
;; Keywords: erc, irc, link, org
;; Version: 7.3
;; Version: 7.4
;;
;; This file is part of GNU Emacs.
;;

View file

@ -6,7 +6,7 @@
;; Author: Carsten Dominik <carsten at orgmode dot org>
;; Keywords: outlines, hypermedia, calendar, wp
;; Homepage: http://orgmode.org
;; Version: 7.3
;; Version: 7.4
;;
;; This file is part of GNU Emacs.
;;

View file

@ -4,7 +4,7 @@
;;
;; Emacs Lisp Archive Entry
;; Filename: org-latex.el
;; Version: 7.3
;; Version: 7.4
;; Author: Bastien Guerry <bzg AT altern DOT org>
;; Maintainer: Carsten Dominik <carsten.dominik AT gmail DOT com>
;; Keywords: org, wp, tex
@ -295,7 +295,14 @@ markup defined, the first one in the association list will be used."
:group 'org-export-latex
:type 'string)
(defcustom org-export-latex-hyperref-format "\\href{%s}{%s}"
(defcustom org-export-latex-href-format "\\href{%s}{%s}"
"A printf format string to be applied to href links.
The format must contain two %s instances. The first will be filled with
the link, the second with the link description."
:group 'org-export-latex
:type 'string)
(defcustom org-export-latex-hyperref-format "\\hyperref[%s]{%s}"
"A printf format string to be applied to hyperref links.
The format must contain two %s instances. The first will be filled with
the link, the second with the link description."
@ -453,12 +460,6 @@ pygmentize -L lexers
(symbol :tag "Major mode ")
(string :tag "Listings language"))))
(defcustom org-export-latex-minted-with-line-numbers nil
"Should source code line numbers be included when exporting
with the latex minted package?"
:group 'org-export-latex
:type 'boolean)
(defcustom org-export-latex-remove-from-headlines
'(:todo nil :priority nil :tags nil)
"A plist of keywords to remove from headlines. OBSOLETE.
@ -1280,12 +1281,13 @@ OPT-PLIST is the options plist for current buffer."
(org-export-apply-macros-in-string org-export-latex-append-header)
;; define alert if not yet defined
"\n\\providecommand{\\alert}[1]{\\textbf{#1}}"
;; beginning of the document
"\n\\begin{document}\n\n"
;; insert the title
(format
"\n\n\\title{%s}\n"
;; convert the title
(org-export-latex-content
title '(lists tables fixed-width keywords)))
(org-export-latex-fontify-headline title))
;; insert author info
(if (plist-get opt-plist :author-info)
(format "\\author{%s}\n"
@ -1297,8 +1299,6 @@ OPT-PLIST is the options plist for current buffer."
(format-time-string
(or (plist-get opt-plist :date)
org-export-latex-date-format)))
;; beginning of the document
"\n\\begin{document}\n\n"
;; insert the title command
(when (string-match "\\S-" title)
(if (string-match "%s" org-export-latex-title-command)
@ -1325,7 +1325,7 @@ If END is non-nil, it is the end of the region."
(save-excursion
(goto-char (or beg (point-min)))
(let* ((pt (point))
(end (if (re-search-forward "^\\*+ " end t)
(end (if (re-search-forward (org-get-limited-outline-regexp) end t)
(goto-char (match-beginning 0))
(goto-char (or end (point-max))))))
(prog1
@ -1452,6 +1452,33 @@ links, keywords, lists, tables, fixed-width"
;; FIXME: org-inside-LaTeX-fragment-p doesn't work when the $...$ is at
;; the beginning of the buffer - inserting "\n" is safe here though.
(insert "\n" string)
;; Preserve math snippets
(let* ((matchers (plist-get org-format-latex-options :matchers))
(re-list org-latex-regexps)
beg end re e m n block off)
;; Check the different regular expressions
(while (setq e (pop re-list))
(setq m (car e) re (nth 1 e) n (nth 2 e)
block (if (nth 3 e) "\n\n" ""))
(setq off (if (member m '("$" "$1")) 1 0))
(when (and (member m matchers) (not (equal m "begin")))
(goto-char (point-min))
(while (re-search-forward re nil t)
(setq beg (+ (match-beginning 0) off) end (- (match-end 0) 0))
(add-text-properties beg end
'(org-protected t org-latex-math t))))))
;; Convert LaTeX to \LaTeX{} and TeX to \TeX{}
(goto-char (point-min))
(let ((case-fold-search nil))
(while (re-search-forward "\\<\\(\\(La\\)?TeX\\)\\>" nil t)
(unless (eq (char-before (match-beginning 1)) ?\\)
(org-if-unprotected-1
(replace-match (org-export-latex-protect-string
(concat "\\" (match-string 1)
"{}")) t t)))))
(goto-char (point-min))
(let ((re (concat "\\\\\\([a-zA-Z]+\\)"
"\\(?:<[^<>\n]*>\\)*"
@ -2016,10 +2043,10 @@ The conversion is made depending of STRING-BEFORE and STRING-AFTER."
(insert (format
(org-export-get-coderef-format path desc)
(cdr (assoc path org-export-code-refs)))))
(radiop (insert (format "\\hyperref[%s]{%s}"
(radiop (insert (format org-export-latex-hyperref-format
(org-solidify-link-text raw-path) desc)))
((not type)
(insert (format "\\hyperref[%s]{%s}"
(insert (format org-export-latex-hyperref-format
(org-remove-initial-hash
(org-solidify-link-text raw-path))
desc)))
@ -2030,7 +2057,7 @@ The conversion is made depending of STRING-BEFORE and STRING-AFTER."
;; a LaTeX issue, but we here implement a work-around anyway.
(setq path (org-export-latex-protect-amp path)
desc (org-export-latex-protect-amp desc)))
(insert (format org-export-latex-hyperref-format path desc)))
(insert (format org-export-latex-href-format path desc)))
((functionp (setq fnc (nth 2 (assoc type org-link-protocols))))
;; The link protocol has a function for formatting the link
@ -2356,7 +2383,7 @@ The conversion is made depending of STRING-BEFORE and STRING-AFTER."
"\n"
(match-string 1 res))
t t res)))
(insert res "\n"))))
(insert res))))
(defconst org-latex-entities
'("\\!"

View file

@ -7,7 +7,7 @@
;; Bastien Guerry <bzg AT altern DOT org>
;; Keywords: outlines, hypermedia, calendar, wp
;; Homepage: http://orgmode.org
;; Version: 7.3
;; Version: 7.4
;;
;; This file is part of GNU Emacs.
;;
@ -462,7 +462,8 @@ List ending is determined by indentation of text. See
(forward-line -1)
(catch 'exit
(while t
(let ((ind (org-get-indentation)))
(let ((ind (+ (or (get-text-property (point) 'original-indentation) 0)
(org-get-indentation))))
(cond
((looking-at "^[ \t]*:END:")
(throw 'exit item-ref))
@ -502,7 +503,8 @@ List ending is determined by the indentation of text. See
(catch 'exit
(while t
(skip-chars-forward " \t")
(let ((ind (org-get-indentation)))
(let ((ind (+ (or (get-text-property (point) 'original-indentation) 0)
(org-get-indentation))))
(cond
((or (>= (point) limit)
(looking-at ":END:"))
@ -518,7 +520,11 @@ List ending is determined by the indentation of text. See
(setq ind-ref ind)
(forward-line 1))
((<= ind ind-ref)
(throw 'exit (point-at-bol)))
(throw 'exit (progn
;; Again, ensure bottom is just after a
;; non-blank line.
(skip-chars-backward " \r\t\n")
(min (point-max) (1+ (point-at-eol))))))
((looking-at "#\\+begin_")
(re-search-forward "[ \t]*#\\+end_")
(forward-line 1))
@ -636,7 +642,7 @@ function ends."
;; insert bullet above item in order to avoid bothering
;; with possible blank lines ending last item.
(goto-char (org-get-item-beginning))
(indent-to-column ind)
(org-indent-to-column ind)
(insert (concat bullet (when checkbox "[ ] ") after-bullet))
;; Stay between after-bullet and before text.
(save-excursion
@ -1060,7 +1066,7 @@ so this really moves item trees."
(org-list-exchange-items actual-item next-item bottom)
(org-list-repair nil nil bottom)
(goto-char (org-get-next-item (point) bottom))
(move-to-column col)))))
(org-move-to-column col)))))
(defun org-move-item-up ()
"Move the plain list item at point up, i.e. swap with previous item.
@ -1081,7 +1087,7 @@ so this really moves item trees."
(error "Cannot move this item further up"))
(org-list-exchange-items prev-item actual-item bottom)
(org-list-repair nil top bottom)
(move-to-column col)))))
(org-move-to-column col)))))
(defun org-insert-item (&optional checkbox)
"Insert a new item at the current level.
@ -1481,7 +1487,7 @@ BOTTOM is position at list ending."
;; this is not an empty line
(let ((i (org-get-indentation)))
(when (and (> i 0) (> (+ i delta) 0))
(indent-line-to (+ i delta)))))
(org-indent-line-to (+ i delta)))))
(beginning-of-line 0)))))
(defun org-outdent-item ()
@ -1543,7 +1549,7 @@ Return t at each successful move."
(ignore-errors
(org-list-indent-item-generic 1 t top bottom))))
(t (back-to-indentation)
(indent-to-column (car org-tab-ind-state))
(org-indent-to-column (car org-tab-ind-state))
(end-of-line)
(org-list-repair (cdr org-tab-ind-state))
;; Break cycle
@ -1629,35 +1635,36 @@ If WHICH is a valid string, use that as the new bullet. If WHICH
is an integer, 0 means `-', 1 means `+' etc. If WHICH is
'previous, cycle backwards."
(interactive "P")
(let* ((top (org-list-top-point))
(bullet (save-excursion
(goto-char (org-get-beginning-of-list top))
(org-get-bullet)))
(current (cond
((string-match "\\." bullet) "1.")
((string-match ")" bullet) "1)")
(t bullet)))
(bullet-rule-p (cdr (assq 'bullet org-list-automatic-rules)))
(bullet-list (append '("-" "+" )
;; *-bullets are not allowed at column 0
(unless (and bullet-rule-p
(looking-at "\\S-")) '("*"))
;; Description items cannot be numbered
(unless (and bullet-rule-p
(or (eq org-plain-list-ordered-item-terminator ?\))
(org-at-item-description-p))) '("1."))
(unless (and bullet-rule-p
(or (eq org-plain-list-ordered-item-terminator ?.)
(org-at-item-description-p))) '("1)"))))
(len (length bullet-list))
(item-index (- len (length (member current bullet-list))))
(get-value (lambda (index) (nth (mod index len) bullet-list)))
(new (cond
((member which bullet-list) which)
((numberp which) (funcall get-value which))
((eq 'previous which) (funcall get-value (1- item-index)))
(t (funcall get-value (1+ item-index))))))
(org-list-repair new top)))
(save-excursion
(let* ((top (org-list-top-point))
(bullet (progn
(goto-char (org-get-beginning-of-list top))
(org-get-bullet)))
(current (cond
((string-match "\\." bullet) "1.")
((string-match ")" bullet) "1)")
(t bullet)))
(bullet-rule-p (cdr (assq 'bullet org-list-automatic-rules)))
(bullet-list (append '("-" "+" )
;; *-bullets are not allowed at column 0
(unless (and bullet-rule-p
(looking-at "\\S-")) '("*"))
;; Description items cannot be numbered
(unless (and bullet-rule-p
(or (eq org-plain-list-ordered-item-terminator ?\))
(org-at-item-description-p))) '("1."))
(unless (and bullet-rule-p
(or (eq org-plain-list-ordered-item-terminator ?.)
(org-at-item-description-p))) '("1)"))))
(len (length bullet-list))
(item-index (- len (length (member current bullet-list))))
(get-value (lambda (index) (nth (mod index len) bullet-list)))
(new (cond
((member which bullet-list) which)
((numberp which) (funcall get-value which))
((eq 'previous which) (funcall get-value (1- item-index)))
(t (funcall get-value (1+ item-index))))))
(org-list-repair new top))))
;;; Checkboxes
@ -2029,7 +2036,7 @@ sublevels as a list of strings."
(while (org-search-forward-unenclosed org-item-beginning-re end t)
(save-excursion
(beginning-of-line)
(setq ltype (cond ((looking-at-p "^[ \t]*[0-9]") 'ordered)
(setq ltype (cond ((org-looking-at-p "^[ \t]*[0-9]") 'ordered)
((org-at-item-description-p) 'descriptive)
(t 'unordered))))
(let* ((indent1 (org-get-indentation))

View file

@ -5,7 +5,7 @@
;; Author: John Wiegley <johnw@gnu.org>
;; Christopher Suckling <suckling at gmail dot com>
;; Version: 7.3
;; Version: 7.4
;; Keywords: outlines, hypermedia, calendar, wp
;; This file is part of GNU Emacs.

View file

@ -6,7 +6,7 @@
;; Author: Carsten Dominik <carsten at orgmode dot org>
;; Keywords: outlines, hypermedia, calendar, wp
;; Homepage: http://orgmode.org
;; Version: 7.3
;; Version: 7.4
;;
;; This file is part of GNU Emacs.
;;
@ -46,9 +46,16 @@
(if (or (> emacs-major-version 23)
(and (>= emacs-major-version 23)
(>= emacs-minor-version 2)))
(called-interactively-p ,kind)
(with-no-warnings (called-interactively-p ,kind)) ;; defined with no argument in <=23.1
(interactive-p))))
(if (and (not (fboundp 'with-silent-modifications))
(or (< emacs-major-version 23)
(and (= emacs-major-version 23)
(< emacs-minor-version 2))))
(defmacro with-silent-modifications (&rest body)
`(org-unmodified ,@body)))
(defmacro org-bound-and-true-p (var)
"Return the value of symbol VAR if it is bound, else nil."
`(and (boundp (quote ,var)) ,var))

View file

@ -5,7 +5,7 @@
;; Author: Tokuya Kameshima <kames at fa2 dot so-net dot ne dot jp>
;; Keywords: outlines, hypermedia, calendar, wp
;; Homepage: http://orgmode.org
;; Version: 7.3
;; Version: 7.4
;; This file is part of GNU Emacs.

View file

@ -6,7 +6,7 @@
;; Author: Thomas Baumann <thomas dot baumann at ch dot tum dot de>
;; Keywords: outlines, hypermedia, calendar, wp
;; Homepage: http://orgmode.org
;; Version: 7.3
;; Version: 7.4
;;
;; This file is part of GNU Emacs.
;;

View file

@ -5,7 +5,7 @@
;; Author: Carsten Dominik <carsten at orgmode dot org>
;; Keywords: outlines, hypermedia, calendar, wp
;; Homepage: http://orgmode.org
;; Version: 7.3
;; Version: 7.4
;;
;; This file is part of GNU Emacs.
;;

View file

@ -4,7 +4,7 @@
;; Author: Carsten Dominik <carsten at orgmode dot org>
;; Keywords: outlines, hypermedia, calendar, wp
;; Homepage: http://orgmode.org
;; Version: 7.3
;; Version: 7.4
;;
;; This file is part of GNU Emacs.
;;

View file

@ -1,11 +1,10 @@
;;; org-mouse.el --- Better mouse support for org-mode
;; Copyright (C) 2006, 2007, 2008, 2009, 2010
;; Free Software Foundation, Inc.
;; Copyright (C) 2006, 2007, 2008, 2009, 2010 Free Software Foundation
;;
;; Author: Piotr Zielinski <piotr dot zielinski at gmail dot com>
;; Maintainer: Carsten Dominik <carsten at orgmode dot org>
;; Version: 7.3
;; Version: 7.4
;;
;; This file is part of GNU Emacs.
;;
@ -1101,10 +1100,10 @@ This means, between the beginning of line and the point."
"--"
["Day View" org-agenda-day-view
:active (org-agenda-check-type nil 'agenda)
:style radio :selected (equal org-agenda-ndays 1)]
:style radio :selected (eq org-agenda-current-span 'day)]
["Week View" org-agenda-week-view
:active (org-agenda-check-type nil 'agenda)
:style radio :selected (equal org-agenda-ndays 7)]
:style radio :selected (eq org-agenda-current-span 'week)]
"--"
["Show Logbook entries" org-agenda-log-mode
:style toggle :selected org-agenda-show-log

View file

@ -5,7 +5,7 @@
;; Author: Eric Schulte <schulte dot eric at gmail dot com>
;; Keywords: tables, plotting
;; Homepage: http://orgmode.org
;; Version: 7.3
;; Version: 7.4
;;
;; This file is part of GNU Emacs.
;;

View file

@ -9,7 +9,7 @@
;; Author: Ross Patterson <me AT rpatterson DOT net>
;; Maintainer: Sebastian Rose <sebastian_rose AT gmx DOT de>
;; Keywords: org, emacsclient, wp
;; Version: 7.3
;; Version: 7.4
;; This file is part of GNU Emacs.
;;
@ -313,7 +313,7 @@ encodeURIComponent. E.g. `%C3%B6' is the german Umlaut `ü'."
(let* ((start (match-beginning 0))
(end (match-end 0))
(hex (match-string 0 str))
(replacement (org-protocol-unhex-compound hex)))
(replacement (org-protocol-unhex-compound (upcase hex))))
(setq tmp (concat tmp (substring str 0 start) replacement))
(setq str (substring str end))))
(setq tmp (concat tmp str))

View file

@ -5,7 +5,7 @@
;; Author: David O'Toole <dto@gnu.org>
;; Maintainer: Carsten Dominik <carsten DOT dominik AT gmail DOT com>
;; Keywords: hypermedia, outlines, wp
;; Version: 7.3
;; Version: 7.4
;; This file is part of GNU Emacs.
;;

View file

@ -6,7 +6,7 @@
;; Author: Carsten Dominik <carsten at orgmode dot org>
;; Keywords: outlines, hypermedia, calendar, wp
;; Homepage: http://orgmode.org
;; Version: 7.3
;; Version: 7.4
;;
;; This file is part of GNU Emacs.
;;

View file

@ -6,7 +6,7 @@
;; Author: Carsten Dominik <carsten at orgmode dot org>
;; Keywords: outlines, hypermedia, calendar, wp
;; Homepage: http://orgmode.org
;; Version: 7.3
;; Version: 7.4
;;
;; This file is part of GNU Emacs.
;;

View file

@ -8,7 +8,7 @@
;; Dan Davison <davison at stats dot ox dot ac dot uk>
;; Keywords: outlines, hypermedia, calendar, wp
;; Homepage: http://orgmode.org
;; Version: 7.3
;; Version: 7.4
;;
;; This file is part of GNU Emacs.
;;
@ -240,8 +240,8 @@ buffer."
block-nindent (nth 5 info)
lang-f (intern (concat lang "-mode"))
begline (save-excursion (goto-char beg) (org-current-line)))
(if (and mark (>= mark beg) (<= mark end))
(save-excursion (goto-char mark)
(if (and mark (>= mark beg) (<= mark (1+ end)))
(save-excursion (goto-char (min mark end))
(setq markline (org-current-line)
markcol (current-column))))
(if (equal lang-f 'table.el-mode)

View file

@ -6,7 +6,7 @@
;; Author: Carsten Dominik <carsten at orgmode dot org>
;; Keywords: outlines, hypermedia, calendar, wp
;; Homepage: http://orgmode.org
;; Version: 7.3
;; Version: 7.4
;;
;; This file is part of GNU Emacs.
;;
@ -48,6 +48,12 @@
(defvar org-export-html-table-tag) ; defined in org-exp.el
(defvar constants-unit-system)
(defvar orgtbl-after-send-table-hook nil
"Hook for functions attaching to `C-c C-c', if the table is sent.
This can be used to add additional functionality after the table is sent
to the receiver position, othewise, if table is not sent, the functions
are not run.")
(defcustom orgtbl-optimized (eq org-enable-table-editor 'optimized)
"Non-nil means use the optimized table editor version for `orgtbl-mode'.
In the optimized version, the table editor takes over all simple keys that
@ -3729,7 +3735,8 @@ With prefix arg, also recompute table."
(call-interactively 'org-table-recalculate)
(org-table-maybe-recalculate-line))
(call-interactively 'org-table-align)
(orgtbl-send-table 'maybe))
(when (orgtbl-send-table 'maybe)
(run-hooks 'orgtbl-after-send-table-hook)))
((eq action 'recalc)
(save-excursion
(beginning-of-line 1)
@ -3943,7 +3950,10 @@ this table."
(orgtbl-send-replace-tbl name txt))
(setq ntbl (1+ ntbl)))
(message "Table converted and installed at %d receiver location%s"
ntbl (if (> ntbl 1) "s" "")))))
ntbl (if (> ntbl 1) "s" ""))
(if (> ntbl 0)
ntbl
nil))))
(defun org-remove-by-index (list indices &optional i0)
"Remove the elements in LIST with indices in INDICES.

View file

@ -4,7 +4,7 @@
;;
;; Emacs Lisp Archive Entry
;; Filename: org-taskjuggler.el
;; Version: 7.3
;; Version: 7.4
;; Author: Christian Egli
;; Maintainer: Christian Egli
;; Keywords: org, taskjuggler, project planning

View file

@ -5,7 +5,7 @@
;; Author: Carsten Dominik <carsten at orgmode dot org>
;; Keywords: outlines, hypermedia, calendar, wp
;; Homepage: http://orgmode.org
;; Version: 7.3
;; Version: 7.4
;;
;; This file is part of GNU Emacs.
;;

View file

@ -6,7 +6,7 @@
;; Author: Carsten Dominik <carsten at orgmode dot org>
;; Keywords: outlines, hypermedia, calendar, wp
;; Homepage: http://orgmode.org
;; Version: 7.3
;; Version: 7.4
;;
;; This file is part of GNU Emacs.
;;

View file

@ -5,7 +5,7 @@
;; Author: Andy Stewart <lazycat dot manatee at gmail dot com>
;; Keywords: outlines, hypermedia, calendar, wp
;; Homepage: http://orgmode.org
;; Version: 7.3
;; Version: 7.4
;;
;; This file is part of GNU Emacs.
;;

View file

@ -7,7 +7,7 @@
;; David Maus <dmaus at ictsoc dot de>
;; Keywords: outlines, hypermedia, calendar, wp
;; Homepage: http://orgmode.org
;; Version: 7.3
;; Version: 7.4
;;
;; This file is part of GNU Emacs.
;;

View file

@ -6,7 +6,7 @@
;; Author: Carsten Dominik <carsten at orgmode dot org>
;; Keywords: outlines, hypermedia, calendar, wp
;; Homepage: http://orgmode.org
;; Version: 7.3
;; Version: 7.4
;;
;; This file is part of GNU Emacs.
;;

Some files were not shown because too many files have changed in this diff Show more