Enhancement for the clocktable.
The clocktable can now more easily select the correct time range that should be considered when summing times. S-right and S-left in the "#+BEGIN: clocktable" line allow to shift the time block around. Also some code-cleanup.
This commit is contained in:
parent
a0be0664e2
commit
1aec2e86a5
|
@ -11,21 +11,22 @@ LISP (emacs-lisp code)
|
||||||
======================
|
======================
|
||||||
|
|
||||||
org-annotate-file.el --- Annotate a file with org syntax
|
org-annotate-file.el --- Annotate a file with org syntax
|
||||||
org2rem.el --- Convert org appointments into reminders
|
|
||||||
org-bibtex.el --- Org links to BibTeX entries
|
org-bibtex.el --- Org links to BibTeX entries
|
||||||
|
org-bookmark.el --- Org links to bookmarks
|
||||||
org-depend.el --- TODO dependencies for Org-mode
|
org-depend.el --- TODO dependencies for Org-mode
|
||||||
org-elisp-symbol.el --- Org links to emacs-lisp symbols
|
org-elisp-symbol.el --- Org links to emacs-lisp symbols
|
||||||
org-expiry.el --- expiry mechanism for Org entries
|
org-expiry.el --- expiry mechanism for Org entries
|
||||||
org-id.el --- Global id's for identifying entries
|
org-id.el --- Global id's for identifying entries
|
||||||
org-interactive-query.el --- Interactive modification of tags query
|
org-interactive-query.el --- Interactive modification of tags query
|
||||||
org-iswitchb.el --- use iswitchb to select Org buffer
|
org-iswitchb.el --- use iswitchb to select Org buffer
|
||||||
|
org-mairix.el --- Hook mairix search into Org for different MUAs
|
||||||
org-man.el --- Support for links to manpages in Org-mode
|
org-man.el --- Support for links to manpages in Org-mode
|
||||||
|
org-mew.el --- Support for links to messages in Mew
|
||||||
org-panel.el --- Simple routines for us with bad memory
|
org-panel.el --- Simple routines for us with bad memory
|
||||||
org-registry.el --- a registry for Org links
|
org-registry.el --- a registry for Org links
|
||||||
|
org2rem.el --- Convert org appointments into reminders
|
||||||
org-screen.el --- visit screen sessions through Org-mode links
|
org-screen.el --- visit screen sessions through Org-mode links
|
||||||
org-toc.el --- Table of contents for Org-mode buffer
|
org-toc.el --- Table of contents for Org-mode buffer
|
||||||
org-mairix.el --- Hook mairix search into Org for different MUAs
|
|
||||||
org-mew.el --- Support for links to messages in Mew
|
|
||||||
|
|
||||||
PACKAGES
|
PACKAGES
|
||||||
========
|
========
|
||||||
|
|
|
@ -1,310 +0,0 @@
|
||||||
;;; org-interactive-query.el --- Interactive modification of agenda query
|
|
||||||
;;
|
|
||||||
;; Copyright 2007 Free Software Foundation, Inc.
|
|
||||||
;;
|
|
||||||
;; Author: Christopher League <league at contrapunctus dot net>
|
|
||||||
;; Version: 1.0
|
|
||||||
;; Keywords: org, wp
|
|
||||||
;;
|
|
||||||
;; This program is free software; you can redistribute it and/or modify
|
|
||||||
;; it under the terms of the GNU General Public License as published by
|
|
||||||
;; the Free Software Foundation; either version 3, or (at your option)
|
|
||||||
;; any later version.
|
|
||||||
;;
|
|
||||||
;; This program is distributed in the hope that it will be useful,
|
|
||||||
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
;; GNU General Public License for more details.
|
|
||||||
;;
|
|
||||||
;; You should have received a copy of the GNU General Public License
|
|
||||||
;; along with this program; if not, write to the Free Software
|
|
||||||
;; Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
|
||||||
;;
|
|
||||||
;;; Commentary:
|
|
||||||
;;
|
|
||||||
|
|
||||||
;; This ibrary implements interactive modification of a tags/todo query
|
|
||||||
;; in the org-agenda. It adds 4 keys to the agenda
|
|
||||||
;;
|
|
||||||
;; / add a keyword as a positive selection criterion
|
|
||||||
;; \ add a keyword as a newgative selection criterion
|
|
||||||
;; = clear a keyword from the selection string
|
|
||||||
;; ;
|
|
||||||
|
|
||||||
(require 'org)
|
|
||||||
|
|
||||||
(org-defkey org-agenda-mode-map "=" 'org-agenda-query-clear-cmd)
|
|
||||||
(org-defkey org-agenda-mode-map "/" 'org-agenda-query-and-cmd)
|
|
||||||
(org-defkey org-agenda-mode-map ";" 'org-agenda-query-or-cmd)
|
|
||||||
(org-defkey org-agenda-mode-map "\\" 'org-agenda-query-not-cmd)
|
|
||||||
|
|
||||||
;;; Agenda interactive query manipulation
|
|
||||||
|
|
||||||
(defcustom org-agenda-query-selection-single-key t
|
|
||||||
"Non-nil means, query manipulation exits after first change.
|
|
||||||
When nil, you have to press RET to exit it.
|
|
||||||
During query selection, you can toggle this flag with `C-c'.
|
|
||||||
This variable can also have the value `expert'. In this case, the window
|
|
||||||
displaying the tags menu is not even shown, until you press C-c again."
|
|
||||||
:group 'org-agenda
|
|
||||||
:type '(choice
|
|
||||||
(const :tag "No" nil)
|
|
||||||
(const :tag "Yes" t)
|
|
||||||
(const :tag "Expert" expert)))
|
|
||||||
|
|
||||||
(defun org-agenda-query-selection (current op table &optional todo-table)
|
|
||||||
"Fast query manipulation with single keys.
|
|
||||||
CURRENT is the current query string, OP is the initial
|
|
||||||
operator (one of \"+|-=\"), TABLE is an alist of tags and
|
|
||||||
corresponding keys, possibly with grouping information.
|
|
||||||
TODO-TABLE is a similar table with TODO keywords, should these
|
|
||||||
have keys assigned to them. If the keys are nil, a-z are
|
|
||||||
automatically assigned. Returns the new query string, or nil to
|
|
||||||
not change the current one."
|
|
||||||
(let* ((fulltable (append table todo-table))
|
|
||||||
(maxlen (apply 'max (mapcar
|
|
||||||
(lambda (x)
|
|
||||||
(if (stringp (car x)) (string-width (car x)) 0))
|
|
||||||
fulltable)))
|
|
||||||
(fwidth (+ maxlen 3 1 3))
|
|
||||||
(ncol (/ (- (window-width) 4) fwidth))
|
|
||||||
(expert (eq org-agenda-query-selection-single-key 'expert))
|
|
||||||
(exit-after-next org-agenda-query-selection-single-key)
|
|
||||||
(done-keywords org-done-keywords)
|
|
||||||
tbl char cnt e groups ingroup
|
|
||||||
tg c2 c c1 ntable rtn)
|
|
||||||
(save-window-excursion
|
|
||||||
(if expert
|
|
||||||
(set-buffer (get-buffer-create " *Org tags*"))
|
|
||||||
(delete-other-windows)
|
|
||||||
(split-window-vertically)
|
|
||||||
(org-switch-to-buffer-other-window (get-buffer-create " *Org tags*")))
|
|
||||||
(erase-buffer)
|
|
||||||
(org-set-local 'org-done-keywords done-keywords)
|
|
||||||
(insert "Query: " current "\n")
|
|
||||||
(org-agenda-query-op-line op)
|
|
||||||
(insert "\n\n")
|
|
||||||
(org-fast-tag-show-exit exit-after-next)
|
|
||||||
(setq tbl fulltable char ?a cnt 0)
|
|
||||||
(while (setq e (pop tbl))
|
|
||||||
(cond
|
|
||||||
((equal e '(:startgroup))
|
|
||||||
(push '() groups) (setq ingroup t)
|
|
||||||
(when (not (= cnt 0))
|
|
||||||
(setq cnt 0)
|
|
||||||
(insert "\n"))
|
|
||||||
(insert "{ "))
|
|
||||||
((equal e '(:endgroup))
|
|
||||||
(setq ingroup nil cnt 0)
|
|
||||||
(insert "}\n"))
|
|
||||||
(t
|
|
||||||
(setq tg (car e) c2 nil)
|
|
||||||
(if (cdr e)
|
|
||||||
(setq c (cdr e))
|
|
||||||
;; automatically assign a character.
|
|
||||||
(setq c1 (string-to-char
|
|
||||||
(downcase (substring
|
|
||||||
tg (if (= (string-to-char tg) ?@) 1 0)))))
|
|
||||||
(if (or (rassoc c1 ntable) (rassoc c1 table))
|
|
||||||
(while (or (rassoc char ntable) (rassoc char table))
|
|
||||||
(setq char (1+ char)))
|
|
||||||
(setq c2 c1))
|
|
||||||
(setq c (or c2 char)))
|
|
||||||
(if ingroup (push tg (car groups)))
|
|
||||||
(setq tg (org-add-props tg nil 'face
|
|
||||||
(cond
|
|
||||||
((not (assoc tg table))
|
|
||||||
(org-get-todo-face tg))
|
|
||||||
(t nil))))
|
|
||||||
(if (and (= cnt 0) (not ingroup)) (insert " "))
|
|
||||||
(insert "[" c "] " tg (make-string
|
|
||||||
(- fwidth 4 (length tg)) ?\ ))
|
|
||||||
(push (cons tg c) ntable)
|
|
||||||
(when (= (setq cnt (1+ cnt)) ncol)
|
|
||||||
(insert "\n")
|
|
||||||
(if ingroup (insert " "))
|
|
||||||
(setq cnt 0)))))
|
|
||||||
(setq ntable (nreverse ntable))
|
|
||||||
(insert "\n")
|
|
||||||
(goto-char (point-min))
|
|
||||||
(if (and (not expert) (fboundp 'fit-window-to-buffer))
|
|
||||||
(fit-window-to-buffer))
|
|
||||||
(setq rtn
|
|
||||||
(catch 'exit
|
|
||||||
(while t
|
|
||||||
(message "[a-z..]:Toggle [SPC]:clear [RET]:accept [TAB]:free%s%s"
|
|
||||||
(if groups " [!] no groups" " [!]groups")
|
|
||||||
(if expert " [C-c]:window" (if exit-after-next " [C-c]:single" " [C-c]:multi")))
|
|
||||||
(setq c (let ((inhibit-quit t)) (read-char-exclusive)))
|
|
||||||
(cond
|
|
||||||
((= c ?\r) (throw 'exit t))
|
|
||||||
((= c ?!)
|
|
||||||
(setq groups (not groups))
|
|
||||||
(goto-char (point-min))
|
|
||||||
(while (re-search-forward "[{}]" nil t) (replace-match " ")))
|
|
||||||
((= c ?\C-c)
|
|
||||||
(if (not expert)
|
|
||||||
(org-fast-tag-show-exit
|
|
||||||
(setq exit-after-next (not exit-after-next)))
|
|
||||||
(setq expert nil)
|
|
||||||
(delete-other-windows)
|
|
||||||
(split-window-vertically)
|
|
||||||
(org-switch-to-buffer-other-window " *Org tags*")
|
|
||||||
(and (fboundp 'fit-window-to-buffer)
|
|
||||||
(fit-window-to-buffer))))
|
|
||||||
((or (= c ?\C-g)
|
|
||||||
(and (= c ?q) (not (rassoc c ntable))))
|
|
||||||
(setq quit-flag t))
|
|
||||||
((= c ?\ )
|
|
||||||
(setq current "")
|
|
||||||
(if exit-after-next (setq exit-after-next 'now)))
|
|
||||||
((= c ?\[) ; clear left
|
|
||||||
(org-agenda-query-decompose current)
|
|
||||||
(setq current (concat "/" (match-string 2 current)))
|
|
||||||
(if exit-after-next (setq exit-after-next 'now)))
|
|
||||||
((= c ?\]) ; clear right
|
|
||||||
(org-agenda-query-decompose current)
|
|
||||||
(setq current (match-string 1 current))
|
|
||||||
(if exit-after-next (setq exit-after-next 'now)))
|
|
||||||
((= c ?\t)
|
|
||||||
(condition-case nil
|
|
||||||
(setq current (read-string "Query: " current))
|
|
||||||
(quit))
|
|
||||||
(if exit-after-next (setq exit-after-next 'now)))
|
|
||||||
;; operators
|
|
||||||
((or (= c ?/) (= c ?+)) (setq op "+"))
|
|
||||||
((or (= c ?\;) (= c ?|)) (setq op "|"))
|
|
||||||
((or (= c ?\\) (= c ?-)) (setq op "-"))
|
|
||||||
((= c ?=) (setq op "="))
|
|
||||||
;; todos
|
|
||||||
((setq e (rassoc c todo-table) tg (car e))
|
|
||||||
(setq current (org-agenda-query-manip
|
|
||||||
current op groups 'todo tg))
|
|
||||||
(if exit-after-next (setq exit-after-next 'now)))
|
|
||||||
;; tags
|
|
||||||
((setq e (rassoc c ntable) tg (car e))
|
|
||||||
(setq current (org-agenda-query-manip
|
|
||||||
current op groups 'tag tg))
|
|
||||||
(if exit-after-next (setq exit-after-next 'now))))
|
|
||||||
(if (eq exit-after-next 'now) (throw 'exit t))
|
|
||||||
(goto-char (point-min))
|
|
||||||
(beginning-of-line 1)
|
|
||||||
(delete-region (point) (point-at-eol))
|
|
||||||
(insert "Query: " current)
|
|
||||||
(beginning-of-line 2)
|
|
||||||
(delete-region (point) (point-at-eol))
|
|
||||||
(org-agenda-query-op-line op)
|
|
||||||
(goto-char (point-min)))))
|
|
||||||
(if rtn current nil))))
|
|
||||||
|
|
||||||
(defun org-agenda-query-op-line (op)
|
|
||||||
(insert "Operator: "
|
|
||||||
(org-agenda-query-op-entry (equal op "+") "/+" "and")
|
|
||||||
(org-agenda-query-op-entry (equal op "|") ";|" "or")
|
|
||||||
(org-agenda-query-op-entry (equal op "-") "\\-" "not")
|
|
||||||
(org-agenda-query-op-entry (equal op "=") "=" "clear")))
|
|
||||||
|
|
||||||
(defun org-agenda-query-op-entry (matchp chars str)
|
|
||||||
(if matchp
|
|
||||||
(org-add-props (format "[%s %s] " chars (upcase str))
|
|
||||||
nil 'face 'org-todo)
|
|
||||||
(format "[%s]%s " chars str)))
|
|
||||||
|
|
||||||
(defun org-agenda-query-decompose (current)
|
|
||||||
(string-match "\\([^/]*\\)/?\\(.*\\)" current))
|
|
||||||
|
|
||||||
(defun org-agenda-query-clear (current prefix tag)
|
|
||||||
(if (string-match (concat prefix "\\b" (regexp-quote tag) "\\b") current)
|
|
||||||
(replace-match "" t t current)
|
|
||||||
current))
|
|
||||||
|
|
||||||
(defun org-agenda-query-manip (current op groups kind tag)
|
|
||||||
"Apply an operator to a query string and a tag.
|
|
||||||
CURRENT is the current query string, OP is the operator, GROUPS is a
|
|
||||||
list of lists of tags that are mutually exclusive. KIND is 'tag for a
|
|
||||||
regular tag, or 'todo for a TODO keyword, and TAG is the tag or
|
|
||||||
keyword string."
|
|
||||||
;; If this tag is already in query string, remove it.
|
|
||||||
(setq current (org-agenda-query-clear current "[-\\+&|]?" tag))
|
|
||||||
(if (equal op "=") current
|
|
||||||
;; When using AND, also remove mutually exclusive tags.
|
|
||||||
(if (equal op "+")
|
|
||||||
(loop for g in groups do
|
|
||||||
(if (member tag g)
|
|
||||||
(mapc (lambda (x)
|
|
||||||
(setq current
|
|
||||||
(org-agenda-query-clear current "\\+" x)))
|
|
||||||
g))))
|
|
||||||
;; Decompose current query into q1 (tags) and q2 (TODOs).
|
|
||||||
(org-agenda-query-decompose current)
|
|
||||||
(let* ((q1 (match-string 1 current))
|
|
||||||
(q2 (match-string 2 current)))
|
|
||||||
(cond
|
|
||||||
((eq kind 'tag)
|
|
||||||
(concat q1 op tag "/" q2))
|
|
||||||
;; It's a TODO; when using AND, drop all other TODOs.
|
|
||||||
((equal op "+")
|
|
||||||
(concat q1 "/+" tag))
|
|
||||||
(t
|
|
||||||
(concat q1 "/" q2 op tag))))))
|
|
||||||
|
|
||||||
(defun org-agenda-query-global-todo-keys (&optional files)
|
|
||||||
"Return alist of all TODO keywords and their fast keys, in all FILES."
|
|
||||||
(let (alist)
|
|
||||||
(unless (and files (car files))
|
|
||||||
(setq files (org-agenda-files)))
|
|
||||||
(save-excursion
|
|
||||||
(loop for f in files do
|
|
||||||
(set-buffer (find-file-noselect f))
|
|
||||||
(loop for k in org-todo-key-alist do
|
|
||||||
(setq alist (org-agenda-query-merge-todo-key
|
|
||||||
alist k)))))
|
|
||||||
alist))
|
|
||||||
|
|
||||||
(defun org-agenda-query-merge-todo-key (alist entry)
|
|
||||||
(let (e)
|
|
||||||
(cond
|
|
||||||
;; if this is not a keyword (:startgroup, etc), ignore it
|
|
||||||
((not (stringp (car entry))))
|
|
||||||
;; if keyword already exists, replace char if it's null
|
|
||||||
((setq e (assoc (car entry) alist))
|
|
||||||
(when (null (cdr e)) (setcdr e (cdr entry))))
|
|
||||||
;; if char already exists, prepend keyword but drop char
|
|
||||||
((rassoc (cdr entry) alist)
|
|
||||||
(message "TRACE POSITION 2")
|
|
||||||
(setq alist (cons (cons (car entry) nil) alist)))
|
|
||||||
;; else, prepend COPY of entry
|
|
||||||
(t
|
|
||||||
(setq alist (cons (cons (car entry) (cdr entry)) alist)))))
|
|
||||||
alist)
|
|
||||||
|
|
||||||
(defun org-agenda-query-generic-cmd (op)
|
|
||||||
"Activate query manipulation with OP as initial operator."
|
|
||||||
(let ((q (org-agenda-query-selection org-agenda-query-string op
|
|
||||||
org-tag-alist
|
|
||||||
(org-agenda-query-global-todo-keys))))
|
|
||||||
(when q
|
|
||||||
(setq org-agenda-query-string q)
|
|
||||||
(org-agenda-redo))))
|
|
||||||
|
|
||||||
(defun org-agenda-query-clear-cmd ()
|
|
||||||
"Activate query manipulation, to clear a tag from the string."
|
|
||||||
(interactive)
|
|
||||||
(org-agenda-query-generic-cmd "="))
|
|
||||||
|
|
||||||
(defun org-agenda-query-and-cmd ()
|
|
||||||
"Activate query manipulation, initially using the AND (+) operator."
|
|
||||||
(interactive)
|
|
||||||
(org-agenda-query-generic-cmd "+"))
|
|
||||||
|
|
||||||
(defun org-agenda-query-or-cmd ()
|
|
||||||
"Activate query manipulation, initially using the OR (|) operator."
|
|
||||||
(interactive)
|
|
||||||
(org-agenda-query-generic-cmd "|"))
|
|
||||||
|
|
||||||
(defun org-agenda-query-not-cmd ()
|
|
||||||
"Activate query manipulation, initially using the NOT (-) operator."
|
|
||||||
(interactive)
|
|
||||||
(org-agenda-query-generic-cmd "-"))
|
|
||||||
|
|
||||||
(provide 'org-interactive-query)
|
|
14
ChangeLog
14
ChangeLog
|
@ -1,3 +1,17 @@
|
||||||
|
2008-04-01 Carsten Dominik <dominik@science.uva.nl>
|
||||||
|
|
||||||
|
* lisp/org.el (org-modules): Allow additional symbols for external
|
||||||
|
packages.
|
||||||
|
(org-ctrl-c-ctrl-c): Allow for `org-clock-overlays' to be
|
||||||
|
undefined.
|
||||||
|
|
||||||
|
2008-03-31 Carsten Dominik <dominik@science.uva.nl>
|
||||||
|
|
||||||
|
* lisp/org.el (org-clock-goto): Hide drawers after showing an
|
||||||
|
entry with `org-clock-goto.'
|
||||||
|
(org-shiftup, org-shiftdown, org-shiftright, org-shiftleft): Try
|
||||||
|
also a clocktable block shift.
|
||||||
|
(org-clocktable-try-shift): New function.
|
||||||
|
|
||||||
2008-03-30 Carsten Dominik <dominik@science.uva.nl>
|
2008-03-30 Carsten Dominik <dominik@science.uva.nl>
|
||||||
|
|
||||||
|
|
|
@ -5,10 +5,45 @@
|
||||||
#+EMAIL: carsten at orgmode dot org
|
#+EMAIL: carsten at orgmode dot org
|
||||||
#+OPTIONS: H:3 num:nil toc:nil \n:nil @:t ::t |:t ^:{} *:t TeX:t LaTeX:nil
|
#+OPTIONS: H:3 num:nil toc:nil \n:nil @:t ::t |:t ^:{} *:t TeX:t LaTeX:nil
|
||||||
|
|
||||||
* Version 5.24
|
* Version 6.00
|
||||||
|
|
||||||
** Details
|
** Details
|
||||||
|
|
||||||
|
*** Improvements to clocktable
|
||||||
|
|
||||||
|
- The clocktable is now much more flexible and user friendly
|
||||||
|
when trying to specify the time block that should be
|
||||||
|
considered when constructing the table.
|
||||||
|
|
||||||
|
The =:block= parameter to the table can now look like any
|
||||||
|
of these:
|
||||||
|
|
||||||
|
| :block | meaning |
|
||||||
|
|--------------+-----------------------|
|
||||||
|
| 2008 | The entire year 2008 |
|
||||||
|
| 2008-04 | The month April 2008 |
|
||||||
|
| 2008-04-02 | The day April 2, 2008 |
|
||||||
|
| 2008-W14 | ISO-Week 14 in 2008 |
|
||||||
|
| today | Today |
|
||||||
|
| today-5 | The day five days ago |
|
||||||
|
| thisweek | The current week |
|
||||||
|
| thisweek-2 | Two weeks ago |
|
||||||
|
| thismonth | The current month |
|
||||||
|
| thismonth-12 | Same month, last year |
|
||||||
|
| lastmonth | Same as thismonth-1 |
|
||||||
|
|
||||||
|
|
||||||
|
What is more, you can now use the =S-left= and =S-right=
|
||||||
|
keys while the cursor is on the =#+BEGIN: clocktable= line
|
||||||
|
and the the time block around. If the current block is
|
||||||
|
=today=, =S-left= with switch to yesterday. If the current
|
||||||
|
block is =2008-W14=, =S-right= will switch to the following
|
||||||
|
week.
|
||||||
|
|
||||||
|
- When the clocktable is collecting from several files, the
|
||||||
|
total time for each file will now also be listed. This was
|
||||||
|
a request from Bernt Hansen.
|
||||||
|
|
||||||
*** Selective tag inheritance
|
*** Selective tag inheritance
|
||||||
|
|
||||||
Inheritance of tags can now be limited to a subset of all
|
Inheritance of tags can now be limited to a subset of all
|
||||||
|
@ -17,7 +52,7 @@
|
||||||
the inherited tags. Thanks to Michael Ekstrand for this
|
the inherited tags. Thanks to Michael Ekstrand for this
|
||||||
excellent proposal.
|
excellent proposal.
|
||||||
|
|
||||||
The regexp option is also inplemented for
|
The regexp option is also implemented for
|
||||||
=org-use-property-inheritance=, so that you can now select
|
=org-use-property-inheritance=, so that you can now select
|
||||||
properties for inheritance my name.
|
properties for inheritance my name.
|
||||||
|
|
||||||
|
@ -25,11 +60,11 @@
|
||||||
|
|
||||||
The INHERIT flag to the function =org-entry-get= can be set
|
The INHERIT flag to the function =org-entry-get= can be set
|
||||||
to the symbol =selective=. If this is the case, then the
|
to the symbol =selective=. If this is the case, then the
|
||||||
value of the property will be retrived using inheritance if
|
value of the property will be retrieved using inheritance if
|
||||||
and only if the setting in =org-use-property-inheritance=
|
and only if the setting in =org-use-property-inheritance=
|
||||||
selects the property for inheritance.
|
selects the property for inheritance.
|
||||||
|
|
||||||
*** Suport for ISO week dates (ISO 6801)
|
*** Support for ISO week dates (ISO 6801)
|
||||||
|
|
||||||
Dates in the agenda now show the ISO week an day
|
Dates in the agenda now show the ISO week an day
|
||||||
specification, in the form =W08 2=, meaning Tuesday of
|
specification, in the form =W08 2=, meaning Tuesday of
|
||||||
|
@ -43,8 +78,8 @@
|
||||||
or year, respectively. For example, =32 d= jumps to February
|
or year, respectively. For example, =32 d= jumps to February
|
||||||
1st, =9 w= to ISO week number 9. When setting day, week, or
|
1st, =9 w= to ISO week number 9. When setting day, week, or
|
||||||
month view, a year may be encoded in the prefix argument as
|
month view, a year may be encoded in the prefix argument as
|
||||||
well. For example, =200712 w= will jump to week 12 in
|
well. For example, =200712 w= will jump to week 12 in the
|
||||||
2007. If such a year specification has only one or two
|
year 2007. If such a year specification has only one or two
|
||||||
digits, it will be mapped to the interval 1938-2037.
|
digits, it will be mapped to the interval 1938-2037.
|
||||||
|
|
||||||
When entering a date at the date prompt, you may now also
|
When entering a date at the date prompt, you may now also
|
||||||
|
@ -56,7 +91,7 @@
|
||||||
: 2012 w4 fri Friday of week 4 in 2012.
|
: 2012 w4 fri Friday of week 4 in 2012.
|
||||||
: 2012-W04-5 Same as above
|
: 2012-W04-5 Same as above
|
||||||
|
|
||||||
So far I have not implements the effect of
|
So far I have not implemented the effect of
|
||||||
`org-read-date-prefer-future' on this functionality, because
|
`org-read-date-prefer-future' on this functionality, because
|
||||||
it seemed too magic for me. I'd appreciate comments on this
|
it seemed too magic for me. I'd appreciate comments on this
|
||||||
issue: Should `org-read-date-prefer-future' also push dates
|
issue: Should `org-read-date-prefer-future' also push dates
|
||||||
|
@ -84,19 +119,19 @@
|
||||||
|
|
||||||
*** Improvements in Search View
|
*** Improvements in Search View
|
||||||
|
|
||||||
- Calling search view with a C-u prefix will makt it match
|
- Calling search view with a C-u prefix will make it match
|
||||||
only in TODO entries.
|
only in TODO entries.
|
||||||
|
|
||||||
- The single quote is no longer considered a word character
|
- The single quote is no longer considered a word character
|
||||||
durin search, so that searching for the word "Nasim" will
|
during search, so that searching for the word "Nasim" will
|
||||||
also match in "Nasim's".
|
also match in "Nasim's".
|
||||||
|
|
||||||
*** Misc
|
*** Misc
|
||||||
|
|
||||||
- When an entry already has a scheduling or deadline time
|
- When an entry already has a scheduling or deadline time
|
||||||
stamp, calling `C-c C-s' or `C-c C-d', respectively, will no
|
stamp, calling `C-c C-s' or `C-c C-d', respectively, will
|
||||||
use that old date as the default, and you can can use the
|
now use that old date as the default, and you can can use
|
||||||
"++4d" syntax to invoke shifts relative to that default
|
the "++4d" syntax to invoke shifts relative to that default
|
||||||
date. Simply pressing RET at the prompt will keep the
|
date. Simply pressing RET at the prompt will keep the
|
||||||
default date, not switch to today.
|
default date, not switch to today.
|
||||||
|
|
||||||
|
@ -3775,3 +3810,4 @@ Version 4.00
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
209
lisp/org.el
209
lisp/org.el
|
@ -141,11 +141,16 @@ With prefix arg HERE, insert it at point."
|
||||||
|
|
||||||
(defcustom org-modules '(org-bbdb org-gnus org-info org-irc org-mhe org-rmail org-vm org-wl)
|
(defcustom org-modules '(org-bbdb org-gnus org-info org-irc org-mhe org-rmail org-vm org-wl)
|
||||||
"Modules that should always be loaded together with org.el.
|
"Modules that should always be loaded together with org.el.
|
||||||
If the description starts with <A>, this means the extension
|
|
||||||
will be autoloaded when needed, preloading is not necessary.
|
|
||||||
If a description starts with <C>, the file is not part of emacs
|
If a description starts with <C>, the file is not part of emacs
|
||||||
and loading it will require that you have downloaded and properly installed
|
and loading it will require that you have downloaded and properly installed
|
||||||
the org-mode distribution."
|
the org-mode distribution.
|
||||||
|
|
||||||
|
You can also use this system to load external packages (i.e. neither Org
|
||||||
|
core modules, not modules from the CONTRIB directory). Just add symbols
|
||||||
|
to the end of the list. If the package is called org-xyz.e, then you need
|
||||||
|
to add the symbol `xyz', and the package must have a call to
|
||||||
|
|
||||||
|
(provide 'org-xyz)"
|
||||||
:group 'org
|
:group 'org
|
||||||
:set 'org-set-modules
|
:set 'org-set-modules
|
||||||
:type
|
:type
|
||||||
|
@ -160,11 +165,10 @@ the org-mode distribution."
|
||||||
(const :tag " vm: Links to VM folders/messages" org-vm)
|
(const :tag " vm: Links to VM folders/messages" org-vm)
|
||||||
(const :tag " wl: Links to Wanderlust folders/messages" org-wl)
|
(const :tag " wl: Links to Wanderlust folders/messages" org-wl)
|
||||||
(const :tag " mouse: Additional mouse support" org-mouse)
|
(const :tag " mouse: Additional mouse support" org-mouse)
|
||||||
; (const :tag "A export-latex: LaTeX export" org-export-latex)
|
|
||||||
; (const :tag "A publish: Publishing" org-publish)
|
|
||||||
|
|
||||||
(const :tag "C annotate-file: Annotate a file with org syntax" org-annotate-file)
|
(const :tag "C annotate-file: Annotate a file with org syntax" org-annotate-file)
|
||||||
(const :tag "C bibtex: Org links to BibTeX entries" org-bibtex)
|
(const :tag "C bibtex: Org links to BibTeX entries" org-bibtex)
|
||||||
|
(const :tag "C bookmark: Org links to bookmarks" org-bookmark)
|
||||||
(const :tag "C depend: TODO dependencies for Org-mode" org-depend)
|
(const :tag "C depend: TODO dependencies for Org-mode" org-depend)
|
||||||
(const :tag "C elisp-symbol: Org links to emacs-lisp symbols" org-elisp-symbol)
|
(const :tag "C elisp-symbol: Org links to emacs-lisp symbols" org-elisp-symbol)
|
||||||
(const :tag "C expiry: Expiry mechanism for Org entries" org-expiry)
|
(const :tag "C expiry: Expiry mechanism for Org entries" org-expiry)
|
||||||
|
@ -178,7 +182,8 @@ the org-mode distribution."
|
||||||
(const :tag "C registry: A registry for Org links" org-registry)
|
(const :tag "C registry: A registry for Org links" org-registry)
|
||||||
(const :tag "C org2rem: Convert org appointments into reminders" org2rem)
|
(const :tag "C org2rem: Convert org appointments into reminders" org2rem)
|
||||||
(const :tag "C screen: Visit screen sessions through Org-mode links" org-screen)
|
(const :tag "C screen: Visit screen sessions through Org-mode links" org-screen)
|
||||||
(const :tag "C toc: Table of contents for Org-mode buffer" org-toc)))
|
(const :tag "C toc: Table of contents for Org-mode buffer" org-toc)
|
||||||
|
(repeat :tag "External packages" :inline t (symbol :tag "Package"))))
|
||||||
|
|
||||||
;; FIXME: Needs a separate group...
|
;; FIXME: Needs a separate group...
|
||||||
(defcustom org-completion-fallback-command 'hippie-expand
|
(defcustom org-completion-fallback-command 'hippie-expand
|
||||||
|
@ -12767,6 +12772,7 @@ If there is no running clock, throw an error, unless FAIL-QUIETLY is set."
|
||||||
(goto-char org-clock-marker)
|
(goto-char org-clock-marker)
|
||||||
(org-show-entry)
|
(org-show-entry)
|
||||||
(org-back-to-heading)
|
(org-back-to-heading)
|
||||||
|
(org-cycle-hide-drawers 'children)
|
||||||
(recenter))
|
(recenter))
|
||||||
|
|
||||||
(defvar org-clock-file-total-minutes nil
|
(defvar org-clock-file-total-minutes nil
|
||||||
|
@ -12981,38 +12987,125 @@ The range is determined relative to TIME. TIME defaults to the current time.
|
||||||
The return value is a cons cell with two internal times like the ones
|
The return value is a cons cell with two internal times like the ones
|
||||||
returned by `current time' or `encode-time'. if AS-STRINGS is non-nil,
|
returned by `current time' or `encode-time'. if AS-STRINGS is non-nil,
|
||||||
the returned times will be formatted strings."
|
the returned times will be formatted strings."
|
||||||
|
(if (integerp key) (setq key (intern (number-to-string key))))
|
||||||
(let* ((tm (decode-time (or time (current-time))))
|
(let* ((tm (decode-time (or time (current-time))))
|
||||||
(s 0) (m (nth 1 tm)) (h (nth 2 tm))
|
(s 0) (m (nth 1 tm)) (h (nth 2 tm))
|
||||||
(d (nth 3 tm)) (month (nth 4 tm)) (y (nth 5 tm))
|
(d (nth 3 tm)) (month (nth 4 tm)) (y (nth 5 tm))
|
||||||
(dow (nth 6 tm))
|
(dow (nth 6 tm))
|
||||||
s1 m1 h1 d1 month1 y1 diff ts te fm)
|
(skey (symbol-name key))
|
||||||
|
(shift 0)
|
||||||
|
s1 m1 h1 d1 month1 y1 diff ts te fm txt w date)
|
||||||
(cond
|
(cond
|
||||||
((eq key 'today)
|
((string-match "^[0-9]+$" skey)
|
||||||
(setq h 0 m 0 h1 24 m1 0))
|
(setq y (string-to-number skey) m 1 d 1 key 'year))
|
||||||
((eq key 'yesterday)
|
((string-match "^\\([0-9]+\\)-\\([0-9]\\{1,2\\}\\)$" skey)
|
||||||
(setq d (1- d) h 0 m 0 h1 24 m1 0))
|
(setq y (string-to-number (match-string 1 skey))
|
||||||
((eq key 'thisweek)
|
month (string-to-number (match-string 2 skey))
|
||||||
(setq diff (if (= dow 0) 6 (1- dow))
|
d 1 key 'month))
|
||||||
|
((string-match "^\\([0-9]+\\)-[wW]\\([0-9]\\{1,2\\}\\)$" skey)
|
||||||
|
(require 'cal-iso)
|
||||||
|
(setq y (string-to-number (match-string 1 skey))
|
||||||
|
w (string-to-number (match-string 2 skey)))
|
||||||
|
(setq date (calendar-gregorian-from-absolute
|
||||||
|
(calendar-absolute-from-iso (list w 1 y))))
|
||||||
|
(setq d (nth 1 date) month (car date) y (nth 2 date)
|
||||||
|
key 'week))
|
||||||
|
((string-match "^\\([0-9]+\\)-\\([0-9]\\{1,2\\}\\)-\\([0-9]\\{1,2\\}\\)$" skey)
|
||||||
|
(setq y (string-to-number (match-string 1 skey))
|
||||||
|
month (string-to-number (match-string 2 skey))
|
||||||
|
d (string-to-number (match-string 3 skey))
|
||||||
|
key 'day))
|
||||||
|
((string-match "\\([-+][0-9]+\\)$" skey)
|
||||||
|
(setq shift (string-to-number (match-string 1 skey))
|
||||||
|
key (intern (substring skey 0 (match-beginning 1))))))
|
||||||
|
(unless shift
|
||||||
|
(cond ((eq key 'yesterday) (setq key 'today shift -1))
|
||||||
|
((eq key 'lastweek) (setq key 'week shift -1))
|
||||||
|
((eq key 'lastmonth) (setq key 'month shift -1))
|
||||||
|
((eq key 'lastyear) (setq key 'year shift -1))))
|
||||||
|
(cond
|
||||||
|
((memq key '(day today))
|
||||||
|
(setq d (+ d shift) h 0 m 0 h1 24 m1 0))
|
||||||
|
((memq key '(week thisweek))
|
||||||
|
(setq diff (+ (* -7 shift) (if (= dow 0) 6 (1- dow)))
|
||||||
m 0 h 0 d (- d diff) d1 (+ 7 d)))
|
m 0 h 0 d (- d diff) d1 (+ 7 d)))
|
||||||
((eq key 'lastweek)
|
((memq key '(month thismonth))
|
||||||
(setq diff (+ 7 (if (= dow 0) 6 (1- dow)))
|
(setq d 1 h 0 m 0 d1 1 month (+ month shift) month1 (1+ month) h1 0 m1 0))
|
||||||
m 0 h 0 d (- d diff) d1 (+ 7 d)))
|
((memq key '(year thisyear))
|
||||||
((eq key 'thismonth)
|
(setq m 0 h 0 d 1 month 1 y (+ y shift) y1 (1+ y)))
|
||||||
(setq d 1 h 0 m 0 d1 1 month1 (1+ month) h1 0 m1 0))
|
|
||||||
((eq key 'lastmonth)
|
|
||||||
(setq d 1 h 0 m 0 d1 1 month (1- month) month1 (1+ month) h1 0 m1 0))
|
|
||||||
((eq key 'thisyear)
|
|
||||||
(setq m 0 h 0 d 1 month 1 y1 (1+ y)))
|
|
||||||
((eq key 'lastyear)
|
|
||||||
(setq m 0 h 0 d 1 month 1 y (1- y) y1 (1+ y)))
|
|
||||||
(t (error "No such time block %s" key)))
|
(t (error "No such time block %s" key)))
|
||||||
(setq ts (encode-time s m h d month y)
|
(setq ts (encode-time s m h d month y)
|
||||||
te (encode-time (or s1 s) (or m1 m) (or h1 h)
|
te (encode-time (or s1 s) (or m1 m) (or h1 h)
|
||||||
(or d1 d) (or month1 month) (or y1 y)))
|
(or d1 d) (or month1 month) (or y1 y)))
|
||||||
(setq fm (cdr org-time-stamp-formats))
|
(setq fm (cdr org-time-stamp-formats))
|
||||||
|
(cond
|
||||||
|
((memq key '(day today))
|
||||||
|
(setq txt (format-time-string "%A, %B %d, %Y" ts)))
|
||||||
|
((memq key '(week thisweek))
|
||||||
|
(setq txt (format-time-string "week %G-W%V" ts)))
|
||||||
|
((memq key '(month thismonth))
|
||||||
|
(setq txt (format-time-string "%B %Y" ts)))
|
||||||
|
((memq key '(year thisyear))
|
||||||
|
(setq txt (format-time-string "the year %Y" ts))))
|
||||||
(if as-strings
|
(if as-strings
|
||||||
(cons (format-time-string fm ts) (format-time-string fm te))
|
(list (format-time-string fm ts) (format-time-string fm te) txt)
|
||||||
(cons ts te))))
|
(list ts te txt))))
|
||||||
|
|
||||||
|
(defun org-clocktable-try-shift (dir n)
|
||||||
|
"Try to shift the :block date of the clocktable at point.
|
||||||
|
Point must be in the #+BEGIN: line of a clocktable, or this function
|
||||||
|
will throw an error.
|
||||||
|
DIR is a direction, a symbol `left', `right', `up', or `down'.
|
||||||
|
Both `left' and `down' shift the block toward the past, `up' and `right'
|
||||||
|
push it toward the future.
|
||||||
|
N is the number of shift steps to take. The size of the step depends on
|
||||||
|
the currently selected interval size."
|
||||||
|
(setq n (prefix-numeric-value n))
|
||||||
|
(and (memq dir '(left down)) (setq n (- n)))
|
||||||
|
(save-excursion
|
||||||
|
(goto-char (point-at-bol))
|
||||||
|
(when (looking-at "#\\+BEGIN: clocktable\\>.*?:block[ \t]+\\(\\S-+\\)")
|
||||||
|
(let* ((b (match-beginning 1)) (e (match-end 1))
|
||||||
|
(s (match-string 1))
|
||||||
|
block shift ins y mw d date)
|
||||||
|
(cond
|
||||||
|
((string-match "^\\(today\\|thisweek\\|thismonth\\|thisyear\\)\\([-+][0-9]+\\)?$" s)
|
||||||
|
(setq block (match-string 1 s)
|
||||||
|
shift (if (match-end 2)
|
||||||
|
(string-to-number (match-string 2 s))
|
||||||
|
0))
|
||||||
|
(setq shift (+ shift n))
|
||||||
|
(setq ins (if (= shift 0) block (format "%s%+d" block shift))))
|
||||||
|
((string-match "\\([0-9]+\\)\\(-\\([wW]?\\)\\([0-9]\\{1,2\\}\\)\\(-\\([0-9]\\{1,2\\}\\)\\)?\\)?" s)
|
||||||
|
;; 1 1 2 3 3 4 4 5 6 6 5 2
|
||||||
|
(setq y (string-to-number (match-string 1 s))
|
||||||
|
wp (and (match-end 3) (match-string 3 s))
|
||||||
|
mw (and (match-end 4) (string-to-number (match-string 4 s)))
|
||||||
|
d (and (match-end 6) (string-to-number (match-string 6 s))))
|
||||||
|
(cond
|
||||||
|
(d (setq ins (format-time-string
|
||||||
|
"%Y-%m-%d"
|
||||||
|
(encode-time 0 0 0 (+ d n) m y))))
|
||||||
|
((and wp mw (> (length wp) 0))
|
||||||
|
(require 'cal-iso)
|
||||||
|
(setq date (calendar-gregorian-from-absolute (calendar-absolute-from-iso (list (+ mw n) 1 y))))
|
||||||
|
(setq ins (format-time-string
|
||||||
|
"%G-W%V"
|
||||||
|
(encode-time 0 0 0 (nth 1 date) (car date) (nth 2 date)))))
|
||||||
|
(mw
|
||||||
|
(setq ins (format-time-string
|
||||||
|
"%Y-%m"
|
||||||
|
(encode-time 0 0 0 1 (+ mw n) y))))
|
||||||
|
(y
|
||||||
|
(setq ins (number-to-string (+ y n))))))
|
||||||
|
(t (error "Cannot shift clocktable block")))
|
||||||
|
(when ins
|
||||||
|
(goto-char b)
|
||||||
|
(insert ins)
|
||||||
|
(delete-region (point) (+ (point) (- e b)))
|
||||||
|
(beginning-of-line 1)
|
||||||
|
(org-update-dblock)
|
||||||
|
t)))))
|
||||||
|
|
||||||
(defun org-dblock-write:clocktable (params)
|
(defun org-dblock-write:clocktable (params)
|
||||||
"Write the standard clocktable."
|
"Write the standard clocktable."
|
||||||
|
@ -13031,14 +13124,14 @@ the returned times will be formatted strings."
|
||||||
(te (plist-get params :tend))
|
(te (plist-get params :tend))
|
||||||
(block (plist-get params :block))
|
(block (plist-get params :block))
|
||||||
(link (plist-get params :link))
|
(link (plist-get params :link))
|
||||||
ipos time h m p level hlc hdl
|
ipos time p level hlc hdl
|
||||||
cc beg end pos tbl)
|
cc beg end pos tbl tbl1 range-text)
|
||||||
(when step
|
(when step
|
||||||
(org-clocktable-steps params)
|
(org-clocktable-steps params)
|
||||||
(throw 'exit nil))
|
(throw 'exit nil))
|
||||||
(when block
|
(when block
|
||||||
(setq cc (org-clock-special-range block nil t)
|
(setq cc (org-clock-special-range block nil t)
|
||||||
ts (car cc) te (cdr cc)))
|
ts (car cc) te (nth 1 cc) range-text (nth 2 cc)))
|
||||||
(if ts (setq ts (time-to-seconds
|
(if ts (setq ts (time-to-seconds
|
||||||
(apply 'encode-time (org-parse-time-string ts)))))
|
(apply 'encode-time (org-parse-time-string ts)))))
|
||||||
(if te (setq te (time-to-seconds
|
(if te (setq te (time-to-seconds
|
||||||
|
@ -13076,10 +13169,17 @@ the returned times will be formatted strings."
|
||||||
(org-prepare-agenda-buffers files)
|
(org-prepare-agenda-buffers files)
|
||||||
(while (setq file (pop files))
|
(while (setq file (pop files))
|
||||||
(with-current-buffer (find-buffer-visiting file)
|
(with-current-buffer (find-buffer-visiting file)
|
||||||
|
(setq tbl1 (org-dblock-write:clocktable p1))
|
||||||
|
(when tbl1
|
||||||
(push (org-clocktable-add-file
|
(push (org-clocktable-add-file
|
||||||
file (org-dblock-write:clocktable p1)) tbl)
|
file
|
||||||
|
(concat "| |*File time*|*"
|
||||||
|
(org-minutes-to-hours
|
||||||
|
org-clock-file-total-minutes)
|
||||||
|
"*|\n"
|
||||||
|
tbl1)) tbl)
|
||||||
(setq total-time (+ (or total-time 0)
|
(setq total-time (+ (or total-time 0)
|
||||||
org-clock-file-total-minutes)))))))
|
org-clock-file-total-minutes))))))))
|
||||||
(goto-char pos)
|
(goto-char pos)
|
||||||
|
|
||||||
(unless (eq scope 'agenda)
|
(unless (eq scope 'agenda)
|
||||||
|
@ -13103,14 +13203,12 @@ the returned times will be formatted strings."
|
||||||
(save-match-data
|
(save-match-data
|
||||||
(org-make-org-heading-search-string
|
(org-make-org-heading-search-string
|
||||||
(match-string 2))))
|
(match-string 2))))
|
||||||
(match-string 2)))
|
(match-string 2))))
|
||||||
h (/ time 60)
|
|
||||||
m (- time (* 60 h)))
|
|
||||||
(if (and (not multifile) (= level 1)) (push "|-" tbl))
|
(if (and (not multifile) (= level 1)) (push "|-" tbl))
|
||||||
(push (concat
|
(push (concat
|
||||||
"| " (int-to-string level) "|" hlc hdl hlc " |"
|
"| " (int-to-string level) "|" hlc hdl hlc " |"
|
||||||
(make-string (1- level) ?|)
|
(make-string (1- level) ?|)
|
||||||
hlc (format "%d:%02d" h m) hlc
|
hlc (org-minutes-to-hours time) hlc
|
||||||
" |") tbl))))))
|
" |") tbl))))))
|
||||||
(setq tbl (nreverse tbl))
|
(setq tbl (nreverse tbl))
|
||||||
(if tostring
|
(if tostring
|
||||||
|
@ -13123,23 +13221,19 @@ the returned times will be formatted strings."
|
||||||
(substring
|
(substring
|
||||||
(format-time-string (cdr org-time-stamp-formats))
|
(format-time-string (cdr org-time-stamp-formats))
|
||||||
1 -1)
|
1 -1)
|
||||||
"]."
|
"]"
|
||||||
(if block
|
(if block (concat ", for " range-text ".") "")
|
||||||
(format " Considered range is /%s/." block)
|
|
||||||
"")
|
|
||||||
"\n\n"))
|
"\n\n"))
|
||||||
(if (eq scope 'agenda) "|File" "")
|
(if (eq scope 'agenda) "|File" "")
|
||||||
"|L|Headline|Time|\n")
|
"|L|Headline|Time|\n")
|
||||||
(setq total-time (or total-time org-clock-file-total-minutes)
|
(setq total-time (or total-time org-clock-file-total-minutes))
|
||||||
h (/ total-time 60)
|
|
||||||
m (- total-time (* 60 h)))
|
|
||||||
(insert-before-markers
|
(insert-before-markers
|
||||||
"|-\n|"
|
"|-\n|"
|
||||||
(if (eq scope 'agenda) "|" "")
|
(if (eq scope 'agenda) "|" "")
|
||||||
"|"
|
"|"
|
||||||
"*Total time*| "
|
"*Total time*| *"
|
||||||
(format "*%d:%02d*" h m)
|
(org-minutes-to-hours total-time)
|
||||||
"|\n|-\n")
|
"*|\n|-\n")
|
||||||
(setq tbl (delq nil tbl))
|
(setq tbl (delq nil tbl))
|
||||||
(if (and (stringp (car tbl)) (> (length (car tbl)) 1)
|
(if (and (stringp (car tbl)) (> (length (car tbl)) 1)
|
||||||
(equal (substring (car tbl) 0 2) "|-"))
|
(equal (substring (car tbl) 0 2) "|-"))
|
||||||
|
@ -13152,6 +13246,11 @@ the returned times will be formatted strings."
|
||||||
(skip-chars-forward "^|")
|
(skip-chars-forward "^|")
|
||||||
(org-table-align))))))
|
(org-table-align))))))
|
||||||
|
|
||||||
|
(defun org-minutes-to-hours (m)
|
||||||
|
(let ((h (/ m 60)))
|
||||||
|
(setq m (- m (* 60 h)))
|
||||||
|
(format "%d:%02d" h m)))
|
||||||
|
|
||||||
(defun org-clocktable-steps (params)
|
(defun org-clocktable-steps (params)
|
||||||
(let* ((p1 (copy-sequence params))
|
(let* ((p1 (copy-sequence params))
|
||||||
(ts (plist-get p1 :tstart))
|
(ts (plist-get p1 :tstart))
|
||||||
|
@ -13159,10 +13258,10 @@ the returned times will be formatted strings."
|
||||||
(step0 (plist-get p1 :step))
|
(step0 (plist-get p1 :step))
|
||||||
(step (cdr (assoc step0 '((day . 86400) (week . 604800)))))
|
(step (cdr (assoc step0 '((day . 86400) (week . 604800)))))
|
||||||
(block (plist-get p1 :block))
|
(block (plist-get p1 :block))
|
||||||
cc)
|
cc range-text)
|
||||||
(when block
|
(when block
|
||||||
(setq cc (org-clock-special-range block nil t)
|
(setq cc (org-clock-special-range block nil t)
|
||||||
ts (car cc) te (cdr cc)))
|
ts (car cc) te (nth 1 cc) range-text (nth 2 cc)))
|
||||||
(if ts (setq ts (time-to-seconds
|
(if ts (setq ts (time-to-seconds
|
||||||
(apply 'encode-time (org-parse-time-string ts)))))
|
(apply 'encode-time (org-parse-time-string ts)))))
|
||||||
(if te (setq te (time-to-seconds
|
(if te (setq te (time-to-seconds
|
||||||
|
@ -14149,6 +14248,7 @@ depending on context. See the individual commands for more information."
|
||||||
'org-timestamp-down 'org-timestamp-up)))
|
'org-timestamp-down 'org-timestamp-up)))
|
||||||
((org-on-heading-p) (call-interactively 'org-priority-up))
|
((org-on-heading-p) (call-interactively 'org-priority-up))
|
||||||
((org-at-item-p) (call-interactively 'org-previous-item))
|
((org-at-item-p) (call-interactively 'org-previous-item))
|
||||||
|
((org-clocktable-try-shift 'up arg))
|
||||||
(t (call-interactively 'org-beginning-of-item) (beginning-of-line 1))))
|
(t (call-interactively 'org-beginning-of-item) (beginning-of-line 1))))
|
||||||
|
|
||||||
(defun org-shiftdown (&optional arg)
|
(defun org-shiftdown (&optional arg)
|
||||||
|
@ -14161,27 +14261,30 @@ depending on context. See the individual commands for more information."
|
||||||
(call-interactively (if org-edit-timestamp-down-means-later
|
(call-interactively (if org-edit-timestamp-down-means-later
|
||||||
'org-timestamp-up 'org-timestamp-down)))
|
'org-timestamp-up 'org-timestamp-down)))
|
||||||
((org-on-heading-p) (call-interactively 'org-priority-down))
|
((org-on-heading-p) (call-interactively 'org-priority-down))
|
||||||
|
((org-clocktable-try-shift 'down arg))
|
||||||
(t (call-interactively 'org-next-item))))
|
(t (call-interactively 'org-next-item))))
|
||||||
|
|
||||||
(defun org-shiftright ()
|
(defun org-shiftright (&optional arg)
|
||||||
"Next TODO keyword or timestamp one day later, depending on context."
|
"Next TODO keyword or timestamp one day later, depending on context."
|
||||||
(interactive)
|
(interactive "P")
|
||||||
(cond
|
(cond
|
||||||
((org-at-timestamp-p t) (call-interactively 'org-timestamp-up-day))
|
((org-at-timestamp-p t) (call-interactively 'org-timestamp-up-day))
|
||||||
((org-on-heading-p) (org-call-with-arg 'org-todo 'right))
|
((org-on-heading-p) (org-call-with-arg 'org-todo 'right))
|
||||||
((org-at-item-p) (org-call-with-arg 'org-cycle-list-bullet nil))
|
((org-at-item-p) (org-call-with-arg 'org-cycle-list-bullet nil))
|
||||||
((org-at-property-p) (call-interactively 'org-property-next-allowed-value))
|
((org-at-property-p) (call-interactively 'org-property-next-allowed-value))
|
||||||
|
((org-clocktable-try-shift 'right arg))
|
||||||
(t (org-shiftcursor-error))))
|
(t (org-shiftcursor-error))))
|
||||||
|
|
||||||
(defun org-shiftleft ()
|
(defun org-shiftleft (&optional arg)
|
||||||
"Previous TODO keyword or timestamp one day earlier, depending on context."
|
"Previous TODO keyword or timestamp one day earlier, depending on context."
|
||||||
(interactive)
|
(interactive "P")
|
||||||
(cond
|
(cond
|
||||||
((org-at-timestamp-p t) (call-interactively 'org-timestamp-down-day))
|
((org-at-timestamp-p t) (call-interactively 'org-timestamp-down-day))
|
||||||
((org-on-heading-p) (org-call-with-arg 'org-todo 'left))
|
((org-on-heading-p) (org-call-with-arg 'org-todo 'left))
|
||||||
((org-at-item-p) (org-call-with-arg 'org-cycle-list-bullet 'previous))
|
((org-at-item-p) (org-call-with-arg 'org-cycle-list-bullet 'previous))
|
||||||
((org-at-property-p)
|
((org-at-property-p)
|
||||||
(call-interactively 'org-property-previous-allowed-value))
|
(call-interactively 'org-property-previous-allowed-value))
|
||||||
|
((org-clocktable-try-shift 'left arg))
|
||||||
(t (org-shiftcursor-error))))
|
(t (org-shiftcursor-error))))
|
||||||
|
|
||||||
(defun org-shiftcontrolright ()
|
(defun org-shiftcontrolright ()
|
||||||
|
@ -14268,10 +14371,10 @@ This command does many different things, depending on context:
|
||||||
(interactive "P")
|
(interactive "P")
|
||||||
(let ((org-enable-table-editor t))
|
(let ((org-enable-table-editor t))
|
||||||
(cond
|
(cond
|
||||||
((or org-clock-overlays
|
((or (and (boundp 'org-clock-overlays) org-clock-overlays)
|
||||||
org-occur-highlights
|
org-occur-highlights
|
||||||
org-latex-fragment-image-overlays)
|
org-latex-fragment-image-overlays)
|
||||||
(org-remove-clock-overlays)
|
(and (boundp 'org-clock-overlays) (org-remove-clock-overlays))
|
||||||
(org-remove-occur-highlights)
|
(org-remove-occur-highlights)
|
||||||
(org-remove-latex-fragment-image-overlays)
|
(org-remove-latex-fragment-image-overlays)
|
||||||
(message "Temporary highlights/overlays removed from current buffer"))
|
(message "Temporary highlights/overlays removed from current buffer"))
|
||||||
|
|
Loading…
Reference in New Issue