emacs-orgmode
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Orgmode] Re: Relative clocking [Further discussion and ideas by OP]


From: Alan E. Davis
Subject: Re: [Orgmode] Re: Relative clocking [Further discussion and ideas by OP]
Date: Tue, 25 Nov 2008 18:08:24 +1000

You may understand that I was already looking at the idea of converting integer times back and forth to/from  hh:mm:ss.  Your functions look extremely interesting. 

I am trying to write a function to start the clock at a specific point in time.  This could be useful when restarting or continuing a video, and continuing notes. 

Thank you again,

Alan

On Tue, Nov 25, 2008 at 5:07 PM, Carsten Dominik <address@hidden> wrote:

On Nov 24, 2008, at 9:31 PM, Alan E. Davis wrote:

Thank you for the reply.

On Mon, Nov 24, 2008 at 8:30 PM, Carsten Dominik <address@hidden> wrote:
Why would you want to turn off the clock?  It is actually
not running, only a starting time is recorded.  Just "start"
it again when you need a new clock.
 
Perfect!  Thank you.
 
A further suggestion is born or my initial experiment with his function: I started the clock a bit too late, so all the timestamps are off by about 30-40 seconds.  Is it (at least in theory) possible to adjust all time stamps in a subtree by the same amount?  That would enable me to correct all of my notes in one fell stroke.

Of course this is possible, but code for that would need to be written.
 

I have written some elisp, not alot.  May I request a clue where to start?

Well write a function searching for the strings and change them... :-)

Something like this (untested) might do it.  These functions
handle negative times, so you can also use this to change
the timings relative to the beginning of a scene, so that a prelude
to a scene might be at negative times.....:

(defun my-change-times-in-region (beg end delta)
  "Change all h:mm:ss time in region by a DELTA."
  (interactive "r\nsEnter time difference like \"-1:08:26\" or \"0:00:25\": ")
  (let ((re "[-+]?[0-9]+:[0-9]\\{2\\}:[0-9]\\{2\\}")
(delta (my-hms-to-secs delta))
old new p)
    (when (= delta 0) (error "No change"))
    (save-excursion
      (goto-char end)
      (while (re-search-backward re beg t)
(setq p (point))
(replace-match
(save-match-data
  (my-secs-to-hms (+ (my-hms-to-secs (match-string 0)) delta)))
t t)
(goto-char p)))))

(defun my-hms-to-secs (hms)
  "Convert h:mm:ss string to an integer time.
If the string starts with a minus sign, the integer will be negative."
  (if (not (string-match
   "\\([-+]?[0-9]+\\):\\([0-9]\\{2\\}\\):\\([0-9]\\{2\\}\\)"
   hms))
      0
    (let* ((h (string-to-int (match-string 1 hms)))
  (m (string-to-int (match-string 2 hms)))
  (s (string-to-int (match-string 3 hms)))
  (sign (equal (substring (match-string 1 hms) 0 1) "-")))
      (setq h (abs h))
      (* (if sign -1 1) (+ s (* 60 (+ m (* 60 h))))))))

(defun my-secs-to-hms (s)
  "Convert integer S into h:mm:ss.
If the integer is negative, the strig will start with \"-\"."
  (let (sign m h)
    (setq sign (if (< s 0) "-" "")
 s (abs s)
 m (/ s 60) s (- s (* 60 m))
 h (/ m 60) m (- m (* 60 h)))
    (format "%s%d:%02d:%02d" sign h m s)))

HTH

- Carsten


Hmmm, looks useful to me also for general note taking, maybe
I can add something linke this to Org....




--
Alan Davis

"It's never a matter of liking or disliking ..."
      ---Santa Ynez Chumash Medicine Man


reply via email to

[Prev in Thread] Current Thread [Next in Thread]