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