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