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.
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.
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".
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.
The directory used for attachments to an entry is by default chosen
automatically, with a name derived from the entry ID to make sure it
is unique.
However, in some cases it may be better to assign a user-chosen
directory to and entry, to be used for attachments. This commits
implements this change. See the documentation changes for information
on how things work.
Thanks to Jason Jackson for pushing this part.
The second change made bu this commit is that it is now possible to
inherit the attachment directory from a parent, so that an entire
project subtree can use a single directory.
Two new variables, `org-export-html-inline-image-extensions' and
`org-export-latex-inline-image-extensions' now define the file
extensions that will be considered for inlining images. The default
for HTML is png, jpg, jpeg, and gif files. The default for LaTeX is
png, jpg, jpeg, and pdf, assuming processing with `pdflatex'.
For LaTeX export, this can lead to conflicts for links that point
to non-image PDF files. To avoid that such a link will be inlined by
accident, always give a description text for such a link, one that is
not equal to the path.
Matt Lundin writes:
I had one more question/request concerning archives. Would
it perhaps be possible to enable the file name
substitution (i.e., "%s") after the double semi-colon, so
that the file name can be used as a headline within the
archive file? My ideal setup would be to have a single
archive file for each year's work, with headlines named
according to the original files of the archived subtrees.
E.g.,
,----
| * finances.org
| ** archived item
| * notes.org
| ** archived item
| ** another archived item
`----
This commit does implement this request.
Lines preceded by a colon are treated as fixed-width examples.
This commit improves the moment when the protection of these lines
happens during preprocessing. And it enforces that a space must
follow the colon for the line to be treated in this way.
The relative timer is now shown in the mode-line while running.
There is a new command to pause and continue it.
Thanks to Alan Davis for driving this change.
Sorting footnotes used to be almost like normalization, in that all
footnotes would be collected into a single location. Now sorting
respects the setting of `org-footnote-section'. If that is nil,
sorting will actually move each footnote into the outline node of its
first reference.
This commit add a new face for footnote labels, and activates footnote
labels for mouse clicks and for `C-c C-o', to jump to the
corresponding reference or definition.
This patch implements fully automatic creation of unique labels for
footnotes, which is also turned on as the default setting. The
automatic labels look like [fn:1], [fn:2], etc, using the first
available unused number.
The commit introduces a new variable, `org-footnote-auto-label' with a
number of different options ranging from no auto creation (prompting
the user for a label) to fully automatic creation.
Also, the commit introduces new #+STARTUP options that can be used to
select these settings on a per-file basis.
The dynamic block capturing column view has an :id parameter that does
select from where the column view should be captured. The routine
searching for this entry so far only searched the current file, now it
uses the full ID API to find the entry also in another file.
Furthermore, a value "file:path/to/file.org" will capture the global
column view of that file.
Report by Francois Lagarde.
After the failed implementation of `@0' as a reference for the last
line, this is a second attempt to provide such references. I would
have liked to allow `@last' as the reference, that would have been
beautiful. However, too many regular expressions directly search for
`@' followed by a number, so this is too hard to implement.
Therefore, I am now turning the last row into a row of implicitly
named fields. From now on, $LR1, $LR2,... can be used to refer to
fields in the last row. These names may also appear on the left hand
side of formulas.
A prefix argument to the `org-agenda-show' command is now interpreted
to make sure the entire entry is made visible in the other window, not
only the headline.
Exporting tables to LaTeX suffered from the problem that Org tables
are often long, but that the tabular environment in LaTeX cannot
handle long tables. This patch fixes this issue.
LaTeX export can now deal with very long tables, by setting an option
in the "ATTR_LaTeX:" line. Also, you can specify the alignment by
hand. Here is an example:
Also, table export now correctly deals with tables that start with a
hline. In such a case, also the LaTeX version will have this extra
hline before the first line.
The last data line in a table is often a line with important data, for
example sums of a column. In tables with varying length, the row
number of this line is constantly changing, which makes it hard to
write programs creating tables and then installing formulas.
This patch introduces @0 as a special reference to the last row, so
that @0$3 would be the field in the last row, 3rd column.
Unique identifiers for entries can now be used more efficiently.
Internally, a hash array has replaced the alist used so far to
keep track of the files in which an ID is defined. This makes it
quite fast to find an entry by ID.
There is now a new link type which looks like this:
id:GLOBALLY-UNIQUE-IDENTIFIER
This link points to a specific entry. When you move the entry to
a different file, for example if you move it to an archive
file, this link will continue to work.
The file /org-id.el/ contains an API that can be used to write
code using these identifiers, including creating IDs and finding
them wherever they are.
Org has its own method to create unique identifiers, but if the
system has /uuidgen/ command installed (Mac's and Linux systems
generally do), it will be used by default. You an also select
the method by hand, using the variable =org-id-method=.
If the ID system ever gets confused about where a certain ID is,
it initiates a global scan of all agenda files with associated
archives, all files previously known containing any IDs, and all
currently visited Org-mode files to rebuild the hash. You can
also initiate this by hand: =M-x org-id-update-id-locations=.
Running this command will also dump into the =*Messages*= buffer
information about any duplicate IDs. These should not exist, but
if you /copy/ an entry with its properties, duplicate IDs will
inevitably be produced. This is unavoidable in a plain text
system that allows you to edit the text in arbitrary ways, and a
portion of care on your side is needed to keep this system clean.
The hash is stored in the file =~/.emacs.d/.org-id-locations=.
This is also a change from previous versions where the file was
=~/.org=id-locations=. Therefore, you can remove this old file
if you have it. I am not sure what will happen if the =.emacs.d=
directory does not exists in your setup, but in modern Emacsen, I
believe it should exist. If you do not want to use IDs across
files, you can avoid the overhead with tracking IDs by
customizing the variable =org-id-track-globally=. IDs can then
still be used for links inside a single file.
IDs will also be used when you create a new link to an Org-mode
buffer. If you use =org-store-link= (normally at =C-c l=) inside
en entry in an Org-mode buffer, and ID property will be created
if it does not exist, and the stored link will be an =id:= link.
If you prefer the much less secure linking to headline text, you
can configure the variable =org-link-to-org-use-id=. The default
setting for this variable is =create-if-interactive=, meaning
that an ID will be created when you store a link interactively,
but not if you happen to be in an Org-mode file while you create
a remember note (which usually has a link to the place where you
were when starting remember).
Tables, and Hyperlinks that represent inlined images, can now be
equipped with additional information that will be used during
export. The information will be taken from the following special
lines in the buffer and apply to the first following table or
link.
- #+CAPTION: :: The caption of the image or table. This string
should be processed according to the export backend, but
this is not yet done.
- #+LABEL: :: A label to identify the figure/table for cross
references. For HTML export, this string will become the
ID for the `<div class="figure">' element that encapsulates
the image tag and the caption. For LaTeX export, this
string will be used as the argument of a `\label{...}'
macro. These lables will be available for internal links
like `[[label][Table] ]'.
- #+ATTR_HTML: :: Attributes for HTML export of image, to be
added as attributes into the `<img...>' tag. This string
will not be processed, so it should have immediately the
right format.
- #+ATTR_LaTeX: :: Attributes for LaTeX export of images, to
be inserted into the optional argument of the
`\includegraphics[...]{file}' command, to specify scaling,
clipping and other options. This string will not be
processed, so it should have immediately the right
format, like `width=5cm,angle=90'
For LaTeX export, if either a caption or a label is given, the
element will be exported as a float, i.e. wrapped into a figure
or table environment.
Samuel Wales writes:
> It would be really nice if you could set tags to different
> faces the way you can with todo keywords.
>
> For example, you could set :urgent: to a bright color. Or
> set a face for all contexts.
This patch add a new customization variable `org-tag-faces' that can
be used to specify such faces. The rest of the patch implements these
new faces in Org-mode buffers as well as in the agenda.
Harri Kiiskinen suggested that it might be useful to make the LOCATION
property an inherited property during iCalendar export. In this way
you can have set the LOCATION for a whole set of items by setting it
only in the parent.
While this will slow down iCalendar export for large files, I think it
can be quite useful. This patch does implement the basic code needed
for this functionality. However, you still need to tell Org that
LOCATION should be inherited, by setting org-use-property-inheritance.
If you set it to t, beware that this may trigger a significant
slowdown when creating the match view in the agenda. So it may be
better to set this variable to
(setq org-use-property-inheritance '("LOCATION"))
instead.
This patch improves the internal handling of the large number of
export options that Org-mode has. In particular, it now defines a
single constant, `org-export-plist-vars' that contains the full list
of options, and how these can be accessed through variables, and
through the #+OPTIONS line. Before the patch, there used to be a
separate list or the OPTIONS handling, which has gotten out of sync.
This now no longer can happen.
Also, this patch adds two new variables, `org-export-with-priority',
and `org-export-with-todo-keywords', which can be used to turn the
export of TODO keywords and priority cookies on and off, so that these
can simply disappear and not be shown in the exported file. In fact,
the default for the priority cookie is to remove it.
There were bugs in the mapping API, pointed to by Samuel Wales:
Manual says:
The following example counts the number of entries with TODO keyword
WAITING, in all agenda files.
(length (org-map-entries t "/+WAITING" nil 'agenda))
Org says invalid function for the string.
First of all, the example in the manual was wrong, the "nil" should be
gone. Second, the mapping function did not return all results in a
list, so that `length' could not count them.
This patch fixes these issues.