Message-mode assigns auto-safe file names to temporary buffers, in the
draft directory. This causes problems when running message-mode in a
temporary buffer with with-temp-buffer. When the form tries to kill
the buffer, is asks for saving it....
This commit turns off the buffer-modified flag and so avoids the
query.
Patch by Nick Dokos.
Running a command that would use the tag scanner could suffer a large
slow-down when many entries match, because the tag list with
inheritance forces each matching entry to walk the hierarchy.
Now, it is possible to avoid this penalty by using the variable
`org-scanner-tags', or by binding the `org-trust-scanner-tags' to t
around calls to `org-get-tags-at' and `org-entry-properties' when
retrieving tags and properties for the current entry in the
scanner/mapper.
An agenda item carries a full list of tags. The list must normally be
made, but not during a tags scan. So now the tags scan does pass on
its list instead, which should make things faster.
Jeff Mickey writes:
> Hey all,
>
> To reproduce:
>
> * TODO Make Bicycle :project:workshop:
> ** TODO Buy stuff
> ** TODO Build stuff
> ** TODO Test stuff
>
> (setq org-use-tag-inheritance t)
> (setq org-tags-exclude-from-inheritance '("project"))
>
> <C-a m> to type in a match string to search, I type in "project"
>
> I expected to see:
> TODO Make Bicycle
>
> I saw:
> TODO Make Bicycle
> .TODO Buy stuff
> .TODO Build stuff
> .TODO Test stuff
>
> I assume this isn't what is supposed to happen. I'm currently at work
> so I can't investigate and provide a diff, but it seems like there
> needs to be a check in org.el:10144:org-get-tags-at to remove tags
> that are explicitly excluded from inheritance.
This commit fixes the bug.
Custom commands can now bind `org-agenda-filter-preset'. This filter
will then be present in the agenda view and persist through refresh
and further filtering. Only a new agenda command will remove the
filter again.
uuidgen ids may start with a number and therefore are not valid names
in HTML. Therefore we now use and "ID-" prefix for such IDs when
exporting to HTML.
The variable org-priority-faces can now be used to set special faces
for different priority cookies.
Also, in the agenda, the default is now to fontify only the priority
cookie, not the entire task. See the variable
`org-agenda-fontify-priorities'.
Before, the bibliography will exist inside the outline structure, as
part of the last section. This commit adds code to find it, cut it
out, and move it to a better location.
Before this patch, org-agenda-quit would delete the agenda window if
the frame had more than one window. This patch changes that behavior
slightly so that if org-agenda-window-setup is 'current-window, the
agenda window won't be deleted.
Org erroneously filed top-level headings as level 2, because it
assumes that if should file below some heading. However, if there is
no heading to file under, this should be turned off.
Patch by igrekster.
When inserting new list entries, sometime empty lines will be
inserted automatically. This, however, makes only sense if empty
lines do not terminate the list, as configured by
`org-empty-line-terminates-plain-lists'.
This commit makes sure that, if
`org-empty-line-terminates-plain-lists' is set, automatic empty lines
will never be inserted.
Ian Barton writes:
>
> This has been happening for a while. I suspect it's something in my
> settings, but I can't work out what. When I publish a single file, I
> get the following error:
>
> Debugger entered--Lisp error: (wrong-type-argument arrayp nil)
> file-truename(nil)
> org-publish-file("/home/ian/nfs/firewall/Documents/org/holiday/holiday.org")
> org-publish-current-file(nil)
> call-interactively(org-publish-current-file)
> org-export(nil)
> call-interactively(org-export)
>
> Publishing a whole project works fine.
This was caused by an attempt of the publishing code to always find
the top enclosing project. While this makes sense when publishing a
project, for a single file we want just the smallest enclosing
project. This commit makes sure that this difference is treated
correctly.
A new hook is introduced, `org-agenda-before-write-hook'.
A function that ca be added to this hook is
`org-agenda-add-entry-text'. When this is done, each of the entries
shown in the agenda is amended with text that in the original buffer
is part of the entry text below the headline. Drawers are not copied,
and also the line with scheduling and deadline information is not
used. Finally, the number of ines to be added is imited by
`org-agenda-add-entry-text-maxlines'.
Links with description not create a note before the next headline that
contains the link. In the text, the description will be shown.
The new variable `org-export-ascii-links-to-notes' can be configured
to turn off this behavior, then the reference will be inserted inline
in the text. If the line becomes too long because of this, it will
be wrapped.
If the headline contains a time-of-day in one format or another, it
will be used to sort the entry into the time sequence of items for a
day. Some people have time stamps in the headline that refer to the
creation time or so, and then this produces an unwanted side effect.
If this is the case for your, use the new option
`org-agenda-search-headline-for-time' to turn off searching the
headline for a time.
Undo will now remove up to 20 characters typed consecutively, just
like Emacs normally does. We need a special implementation for this
because Org has its own self-insert command.
The code for doing this is a patch by Martin Pohlack.
Alan E. Davis writes:
> I have found the behavior of the cursor at the beginning of
> the line to be clumsy, and troublesome. I cannot easily set
> a region, for example.
>
> However, the special setting of ctrl-e is extremely useful.
>
> A single variable controls these two variables, in a unified
> way. This variable also has two aliases. The aliases are
> not recognized by the functions that are affected by these
> variables in org.el: org-beginning-of-line, and
> org-end-of-line. As far as I can see, there seems no reason
> to keep these two aliased variables as references to a
> single unified variable, insofar as the underlying code is
> concerned.
>
> Because, at least for me, the behaviors have sufficiently
> distinct behaviors, I propose these should be separated.
This is a reasonable request, and this commit implements it.
To have separate values, set org-special-ctrl-a/e to a cons
cell with the setting for C-a in the car and the setting for
C-e in the cdr.
This commit fixes the bug discussed in:
http://thread.gmane.org/gmane.emacs.orgmode/11106
The reason for the empty line being inserted is subtle:
The function `org-add-planning-info' is used to add and remove planning
info time stamps (deadline, scheduled, closed) from the second line in
an entry. Usually, the function is called to add something, with an
optional argument to also remove something. In doing so, it assumes
that the second line must be there, and if it is not there, it creates
it.
Now, sometimes `org-add-planning-info' is called only to remove a time
stamp. In this particular case it was to remove the CLOSED time
stamp. This happens when the state is changed from a DONE or nil
state to a not-done state. The idea behind this is that maybe to
entry was marked earlier as DONE, but the user has changed his mind,
so the timestamp recording when it was finished should be removed.
So in this case, an empty line was created, assuming that there would
be something to add - only nothing was added.
This commit arranges for checking if there is something to add before
creating an empty line.
orgstruct++-mode is an enhanced version of orgstruct mode that
also imports all indentation and paragraph settings into the major
mode. Furthermore, it now allows to use M-RET and M-S-RET in items
after the first line. The latter change was a request by Austin
Frank.
The new command `org-reload' allows to reload all Org lisp files.
By default it will load compiled files if these are available. If
not, or when called with a C-u prefix argument, uncompiled code will
be loaded. This is good for producing a meaningful backtrace when an
error occurs.
Like TODO keywords before, now also tags each get their own CSS class,
given by the tag itself. Invalid characters in tags are all replaced
by "_" to make sure the resulting HTML remains valid.
Two new variables can be used to add a prefix to the class names for
TODO keywords and tags.
Russel Adams writes:
> That worked, the only point I may make would be to exclude
> LATEX_HEADER and TEXT from that list.
>
> I'm also trying to resolve an ordering issue. I want to have a
> header/footer line declared in the header, but I want to use these
> orgTITLE macros in that. Currently LATEX_HEADER and the class go first
> before the definitions, and TEXT occurs inside the document. If the
> macro isn't defined before the header/footer, you get an error.
>
> I may have to manually code those, which defeats the purpose of using
> the org options.
OK, I removed those two fields, and I switched things around so that
the new macros are defined earlier.
Since we now have org-use-fast-todo-selection set by default,
there is no reason for special treatment of the prefix argument
anymore.
Reported by Wanrong Lin.
Org has a number of places where the value read by completing-read may
contains spaces. For these occasions, the space character needs to be
a normal character.
The recent support for ido.el invalidated these special cases because
ido has its own way of dealing with spaces.
This commit now makes sure that ido is off for the critical cases
where completion must allow spaces.
This commit implements the possibility to import the in-buffer export
options as TeX macros, like \orgTITLE, \orgAUTHOR etc.
Requested by Russel Adams.
John Rakestraw writes:
> I noticed today that, at least in my set-up, setting these variables
> this way:
>
> (setq org-agenda-dim-blocked-tasks 'invisible)
> (setq org-enforce-todo-checkbox-dependencies t)
>
> means that a TODO task with checkboxes doesn't get included in the
> agenda. However, the sub-tasks in the checkbox list don't get included,
> either. So the TODO task with checkboxes doesn't show up in the agenda.
>
> It makes sense given the way the variables work. However, I wonder if
> it makes more sense for a task with checklisted sub-tasks to be
> included in the agenda so that the tasks and sub-tasks don't get lost.
> Or, to put the point slightly differently, I think that a TODO that's
> blocked because it has dependent TODOs might be treated differently in
> agenda listings than a TODO that's blocked because it has dependent
> checklist items.
>
> Not a big deal to me because I don't typically use checkboxes for TODO
> items. But I thought I'd raise it for consideration.
I agree with this view and the commit implements exactly this.
(org-indent-line-function): Make sure this works even if there is not
`org-drawer-regexp' defined. This can happen when orgstruct-mode is
used in a non-org buffer.
This commit makes it possible to force new lines and even empty lines
in the fast tag selection interface, either by splitting tags
definition into several lines, or by inserting "\n" into the tags
list, or by inserting (:newline) into the tags alist.
This is largely a patch from Christopher Suckling
The variables `org-agenda-todo-ignore-deadlines' and
`org-agenda-todo-ignore-with-date, and
`org-agenda-tags-todo-honor-ignore-options' are now all mentioned in
the docs.
The commands org-agenda-show can now be used to show varying degrees of
context when called with a prefix argument. `0 SPC', `1 SPC', ... `4
SPC'.
The new command `org-agenda-cycle-show' shows different amounts of
context when called several times in succession.
Christopher Suckling reports that todo state sorting doe not work in
block agenda. The reason for this that the variable
`org-todo-keywords-for-agenda' which is supposed to be a lost of all
keywords of all buffers contributing to the agenda, is not correct
during the construction of a block agenda.
Therefore, this commit instructs the todo state comparison function to
refer back to the original buffer for a list of todo keywords.
Clock lines are now by default captured into the drawer LOGBOOK. This
means that, if state notes are also captured into a drawer, they will
be mixed with notes.
Org-mode has many context-sensitive keys. A new hook system now
allows add-ons to add functionality to these keys for contexts that
are special for the add-on.
For example, if an add-on wants to use C-c C-c in a special context,
if must add a function to `org-ctrl-c-ctrl-c-hook' that will check for
the context and run its command when the context is present.
Wanrong Lin writes:
2. Can we put all of those state change history logging messages
into a drawer like "STATE-HIST" (when the drawer is defined in
org-drawers), so it is less intrusive in the file?
Yes we can. This commit provides this functionality. It introduces a
new drawer, LOGBOOK. When the variable
`org-log-state-notes-into-drawer' is set, state change time stamps and
notes will go into this drawer, or another one specified by that
variable.
When the variable org-log-states-order-reversed was nil, so that notes
would be appended to the list of notes, the indentation of the item
was wrong. This commit fixes the problem.
Wanrong Lin writes:
Right now in the HTML export the TODO keywords have either
class="todo", or class="done". That loses all the face properties
in the original TODO keywords. I think the TODO keywords faces are
important visual aids to differentiate different types of TODO
items, so I just wonder whether it is possible to keep the faces
in the HTML.
This makes sense. This commit adds, to each TODO keyword, an
additional class named after the keyword. For example:
<span class="todo WAITING">WAITING</span>
So each todo keyword gets class "todo" or "done" depending on which
general type it is. And in addition it gets itself as class.
So go to your CSS file and configure like this:
.todo { font-weight:bold; }
.done { font-weight:bold; }
.TODO { color:red; }
.WAITING { color:orange; }
.DONE { color:green; }
Thanks to Sebastian Rose for the multiple-classes trick.
Wanrong Lin writes:
My TODO sequence is set up as following:
(setq org-todo-keywords '((sequence "TODO(t)" "STARTED(s!)"
"WAITING(w@/!)" "MAYBE(m/!)" "DELEGATED(g@/!)"
"DEFERRED(d!/!)" "HOLD(h!/!)" "|" "DONE(x)" "CANCELED(c)")))
The state change logging is great, but I wonder whether we can
further improve it:
1. Can we also include the original state in the log message?
i.e.: instead of having - State "DEFERRED" [2009-02-11 Wed 11:38]
we can have
- State "DEFERRED" from "HOLD" [2009-02-11 Wed 11:38]
The message will be clearer, and useful even when somebody edited
the TODO keyword in place without using the "org-todo" command
(in that case, simply looking at all the "destination states" in
the log message does not give us the right information).
This strikes me like a good idea, so I have implemented it with this
commit.
Consider a file with 2 lines:
------------------
**** heading
------------------
Place the cursor at line 2 (where you can type). Then use C-c C-x C-i
to start a clock.
You have now 3 lines:
------------------
**** heading
CLOCK: [2009-02-07 sb 01:06]
------------------
However, the cursor is still placed at line 2, like before. I think
it would be more useful if it were moved to line 3 so that you can
start writing right away, just as before. This saves you the C-n
needed to move again to a blank line.
This commit implements exactly this request.
Daniel Clemente noticed that the clock drawer, when it is created for
the second clock entry, will swallow a plain list item after it,
because it thinks it might be a clock note.
This commit makes this function check for indentation. If the plain
list item is indented less than the last clock line, it will be
assumed that it does not belong to the clocking line, and the drawer
will not swallow the item.
Now any line like
#+XYZ_TODO:
will be assumed to define some kind of TODO chain. If the handlers in
`org-todo-setup-filter-hook' do not do anything with this sequence, it
will be treated as `sequence'.
William Henney writes:
Consider a structure like this:
* first
** second
*** third
**** fourth
Currently, if I export the "third" sub-tree to html (via "C-c @
C-x C-e h"), then "third" becomes an <h1> heading, but "fourth"
becomes an <h5> heading. I would rather it were <h2>, i.e. that
all heading levels be relative to the root of the sub-tree. Is
there any way to achieve this?
This was not possible so far, but this commit measures the first
headline of the subtree and applies an offset to all level values.
Hsui-Khuern Tang writes:
I have a table where one column consists of inactive dates, such as
this:
| Date | OK? |
|------------------+-----|
| [2009-01-30 Fri] | x |
| [2009-01-27 Tue] | x |
| [2009-01-28 Wed] | x |
I can't sort the table by that column. If I change the dates to
active, then sorting (by time) works fine. Is this behavior
intentional?
Yes, intentional, because the same routine also does sorting of
entries and should prefer active time stamps. However, I realize that
we can still look for an inactive time stamp when no active one can be
found. This is what this commit implements.
Patch by Andrew Hyatt
Andrew Hyatt writes:
I like to schedule items I'm supposed to be working on, so I like
when I complete a task that the next sibling task gets the
schedule from the previous one. This implements that kind of
workflow with the org-depend contrib package.
I've also added a few methods to org.el to make working with
schedules & deadlines easier.
When there were multiple cookies in a headline, the counting would be
double. Also the hook got called always, even if no cookie was
present.
Fixed now.
Turns out a number of people set their variables too late so that
activating dependencies does not work correctly. We now double-check
in the mode hook that everything is in order.....
This causes problems in tables.
You have now two ways to make verbatim things. Use ~xyz~ or =xyz=
depending on whether ~ or = might occur in the string......
When org-depend.el is loaded, running the blocker hook will already
toggle a tag. However, when dimming the agenda, we do not want that.
Reported by Dan Griswold.
The id for the footnotes div is now called "text-footnotes", not
"footnotes-text", to be more consistent with other divs used in
Org-mode.
Requested by Sebastian Rose.
This commit adds a key (`C-c C-x o') to toggle the ORDERED property of
a tree. And it adds menu entries for doing this, which also reflect
the current state of the tree.
When a line now contains several statistics cookies, all of them will
be updated.
Jari Aalto submitted a patch to this effect which I did end up not
using. Thanks anyway!
David Bremner writes:
I have a clocktable that begins like this.
#+BEGIN: clocktable :maxlevel 2 :block 2009-W05 :scope agenda-with-archives
Clock summary at [2009-01-27 Tue 17:15], for week 2009-W04.
[contents snipped]
#+END:
Whatever week I put in :block, it puts one less in the title. It
seems actually gather the clock data from the right week, but the
title is wrong? Or I misunderstand something as usual :-).
There was a problem wit the week starting date.
A user setting of
(setq org-show-entry-below t)
could overrule a visibility property with value FOLDED. This commit
fixes this by turning off the above setting for the context of setting
startup visibility.
I have changed my mind and turned off shift-selection support again by
default, because it causes confusing behavior, sometimes calling an Org
command and sometimes doing shift selection. The default behavior is
now:
- in special contexts, execute Org commands
- outside special contexts, create an error that will point users to
configure the variable `org-support-shift-select'. Hopefully that
will make them read the docstring and then decide for themselves
what to do.
Emacs 23 introduces `shift-selection-mode', and even turns it on by
default. Therefore, it is fair to assume that users of Emacs 23 will
expect to be able to select a region by holding down shift will moving
the cursor. This conflicts with the use of shifted cursor keys in
Org-mode for other purposes, in particular to "change the item under
the cursor", like it is done for time stamps, item bullet types, TODO
keywords and priorities.
This commit tries to support `shift-selection-mode' as much as possible,
while retaining these valuable commands keys for Org-mode. The
following things are changed:
1. The range of contexts where Org's commands do act is reduced.
- S-up and S-down no longer jump to the previous and next plain list
item - you can use the paragraph commands C-up and C-down for this
quite well.
- S-left and S-right only change the bullet type of a plain list
item when the cursor is *exactly* on the bullet, not just anywhere
in the item line.
2. When a S-cursor key is used outside a special context, a region is
started or extended.
3. When a region has already been started, it will be continue to
extend even if the S-cursor keys move the cursor into a special
context.
4. If you want S-cursor selection to work in headlines as well, you
can set the variable `org-support-shift-select' to
`even-in-headlines'. Then you need to rely on `C-c C-t' to set
TODO keywords, and on `C-c ,' to set priorities.
If you want everything to behave the way it was, set
`org-support-shift-select' to nil.
There were two bugs:
1. Timestamp processing did not honor the setting of
`org-export-with-timestamps' in the text before the first
headline.
2. When `org-export-with-timestamps' was nil, time stamps were removed
even in tables. I think this is incorrect, so in tables, time
stamps are now never removed.
The variables =org-agenda-todo-ignore-with-date=,
=org-agenda-todo-ignore-with-date=, and
=org-agenda-todo-ignore-with-date= make it possible to
exclude TODO entries which have this kind of planning info
associated with them. This is most useful for people who
schedule everything, and who use the TODO list mainly to find
things that are not yet scheduled. Thomas Morgan pointed out
that also the tags-todo search may serve exactly this
purpose, and that it might be good to have a way to make
these variables also apply to the tags-todo search. I can
see than, but could not convince myself to make this the
default. A new variable must be set to make this happen:
=org-agenda-tags-todo-honor-ignore-options=.
Formulas can now refer to fields and regions in other tables, be it in
the same file or even in different files.
This also opens the door for more interesting R support, because
arbitrary tables in a file can now be accessed with appropriate
commands.
Finally, this commit also introduces a convenience for creating
references in tables. For the purpose of references, it will always
be *assumed* that there is another hline at the end if each table. So
for example in a table that has only a single hline, to separate
header from data, you can now access all of column two with
"@I$2..@II$2".
William Henney writes:
If a heading has tags, then that heading's time summary
overlay (shown by C-c C-x C-d) is displayed using the
org-tag face. This looks a bit strange. Is it intended? It
is especially noticeable in my case, since I have my tags
shown in a smaller font.
This is cause by the fact that we use the `secondary-selection' face
here which only highlights but inherits the rest from what is below.
The idea was that these clock times should have the same color as the
headline they belong to, but this idea is defeated when a line has tags
with a very different face.
This commit introduces a separate face for this purpose, so that users
can customize it.
The conversion commands `C-c -' and `C-c *' are now better
behaved and therefore more useful, I hope.
If there is an active region, these commands will act on the
region, otherwise on the current line.
- C-c - :: This command turns headings or normal lines into
items, or items into normal lines. When there is a
region, everything depends on the first line of the
region:
- if it is a item, turn all items in the region into
normal lines.
- if it is a headline, turn all headlines in the region
into items.
- if it is a normal line, turn all lines into items.
- special case: if there is no active region and the
current line is an item, cycle the bullet type of the
current list.
- C-c * :: This command turns items and normal lines into
headings, or headings into normal lines. When there is
a region, everything depends on the first line of the
region:
- if it is a item, turn all items in the region into
headlines.
- if it is a headline, turn all headlines in the region
into normal lines.
- if it is a normal line, turn all lines into headlines.
Matt Lundin writes:
I'm have a *minor* issue to report. It occurs when I export
an org file with footnotes to LaTeX. Specifically, it has to
do with the combination of American style quotation marks
and footnotes.
According to many American manuals of style, quotation marks
are to be placed after a sentence ending period if the
quoted passage is at the end of the sentence. E.g.
,----
| Here is "a quote."
|
| not
|
| Here is "a quote".
`----
When I use American style quotation in conjuction with a
footnote, the exporter does not convert the closing quote
marks into a two single quotation marks (i.e., LaTeX smart
quotes).
Thus, the following source snippet:
,----
| This is a footnote "with a quote."[fn:sample] And here
| is another footnote "with a quote".[fn:another]
|
| [fn:sample] Here is the sample footnote.
|
| [fn:another] Another footnote.
`----
Becomes
,----
| This is a footnote ``with a quote."\footnote{Here is
| the sample footnote. } And here is another footnote ``with
| a quote''.\footnote{Another footnote. }
`----
Notice the double quotation mark (rather than two single
apostrophes) at the end of the first sentence. Notice also
the correct quotation mark format appears in the second
sentence, where the period comes after the quotation mark.
This commit addresses this issue by checking of text
protection is off not after the quotation mark, but before.