Mercurial > emacs
comparison lisp/org/org-colview.el @ 105973:b7d8222914b4
2009-11-13 Carsten Dominik <carsten.dominik@gmail.com>
* org.el (org-clone-subtree-with-time-shift): Make it work at the
end of the buffer.
* org-mobile.el (org-mobile-write-checksums): Specify coding
system.
(org-mobile-timestamp-buffer): Keep local variable/mode line at
beginning of buffer.
* org-latex.el (org-latex-entities-regexp): Fix typo in regexp.
* org.el (org-block-todo-from-children-or-siblings-or-parent)
(org-block-todo-from-checkboxes): Do not block changes to a nil
TODO state.
2009-11-13 James TD Smith <ahktenzero@mohorovi.cc>
* org-habit.el (org-habit-parse-todo): Indicate which habit is
wrongly set up in the error messages.
* org-colview.el (org-columns-display-here): Don't try to
calculate values if the underlying property is not set.
(org-columns-string-to-number): Convert age strings back into
fractional days.
(org-agenda-colview-summarize): Handle extended summary types
properly.
* org-colview-xemacs.el (org-columns-display-here): Don't try to
calculate values if the underlying property is not set.
(org-columns-string-to-number): Convert age strings back into
fractional days.
(org-agenda-colview-summarize): Handle extended summary types
properly.
2009-11-13 Carsten Dominik <carsten.dominik@gmail.com>
* org-exp.el (org-export-format-drawer-function): New variable.
(org-export-format-drawer): New function.
(org-export-preprocess-string): Pass the backend as a parameter to
`org-export-remove-or-extract-drawers'.
(org-export-remove-or-extract-drawers): New parameter BACKEND.
* org-protocol.el (org-protocol-char-to-string): New defsubst.
2009-11-13 Carsten Dominik <carsten.dominik@gmail.com>
* org-agenda.el (org-agenda-diary-entry-in-org-file): Add error
message when no block is selected.
* org-latex.el (org-export-latex-links): Check for protectedness
in the last matched character, not after the match.
* org-datetree.el (org-datetree-find-date-create): Respect
restriction when KEEP-RESTRICTION is set.
(org-datetree-file-entry-under): New function.
(org-datetree-cleanup): New command.
2009-11-13 Dan Davison <davison@stats.ox.ac.uk>
* org-src.el (org-edit-src-code): New optional argument context
allows calling functions to avoid altering the saved window
configuration.
(org-edit-src-exit): Do not restore window configuration when this
function is used in the context of saving the edit buffer.
2009-11-13 Carsten Dominik <carsten.dominik@gmail.com>
* org-clock.el (org-clock-out, org-clock-cancel): Revert to
instances to switching to with-current-buffer, because these seem
to cause problems - no idea why.
* org-agenda.el (org-agenda-add-entry-to-org-agenda-diary-file):
Require diary-lib for (diary-date-display-form).
2009-11-13 Carsten Dominik <carsten.dominik@gmail.com>
* org.el (org-log-reschedule, org-log-redeadline): New options.
(org-log-note-headings): Add templates for rescheduling and
deadline changing.
(org-startup-options): Add in-buffer settings for logging changing
schedule and deadline time stamps.
(org-deadline, org-schedule): Check for existing date and arrange
for logging if the user requests it.
(org-add-log-note): Prepare proper note buffers for rescheduling
and deadline changes.
2009-11-13 Carsten Dominik <carsten.dominik@gmail.com>
* org-agenda.el (org-agenda-diary-entry-in-org-file)
(org-agenda-add-entry-to-org-agenda-diary-file)
(org-agenda-insert-diary-make-new-entry): New functions.
(org-agenda-diary-entry): Call
`org-agenda-diary-entry-in-org-file' when appropriate.
* org.el (org-calendar-insert-diary-entry-key): New option.
(org-agenda-diary-file): New option.
("calendar"): Install our insertion function in the calendar.
* org-remember.el (org-datetree): Require.
(org-remember-templates): Add new positioning option.
(org-remember-reference-date): New variable.
(org-remember-apply-template): Store the reference date in a local
variable.
(org-remember-handler): Implement date tree positioning of entries.
* org-datetree.el: New file.
* org-latex.el (org-export-latex-preprocess): Protect targets in
verbatim emphasis.
* org-html.el (org-export-as-html): Protect targets in verbatim
emphasis.
* org-docbook.el (org-export-as-docbook): Protect targets in
verbatim emphasis.
2009-11-13 Carsten Dominik <carsten.dominik@gmail.com>
* org-clock.el (org-show-notification): Handle messages that
contain a percent character.
* org-remember.el (org-remember-apply-template): Turn of partial
completion.
* org-mobile.el (org-mobile-before-process-capture-hook): New hook.
(org-mobile-pull): Run `org-mobile-before-process-capture-hook'.
* org.el (org-indent-mode): Define variable already in org.el.
(org-unfontify-region): Remove line-prefix and wrap-prefix
properties only if org-indent-mode is active.
2009-11-13 Carsten Dominik <carsten.dominik@gmail.com>
* org-icalendar.el (org-print-icalendar-entries): Save match data
around call to verify function.
(org-print-icalendar-entries): Add a call to the verification
function.
* org.el (org-speedbar-set-agenda-restriction): Remove unnecessary
save-restrivtion' form.
2009-11-13 Dan Davison <davison@stats.ox.ac.uk>
* org-exp.el (org-export-format-source-code-or-example): restrict
scope of preserve-indentp to the let binding.
(org-src): require org-src, since org-src-preserve-indentation is used.
2009-11-13 Carsten Dominik <carsten.dominik@gmail.com>
* org-timer.el (org-timer-set-timer): Set variables
org-timer-timer[123] correctly.
* org-mobile.el (org-mobile-files-alist): Make it work when
`agenda-archives' is included in
`org-agenda-text-search-extra-files'.
(org-mobile-push): Restore agenda after mobile push.
2009-11-13 John Wiegley <jwiegley@gmail.com>
* org-clock.el (org-resolve-clocks-if-idle): Another fix to the
way the amount of idle time is presented in the minibuffer.
2009-11-13 Carsten Dominik <carsten.dominik@gmail.com>
* org-icalendar.el (org-print-icalendar-entries): Use
org-icalendar-verify-function only if non-nil.
* org.el (org-refile): Refile to clock only if the prefix arg is
2.
(org-sparse-tree): Fix docstring to be in line with prompt.
(org-update-parent-todo-statistics): Call
`org-after-todo-statistics-hook' on each level.
2009-11-13 Carsten Dominik <carsten.dominik@gmail.com>
* org-remember.el (org-remember-apply-template): Make sure the
buffer exists.
2009-11-13 Carsten Dominik <carsten.dominik@gmail.com>
* org.el (org-tab-ind-state): New variable.
(org-cycle-level): New function.
(org-cycle-level-after-item/entry-creation): New option.
(org-flag-subtree): New function.
(org-hide-archived-subtrees): Call `org-flag-subtree'.
(org-set-effort): Indexed access.
* org-list.el (org-cycle-item-indentation): New function.
* org.el (org-refile): Make prefix argument 2 refile to current
clock.
(org-priority): Interpret action `remove' as call to remove the
priority cookie.
* org-remember.el (org-remember-apply-template): Don't depend on
buffer name being like file name.
2009-11-13 Carsten Dominik <carsten.dominik@gmail.com>
* org-clock.el (org-clock-play-sound): Expand file in
org-clock-sound, to allow ~ for home.
* org-remember.el (org-remember-handler): Set
text-before-node-creation even if this already looks like a node,
because the string might be needed on non-org-mode target files.
* org-agenda.el (org-agenda-open-link): Make this work in agenda
clocktables.
(org-agenda-switch-to): Follow a link at point if
org-return-follows-link' is set and there is nothing else to do in
this line.
2009-11-13 James TD Smith <ahktenzero@mohorovi.cc>
* org-colview-xemacs.el: Add in changes from org-colview.el
2009-11-13 Dan Davison <davison@stats.ox.ac.uk>
* org-exp-blocks.el: Modify split separator regexp to avoid empty
strings.
2009-11-13 James TD Smith <ahktenzero@mohorovi.cc>
* org-colview.el (org-columns-new): Make this work with the new
operators.
(org-columns-store-format): Make this work with the new operators.
2009-11-13 Carsten Dominik <carsten.dominik@gmail.com>
* org-src.el (org-src-preserve-indentation): Document that this
variable is also used during export.
* org-exp.el (org-export-format-source-code-or-example): Preserve
indentation if a block has a -i option, or if
`org-src-preserve-indentation' is set.
* org-exp-blocks.el (org-export-blocks-preprocess): Preserve
indentation if a block has a -i option, or if
`org-src-preserve-indentation' is set.
2009-11-13 Carsten Dominik <carsten.dominik@gmail.com>
* org.el (org-mode-map): Define the new archiving keys.
(org-speed-commands-default): Define an archiving key in the speed
command map.
(org-org-menu): Improve the menu structure concerning archiving.
* org-archive.el (org-archive-subtree-default-with-confirmation):
New command.
* org-agenda.el (org-agenda-mode-map): Define the new archiving keys.
(org-agenda-menu): Add the new archiving commands to the menu.
(org-agenda-archive-default)
(org-agenda-archive-default-with-confirmation): New commands.
(org-agenda-archive, org-agenda-archive-to-archive-sibling): Just
call `org-agenda-archive-with'.
(org-agenda-archive-with): New function.
* org-table.el (org-table-convert-region): Inert spaces around "|"
to avoid line beginnings like "|-1" which will be mistaken as
hlines.
2009-11-13 Carsten Dominik <carsten.dominik@gmail.com>
* org.el (org-offer-links-in-entry): Return nil if there are no
links, t if a link has been selected.
(org-open-at-point): Open attachment directory when called in the
headline and there are no links in the entry body.
(org-speed-commands-default): Add "o" for open-at-point as a speed
command.
* org-attach.el (org-attach-reveal): Optional prefix arg
IF-EXISTS, which avoids creating the attachment directory if it
does not yet exist.
* org-agenda.el (org-agenda, org-run-agenda-series): Evaluate
MATCH.
2009-11-13 Carsten Dominik <carsten.dominik@gmail.com>
* org.el ("abbrev"): Work with abbrev tables only after they have
been loaded.
* org-list.el (org-list-send-list): Fix bug related to match
data.
* org-latex.el (org-export-latex-fontify): Apply verbatim
emphasis.
(org-export-latex-make-header): Insert \obeylines if line breaks
should be preserved.
* org-exp.el (org-export-protect-verbatim): Add an
`org-verbatim-emph' property to such text.
2009-11-13 Carsten Dominik <carsten.dominik@gmail.com>
* org-icalendar.el (org-icalendar-use-plain-timestamp): New option.
(org-print-icalendar-entries): Skip entries where the timestamp is
not a deadline and not scheduled, if the user requests that.
* org-latex.el (org-export-latex-quotation-marks): Allow a bracket
before an opening quote.
* org-archive.el (org-archive-subtree): Keep archive after
archiving something.
* org-id.el (org-id-update-id-locations): Add archive files if
that is required by `org-id-extra-files'.
2009-11-13 Carsten Dominik <carsten.dominik@gmail.com>
* org-src.el (org-src-window-setup): New option.
(org-src-switch-to-buffer): New function.
(org-edit-src-exit): Add optional argument CONTEXT and use it to
restore window configuration.
(org-edit-src-code, org-edit-src-continue, org-edit-src-exit):
Call `org-src-switch-to-buffer'.
* org.el (org-default-properties): Add STYLE property.
(org-files-list): Use the function call to get the files.
(org-additional-option-like-keywords): Add SETUPFILE to completion
list.
2009-11-13 Carsten Dominik <carsten.dominik@gmail.com>
* org-table.el (org-table-convert-region): Correctly interpret
quoting in csv import.
* org.el (org-icompleting-read): Make iswitchb completion work
with lists and tables.
* org-agenda.el (org-agenda-add-entry-text): Never add entry text
while pushing the mobile agenda.
2009-11-13 John Wiegley <jwiegley@gmail.com>
* org-clock.el
(org-clock-auto-clock-resolution): Now takes three values: nil, t
and `when-no-clock-is-running'.
(org-clock-in): Use `org-clock-auto-clock-resolution' to determine
whether or not to resolve Org buffers on clock in.
2009-11-13 James TD Smith <ahktenzero@mohorovi.cc>
* org-colview.el (org-format-time-period): Function to format
times in fractional days for display.
(org-columns-display-here): Add support for showing a calculated
value in place of the property.
(org-columns): Set `org-columns-time' to the current time so time
difference calculations will work.
(org-columns-time): Use to store the current time when column view
is displayed, so all time differences will use the same reference
point.
(org-columns-compile-map): There is now an extra position in each
entry specifying the function to use to calculate the displayed
value for the non-calculated properties in the column,
(org-columns-compute-all): Set `org-columns-time' to the current
time so time difference calculations will work.
(org-columns-compute): Handle column operators where the values
used are calculated from the underlying property.
(org-columns-number-to-string): Handle the 'age' column format
(org-columns-string-to-number): Correct the function name (was
org-column...). Add support for the 'age' column format.
(org-columns-compile-format): Support the additional parameter in
org-columns-compile-map.
2009-11-13 Bastien Guerry <bzg@altern.org>
* org.el (org-mode-hook): Turn `org-mode-hook' into a customizable
variable.
2009-11-13 Carsten Dominik <carsten.dominik@gmail.com>
* org-clock.el (org-clock-has-been-used): New variable.
(org-clock-in): Set `org-clock-has-been-used'.
(org-clock-save): Save only if clock data has been used or created
during this session.
2009-11-13 Carsten Dominik <carsten.dominik@gmail.com>
* org-clock.el (org-clock-persist): New value, to store only the
clock history.
(org-clock-save): Don't save the clock if only the history should
be stored.
(org-clock-load): Turn off John Wiegley's auto resolving mechanism
when restoring a saved clock.
2009-11-13 John Wiegley <jwiegley@gmail.com>
* org-clock.el (org-clock-display, org-clock-put-overlay): Use
`org-time-clock-use-fractional'.
* org.el (org-time-clocksum-use-fractional)
(org-time-clocksum-fractional-format): Two new customizable
variables which allow the user to select fractional times (1.25
instead of 1:25) in the `org-clock-display' report.
2009-11-13 Carsten Dominik <carsten.dominik@gmail.com>
* org-ascii.el (org-export-ascii-table-keep-all-vertical-lines):
New option.
* org.el (org-tag-alist): Fix customization type.
2009-11-13 Carsten Dominik <carsten.dominik@gmail.com>
* org-mobile.el (org-mobile-update-checksum-for-capture-file):
Make sure the regexp search can fail without throwing an error.
(org-mobile-apply): Save the inbox buffer after removing
successfully applied changes.
2009-11-13 John Wiegley <jwiegley@gmail.com>
* org-clock.el (org-resolve-clocks-if-idle): Fix to the way idle
time is reported after the user comes back (but before they
resolve time).
* org.el (org-get-repeat): Change so that this function can be
called with either `org-scheduled-string' or
`org-deadline-string'.
* org-clock.el (org-clock-auto-clock-resolution): Renamed
`org-clock-disable-clock-resolution', since negatives don't sound
good in customization variables.
(org-clock-in): Don't use the auto-resolution logic if the user is
clocking into a different task while an active clock is running.
This then allows the default behavior of clocking out of the open
task and then into the new task.
* org.el (org-modules): Made this variable more consistent, since
it was referring to Org, OrgMode and Org-mode, whereas the docs
for the variable always refer to Org-mode.
2009-11-13 James TD Smith <ahktenzero@mohorovi.cc>
* org.el (org-repeat-re): The changed org-repeat-re no longer
matched simple +2d type repeaters. Fix it so it does.
2009-11-13 Carsten Dominik <carsten.dominik@gmail.com>
* org-latex.el (org-export-latex-preprocess): Protect the vspace
macro in the VERSE environment.
2009-11-13 John Wiegley <jwiegley@gmail.com>
* org-habit.el (org-habit-get-priority): A new function that
determines the relative priority of a habit, based on how long
past its scheduled date it is, and how near the deadline is.
* org-agenda.el (org-agenda-get-scheduled): Set habit priority
using `org-habit-get-priority'.
* org-habit.el (org-habit-build-graph): Start displaying colors
from the first scheduled date, if that date is earlier than the
first completion date.
* org-habit.el: Changed all "color" variables to faces, and made
them appropriate for light and dark backgrounds.
* org-habit.el (org-habit-duration-to-days): Made this function
more general.
(org-habit-parse-todo): Parse the new ".+N/N" style repeater.
* org-agenda.el (org-agenda-get-deadlines): Removed all mention of
habits, since they don't use DEADLINE anymore.
* org.el (org-repeat-re, org-display-custom-time)
(org-timestamp-change): Extended to support the new ".+N/N"
syntax, used for habits.
* org-clock.el (org-clock-resolve-clock): Fixed an incorrect
variable reference.
* org-agenda.el (org-agenda-set-mode-name): Show Habit in the
modeline when habits are being displayed (if that module is being
loaded).
2009-11-13 James TD Smith <ahktenzero@mohorovi.cc>
* org-clock.el (org-x11-idle-seconds): Add a method to get the X11
idle time using the xscreensaver extension.
(org-user-idle-seconds): Use X11 idle time if available.
2009-11-13 Carsten Dominik <carsten.dominik@gmail.com>
* org-agenda.el (org-agenda-next-line): New command.
(org-agenda-previous-line): New commands.
(org-agenda-show-and-scroll-up, org-agenda-show-scroll-down): New
commands.
(org-agenda-follow-mode): Do the follow immediately if the mode is
turned on here.
(previous-line, next-line): Replace keys with the corresponding
org functions.
(org-agenda-mode-map): Bind backspace and delete to the scrolling
command.
* org.el (org-icompleting-read): Turn off partial completion mode
for the duration of this completion round.
* org-latex.el (org-export-latex-fontify-headline): Protect TeX
macros in author lines and similar stuff.
* org.el (org-file-tags): Fix docstring.
(org-get-buffer-tags): Add the #+FILETAGS tags.
("ecb"): Maks ecb show context after jumping into an Org file.
2009-11-13 John Wiegley <johnw@newartisans.com>
* org-agenda.el (org-finalize-agenda): Draw habit consistency
graphs after everything else in the buffer has been setup.
2009-11-13 Carsten Dominik <carsten.dominik@gmail.com>
* org-mobile.el (org-mobile-apply): Count success and failure.
* org.el (org-indent-line-function): Fix regexp replace problem.
2009-11-13 John Wiegley <johnw@newartisans.com>
* org-clock.el (org-clock-disable-clock-resolution): New
customization variable that disable automatic clock resolution on
clock in.
(org-clock-in): If `org-clock-disable-clock-resolution' is set, do
not automatically resolve anything. This is does not affect
idle-time resolution, however, if `org-clock-idle-time' is set.
2009-11-13 John Wiegley <johnw@newartisans.com>
* org-habit.el: New file, which implements code to build a "habit
consistency graph".
* org-agenda.el (org-agenda-get-deadlines)
(org-agenda-get-scheduled): Display consistency graphs when
outputting habits into the agenda. The graphs are always relative
to the current time.
(org-format-agenda-item): Added new parameter `habitp', which
indicates whether we are formatting a habit or not. Do not
display "extra" leading information if habitp is true.
* org.el (org-repeat-re): Improved regexp to include .+ and ++
leaders for repeat strings.
(org-get-repeat): Now takes a string parameter `tagline', so the
caller can obtain the SCHEDULED repeat, or the DEADLINE repeat.
2009-11-13 John Wiegley <johnw@newartisans.com>
* org-agenda.el (org-agenda-auto-exclude-function): New
customization variable for allowing the user to create an "auto
exclusion" filter for doing context-aware auto tag filtering.
(org-agenda-filter-by-tag): Changes to support the use of
`org-agenda-auto-exclude-function'. See the new manual addition,.
2009-11-13 John Wiegley <johnw@newartisans.com>
* org.el (org-files-list): Don't attempt to return a file name for
Org buffers which have no associated file.
* org-agenda.el (org-agenda-do-action): Fixed a typo.
2009-11-13 Carsten Dominik <carsten.dominik@gmail.com>
* org-mobile.el (org-mobile-locate-entry): Interpret files
relative to org-directory.
(org-mobile-inbox-for-pull): Document the best location for this
file.
(org-mobile-check-setup): Verify `org-directory'.
(org-mobile-create-index-file): Sort the files to be listed in
index.org.
2009-11-13 James TD Smith <ahktenzero@mohorovi.cc>
* org.el (org-fast-tag-selection): Add a way to display a
description for a tag group. This is done by adding a string to
either the startgroup or endgroup cell.
2009-11-13 Carsten Dominik <carsten.dominik@gmail.com>
* org-clock.el (org-clock-resolve, org-resolve-clocks)
(org-emacs-idle-seconds): Use `org-float-time' instead of
`time-to-seconds'
2009-11-13 Carsten Dominik <carsten.dominik@gmail.com>
* org-agenda.el (org-agenda-sorting-strategy): Fix customization
type.
* org.el (org-pre-cycle-hook): Document that `empty' can also be
the value of ARG when doing local cycling.
2009-11-13 John Wiegley <johnw@newartisans.com>
* org-clock.el (org-clock-resolve-clock): If keeping or
subtracting time results in a clock out at a time in the past, and
if the resolution occurred due to idleness or invoking `M-x
org-resolve-clocks', remember that past moment in time. On the
next clock in, the user will be prompted to see if they want to
back-date their new clock to then.
(org-clock-resolve): Do not jump the user to the location of a
dangling clock if the resolution is occuring due to an idle
timeout. In that case there is typically only one dangling clock,
the active one, and there is no value gained by shuffling their
windows around to show it to them. Being prompted to resolve an
idle clock should be as inobtrusive as possible.
(org-resolve-clocks-if-idle): New function that resolves only the
currently active clock if the user has exceeded the time returned
by `org-user-idle-seconds', based on the value of
`org-clock-idle-time'.
(org-clock-in): If, after resolving clocks,
(org-clock-out): Cancel the `org-clock-idle-timer' on clock out.
* org-clock.el (org-clock-resolve-clock): New function that
resolves a clock to a specific time, closing or resuming as need
be, and possibly even starting a new clock.
(org-clock-resolve): New function used by `org-resolve-clocks'
that sets up for the call to `org-clock-resolve-clock'. It
determines the time to resolve to based on a single-character
selection from the user to either keep time, subtract away time or
cancel the clock.
(org-resolve-clocks): New user command which resolves dangling
clocks -- that is, open but not active -- anywhere in the file
list returned by `org-files-list'.
(org-clock-in): Automatically resolve dangling clocks whenever a
user clocks in.
(org-clock-cancel): If the user cancels the solely clock in a
LOGBOOK, remove the empty drawer.
* org-clock.el (org-clock-idle-time): New user customizable option
for detecting whether the user has left a clock idle. Note: it is
only used in this commit to test whether it's worthwhile to check
OS X to get the Mac user's current idle time. If the Emacs idle
time is less than the value, the user hasn't been away long enough
to be worth checking (a more expensive test than just getting
Emacs idle time).
(org-user-idle-seconds, org-mac-idle-seconds)
(org-emacs-idle-seconds): This three functions, in conjunction
with the user customization variable `org-clock-idle-time', return
the number of seconds (as a floating point) that the user has been
away from their Emacs (or, if running on OS X, their computer).
* org-clock.el (org-find-open-clocks): New function that returns a
list of all open clocks in the given FILE. Note that each clock
it returns is a cons cell of the format (MARKER . START-TIME).
This "clock" value is used by several of the new clock module
utility functions.
(org-is-active-clock): New inline function which tests whether the
given clock value is the same as the currently active clock.
Returns non-nil if this is the case.
(org-with-clock-position): New macro that evaluates FORMS with
point in the buffer and at the position of the given clock.
Changes to the current clock are global.
(org-with-clock): New macro that evaluates FORMS with point in the
buffer and at the position of the given clock. However, changes
to the current clock are local and have no effect on the user's
active clock. This allows, for example, far any clock to be
cancelled without cancelling the active clock.
(org-clock-clock-in): New inline function that switches the active
clock to the given clock. If either the argument RESUME, or the
global `org-clock-in-resume', are non-nil, it will resume a clock
that was previously left open.
(org-clock-clock-out): New inline function that clocks out the
given clock value without affecting the currently active clock.
(org-clock-clock-cancel): New inline function that cancels the
given clock value without affecting the currently active clock.
* org-clock.el (org-clock-in): Before creating
`org-clock-mode-line-timer', check to make sure an older timer is
not currently running.
(org-clock-out): Accept new third parameter `at-time', which
permits a clock to be clocked out at a specific time. Note that
no attempt is made to verify that the clock out time is later than
the clock in time.
* org.el (org-files-list): New utility function for returning a
list of all open org-mode buffers, plus all files used to build
the agenda buffer. Note that not all the files will necessarily
be visited by a buffer at time of call.
(org-entry-beginning-position): Like the function
`line-beginning-position', this inline function returns the
beginning position of the current heading/entry.
(org-entry-end-position): Like the function `line-end-position',
this inline function returns the end position of the current
heading/entry.
2009-11-13 Carsten Dominik <carsten.dominik@gmail.com>
* org-agenda.el (org-agenda-list): Mark the all-todo items line as
a header line.
2009-11-13 Carsten Dominik <carsten.dominik@gmail.com>
* org-exp.el (org-inlinetask-remove-END-maybe): Declare function.
2009-11-13 Carsten Dominik <carsten.dominik@gmail.com>
* org-agenda.el (org-agenda-filter-make-matcher): Allow to filter
entries that have no tags.
(org-agenda-search-view): New customize group.
(org-agenda-search-view-search-words-only): New option.
(org-search-view): Implement substring search.
2009-11-13 Carsten Dominik <carsten.dominik@gmail.com>
* org.el (org-outline-level): Add doc string.
2009-11-13 Carsten Dominik <carsten.dominik@gmail.com>
* org-inlinetask.el (org-inlinetask-export): Re-introduce
variable.
(org-inlinetask-export-handler): Only export inline task if the
user option calls for it.
2009-11-13 Carsten Dominik <carsten.dominik@gmail.com>
* org-exp.el (org-export-handle-export-tags): Remove inlinetask
END if present.
2009-11-13 Carsten Dominik <carsten.dominik@gmail.com>
* org-latex.el (org-export-latex-tables): Don't format in
protected regions.
2009-11-13 Carsten Dominik <carsten.dominik@gmail.com>
* org-src.el (org-edit-src-code)
(org-edit-src-find-region-and-lang, org-edit-src-exit): Handle
macro editing.
* org-agenda.el (org-prefix-category-max-length): New variable.
(org-format-agenda-item): Use `org-prefix-category-max-length'.
(org-compile-prefix-format): Set `org-prefix-category-max-length'.
2009-11-13 Carsten Dominik <carsten.dominik@gmail.com>
* org-mobile.el (org-mobile-create-index-file): Improve the
listing of tags and todo keywords.
* org-latex.el (org-export-latex-format-image): New function.
(org-export-latex-links): Use `org-export-latex-format-image'.
2009-11-13 Carsten Dominik <carsten.dominik@gmail.com>
* org-inlinetask.el (org-inlinetask-get-current-indentation)
(org-inlinetask-remove-terminator): New functions.
(org-inlinetask-export-handler): Terminate the description list.
* org-exp.el (org-export-select-backend-specific-text): Remove the
region markers.
* org-inlinetask.el (org-inlinetask-export-handler): fix bug for
tasks without content.
* org-clock.el: Make sure the clock-in target position does not
move to a different node by widening the buffer.
* org-html.el (org-export-html-format-image): Wrap image into
figure div only when there is a caption.
* org-archive.el (org-archive-mark-done): Change default value to
nil.
2009-11-13 Carsten Dominik <carsten.dominik@gmail.com>
* org.el (org-context): Call `bobp', not `eobp'.
* org-clock.el (org-clock-cancel): Remove quotes from marker
variables.
* org.el (org-read-date-prefer-future): New allowed value `time'.
(org-read-date-analyze): Shift day to tomorrow depending on time
entered and value of `org-read-date-prefer-future'.
author | Carsten Dominik <dominik@science.uva.nl> |
---|---|
date | Fri, 13 Nov 2009 08:37:55 +0000 |
parents | 2a8a3a69c1c7 |
children | b92e7ae35c75 |
comparison
equal
deleted
inserted
replaced
105972:371db60eff06 | 105973:b7d8222914b4 |
---|---|
4 ;; Free Software Foundation, Inc. | 4 ;; Free Software Foundation, Inc. |
5 | 5 |
6 ;; Author: Carsten Dominik <carsten at orgmode dot org> | 6 ;; Author: Carsten Dominik <carsten at orgmode dot org> |
7 ;; Keywords: outlines, hypermedia, calendar, wp | 7 ;; Keywords: outlines, hypermedia, calendar, wp |
8 ;; Homepage: http://orgmode.org | 8 ;; Homepage: http://orgmode.org |
9 ;; Version: 6.31a | 9 ;; Version: 6.33 |
10 ;; | 10 ;; |
11 ;; This file is part of GNU Emacs. | 11 ;; This file is part of GNU Emacs. |
12 ;; | 12 ;; |
13 ;; GNU Emacs is free software: you can redistribute it and/or modify | 13 ;; GNU Emacs is free software: you can redistribute it and/or modify |
14 ;; it under the terms of the GNU General Public License as published by | 14 ;; it under the terms of the GNU General Public License as published by |
32 | 32 |
33 (eval-when-compile (require 'cl)) | 33 (eval-when-compile (require 'cl)) |
34 (require 'org) | 34 (require 'org) |
35 | 35 |
36 (declare-function org-agenda-redo "org-agenda" ()) | 36 (declare-function org-agenda-redo "org-agenda" ()) |
37 (declare-function org-agenda-show "org-agenda" (&optional full-entry)) | |
37 | 38 |
38 ;;; Column View | 39 ;;; Column View |
39 | 40 |
40 (defvar org-columns-overlays nil | 41 (defvar org-columns-overlays nil |
41 "Holds the list of current column overlays.") | 42 "Holds the list of current column overlays.") |
89 (lambda () (interactive) | 90 (lambda () (interactive) |
90 (let ((col (current-column))) | 91 (let ((col (current-column))) |
91 (beginning-of-line 2) | 92 (beginning-of-line 2) |
92 (while (and (org-invisible-p2) (not (eobp))) | 93 (while (and (org-invisible-p2) (not (eobp))) |
93 (beginning-of-line 2)) | 94 (beginning-of-line 2)) |
94 (move-to-column col)))) | 95 (move-to-column col) |
96 (if (and (eq major-mode 'org-agenda-mode) | |
97 (org-bound-and-true-p org-agenda-follow-mode) | |
98 (org-get-at-bol 'org-marker)) | |
99 (org-agenda-show))))) | |
95 (org-defkey org-columns-map [up] | 100 (org-defkey org-columns-map [up] |
96 (lambda () (interactive) | 101 (lambda () (interactive) |
97 (let ((col (current-column))) | 102 (let ((col (current-column))) |
98 (beginning-of-line 0) | 103 (beginning-of-line 0) |
99 (while (and (org-invisible-p2) (not (bobp))) | 104 (while (and (org-invisible-p2) (not (bobp))) |
100 (beginning-of-line 0)) | 105 (beginning-of-line 0)) |
101 (move-to-column col)))) | 106 (move-to-column col) |
107 (if (and (eq major-mode 'org-agenda-mode) | |
108 (org-bound-and-true-p org-agenda-follow-mode) | |
109 (org-get-at-bol 'org-marker)) | |
110 (org-agenda-show))))) | |
102 (org-defkey org-columns-map [(shift right)] 'org-columns-next-allowed-value) | 111 (org-defkey org-columns-map [(shift right)] 'org-columns-next-allowed-value) |
103 (org-defkey org-columns-map "n" 'org-columns-next-allowed-value) | 112 (org-defkey org-columns-map "n" 'org-columns-next-allowed-value) |
104 (org-defkey org-columns-map [(shift left)] 'org-columns-previous-allowed-value) | 113 (org-defkey org-columns-map [(shift left)] 'org-columns-previous-allowed-value) |
105 (org-defkey org-columns-map "p" 'org-columns-previous-allowed-value) | 114 (org-defkey org-columns-map "p" 'org-columns-previous-allowed-value) |
106 (org-defkey org-columns-map "<" 'org-columns-narrow) | 115 (org-defkey org-columns-map "<" 'org-columns-narrow) |
109 (org-defkey org-columns-map [(meta left)] 'org-columns-move-left) | 118 (org-defkey org-columns-map [(meta left)] 'org-columns-move-left) |
110 (org-defkey org-columns-map [(shift meta right)] 'org-columns-new) | 119 (org-defkey org-columns-map [(shift meta right)] 'org-columns-new) |
111 (org-defkey org-columns-map [(shift meta left)] 'org-columns-delete) | 120 (org-defkey org-columns-map [(shift meta left)] 'org-columns-delete) |
112 (dotimes (i 10) | 121 (dotimes (i 10) |
113 (org-defkey org-columns-map (number-to-string i) | 122 (org-defkey org-columns-map (number-to-string i) |
114 `(lambda () (interactive) | 123 `(lambda () (interactive) |
115 (org-columns-next-allowed-value nil ,i)))) | 124 (org-columns-next-allowed-value nil ,i)))) |
116 | 125 |
117 (easy-menu-define org-columns-menu org-columns-map "Org Column Menu" | 126 (easy-menu-define org-columns-menu org-columns-map "Org Column Menu" |
118 '("Column" | 127 '("Column" |
119 ["Edit property" org-columns-edit-value t] | 128 ["Edit property" org-columns-edit-value t] |
120 ["Next allowed value" org-columns-next-allowed-value t] | 129 ["Next allowed value" org-columns-next-allowed-value t] |
163 (color (list :foreground (face-attribute ref-face :foreground))) | 172 (color (list :foreground (face-attribute ref-face :foreground))) |
164 (face (list color 'org-column ref-face)) | 173 (face (list color 'org-column ref-face)) |
165 (face1 (list color 'org-agenda-column-dateline ref-face)) | 174 (face1 (list color 'org-agenda-column-dateline ref-face)) |
166 (pl (or (get-text-property (point-at-bol) 'prefix-length) 0)) | 175 (pl (or (get-text-property (point-at-bol) 'prefix-length) 0)) |
167 (cphr (get-text-property (point-at-bol) 'org-complex-heading-regexp)) | 176 (cphr (get-text-property (point-at-bol) 'org-complex-heading-regexp)) |
168 pom property ass width f string ov column val modval s2 title) | 177 pom property ass width f string ov column val modval s2 title calc) |
169 ;; Check if the entry is in another buffer. | 178 ;; Check if the entry is in another buffer. |
170 (unless props | 179 (unless props |
171 (if (eq major-mode 'org-agenda-mode) | 180 (if (eq major-mode 'org-agenda-mode) |
172 (setq pom (or (org-get-at-bol 'org-hd-marker) | 181 (setq pom (or (org-get-at-bol 'org-hd-marker) |
173 (org-get-at-bol 'org-marker)) | 182 (org-get-at-bol 'org-marker)) |
187 (assoc property props)) | 196 (assoc property props)) |
188 width (or (cdr (assoc property org-columns-current-maxwidths)) | 197 width (or (cdr (assoc property org-columns-current-maxwidths)) |
189 (nth 2 column) | 198 (nth 2 column) |
190 (length property)) | 199 (length property)) |
191 f (format "%%-%d.%ds | " width width) | 200 f (format "%%-%d.%ds | " width width) |
201 calc (nth 7 column) | |
192 val (or (cdr ass) "") | 202 val (or (cdr ass) "") |
193 modval (or (and org-columns-modify-value-for-display-function | 203 modval (cond ((and org-columns-modify-value-for-display-function |
194 (functionp | 204 (functionp |
195 org-columns-modify-value-for-display-function) | 205 org-columns-modify-value-for-display-function)) |
196 (funcall | 206 (funcall org-columns-modify-value-for-display-function |
197 org-columns-modify-value-for-display-function | 207 title val)) |
198 title val)) | 208 ((equal property "ITEM") |
199 (if (equal property "ITEM") | 209 (if (org-mode-p) |
200 (if (org-mode-p) | 210 (org-columns-cleanup-item |
201 (org-columns-cleanup-item | 211 val org-columns-current-fmt-compiled) |
202 val org-columns-current-fmt-compiled) | 212 (org-agenda-columns-cleanup-item |
203 (org-agenda-columns-cleanup-item | 213 val pl cphr org-columns-current-fmt-compiled))) |
204 val pl cphr org-columns-current-fmt-compiled))))) | 214 ((and calc (functionp calc) |
215 (not (string= val "")) | |
216 (not (get-text-property 0 'org-computed val))) | |
217 (org-columns-number-to-string | |
218 (funcall calc (org-columns-string-to-number | |
219 val (nth 4 column))) | |
220 (nth 4 column))))) | |
205 (setq s2 (org-columns-add-ellipses (or modval val) width)) | 221 (setq s2 (org-columns-add-ellipses (or modval val) width)) |
206 (setq string (format f s2)) | 222 (setq string (format f s2)) |
207 ;; Create the overlay | 223 ;; Create the overlay |
208 (org-unmodified | 224 (org-unmodified |
209 (setq ov (org-columns-new-overlay | 225 (setq ov (org-columns-new-overlay |
218 (equal (char-after beg) ?\n)) | 234 (equal (char-after beg) ?\n)) |
219 (let ((inhibit-read-only t)) | 235 (let ((inhibit-read-only t)) |
220 (save-excursion | 236 (save-excursion |
221 (goto-char beg) | 237 (goto-char beg) |
222 (org-unmodified (insert " ")))))) ;; FIXME: add props and remove later? | 238 (org-unmodified (insert " ")))))) ;; FIXME: add props and remove later? |
223 ;; Make the rest of the line disappear. | 239 ;; Make the rest of the line disappear. |
224 (org-unmodified | 240 (org-unmodified |
225 (setq ov (org-columns-new-overlay beg (point-at-eol))) | 241 (setq ov (org-columns-new-overlay beg (point-at-eol))) |
226 (org-overlay-put ov 'invisible t) | 242 (org-overlay-put ov 'invisible t) |
227 (org-overlay-put ov 'keymap org-columns-map) | 243 (org-overlay-put ov 'keymap org-columns-map) |
228 (org-overlay-put ov 'intangible t) | 244 (org-overlay-put ov 'intangible t) |
229 (push ov org-columns-overlays) | 245 (push ov org-columns-overlays) |
230 (setq ov (org-make-overlay (1- (point-at-eol)) (1+ (point-at-eol)))) | 246 (setq ov (org-make-overlay (1- (point-at-eol)) (1+ (point-at-eol)))) |
231 (org-overlay-put ov 'keymap org-columns-map) | 247 (org-overlay-put ov 'keymap org-columns-map) |
232 (push ov org-columns-overlays) | 248 (push ov org-columns-overlays) |
233 (let ((inhibit-read-only t)) | 249 (let ((inhibit-read-only t)) |
234 (put-text-property (max (point-min) (1- (point-at-bol))) | 250 (put-text-property (max (point-min) (1- (point-at-bol))) |
235 (min (point-max) (1+ (point-at-eol))) | 251 (min (point-max) (1+ (point-at-eol))) |
236 'read-only "Type `e' to edit property"))))) | 252 'read-only "Type `e' to edit property"))))) |
237 | 253 |
238 (defun org-columns-add-ellipses (string width) | 254 (defun org-columns-add-ellipses (string width) |
239 "Truncate STRING with WIDTH characters, with ellipses." | 255 "Truncate STRING with WIDTH characters, with ellipses." |
255 Flyspell-mode can cause problems in columns view, so it is turned off | 271 Flyspell-mode can cause problems in columns view, so it is turned off |
256 for the duration of the command.") | 272 for the duration of the command.") |
257 | 273 |
258 (defvar header-line-format) | 274 (defvar header-line-format) |
259 (defvar org-columns-previous-hscroll 0) | 275 (defvar org-columns-previous-hscroll 0) |
276 | |
260 (defun org-columns-display-here-title () | 277 (defun org-columns-display-here-title () |
261 "Overlay the newline before the current line with the table title." | 278 "Overlay the newline before the current line with the table title." |
262 (interactive) | 279 (interactive) |
263 (let ((fmt org-columns-current-fmt-compiled) | 280 (let ((fmt org-columns-current-fmt-compiled) |
264 string (title "") | 281 string (title "") |
345 (concat "[" (match-string (if (match-end 3) 3 1) s) "]") | 362 (concat "[" (match-string (if (match-end 3) 3 1) s) "]") |
346 t t s))) | 363 t t s))) |
347 s) | 364 s) |
348 | 365 |
349 (defvar org-agenda-columns-remove-prefix-from-item) | 366 (defvar org-agenda-columns-remove-prefix-from-item) |
367 | |
350 (defun org-agenda-columns-cleanup-item (item pl cphr fmt) | 368 (defun org-agenda-columns-cleanup-item (item pl cphr fmt) |
351 "Cleanup the time property for agenda column view. | 369 "Cleanup the time property for agenda column view. |
352 See also the variable `org-agenda-columns-remove-prefix-from-item'." | 370 See also the variable `org-agenda-columns-remove-prefix-from-item'." |
353 (let* ((org-complex-heading-regexp cphr) | 371 (let* ((org-complex-heading-regexp cphr) |
354 (prefix (substring item 0 pl)) | 372 (prefix (substring item 0 pl)) |
364 (interactive) | 382 (interactive) |
365 (let ((value (get-char-property (point) 'org-columns-value))) | 383 (let ((value (get-char-property (point) 'org-columns-value))) |
366 (message "Value is: %s" (or value "")))) | 384 (message "Value is: %s" (or value "")))) |
367 | 385 |
368 (defvar org-agenda-columns-active) ;; defined in org-agenda.el | 386 (defvar org-agenda-columns-active) ;; defined in org-agenda.el |
387 | |
369 (defun org-columns-quit () | 388 (defun org-columns-quit () |
370 "Remove the column overlays and in this way exit column editing." | 389 "Remove the column overlays and in this way exit column editing." |
371 (interactive) | 390 (interactive) |
372 (org-unmodified | 391 (org-unmodified |
373 (org-columns-remove-overlays) | 392 (org-columns-remove-overlays) |
415 (and (eq (overlay-buffer x) (current-buffer)) | 434 (and (eq (overlay-buffer x) (current-buffer)) |
416 (>= (overlay-start x) bol) | 435 (>= (overlay-start x) bol) |
417 (<= (overlay-start x) eol) | 436 (<= (overlay-start x) eol) |
418 x)) | 437 x)) |
419 org-columns-overlays))) | 438 org-columns-overlays))) |
439 (org-columns-time (time-to-number-of-days (current-time))) | |
420 nval eval allowed) | 440 nval eval allowed) |
421 (cond | 441 (cond |
422 ((equal key "CLOCKSUM") | 442 ((equal key "CLOCKSUM") |
423 (error "This special column cannot be edited")) | 443 (error "This special column cannot be edited")) |
424 ((equal key "ITEM") | 444 ((equal key "ITEM") |
659 "Turn on column view on an org-mode file." | 679 "Turn on column view on an org-mode file." |
660 (interactive) | 680 (interactive) |
661 (org-verify-version 'columns) | 681 (org-verify-version 'columns) |
662 (org-columns-remove-overlays) | 682 (org-columns-remove-overlays) |
663 (move-marker org-columns-begin-marker (point)) | 683 (move-marker org-columns-begin-marker (point)) |
664 (let (beg end fmt cache maxwidths) | 684 (let ((org-columns-time (time-to-number-of-days (current-time))) |
685 beg end fmt cache maxwidths) | |
665 (setq fmt (org-columns-get-format-and-top-level)) | 686 (setq fmt (org-columns-get-format-and-top-level)) |
666 (save-excursion | 687 (save-excursion |
667 (goto-char org-columns-top-level-marker) | 688 (goto-char org-columns-top-level-marker) |
668 (setq beg (point)) | 689 (setq beg (point)) |
669 (unless org-columns-inhibit-recalculation | 690 (unless org-columns-inhibit-recalculation |
676 (save-excursion | 697 (save-excursion |
677 (save-restriction | 698 (save-restriction |
678 (narrow-to-region beg end) | 699 (narrow-to-region beg end) |
679 (org-clock-sum)))) | 700 (org-clock-sum)))) |
680 (while (re-search-forward (concat "^" outline-regexp) end t) | 701 (while (re-search-forward (concat "^" outline-regexp) end t) |
681 (if (and org-columns-skip-arrchived-trees | 702 (if (and org-columns-skip-archived-trees |
682 (looking-at (concat ".*:" org-archive-tag ":"))) | 703 (looking-at (concat ".*:" org-archive-tag ":"))) |
683 (org-end-of-subtree t) | 704 (org-end-of-subtree t) |
684 (push (cons (org-current-line) (org-entry-properties)) cache))) | 705 (push (cons (org-current-line) (org-entry-properties)) cache))) |
685 (when cache | 706 (when cache |
686 (setq maxwidths (org-columns-get-autowidth-alist fmt cache)) | 707 (setq maxwidths (org-columns-get-autowidth-alist fmt cache)) |
696 (mapc (lambda (x) | 717 (mapc (lambda (x) |
697 (org-goto-line (car x)) | 718 (org-goto-line (car x)) |
698 (org-columns-display-here (cdr x))) | 719 (org-columns-display-here (cdr x))) |
699 cache))))) | 720 cache))))) |
700 | 721 |
722 (eval-when-compile (defvar org-columns-time)) | |
723 | |
701 (defvar org-columns-compile-map | 724 (defvar org-columns-compile-map |
702 '(("none" none +) | 725 '(("none" none +) |
703 (":" add_times +) | 726 (":" add_times +) |
704 ("+" add_numbers +) | 727 ("+" add_numbers +) |
705 ("$" currency +) | 728 ("$" currency +) |
706 ("X" checkbox +) | 729 ("X" checkbox +) |
707 ("X/" checkbox-n-of-m +) | 730 ("X/" checkbox-n-of-m +) |
708 ("X%" checkbox-percent +) | 731 ("X%" checkbox-percent +) |
709 ("max" max_numbers max) | 732 ("max" max_numbers max) |
710 ("min" min_numbers min) | 733 ("min" min_numbers min) |
711 ("mean" mean_numbers (lambda (&rest x) (/ (apply '+ x) (float (length x))))) | 734 ("mean" mean_numbers |
712 (":max" max_times max) | 735 (lambda (&rest x) (/ (apply '+ x) (float (length x))))) |
713 (":min" min_times min) | 736 (":max" max_times max) |
714 (":mean" mean_times (lambda (&rest x) (/ (apply '+ x) (float (length x)))))) | 737 (":min" min_times min) |
715 "Operator <-> format,function map. | 738 (":mean" mean_times |
739 (lambda (&rest x) (/ (apply '+ x) (float (length x))))) | |
740 ("@min" min_age min (lambda (x) (- org-columns-time x))) | |
741 ("@max" max_age max (lambda (x) (- org-columns-time x))) | |
742 ("@mean" mean_age | |
743 (lambda (&rest x) (/ (apply '+ x) (float (length x)))) | |
744 (lambda (x) (- org-columns-time x)))) | |
745 "Operator <-> format,function,calc map. | |
716 Used to compile/uncompile columns format and completing read in | 746 Used to compile/uncompile columns format and completing read in |
717 interactive function org-columns-new.") | 747 interactive function org-columns-new. |
748 | |
749 operator string used in #+COLUMNS definition describing the | |
750 summary type | |
751 format symbol describing summary type selected interactively in | |
752 org-columns-new and internally in | |
753 org-columns-number-to-string and | |
754 org-columns-string-to-number | |
755 function called with a list of values as argument to calculate | |
756 the summary value | |
757 calc function called on every element before summarizing. This is | |
758 optional and should only be specified if needed") | |
718 | 759 |
719 (defun org-columns-new (&optional prop title width op fmt fun &rest rest) | 760 (defun org-columns-new (&optional prop title width op fmt fun &rest rest) |
720 "Insert a new column, to the left of the current column." | 761 "Insert a new column, to the left of the current column." |
721 (interactive) | 762 (interactive) |
722 (let ((editp (and prop (assoc prop org-columns-current-fmt-compiled))) | 763 (let ((editp (and prop (assoc prop org-columns-current-fmt-compiled))) |
733 "Summary [none]: " | 774 "Summary [none]: " |
734 (mapcar (lambda (x) (list (symbol-name (cadr x)))) | 775 (mapcar (lambda (x) (list (symbol-name (cadr x)))) |
735 org-columns-compile-map) | 776 org-columns-compile-map) |
736 nil t)) | 777 nil t)) |
737 (setq fmt (intern fmt) | 778 (setq fmt (intern fmt) |
738 fun (cadr (assoc fmt (mapcar 'cdr org-columns-compile-map)))) | 779 fun (cdr (assoc fmt (mapcar 'cdr org-columns-compile-map)))) |
739 (if (eq fmt 'none) (setq fmt nil)) | 780 (if (eq fmt 'none) (setq fmt nil)) |
740 (if editp | 781 (if editp |
741 (progn | 782 (progn |
742 (setcar editp prop) | 783 (setcar editp prop) |
743 (setcdr editp (list title width nil fmt nil fun))) | 784 (setcdr editp (list title width nil fmt nil fun))) |
744 (setq cell (nthcdr (1- (current-column)) | 785 (setq cell (nthcdr (1- (current-column)) |
745 org-columns-current-fmt-compiled)) | 786 org-columns-current-fmt-compiled)) |
746 (setcdr cell (cons (list prop title width nil fmt nil fun) | 787 (setcdr cell (cons (list prop title width nil fmt nil |
788 (car fun) (cadr fun)) | |
747 (cdr cell)))) | 789 (cdr cell)))) |
748 (org-columns-store-format) | 790 (org-columns-store-format) |
749 (org-columns-redo))) | 791 (org-columns-redo))) |
750 | 792 |
751 (defun org-columns-delete () | 793 (defun org-columns-delete () |
858 | 900 |
859 (defun org-columns-compute-all () | 901 (defun org-columns-compute-all () |
860 "Compute all columns that have operators defined." | 902 "Compute all columns that have operators defined." |
861 (org-unmodified | 903 (org-unmodified |
862 (remove-text-properties (point-min) (point-max) '(org-summaries t))) | 904 (remove-text-properties (point-min) (point-max) '(org-summaries t))) |
863 (let ((columns org-columns-current-fmt-compiled) col) | 905 (let ((columns org-columns-current-fmt-compiled) |
906 (org-columns-time (time-to-number-of-days (current-time))) | |
907 col) | |
864 (while (setq col (pop columns)) | 908 (while (setq col (pop columns)) |
865 (when (nth 3 col) | 909 (when (nth 3 col) |
866 (save-excursion | 910 (save-excursion |
867 (org-columns-compute (car col))))))) | 911 (org-columns-compute (car col))))))) |
868 | 912 |
893 (level 0) | 937 (level 0) |
894 (ass (assoc property org-columns-current-fmt-compiled)) | 938 (ass (assoc property org-columns-current-fmt-compiled)) |
895 (format (nth 4 ass)) | 939 (format (nth 4 ass)) |
896 (printf (nth 5 ass)) | 940 (printf (nth 5 ass)) |
897 (fun (nth 6 ass)) | 941 (fun (nth 6 ass)) |
942 (calc (or (nth 7 ass) 'identity)) | |
898 (beg org-columns-top-level-marker) | 943 (beg org-columns-top-level-marker) |
899 last-level val valflag flag end sumpos sum-alist sum str str1 useval) | 944 last-level val valflag flag end sumpos sum-alist sum str str1 useval) |
900 (save-excursion | 945 (save-excursion |
901 ;; Find the region to compute | 946 ;; Find the region to compute |
902 (goto-char beg) | 947 (goto-char beg) |
925 (org-unmodified | 970 (org-unmodified |
926 (add-text-properties sumpos (1+ sumpos) | 971 (add-text-properties sumpos (1+ sumpos) |
927 (list 'org-summaries sum-alist)))) | 972 (list 'org-summaries sum-alist)))) |
928 (when (and val (not (equal val (if flag str val)))) | 973 (when (and val (not (equal val (if flag str val)))) |
929 (org-entry-put nil property (if flag str val))) | 974 (org-entry-put nil property (if flag str val))) |
930 ;; add current to current level accumulator | 975 ;; add current to current level accumulator |
931 (when (or flag valflag) | 976 (when (or flag valflag) |
932 (push (if flag sum | 977 (push (if flag |
933 (org-column-string-to-number (if flag str val) format)) | 978 sum |
979 (funcall calc (org-columns-string-to-number | |
980 (if flag str val) format))) | |
934 (aref lvals level)) | 981 (aref lvals level)) |
935 (aset lflag level t)) | 982 (aset lflag level t)) |
936 ;; clear accumulators for deeper levels | 983 ;; clear accumulators for deeper levels |
937 (loop for l from (1+ level) to (1- lmax) do | 984 (loop for l from (1+ level) to (1- lmax) do |
938 (aset lvals l nil) | 985 (aset lvals l nil) |
939 (aset lflag l nil))) | 986 (aset lflag l nil))) |
940 ((>= level last-level) | 987 ((>= level last-level) |
941 ;; add what we have here to the accumulator for this level | 988 ;; add what we have here to the accumulator for this level |
942 (when valflag | 989 (when valflag |
943 (push (org-column-string-to-number val format) | 990 (push (funcall calc (org-columns-string-to-number val format)) |
944 (aref lvals level)) | 991 (aref lvals level)) |
945 (aset lflag level t))) | 992 (aset lflag level t))) |
946 (t (error "This should not happen"))))))) | 993 (t (error "This should not happen"))))))) |
947 | 994 |
948 (defun org-columns-redo () | 995 (defun org-columns-redo () |
949 "Construct the column display again." | 996 "Construct the column display again." |
964 (message "Recomputing columns...done")) | 1011 (message "Recomputing columns...done")) |
965 | 1012 |
966 (defun org-columns-not-in-agenda () | 1013 (defun org-columns-not-in-agenda () |
967 (if (eq major-mode 'org-agenda-mode) | 1014 (if (eq major-mode 'org-agenda-mode) |
968 (error "This command is only allowed in Org-mode buffers"))) | 1015 (error "This command is only allowed in Org-mode buffers"))) |
969 | |
970 | 1016 |
971 (defun org-string-to-number (s) | 1017 (defun org-string-to-number (s) |
972 "Convert string to number, and interpret hh:mm:ss." | 1018 "Convert string to number, and interpret hh:mm:ss." |
973 (if (not (string-match ":" s)) | 1019 (if (not (string-match ":" s)) |
974 (string-to-number s) | 1020 (string-to-number s) |
992 (let* ((n1 (floor n)) (n2 (floor (+ .5 (* 1000000 (- n n1)))))) | 1038 (let* ((n1 (floor n)) (n2 (floor (+ .5 (* 1000000 (- n n1)))))) |
993 (org-nofm-to-completion n1 (+ n2 n1) (eq fmt 'checkbox-percent)))) | 1039 (org-nofm-to-completion n1 (+ n2 n1) (eq fmt 'checkbox-percent)))) |
994 (printf (format printf n)) | 1040 (printf (format printf n)) |
995 ((eq fmt 'currency) | 1041 ((eq fmt 'currency) |
996 (format "%.2f" n)) | 1042 (format "%.2f" n)) |
1043 ((memq fmt '(min_age max_age mean_age)) | |
1044 (org-format-time-period n)) | |
997 (t (number-to-string n)))) | 1045 (t (number-to-string n)))) |
998 | 1046 |
999 (defun org-nofm-to-completion (n m &optional percent) | 1047 (defun org-nofm-to-completion (n m &optional percent) |
1000 (if (not percent) | 1048 (if (not percent) |
1001 (format "[%d/%d]" n m) | 1049 (format "[%d/%d]" n m) |
1002 (format "[%d%%]"(floor (+ 0.5 (* 100. (/ (* 1.0 n) m))))))) | 1050 (format "[%d%%]"(floor (+ 0.5 (* 100. (/ (* 1.0 n) m))))))) |
1003 | 1051 |
1004 (defun org-column-string-to-number (s fmt) | 1052 (defun org-columns-string-to-number (s fmt) |
1005 "Convert a column value to a number that can be used for column computing." | 1053 "Convert a column value to a number that can be used for column computing." |
1006 (cond | 1054 (if s |
1007 ((string-match ":" s) | 1055 (cond |
1008 (let ((l (nreverse (org-split-string s ":"))) (sum 0.0)) | 1056 ((memq fmt '(min_age max_age mean_age)) |
1009 (while l | 1057 (cond ((string= s "") org-columns-time) |
1010 (setq sum (+ (string-to-number (pop l)) (/ sum 60)))) | 1058 ((string-match |
1011 sum)) | 1059 "\\([0-9]+\\)d \\([0-9]+\\)h \\([0-9]+\\)m \\([0-9]+\\)s" |
1012 ((memq fmt '(checkbox checkbox-n-of-m checkbox-percent)) | 1060 s) |
1013 (if (equal s "[X]") 1. 0.000001)) | 1061 (+ (* 60 (+ (* 60 (+ (* 24 (string-to-number (match-string 1 s))) |
1014 (t (string-to-number s)))) | 1062 (string-to-number (match-string 2 s)))) |
1063 (string-to-number (match-string 3 s)))) | |
1064 (string-to-number (match-string 4 s)))) | |
1065 (t (time-to-number-of-days (apply 'encode-time | |
1066 (org-parse-time-string s t)))))) | |
1067 ((string-match ":" s) | |
1068 (let ((l (nreverse (org-split-string s ":"))) (sum 0.0)) | |
1069 (while l | |
1070 (setq sum (+ (string-to-number (pop l)) (/ sum 60)))) | |
1071 sum)) | |
1072 ((memq fmt '(checkbox checkbox-n-of-m checkbox-percent)) | |
1073 (if (equal s "[X]") 1. 0.000001)) | |
1074 (t (string-to-number s))))) | |
1015 | 1075 |
1016 (defun org-columns-uncompile-format (cfmt) | 1076 (defun org-columns-uncompile-format (cfmt) |
1017 "Turn the compiled columns format back into a string representation." | 1077 "Turn the compiled columns format back into a string representation." |
1018 (let ((rtn "") e s prop title op op-match width fmt printf fun) | 1078 (let ((rtn "") e s prop title op op-match width fmt printf fun calc) |
1019 (while (setq e (pop cfmt)) | 1079 (while (setq e (pop cfmt)) |
1020 (setq prop (car e) | 1080 (setq prop (car e) |
1021 title (nth 1 e) | 1081 title (nth 1 e) |
1022 width (nth 2 e) | 1082 width (nth 2 e) |
1023 op (nth 3 e) | 1083 op (nth 3 e) |
1024 fmt (nth 4 e) | 1084 fmt (nth 4 e) |
1025 printf (nth 5 e) | 1085 printf (nth 5 e) |
1026 fun (nth 6 e)) | 1086 fun (nth 6 e) |
1027 (when (setq op-match (rassoc (list fmt fun) org-columns-compile-map)) | 1087 calc (nth 7 e)) |
1088 (when (setq op-match (rassoc (list fmt fun calc) org-columns-compile-map)) | |
1028 (setq op (car op-match))) | 1089 (setq op (car op-match))) |
1029 (if (and op printf) (setq op (concat op ";" printf))) | 1090 (if (and op printf) (setq op (concat op ";" printf))) |
1030 (if (equal title prop) (setq title nil)) | 1091 (if (equal title prop) (setq title nil)) |
1031 (setq s (concat "%" (if width (number-to-string width)) | 1092 (setq s (concat "%" (if width (number-to-string width)) |
1032 prop | 1093 prop |
1043 title the title field for the columns | 1104 title the title field for the columns |
1044 width the column width in characters, can be nil for automatic | 1105 width the column width in characters, can be nil for automatic |
1045 operator the operator if any | 1106 operator the operator if any |
1046 format the output format for computed results, derived from operator | 1107 format the output format for computed results, derived from operator |
1047 printf a printf format for computed values | 1108 printf a printf format for computed values |
1048 fun the lisp function to compute values, derived from operator" | 1109 fun the lisp function to compute summary values, derived from operator |
1049 (let ((start 0) width prop title op op-match f printf fun) | 1110 calc function to get values from base elements |
1111 " | |
1112 (let ((start 0) width prop title op op-match f printf fun calc) | |
1050 (setq org-columns-current-fmt-compiled nil) | 1113 (setq org-columns-current-fmt-compiled nil) |
1051 (while (string-match | 1114 (while (string-match |
1052 (org-re "%\\([0-9]+\\)?\\([[:alnum:]_-]+\\)\\(?:(\\([^)]+\\))\\)?\\(?:{\\([^}]+\\)}\\)?\\s-*") | 1115 (org-re "%\\([0-9]+\\)?\\([[:alnum:]_-]+\\)\\(?:(\\([^)]+\\))\\)?\\(?:{\\([^}]+\\)}\\)?\\s-*") |
1053 fmt start) | 1116 fmt start) |
1054 (setq start (match-end 0) | 1117 (setq start (match-end 0) |
1056 prop (match-string 2 fmt) | 1119 prop (match-string 2 fmt) |
1057 title (or (match-string 3 fmt) prop) | 1120 title (or (match-string 3 fmt) prop) |
1058 op (match-string 4 fmt) | 1121 op (match-string 4 fmt) |
1059 f nil | 1122 f nil |
1060 printf nil | 1123 printf nil |
1061 fun '+) | 1124 fun '+ |
1125 calc nil) | |
1062 (if width (setq width (string-to-number width))) | 1126 (if width (setq width (string-to-number width))) |
1063 (when (and op (string-match ";" op)) | 1127 (when (and op (string-match ";" op)) |
1064 (setq printf (substring op (match-end 0)) | 1128 (setq printf (substring op (match-end 0)) |
1065 op (substring op 0 (match-beginning 0)))) | 1129 op (substring op 0 (match-beginning 0)))) |
1066 (when (setq op-match (assoc op org-columns-compile-map)) | 1130 (when (setq op-match (assoc op org-columns-compile-map)) |
1067 (setq f (cadr op-match) | 1131 (setq f (cadr op-match) |
1068 fun (caddr op-match))) | 1132 fun (caddr op-match) |
1069 (push (list prop title width op f printf fun) org-columns-current-fmt-compiled)) | 1133 calc (cadddr op-match))) |
1134 (push (list prop title width op f printf fun calc) | |
1135 org-columns-current-fmt-compiled)) | |
1070 (setq org-columns-current-fmt-compiled | 1136 (setq org-columns-current-fmt-compiled |
1071 (nreverse org-columns-current-fmt-compiled)))) | 1137 (nreverse org-columns-current-fmt-compiled)))) |
1072 | 1138 |
1073 | 1139 |
1074 ;;; Dynamic block for Column view | 1140 ;;; Dynamic block for Column view |
1119 "Write the column view table. | 1185 "Write the column view table. |
1120 PARAMS is a property list of parameters: | 1186 PARAMS is a property list of parameters: |
1121 | 1187 |
1122 :width enforce same column widths with <N> specifiers. | 1188 :width enforce same column widths with <N> specifiers. |
1123 :id the :ID: property of the entry where the columns view | 1189 :id the :ID: property of the entry where the columns view |
1124 should be built. When the symbol `local', call locally. | 1190 should be built. When the symbol `local', call locally. |
1125 When `global' call column view with the cursor at the beginning | 1191 When `global' call column view with the cursor at the beginning |
1126 of the buffer (usually this means that the whole buffer switches | 1192 of the buffer (usually this means that the whole buffer switches |
1127 to column view). When \"file:path/to/file.org\", invoke column | 1193 to column view). When \"file:path/to/file.org\", invoke column |
1128 view at the start of that file. Otherwise, the ID is located | 1194 view at the start of that file. Otherwise, the ID is located |
1129 using `org-id-find'. | 1195 using `org-id-find'. |
1130 :hlines When t, insert a hline before each item. When a number, insert | 1196 :hlines When t, insert a hline before each item. When a number, insert |
1131 a hline before each level <= that number. | 1197 a hline before each level <= that number. |
1132 :vlines When t, make each column a colgroup to enforce vertical lines. | 1198 :vlines When t, make each column a colgroup to enforce vertical lines. |
1133 :maxlevel When set to a number, don't capture headlines below this level. | 1199 :maxlevel When set to a number, don't capture headlines below this level. |
1134 :skip-empty-rows | 1200 :skip-empty-rows |
1135 When t, skip rows where all specifiers other than ITEM are empty." | 1201 When t, skip rows where all specifiers other than ITEM are empty." |
1136 (let ((pos (move-marker (make-marker) (point))) | 1202 (let ((pos (move-marker (make-marker) (point))) |
1137 (hlines (plist-get params :hlines)) | 1203 (hlines (plist-get params :hlines)) |
1138 (vlines (plist-get params :vlines)) | 1204 (vlines (plist-get params :vlines)) |
1139 (maxlevel (plist-get params :maxlevel)) | 1205 (maxlevel (plist-get params :maxlevel)) |
1140 (content-lines (org-split-string (plist-get params :content) "\n")) | 1206 (content-lines (org-split-string (plist-get params :content) "\n")) |
1251 "Turn on or update column view in the agenda." | 1317 "Turn on or update column view in the agenda." |
1252 (interactive) | 1318 (interactive) |
1253 (org-verify-version 'columns) | 1319 (org-verify-version 'columns) |
1254 (org-columns-remove-overlays) | 1320 (org-columns-remove-overlays) |
1255 (move-marker org-columns-begin-marker (point)) | 1321 (move-marker org-columns-begin-marker (point)) |
1256 (let (fmt cache maxwidths m p a d) | 1322 (let ((org-columns-time (time-to-number-of-days (current-time))) |
1323 cache maxwidths m p a d fmt) | |
1257 (cond | 1324 (cond |
1258 ((and (boundp 'org-agenda-overriding-columns-format) | 1325 ((and (boundp 'org-agenda-overriding-columns-format) |
1259 org-agenda-overriding-columns-format) | 1326 org-agenda-overriding-columns-format) |
1260 (setq fmt org-agenda-overriding-columns-format) | 1327 (setq fmt org-agenda-overriding-columns-format) |
1261 (org-set-local 'org-agenda-overriding-columns-format fmt)) | 1328 (org-set-local 'org-agenda-overriding-columns-format fmt)) |
1311 | 1378 |
1312 (defun org-agenda-colview-summarize (cache) | 1379 (defun org-agenda-colview-summarize (cache) |
1313 "Summarize the summarizable columns in column view in the agenda. | 1380 "Summarize the summarizable columns in column view in the agenda. |
1314 This will add overlays to the date lines, to show the summary for each day." | 1381 This will add overlays to the date lines, to show the summary for each day." |
1315 (let* ((fmt (mapcar (lambda (x) | 1382 (let* ((fmt (mapcar (lambda (x) |
1316 (list (car x) (if (equal (car x) "CLOCKSUM") | 1383 (if (equal (car x) "CLOCKSUM") |
1317 'add_times (nth 4 x)))) | 1384 (list "CLOCKSUM" (nth 2 x) nil 'add_times nil '+ 'identity) |
1385 (cdr x))) | |
1318 org-columns-current-fmt-compiled)) | 1386 org-columns-current-fmt-compiled)) |
1319 line c c1 stype props lsum entries prop v) | 1387 line c c1 stype calc sumfunc props lsum entries prop v) |
1320 (catch 'exit | 1388 (catch 'exit |
1321 (when (delq nil (mapcar 'cadr fmt)) | 1389 (when (delq nil (mapcar 'cadr fmt)) |
1322 ;; OK, at least one summation column, it makes sense to try this | 1390 ;; OK, at least one summation column, it makes sense to try this |
1323 (goto-char (point-max)) | 1391 (goto-char (point-max)) |
1324 (while t | 1392 (while t |
1337 ;; set nil properties for the rest. | 1405 ;; set nil properties for the rest. |
1338 (when (setq entries (mapcar 'cdr entries)) | 1406 (when (setq entries (mapcar 'cdr entries)) |
1339 (setq props | 1407 (setq props |
1340 (mapcar | 1408 (mapcar |
1341 (lambda (f) | 1409 (lambda (f) |
1342 (setq prop (car f) stype (nth 1 f)) | 1410 (setq prop (car f) |
1411 stype (nth 3 f) | |
1412 sumfunc (nth 5 f) | |
1413 calc (or (nth 6 f) 'identity)) | |
1343 (cond | 1414 (cond |
1344 ((equal prop "ITEM") | 1415 ((equal prop "ITEM") |
1345 (cons prop (buffer-substring (point-at-bol) | 1416 (cons prop (buffer-substring (point-at-bol) |
1346 (point-at-eol)))) | 1417 (point-at-eol)))) |
1347 ((not stype) (cons prop "")) | 1418 ((not stype) (cons prop "")) |
1348 (t | 1419 (t ;; do the summary |
1349 ;; do the summary | 1420 (setq lsum nil) |
1350 (setq lsum 0) | 1421 (dolist (x entries) |
1351 (mapc (lambda (x) | 1422 (setq v (cdr (assoc prop x))) |
1352 (setq v (cdr (assoc prop x))) | 1423 (if v |
1353 (if v (setq lsum (+ lsum | 1424 (push |
1354 (org-column-string-to-number | 1425 (funcall |
1355 v stype))))) | 1426 (if (not (get-text-property 0 'org-computed v)) |
1356 entries) | 1427 calc |
1357 (setq lsum (org-columns-number-to-string lsum stype)) | 1428 'identity) |
1358 (put-text-property | 1429 (org-columns-string-to-number |
1359 0 (length lsum) 'face 'bold lsum) | 1430 v stype)) |
1431 lsum))) | |
1432 (setq lsum (remove nil lsum)) | |
1433 (setq lsum | |
1434 (cond ((> (length lsum) 1) | |
1435 (org-columns-number-to-string | |
1436 (apply sumfunc lsum) stype)) | |
1437 ((eq (length lsum) 1) | |
1438 (org-columns-number-to-string | |
1439 (car lsum) stype)) | |
1440 (t ""))) | |
1441 (put-text-property 0 (length lsum) 'face 'bold lsum) | |
1442 (unless (eq calc 'identity) | |
1443 (put-text-property 0 (length lsum) 'org-computed t lsum)) | |
1360 (cons prop lsum)))) | 1444 (cons prop lsum)))) |
1361 fmt)) | 1445 fmt)) |
1362 (org-columns-display-here props 'dateline) | 1446 (org-columns-display-here props 'dateline) |
1363 (org-set-local 'org-agenda-columns-active t))) | 1447 (org-set-local 'org-agenda-columns-active t))) |
1364 (if (bobp) (throw 'exit t)) | 1448 (if (bobp) (throw 'exit t)) |
1388 (setq a (assoc (car fm) | 1472 (setq a (assoc (car fm) |
1389 org-columns-current-fmt-compiled)) | 1473 org-columns-current-fmt-compiled)) |
1390 (equal (nth 4 a) (nth 4 fm))) | 1474 (equal (nth 4 a) (nth 4 fm))) |
1391 (org-columns-compute (car fm))))))))))) | 1475 (org-columns-compute (car fm))))))))))) |
1392 | 1476 |
1477 (defun org-format-time-period (interval) | |
1478 "Convert time in fractional days to days/hours/minutes/seconds" | |
1479 (if (numberp interval) | |
1480 (let* ((days (floor interval)) | |
1481 (frac-hours (* 24 (- interval days))) | |
1482 (hours (floor frac-hours)) | |
1483 (minutes (floor (* 60 (- frac-hours hours)))) | |
1484 (seconds (floor (* 60 (- (* 60 (- frac-hours hours)) minutes))))) | |
1485 (format "%dd %02dh %02dm %02ds" days hours minutes seconds)) | |
1486 "")) | |
1487 | |
1488 | |
1393 (provide 'org-colview) | 1489 (provide 'org-colview) |
1394 | 1490 |
1395 ;; arch-tag: 61f5128d-747c-4983-9479-e3871fa3d73c | 1491 ;; arch-tag: 61f5128d-747c-4983-9479-e3871fa3d73c |
1396 | 1492 |
1397 ;;; org-colview.el ends here | 1493 ;;; org-colview.el ends here |