From: Christoph LANGE <email@example.com>
To: Peter Frings <firstname.lastname@example.org>
Cc: "email@example.com" <firstname.lastname@example.org>
Subject: Re: Function that splits a CLOCK interval
Date: Tue, 07 Apr 2015 18:07:37 +0200 [thread overview]
Message-ID: <552400C9.email@example.com> (raw)
Peter Frings on 2015-04-01 12:37:
>> The following function now automates the task of splitting:
> Fantastic, just what I needed!
thanks for your feedback!
I have now made a few improvements but not yet found time to get started
with contributing the code to Worg, so one more email with the
> One little thing, though. When I interrupt the function with C-g at the prompt, the current line is already duplicated. It would by nice that C-g left the buffer unchanged.
Done, see code below. Plus, the function now accepts a prefix argument
and works with active time stamps. When a prefix argument is given, the
interactive editing of the timestamp uses C as a default before changing
A--C into A--B B--C.
--- %< --- %< --- %< --- %< --- %< --- %< --- %< --- %< --- %< --- %< ---
(defun org-clock-split-current-interval (end-as-default)
"If this is a CLOCK line, split its clock time interval into two.
Let the current time interval be A--C. By default, this function
interactively prompts for a time B (suggesting A as a default), and then
replaces A--C by B--C and A--B. When called with a prefix argument, the
function uses C as a default for B. The point is left on the later
interval, so that this line can, e.g., be moved to another entry."
;; Part of the following code is copied from
;; If this function becomes part of org-clock.el, some
refactoring would be in order.
(skip-chars-forward " \t")
(when (looking-at org-clock-string)
(let ((re (concat "\\([ \t]*" org-clock-string " *\\)"
(when (looking-at re)
(let ((indentation (match-string 1))
(start (match-string 2))
(to (match-string 3))
(end (match-string 4))
(use-start-as-default (equal end-as-default nil)))
;; interactively change A--C to B--C,
;; or (given prefix argument) to A--B, …
(re-search-forward (concat org-clock-string " \\([[<]\\)"))
(when (not use-start-as-default) (re-search-forward
;; … respecting whether A or C is an active or an
(call-interactively (if (equal (match-string 1) "<")
;; If there were a function that implemented the actual
body of org-clock-update-time-maybe, we could call that function, as in
this context we _know_ that we are on a CLOCK line.
;; copy changed time B
(let ((middle (match-string 0)))
;; insert A--B below, or (given prefix argument) insert
(end-of-line (if use-start-as-default 1 0))
(insert "\n" indentation
(if use-start-as-default start middle)
(if use-start-as-default middle end))
Dr. Christoph Lange, Enterprise Information Systems Department
Applied Computer Science @ University of Bonn; Fraunhofer IAIS
http://langec.wordpress.com/about, Skype duke4701
→ Semantic Publishing Challenge: Assessing the Quality of Scientific Output
ESWC, 31 May–4 June 2014, Portorož, Slovenia.
Submission deadline 27 March (abstracts: 20 March)
next prev parent reply other threads:[~2015-04-07 16:07 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-03-31 16:59 Function that splits a CLOCK interval Christoph LANGE
2015-04-01 10:37 ` Peter Frings
2015-04-07 16:07 ` Christoph LANGE [this message]
2015-04-08 3:50 ` Xavier Maillard
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
List information: https://www.orgmode.org/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).