Mercurial > emacs
comparison lisp/org/org-colview.el @ 96044:c1ef445563bb
2008-06-17 Carsten Dominik <dominik@science.uva.nl>
* org-colview.el (org-columns-next-allowed-value): Bug fix.
* org-colview-xemacs.el (org-columns-next-allowed-value): Bug fix.
* org-agenda.el (org-agenda-get-closed): Get the end time into the
agenda prefix as well.
* org-publish.el (org-publish-org-index): Make a properly indented
list.
* org.el (org-calendar-agenda-action-key): New option.
(org-get-cursor-date): New function.
(org-mark-entry-for-agenda-action): New command.
(org-overriding-default-time): New variable.
(org-read-date): Respect `org-overriding-default-time'.
* org-remember.el (org-remember-apply-template): Respect the
ovverriding default time.
* org-agenda.el (org-agenda-action-marker): New variable.
(org-agenda-action): New command.
(org-agenda-do-action): New function.
2008-06-17 Carsten Dominik <dominik@science.uva.nl>
* org.el (org-schedule, org-deadline): Protect scheduled and
deadline tasks against changes that accidently remove the
repeater. Also show a message with the new date when done.
2008-06-17 Carsten Dominik <dominik@science.uva.nl>
* org.el (org-beginning-of-line): Cater for the case when there
are tags but no headline text.
(org-align-tags-here): Convert to tabs only when indent-tabs-mode
it set.
2008-06-17 Carsten Dominik <dominik@science.uva.nl>
* org-mhe.el (org-mhe-get-message-folder-from-index): Make sure
the return value is nil instead of "nil" when there is no match.
* org-exp.el (org-insert-centered): Use fill-column instead of
80.
(org-export-as-ascii): Use string-width to measure the width of
the heading.
* org.el (org-diary-to-ical-string): No longer kill buffer
FROMBUF, this is now done by the caller.
* org-exp.el (org-print-icalendar-entries): Move the call to
`org-diary-to-ical-string' out of the loop, and kill the buffer
afterwords.
* org-remember.el (org-remember-visit-immediately): Position
cursor after moving to the note.
(org-remember-apply-template): Use a text property to record the
cursor position.
(org-remember-handler): Align tags after pasting the note.
2008-06-17 Carsten Dominik <dominik@science.uva.nl>
* org-bbdb.el (org-bbdb-follow-anniversary-link): New function.
* org-agenda.el (org-agenda-open-link): If there is an
org-bbdb-name property in the current line, jump to that bbdb
entry.
* org-bbdb.el (org-bbdb-anniversaries): Add the bbdb-name as a
text property, so that the agenda knows where this entry comes
from.
* org-agenda.el (org-agenda-clock-in): Fixed bug in the
interaction between clocking-in from the agenda, and automatic
task state switching.
* org-macs.el (org-with-point-at): Bug fix in macro defintion.
* org.el (org-beginning-of-line, org-end-of-line): Make sure the
zmacs-region stays after this command in XEmacs.
2008-06-17 Carsten Dominik <dominik@science.uva.nl>
* org.el (org-scan-tags): Allow new values for ACTION parameter.
* org-remember.el (org-remember-templates): Fix bug in
customization type definition.
* org.el (org-map-entries): New function.
2008-06-17 Carsten Dominik <dominik@science.uva.nl>
* org-agenda.el (org-agenda-skip-comment-trees): New option.
(org-agenda-skip): Respect `org-agenda-skip-comment-trees'.
2008-06-17 Carsten Dominik <dominik@science.uva.nl>
* org-remember.el (org-jump-to-target-location): New variable.
(org-remember-apply-template): Set
`org-remember-apply-template' if requested by template.
(org-remember-handler): Start an idle timer to jump to
remember location.
* org-exp.el (org-get-current-options): Add the FILETAGS setting.
* org.el (org-set-regexps-and-options): Fix bug with parsing of
file tags.
(org-get-tags-at): Add the content of `org-file-tags'.
* org-exp.el (org-export-handle-comments): Fix bug with several
comment lines after each other.
(org-number-to-roman, org-number-to-counter): New functions.
(org-export-section-number-format): New option.
2008-06-17 Carsten Dominik <dominik@science.uva.nl>
* org-exp.el (org-export-protect-examples): Catch the case of a
missing end_example line.
* org.el (org-set-regexps-and-options): Set `org-file-properties' and
`org-file-tags' to nil.
* org-colview.el (org-columns-next-allowed-value): Handle next
argument NTH to directly select a value.
* org-colview-xemacs.el (org-columns-next-allowed-value): Handle next
argument NTH to directly select a value.
2008-06-17 Carsten Dominik <dominik@science.uva.nl>
* org-agenda.el (org-agenda-scheduled-leaders): Fix docstring.
2008-06-17 Carsten Dominik <dominik@science.uva.nl>
* org.el (org-columns-ellipses): New option.
2008-06-17 Carsten Dominik <dominik@science.uva.nl>
* org-colview.el (org-columns-add-ellipses): New function.
(org-columns-compact-links): New function.
(org-columns-cleanup-item): Call `org-columns-compact-links'.
(org-columns-display-here): Call `org-agenda-columns-cleanup-item'
when in agenda.
(org-columns-edit-value): Fixed bug with editing values from
agenda column view.
(org-columns-redo): Also redo the agenda itself.
2008-06-17 Carsten Dominik <dominik@science.uva.nl>
* org-agenda.el (org-agenda-columns-remove-prefix-from-item): New
option.
* org-colview.el (org-agenda-columns-cleanup-item): New function.
* org-exp.el (org-export-ascii-preprocess): Renamed from
`org-export-ascii-clean-string'.
(org-export-kill-licensed-text)
(org-export-define-heading-targets)
(org-export-handle-invisible-targets)
(org-export-target-internal-links)
(org-export-remove-or-extract-drawers)
(org-export-remove-archived-trees)
(org-export-protect-quoted-subtrees)
(org-export-protect-verbatim, org-export-protect-examples)
(org-export-select-backend-specific-text)
(org-export-mark-blockquote-and-verse)
(org-export-remove-comment-blocks-and-subtrees)
(org-export-handle-comments, org-export-mark-radio-links)
(org-export-remove-special-table-lines)
(org-export-normalize-links)
(org-export-concatenate-multiline-links)
(org-export-concatenate-multiline-emphasis): New functions,
obtained from spliiting the export preprocessor.
* org-table.el (org-table-recalculate): Improve error message if
the row number is invalid.
2008-06-17 Carsten Dominik <dominik@science.uva.nl>
* org-archive.el (org-archive-save-context-info): Fix bugs in
customization setup and docstring.
* org-exp.el (org-export-html-style): Changed the size of in the
<pre> element to 90%.
2008-06-17 Carsten Dominik <dominik@science.uva.nl>
* org.el (org-find-src-example-start): Function removed.
(org-edit-src-find-region-and-lang): New function.
2008-06-17 Carsten Dominik <dominik@science.uva.nl>
* org.el (org-edit-src-exit): New function.
(org-exit-edit-mode): New minor mode.
* org-exp.el (org-export-preprocess-string): Fix bug with removing
comment-like lines from protected examples.
* org.el (org-edit-src-example, org-find-src-example-start)
(org-protect-source-example, org-edit-special): New functions.
2008-06-17 Carsten Dominik <dominik@science.uva.nl>
* org-publish.el (org-publish-project-alist): Fix typo in
docstring.
(org-publish-project-alist): Handle :index-title property.
2008-06-17 Carsten Dominik <dominik@science.uva.nl>
* org-export-latex.el (org-export-as-latex): Make sure region
bounds are correct. Parse subtree properties relating to export.
* org-exp.el (org-export-add-options-to-plist): New function.
(org-infile-export-plist): Use `org-export-add-options-to-plist'.
2008-06-17 Carsten Dominik <dominik@science.uva.nl>
* org.el (org-default-properties): Add EXPORT_FILE_NAME and
EXPORT_TITLE.
* org-exp.el (org-export-get-title-from-subtree)
(org-export-as-ascii, org-export-as-html): Make sure the original
region-beginning and region-end are used, even after moving
point.
(org-export-get-title-from-subtree): Also try the EXPORT_TITLE
property.
* org-remember.el (org-remember-last-stored-marker): New variable.
(org-remember-goto-last-stored): Use `org-goto-marker-or-bmk'.
(org-remember-handler): Also use marker to remember
last-stored position.
* org.el (org-goto-marker-or-bmk): New function.
2008-06-17 Carsten Dominik <dominik@science.uva.nl>
* org.el (org-file-properties): Renamed from `org-local-properties'.
(org-scan-tags): Take file tags into account.
(org-tags-match-list-sublevels): Default changed to t.
* org-exp.el (org-export-as-html): Close paragraph after a
footnote.
* org.el (org-update-parent-todo-statistics): New function.
* org-exp.el (org-icalendar-store-UID): New option.
(org-icalendar-force-UID): Option removed.
(org-print-icalendar-entries): IMplement UIDs.
2008-06-17 Carsten Dominik <dominik@science.uva.nl>
* org-mhe.el (org-mhe-follow-link): Fix bug in mhe searches.
2008-06-17 Carsten Dominik <dominik@science.uva.nl>
* org-faces.el (org-column): Document how this face is being used
and why sometimes the background faces shine through.
* org-mhe.el (org-mhe-follow-link): Improve handling of searches.
* org-publish.el (org-publish-attachment): Create publishing
directory if it does not yet exist.
* org-table.el (org-calc-default-modes): Change default number
format to (float 8).
* org.el (org-olpath-completing-read): New function.
(org-time-clocksum-format): New option.
(org-minutes-to-hh:mm-string): Use `org-time-clocksum-format'.
* org-clock.el (org-clock-display, org-clock-out)
(org-update-mode-line): Use `org-time-clocksum-format'.
* org-colview-xemacs.el (org-columns-number-to-string): Use
`org-time-clocksum-format'.
* org-colview.el (org-columns-number-to-string): Use
`org-time-clocksum-format'.
2008-06-17 Carsten Dominik <dominik@science.uva.nl>
* org-id.el: New file, move from contrib to core.
* org-exp.el (org-icalendar-force-UID): New option.
2008-06-17 Carsten Dominik <dominik@science.uva.nl>
* org-exp.el (org-print-icalendar-entries): Make sure DTEND is
shifted by one day if theere is a date range without an end
time.
* org.el (org-try-structure-completion): New function.
2008-06-17 Carsten Dominik <dominik@science.uva.nl>
* org.el (org-set-font-lock-defaults): Improve fontification of
description lists.
(org-insert-item): Handle description lists.
(org-adaptive-fill-function): Improve auto indentation in
description lists.
* org-exp.el (org-export-as-html, org-export-preprocess-string):
Implement VERSE environment.
(org-export-preprocess-string): Implement the COMMENT
environment.
* org-export-latex.el (org-export-latex-preprocess): Implement
VERSE environment.
2008-06-17 Carsten Dominik <dominik@science.uva.nl>
* org-jsinfo.el (org-infojs-opts-table): Add entry for FIXED_TOC
option.
2008-06-17 Carsten Dominik <dominik@science.uva.nl>
* org-table.el (orgtbl-to-tsv, orgtbl-to-csv): New functions.
* org.el (org-quote-csv-field): New functions.
* org-table.el (org-table-export-default-format): Remove :splice
from default format, we get the same effect by not specifying
:tstart and :tend.
(org-table-export): Improve setup, distinguish better between
interactive and non-interactive use, allow specifying the format
on the fly, better protection against wrong file names.
(orgtbl-to-generic): Fix documentation. Do not require :tstart
and :tend when :splice is omitted.
2008-06-17 Carsten Dominik <dominik@science.uva.nl>
* org-clock.el (org-clock-select-task): Make sure the selection
letters are 1-9 and A-Z, no special characters.
2008-06-17 Carsten Dominik <dominik@science.uva.nl>
* org-exp.el (org-export-htmlize): New group.
(org-export-htmlize-output-type)
(org-export-htmlize-css-font-prefix): New options.
(org-export-htmlize-region-for-paste): New function.
(org-export-htmlize-generate-css): New command.
2008-06-17 Carsten Dominik <dominik@science.uva.nl>
* org.el (org-set-visibility-according-to-property): New function.
(org-ctrl-c-ctrl-c): Do not restart org-mode, just get the options
and compute the regular expressions, and update font-lock.
(org-property-re): Allow a dash in property names.
* org-archive.el (org-extract-archive-file): Insert the file name
without the path into the format, to allow the location format to
contain a subdirectory.
* org-agenda.el (org-agenda-post-command-hook): If point is at end
of buffer, and the `org-agenda-type' property undefined, use the
value from the character before.
* org.el (org-add-planning-info): Don't let indentation for
would-be timestamp become extra whitespace at the end of headline.
2008-06-17 Carsten Dominik <dominik@science.uva.nl>
* org.el (org-remove-double-quotes, org-file-contents): New
functions.
* org-exp.el (org-infile-export-plist): Also parse the
contents of #+SETUPFILE files, recursively.
* org.el (org-set-regexps-and-options): Also parse the
contents of #+SETUPFILE files, recursively.
* org-exp.el (org-export-handle-include-files): New function.
(org-export-preprocess-string): Call
`org-export-handle-include-files'.
* org.el (org-delete-property-globally)
(org-delete-property, org-set-property): Ignore case during
completion.
(org-set-property): Use `org-completing-read' instead of
`completing-read'.
* org.el (org-complete-expand-structure-template): New,
experimental function.
(org-structure-template-alist): New, experimental option.
(org-complete): Call `org-complete-expand-structure-template'.
2008-06-17 Bastien Guerry <bzg@altern.org>
* org-export-latex.el (org-export-latex-preprocess): Added
support for blockquotes.
2008-06-17 Carsten Dominik <dominik@science.uva.nl>
* org.el (org-read-date-analyze): Catch the case where only a
weekday is given.
2008-06-17 Carsten Dominik <dominik@science.uva.nl>
* org.el (org-set-font-lock-defaults): Make the description
tag bold.
* org-exp.el (org-export-as-html, org-close-li): Implement
description lists.
2008-06-17 Jason Riedy <jason@acm.org>
* org-table.el (*orgtbl-default-fmt*): New variable.
(orgtbl-format-line): Use the value of *orgtbl-default-fmt*
when there is no other fmt available.
(orgtbl-to-generic): Allow an explicitly nil :tstart or
:tend to suppress the appropriate string.
(orgtbl-to-orgtbl): New function for translating to another orgtbl
table.
2008-06-17 Carsten Dominik <dominik@science.uva.nl>
* org.el (org-read-date-analyze): "." as an alias for "+0" in
read date.
* org-clock.el (org-clock-save-markers-for-cut-and-paste):
New function.
* org-agenda.el (org-agenda-save-markers-for-cut-and-paste):
New function.
2008-06-17 Carsten Dominik <dominik@science.uva.nl>
* org-clock.el (org-clock-find-position): Don't include notes
into clock drawer.
* org-archive.el (org-archive-subtree): No longer remove an
extra line after cutting the subtree. `org-cut-subtree' already
takes care of this.
* org-remember.el (org-remember-handler): Only kill the target
buffer if it does not contain the running clock.
* org.el (org-markers-to-move): New variable.
(org-save-markers-in-region, org-check-and-save-marker)
(org-reinstall-markers-in-region): New function.
(org-move-subtree-down, org-copy-subtree): Remember relative
marker positions before cutting.
(org-move-subtree-down, org-paste-subtree): Restore relative
marker positions after pasting.
* org-remember.el (org-remember-clock-out-on-exit): New option.
(org-remember-finalize): Clock out only if the setting in
`org-remember-clock-out-on-exit' requires it.
(org-remember-handler): Do the cleanup in the buffer, to make sure
that the clock marker remains in tact.
2008-06-17 Carsten Dominik <dominik@science.uva.nl>
* org-clock.el (org-clock-goto): Widen buffer if necessary.
(org-clock-in): Make sure that also tasks outside the narrowed
region will be clocked in correctly.
(org-clock-insert-selection-line): Widen the buffer so that we can
find the correct task heading.
* org.el (org-base-buffer): New function.
* org-exp.el (org-icalendar-cleanup-string): Make sure ',"
and ";" are escaped.
(org-print-icalendar-entries): Also apply
`org-icalendar-cleanup-string' to the headline, not only to the
summary property.
2008-06-17 Carsten Dominik <dominik@science.uva.nl>
* org-exp.el (org-export-preprocess-hook): New hook.
(org-export-preprocess-string): Call
`org-export-preprocess-hook'.
* org.el (org-font-lock-hook): New variable.
(org-font-lock-hook): New function.
(org-set-font-lock-defaults): Call `org-font-lock-hook'.
2008-06-17 Carsten Dominik <dominik@science.uva.nl>
* org.texi: Modify license to no longer include back- and front
cover matters.
(Using the mapping API): New section.
(Agenda column view): New section.
(Moving subtrees): Document archiving to the archive
sibling.
(Agenda commands): Document columns view in the agenda.
(Using the property API): Document the API for
multi-valued properties.
author | Carsten Dominik <dominik@science.uva.nl> |
---|---|
date | Tue, 17 Jun 2008 15:22:00 +0000 |
parents | ba3167bc4143 |
children | 60149c696033 |
comparison
equal
deleted
inserted
replaced
96043:a678c02d0c40 | 96044:c1ef445563bb |
---|---|
3 ;; Copyright (C) 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. | 3 ;; Copyright (C) 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. |
4 | 4 |
5 ;; Author: Carsten Dominik <carsten at orgmode dot org> | 5 ;; Author: Carsten Dominik <carsten at orgmode dot org> |
6 ;; Keywords: outlines, hypermedia, calendar, wp | 6 ;; Keywords: outlines, hypermedia, calendar, wp |
7 ;; Homepage: http://orgmode.org | 7 ;; Homepage: http://orgmode.org |
8 ;; Version: 6.02b | 8 ;; Version: 6.05a |
9 ;; | 9 ;; |
10 ;; This file is part of GNU Emacs. | 10 ;; This file is part of GNU Emacs. |
11 ;; | 11 ;; |
12 ;; GNU Emacs is free software: you can redistribute it and/or modify | 12 ;; GNU Emacs is free software: you can redistribute it and/or modify |
13 ;; it under the terms of the GNU General Public License as published by | 13 ;; it under the terms of the GNU General Public License as published by |
29 | 29 |
30 ;;; Code: | 30 ;;; Code: |
31 | 31 |
32 (eval-when-compile (require 'cl)) | 32 (eval-when-compile (require 'cl)) |
33 (require 'org) | 33 (require 'org) |
34 | |
35 (declare-function org-agenda-redo "org-agenda" ()) | |
34 | 36 |
35 ;;; Column View | 37 ;;; Column View |
36 | 38 |
37 (defvar org-columns-overlays nil | 39 (defvar org-columns-overlays nil |
38 "Holds the list of current column overlays.") | 40 "Holds the list of current column overlays.") |
88 (org-defkey org-columns-map ">" 'org-columns-widen) | 90 (org-defkey org-columns-map ">" 'org-columns-widen) |
89 (org-defkey org-columns-map [(meta right)] 'org-columns-move-right) | 91 (org-defkey org-columns-map [(meta right)] 'org-columns-move-right) |
90 (org-defkey org-columns-map [(meta left)] 'org-columns-move-left) | 92 (org-defkey org-columns-map [(meta left)] 'org-columns-move-left) |
91 (org-defkey org-columns-map [(shift meta right)] 'org-columns-new) | 93 (org-defkey org-columns-map [(shift meta right)] 'org-columns-new) |
92 (org-defkey org-columns-map [(shift meta left)] 'org-columns-delete) | 94 (org-defkey org-columns-map [(shift meta left)] 'org-columns-delete) |
95 (dotimes (i 10) | |
96 (org-defkey org-columns-map (number-to-string i) | |
97 `(lambda () (interactive) | |
98 (org-columns-next-allowed-value nil ,i)))) | |
93 | 99 |
94 (easy-menu-define org-columns-menu org-columns-map "Org Column Menu" | 100 (easy-menu-define org-columns-menu org-columns-map "Org Column Menu" |
95 '("Column" | 101 '("Column" |
96 ["Edit property" org-columns-edit-value t] | 102 ["Edit property" org-columns-edit-value t] |
97 ["Next allowed value" org-columns-next-allowed-value t] | 103 ["Next allowed value" org-columns-next-allowed-value t] |
135 (org-get-level-face 2)))) | 141 (org-get-level-face 2)))) |
136 (ref-face (or level-face | 142 (ref-face (or level-face |
137 (and (eq major-mode 'org-agenda-mode) | 143 (and (eq major-mode 'org-agenda-mode) |
138 (get-text-property (point-at-bol) 'face)) | 144 (get-text-property (point-at-bol) 'face)) |
139 'default)) | 145 'default)) |
140 (color (list :foreground | 146 (color (list :foreground (face-attribute ref-face :foreground))) |
141 (face-attribute ref-face :foreground) | 147 (face (list color 'org-column ref-face)) |
142 :weight 'normal :strike-through nil | 148 (pl (or (get-text-property (point-at-bol) 'prefix-length) 0)) |
143 :underline nil)) | 149 (cphr (get-text-property (point-at-bol) 'org-complex-heading-regexp)) |
144 (face (list color 'org-column level-face)) | 150 pom property ass width f string ov column val modval s1 s2) |
145 pom property ass width f string ov column val modval) | |
146 ;; Check if the entry is in another buffer. | 151 ;; Check if the entry is in another buffer. |
147 (unless props | 152 (unless props |
148 (if (eq major-mode 'org-agenda-mode) | 153 (if (eq major-mode 'org-agenda-mode) |
149 (setq pom (or (get-text-property (point) 'org-hd-marker) | 154 (setq pom (or (get-text-property (point) 'org-hd-marker) |
150 (get-text-property (point) 'org-marker)) | 155 (get-text-property (point) 'org-marker)) |
165 (nth 2 column) | 170 (nth 2 column) |
166 (length property)) | 171 (length property)) |
167 f (format "%%-%d.%ds | " width width) | 172 f (format "%%-%d.%ds | " width width) |
168 val (or (cdr ass) "") | 173 val (or (cdr ass) "") |
169 modval (if (equal property "ITEM") | 174 modval (if (equal property "ITEM") |
170 (org-columns-cleanup-item val org-columns-current-fmt-compiled)) | 175 (if (org-mode-p) |
171 string (format f (or modval val))) | 176 (org-columns-cleanup-item |
177 val org-columns-current-fmt-compiled) | |
178 (org-agenda-columns-cleanup-item | |
179 val pl cphr org-columns-current-fmt-compiled)))) | |
180 (setq s2 (org-columns-add-ellipses (or modval val) width)) | |
181 (setq string (format f s2)) | |
172 ;; Create the overlay | 182 ;; Create the overlay |
173 (org-unmodified | 183 (org-unmodified |
174 (setq ov (org-columns-new-overlay | 184 (setq ov (org-columns-new-overlay |
175 beg (setq beg (1+ beg)) string face)) | 185 beg (setq beg (1+ beg)) string face)) |
176 (org-overlay-put ov 'keymap org-columns-map) | 186 (org-overlay-put ov 'keymap org-columns-map) |
198 (let ((inhibit-read-only t)) | 208 (let ((inhibit-read-only t)) |
199 (put-text-property (max (point-min) (1- (point-at-bol))) | 209 (put-text-property (max (point-min) (1- (point-at-bol))) |
200 (min (point-max) (1+ (point-at-eol))) | 210 (min (point-max) (1+ (point-at-eol))) |
201 'read-only "Type `e' to edit property"))))) | 211 'read-only "Type `e' to edit property"))))) |
202 | 212 |
213 (defun org-columns-add-ellipses (string width) | |
214 "Truncate STRING with WIDTH characters, with ellipses." | |
215 (cond | |
216 ((<= (length string) width) string) | |
217 ((<= width (length org-columns-ellipses)) | |
218 (substring org-columns-ellipses 0 width)) | |
219 (t (concat (substring string 0 (- width (length org-columns-ellipses))) | |
220 org-columns-ellipses)))) | |
221 | |
203 (defvar org-columns-full-header-line-format nil | 222 (defvar org-columns-full-header-line-format nil |
204 "Fthe full header line format, will be shifted by horizontal scrolling." ) | 223 "Fthe full header line format, will be shifted by horizontal scrolling." ) |
205 (defvar org-previous-header-line-format nil | 224 (defvar org-previous-header-line-format nil |
206 "The header line format before column view was turned on.") | 225 "The header line format before column view was turned on.") |
207 (defvar org-columns-inhibit-recalculation nil | 226 (defvar org-columns-inhibit-recalculation nil |
273 (defun org-columns-cleanup-item (item fmt) | 292 (defun org-columns-cleanup-item (item fmt) |
274 "Remove from ITEM what is a column in the format FMT." | 293 "Remove from ITEM what is a column in the format FMT." |
275 (if (not org-complex-heading-regexp) | 294 (if (not org-complex-heading-regexp) |
276 item | 295 item |
277 (when (string-match org-complex-heading-regexp item) | 296 (when (string-match org-complex-heading-regexp item) |
278 (concat | 297 (setq item |
279 (org-add-props (concat (match-string 1 item) " ") nil | 298 (concat |
280 'org-whitespace (* 2 (1- (org-reduced-level (- (match-end 1) (match-beginning 1)))))) | 299 (org-add-props (match-string 1 item) nil |
281 (and (match-end 2) (not (assoc "TODO" fmt)) (concat " " (match-string 2 item))) | 300 'org-whitespace (* 2 (1- (org-reduced-level (- (match-end 1) (match-beginning 1)))))) |
282 (and (match-end 3) (not (assoc "PRIORITY" fmt)) (concat " " (match-string 3 item))) | 301 (and (match-end 2) (not (assoc "TODO" fmt)) (concat " " (match-string 2 item))) |
283 " " (match-string 4 item) | 302 (and (match-end 3) (not (assoc "PRIORITY" fmt)) (concat " " (match-string 3 item))) |
284 (and (match-end 5) (not (assoc "TAGS" fmt)) (concat " " (match-string 5 item))))))) | 303 " " (save-match-data (org-columns-compact-links (match-string 4 item))) |
304 (and (match-end 5) (not (assoc "TAGS" fmt)) (concat " " (match-string 5 item))))) | |
305 (add-text-properties | |
306 0 (1+ (match-end 1)) | |
307 (list 'org-whitespace (* 2 (1- (org-reduced-level (- (match-end 1) (match-beginning 1)))))) | |
308 item) | |
309 item))) | |
310 | |
311 (defun org-columns-compact-links (s) | |
312 "Replace [[link][desc]] with [desc] or [link]." | |
313 (while (string-match org-bracket-link-regexp s) | |
314 (setq s (replace-match | |
315 (concat "[" (match-string (if (match-end 3) 3 1) s) "]") | |
316 t t s))) | |
317 s) | |
318 | |
319 (defvar org-agenda-columns-remove-prefix-from-item) | |
320 (defun org-agenda-columns-cleanup-item (item pl cphr fmt) | |
321 "Cleanup the tiem property for agenda column view. | |
322 See also the variable `org-agenda-columns-remove-prefix-from-item'." | |
323 (let* ((org-complex-heading-regexp cphr) | |
324 (prefix (substring item 0 pl)) | |
325 (rest (substring item pl)) | |
326 (fake (concat "* " rest)) | |
327 (cleaned (org-trim (substring (org-columns-cleanup-item fake fmt) 1)))) | |
328 (if org-agenda-columns-remove-prefix-from-item | |
329 cleaned | |
330 (concat prefix cleaned)))) | |
285 | 331 |
286 (defun org-columns-show-value () | 332 (defun org-columns-show-value () |
287 "Show the full value of the property." | 333 "Show the full value of the property." |
288 (interactive) | 334 (interactive) |
289 (let ((value (get-char-property (point) 'org-columns-value))) | 335 (let ((value (get-char-property (point) 'org-columns-value))) |
379 (setq eval '(org-entry-put pom key nval))))) | 425 (setq eval '(org-entry-put pom key nval))))) |
380 (when eval | 426 (when eval |
381 | 427 |
382 (cond | 428 (cond |
383 ((equal major-mode 'org-agenda-mode) | 429 ((equal major-mode 'org-agenda-mode) |
384 (org-columns-eval '(org-entry-put pom key nval)) | 430 (org-columns-eval eval) |
385 ;; The following let preserves the current format, and makes sure | 431 ;; The following let preserves the current format, and makes sure |
386 ;; that in only a single file things need to be upated. | 432 ;; that in only a single file things need to be upated. |
387 (let* ((org-agenda-overriding-columns-format org-columns-current-fmt) | 433 (let* ((org-agenda-overriding-columns-format org-columns-current-fmt) |
388 (buffer (marker-buffer pom)) | 434 (buffer (marker-buffer pom)) |
389 (org-agenda-contributing-files | 435 (org-agenda-contributing-files |
409 | 455 |
410 (defun org-edit-headline () ; FIXME: this is not columns specific. Make interactive????? Use from agenda???? | 456 (defun org-edit-headline () ; FIXME: this is not columns specific. Make interactive????? Use from agenda???? |
411 "Edit the current headline, the part without TODO keyword, TAGS." | 457 "Edit the current headline, the part without TODO keyword, TAGS." |
412 (org-back-to-heading) | 458 (org-back-to-heading) |
413 (when (looking-at org-todo-line-regexp) | 459 (when (looking-at org-todo-line-regexp) |
414 (let ((pre (buffer-substring (match-beginning 0) (match-beginning 3))) | 460 (let ((pos (point)) |
461 (pre (buffer-substring (match-beginning 0) (match-beginning 3))) | |
415 (txt (match-string 3)) | 462 (txt (match-string 3)) |
416 (post "") | 463 (post "") |
417 txt2) | 464 txt2) |
418 (if (string-match (org-re "[ \t]+:[[:alnum:]:_@]+:[ \t]*$") txt) | 465 (if (string-match (org-re "[ \t]+:[[:alnum:]:_@]+:[ \t]*$") txt) |
419 (setq post (match-string 0 txt) | 466 (setq post (match-string 0 txt) |
420 txt (substring txt 0 (match-beginning 0)))) | 467 txt (substring txt 0 (match-beginning 0)))) |
421 (setq txt2 (read-string "Edit: " txt)) | 468 (setq txt2 (read-string "Edit: " txt)) |
422 (when (not (equal txt txt2)) | 469 (when (not (equal txt txt2)) |
423 (beginning-of-line 1) | 470 (goto-char pos) |
424 (insert pre txt2 post) | 471 (insert pre txt2 post) |
425 (delete-region (point) (point-at-eol)) | 472 (delete-region (point) (point-at-eol)) |
426 (org-set-tags nil t))))) | 473 (org-set-tags nil t))))) |
427 | 474 |
428 (defun org-columns-edit-allowed () | 475 (defun org-columns-edit-allowed () |
459 (defun org-columns-previous-allowed-value () | 506 (defun org-columns-previous-allowed-value () |
460 "Switch to the previous allowed value for this column." | 507 "Switch to the previous allowed value for this column." |
461 (interactive) | 508 (interactive) |
462 (org-columns-next-allowed-value t)) | 509 (org-columns-next-allowed-value t)) |
463 | 510 |
464 (defun org-columns-next-allowed-value (&optional previous) | 511 (defun org-columns-next-allowed-value (&optional previous nth) |
465 "Switch to the next allowed value for this column." | 512 "Switch to the next allowed value for this column. |
513 When PREVIOUS is set, go to the previous value. When NTH is | |
514 an integer, select that value." | |
466 (interactive) | 515 (interactive) |
467 (org-columns-check-computed) | 516 (org-columns-check-computed) |
468 (let* ((col (current-column)) | 517 (let* ((col (current-column)) |
469 (key (get-char-property (point) 'org-columns-key)) | 518 (key (get-char-property (point) 'org-columns-key)) |
470 (value (get-char-property (point) 'org-columns-value)) | 519 (value (get-char-property (point) 'org-columns-value)) |
482 (and (memq | 531 (and (memq |
483 (nth 4 (assoc key org-columns-current-fmt-compiled)) | 532 (nth 4 (assoc key org-columns-current-fmt-compiled)) |
484 '(checkbox checkbox-n-of-m checkbox-percent)) | 533 '(checkbox checkbox-n-of-m checkbox-percent)) |
485 '("[ ]" "[X]")))) | 534 '("[ ]" "[X]")))) |
486 nval) | 535 nval) |
536 (when (integerp nth) | |
537 (setq nth (1- nth)) | |
538 (if (= nth -1) (setq nth 9))) | |
487 (when (equal key "ITEM") | 539 (when (equal key "ITEM") |
488 (error "Cannot edit item headline from here")) | 540 (error "Cannot edit item headline from here")) |
489 (unless (or allowed (member key '("SCHEDULED" "DEADLINE"))) | 541 (unless (or allowed (member key '("SCHEDULED" "DEADLINE"))) |
490 (error "Allowed values for this property have not been defined")) | 542 (error "Allowed values for this property have not been defined")) |
491 (if (member key '("SCHEDULED" "DEADLINE")) | 543 (if (member key '("SCHEDULED" "DEADLINE")) |
492 (setq nval (if previous 'earlier 'later)) | 544 (setq nval (if previous 'earlier 'later)) |
493 (if previous (setq allowed (reverse allowed))) | 545 (if previous (setq allowed (reverse allowed))) |
494 (if (member value allowed) | 546 (cond |
495 (setq nval (car (cdr (member value allowed))))) | 547 (nth |
496 (setq nval (or nval (car allowed))) | 548 (setq nval (nth nth allowed)) |
497 (if (equal nval value) | 549 (if (not nval) |
498 (error "Only one allowed value for this property"))) | 550 (error "There are only %d allowed values for property `%s'" |
551 (length allowed) key))) | |
552 ((member value allowed) | |
553 (setq nval (or (car (cdr (member value allowed))) | |
554 (car allowed))) | |
555 (if (equal nval value) | |
556 (error "Only one allowed value for this property"))) | |
557 (t (setq nval (car allowed))))) | |
499 (cond | 558 (cond |
500 ((equal major-mode 'org-agenda-mode) | 559 ((equal major-mode 'org-agenda-mode) |
501 (org-columns-eval '(org-entry-put pom key nval)) | 560 (org-columns-eval '(org-entry-put pom key nval)) |
502 ;; The following let preserves the current format, and makes sure | 561 ;; The following let preserves the current format, and makes sure |
503 ;; that in only a single file things need to be upated. | 562 ;; that in only a single file things need to be upated. |
810 | 869 |
811 (defun org-columns-redo () | 870 (defun org-columns-redo () |
812 "Construct the column display again." | 871 "Construct the column display again." |
813 (interactive) | 872 (interactive) |
814 (message "Recomputing columns...") | 873 (message "Recomputing columns...") |
815 (save-excursion | 874 (let ((line (org-current-line)) |
816 (if (marker-position org-columns-begin-marker) | 875 (col (current-column))) |
817 (goto-char org-columns-begin-marker)) | 876 (save-excursion |
818 (org-columns-remove-overlays) | 877 (if (marker-position org-columns-begin-marker) |
819 (if (org-mode-p) | 878 (goto-char org-columns-begin-marker)) |
820 (call-interactively 'org-columns) | 879 (org-columns-remove-overlays) |
821 (call-interactively 'org-agenda-columns))) | 880 (if (org-mode-p) |
881 (call-interactively 'org-columns) | |
882 (org-agenda-redo) | |
883 (call-interactively 'org-agenda-columns))) | |
884 (goto-line line) | |
885 (move-to-column col)) | |
822 (message "Recomputing columns...done")) | 886 (message "Recomputing columns...done")) |
823 | 887 |
824 (defun org-columns-not-in-agenda () | 888 (defun org-columns-not-in-agenda () |
825 (if (eq major-mode 'org-agenda-mode) | 889 (if (eq major-mode 'org-agenda-mode) |
826 (error "This command is only allowed in Org-mode buffers"))) | 890 (error "This command is only allowed in Org-mode buffers"))) |
838 (defun org-columns-number-to-string (n fmt &optional printf) | 902 (defun org-columns-number-to-string (n fmt &optional printf) |
839 "Convert a computed column number to a string value, according to FMT." | 903 "Convert a computed column number to a string value, according to FMT." |
840 (cond | 904 (cond |
841 ((eq fmt 'add_times) | 905 ((eq fmt 'add_times) |
842 (let* ((h (floor n)) (m (floor (+ 0.5 (* 60 (- n h)))))) | 906 (let* ((h (floor n)) (m (floor (+ 0.5 (* 60 (- n h)))))) |
843 (format "%d:%02d" h m))) | 907 (format org-time-clocksum-format h m))) |
844 ((eq fmt 'checkbox) | 908 ((eq fmt 'checkbox) |
845 (cond ((= n (floor n)) "[X]") | 909 (cond ((= n (floor n)) "[X]") |
846 ((> n 1.) "[-]") | 910 ((> n 1.) "[-]") |
847 (t "[ ]"))) | 911 (t "[ ]"))) |
848 ((memq fmt '(checkbox-n-of-m checkbox-percent)) | 912 ((memq fmt '(checkbox-n-of-m checkbox-percent)) |
1210 (equal (nth 4 a) (nth 4 fm))) | 1274 (equal (nth 4 a) (nth 4 fm))) |
1211 (org-columns-compute (car fm))))))))))) | 1275 (org-columns-compute (car fm))))))))))) |
1212 | 1276 |
1213 (provide 'org-colview) | 1277 (provide 'org-colview) |
1214 | 1278 |
1279 ;; arch-tag: 61f5128d-747c-4983-9479-e3871fa3d73c | |
1280 | |
1215 ;;; org-colview.el ends here | 1281 ;;; org-colview.el ends here |
1216 | |
1217 ;; arch-tag: 61f5128d-747c-4983-9479-e3871fa3d73c |