From mboxrd@z Thu Jan 1 00:00:00 1970 From: Fredrik Unger Subject: Re: Recording Time - org-clock-sum Date: Mon, 17 Nov 2014 19:31:41 +0100 Message-ID: <546A3F0D.5020407@tree.se> References: <545A5794.8040203@tree.se> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------080809040003000000010805" Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:37530) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XqR6N-0002C2-F9 for emacs-orgmode@gnu.org; Mon, 17 Nov 2014 13:32:45 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1XqR6H-0003Jk-LD for emacs-orgmode@gnu.org; Mon, 17 Nov 2014 13:32:39 -0500 Received: from smtp1.biggnet.net ([82.145.128.2]:3369) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XqR6H-00031z-AG for emacs-orgmode@gnu.org; Mon, 17 Nov 2014 13:32:33 -0500 Received: from tree.se ([82.145.144.65]) by smtp1.biggnet.net (IceWarp 9.4.2) with ESMTP (SSL) id DDW91857 for ; Mon, 17 Nov 2014 19:31:57 +0100 Received: from stgt-5f7085f9.pool.mediaways.net ([95.112.133.249] helo=[192.168.33.10]) by tree.se with esmtpsa (TLS1.0:DHE_RSA_AES_128_CBC_SHA1:16) (Exim 4.72) (envelope-from ) id 1XqR5c-0002Cb-HD for emacs-orgmode@gnu.org; Mon, 17 Nov 2014 19:31:57 +0100 In-Reply-To: <545A5794.8040203@tree.se> List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Sender: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org To: emacs-orgmode@gnu.org This is a multi-part message in MIME format. --------------080809040003000000010805 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Hi, I implemented a couple of functions that provide me with the needed timestamps for my timereport [1]. ex. <2014-11-14 Fri> [s 08:00 e 14:00 (11:00 12:00)] [ 5:00 (5.00)] Summarized from : * Test ** first CLOCK: [2014-11-14 Fri 08:00]--[2014-11-14 Fri 09:00] => 1:00 CLOCK: [2014-11-14 Fri 12:00]--[2014-11-14 Fri 13:00] => 1:00 ** second CLOCK: [2014-11-14 Fri 09:00]--[2014-11-14 Fri 11:00] => 2:00 CLOCK: [2014-11-14 Fri 13:00]--[2014-11-14 Fri 14:00] => 1:00 Started work at 8, ended at 14 lunch break 11-12. worked 5 h. (h:m and decimal representation) One can adapt the format with "timestr". It is based on the org-clock-sum function. Tested only with simple files with complete Time stamps (no dangling clocks etc). timeuniq takes a list of timestamps and returns only timestamps that were unique in the initial list. Suggestion for improvements are welcome, as I am an elisp/org-mode beginner. Fredrik Unger [1] attached range-report.emacs On 11/05/2014 06:00 PM, Fredrik Unger wrote: > Hi, > > I have been using Emacs Orgmode for 3-4 years recording time. > It started out with Sacha Chua:s article "Clocking Time with Emacs Org" > [1] where the org-dblock-write:rangereport did what I needed. > > As time went by I have made some adaptations to it and simplified it > but kept the core idea [2]. > One addition is: that it is not based no increments of 24*60*60 but 1 > day, which removed problems by Daylight savings time (in October). > Maybe more type safe functions exists like in Perl, [3] but I did not > find in org-mode. With my change I rely on that emacs date calculations > are in the same shape as [3]. It worked for this case and I stopped at > that. > > I am not a full out user of Orgmode and I do not keep project files. > I use one simple file per month to record my work, and it has been a > good choice for me. Maybe someday I can switch to some other structure > but as the CLOCK lines takes some space, I'd rather "forget" CLOCK > history on a monthly basis. Projects do not last more than 2-3 month > anyway and the catch-all internal project that is "never ending" would > become too crowded with CLOCK lines. > It is also easier to spot clocking mistakes if the file is limited to a > month. > > Projects can not be summarized across month, but for my reporting needs > that is not needed. > > The data is clocked as follows [4] per month. More project, > items and clocked times are in a normal org file, but this > simplified case should do. > > I want to expand the report to show start/end time + breaks. > > Eg from : > Time report November 2014 > <2014-11-05 Wed> -- 8:00 (8.00) > > to : > Time report November 2014 > <2014-11-05 Wed> -- 8:00 (8.00) s 07:00 e 16:00 b 11:00-12:00, > > Format is not set, but I need these time for my reporting. > In the normal case it is start-end and lunch. > > I have tried to work with org-clock-sum to get the data from the CLOCK > entries. My elisp is rusty, and I missed that the regexp was */level > dependent. I managed to get a list of dates but just from the CLOCK > under the Item. > (((2014-11-05 12:00) (2014-11-05 14:00)) > ((2014-11-05 14:00) (2014-11-05 16:00))) > > There were some strange duplicates as well so I guess I just did things > wrong. > > To get the wanted result I would need a regexp that scans all CLOCK: > and reports the two timestamps and generate a list of > ((time1 time2) (time2 time3) (time4 time5) (time5 time6)) filtered > on the call with tstart tend like org-clock-sum. > For me the actual heading is not needed. > > With this list I can then flaten it, and if needed sort it : > (time1 time2 time2 time3 time4 time5 time5 time6) > If I then remove duplicates all together I will get : > (time1 time3 time4 time6) > where min is start and max is end, and pairs in between are breaks. > > s time1 e time6 b time3-time4, > > I did not manage to create this list of all CLOCK values filtered on > tstart/tend (which in my case would be one day at the time just like > I call org-clock-sum for the total sum). > > I would be grateful for advice or pointers to a better way to find > all CLOCK values. Feel free to publish [2] on the wiki if you find > it valuable. > If/when I have a full working solution I might publish it on my site. > > Thank you, > > Fredrik Unger > > [1] http://sachachua.com/blog/2007/12/clocking-time-with-emacs-org/ > [2] https://tree.se/rangereport.el > [3] https://metacpan.org/pod/DateTime#How-DateTime-Math-Works > [4] https://tree.se/t.org > --------------080809040003000000010805 Content-Type: text/plain; charset=UTF-8; name="range-report.emacs" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="range-report.emacs" OzsgT3JnbW9kZQoocmVxdWlyZSAnb3JnKQooYWRkLXRvLWxpc3QgJ2F1dG8tbW9kZS1hbGlz dCAnKCJcXC5vcmdcXCciIC4gb3JnLW1vZGUpKQooc2V0cSBvcmctYWdlbmRhLWZpbGVzIChm aWxlLWV4cGFuZC13aWxkY2FyZHMgIn4vb3JnLyoub3JnIikpCihzZXRxIG9yZy1leHBvcnQt ZG9jYm9vay14c2x0LXN0eWxlc2hlZXQgIi91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc3R5bGVz aGVldC9kb2Nib29rLXhzbC9mby9kb2Nib29rLnhzbCIpCihzZXRxIG9yZy1leHBvcnQtZG9j Ym9vay14c2x0LXByb2MtY29tbWFuZCAieHNsdHByb2MgLS1vdXRwdXQgJW8gJXMgJWkiKQoo c2V0cSBvcmctZXhwb3J0LWRvY2Jvb2steHNsLWZvLXByb2MtY29tbWFuZCAiZm9wICVpICVv IikKKHNldHEgb3JnLXRpbWUtY2xvY2tzdW0tZm9ybWF0CiAgICAgICcoOmhvdXJzICIlZCIg OnJlcXVpcmUtaG91cnMgdCA6bWludXRlcyAiOiUwMmQiIDpyZXF1aXJlLW1pbnV0ZXMgdCkp Cjs7IE9yZy1tb2RlIGRhaWx5IHJlcG9ydHMKCihkZWZ1biB0c3RyICh0aW1ldmFsKQogICJG b3JtYXQgZGF0ZSB0byBzdHJpbmciCiAgKGZvcm1hdC10aW1lLXN0cmluZyAoY2FyIG9yZy10 aW1lLXN0YW1wLWZvcm1hdHMpIHRpbWV2YWwpKQoKKGRlZnVuIGhtc3RyICh0aW1ldmFsKQog ICJGb3JtYXQgZGF0ZSB0byBzdHJpbmciCiAgKGZvcm1hdC10aW1lLXN0cmluZyAiJUg6JU0i IHRpbWV2YWwpKQoKKGRlZnVuIHRpbWV1bmlxICh0aW1lbGlzdCkKICAoZGVmdW4gZHVwICh0 cyB0aW1lbGlzdCkKICAgIChjb25kCiAgICAgKChub3QgdGltZWxpc3QpIG5pbCkKICAgICAo KGVxdWFsIHRzIChjYXIgdGltZWxpc3QpKSB0KQogICAgICh0IChkdXAgdHMgKGNkciB0aW1l bGlzdCkpKSkpCgogIChkZWZ1biB0Y2hlY2sgKHRpbWVsaXN0IGR1cGxpc3QpCiAgICAoY29u ZAogICAgICgobm90IHRpbWVsaXN0KSBuaWwpCiAgICAgKChkdXAgKGNhciB0aW1lbGlzdCkg KGNkciB0aW1lbGlzdCkpCiAgICAgICh0Y2hlY2sgKGNkciB0aW1lbGlzdCkgKGNvbnMgKGNh ciB0aW1lbGlzdCkgZHVwbGlzdCkpKQogICAgICgoZHVwIChjYXIgdGltZWxpc3QpIGR1cGxp c3QpCiAgICAgICh0Y2hlY2sgKGNkciB0aW1lbGlzdCkgZHVwbGlzdCkpCiAgICAgKHQKICAg ICAgKGNvbnMgKGNhciB0aW1lbGlzdCkgKHRjaGVjayAoY2RyIHRpbWVsaXN0KSBkdXBsaXN0 KSkpKSkKCiAgKHRjaGVjayB0aW1lbGlzdCAoKSkpCgooZGVmdW4gb3JnLWNsb2NrLXNlYiAo Jm9wdGlvbmFsIHRzdGFydCB0ZW5kKQogIChpbnRlcmFjdGl2ZSkKICAob3JnLXdpdGgtc2ls ZW50LW1vZGlmaWNhdGlvbnMKICAgKGxldCogKChyZSAoY29uY2F0ICJeWyBcdF0qIgoJCSAg ICAgIG9yZy1jbG9jay1zdHJpbmcKCQkgICAgICAiWyBcdF0qXFwoPzpcXChcXFsuKj9cXF1c XCktK1xcKFxcWy4qP1xcXVxcKVxcfD0+WyBcdF0rXFwoWzAtOV0rXFwpOlxcKFswLTldK1xc KVxcKSIpKQoJICB0cyB0ZQoJICB0bCkKICAgICAoaWYgKHN0cmluZ3AgdHN0YXJ0KSAoc2V0 cSB0c3RhcnQgKG9yZy10aW1lLXN0cmluZy10by1zZWNvbmRzIHRzdGFydCkpKQogICAgIChp ZiAoc3RyaW5ncCB0ZW5kKSAoc2V0cSB0ZW5kIChvcmctdGltZS1zdHJpbmctdG8tc2Vjb25k cyB0ZW5kKSkpCiAgICAgKGlmIChjb25zcCB0c3RhcnQpIChzZXRxIHRzdGFydCAob3JnLWZs b2F0LXRpbWUgdHN0YXJ0KSkpCiAgICAgKGlmIChjb25zcCB0ZW5kKSAoc2V0cSB0ZW5kIChv cmctZmxvYXQtdGltZSB0ZW5kKSkpCiAgICAgKHNhdmUtZXhjdXJzaW9uCiAgICAgICAoZ290 by1jaGFyIChwb2ludC1tYXgpKQogICAgICAgKHdoaWxlIChyZS1zZWFyY2gtYmFja3dhcmQg cmUgbmlsIHQpCgkgKGNvbmQKCSAgKChtYXRjaC1lbmQgMSkKCSAgIDs7IFR3byB0aW1lIHN0 YW1wcwoJICAgKHNldHEgdHMgKG1hdGNoLXN0cmluZyAxKQoJCSB0ZSAobWF0Y2gtc3RyaW5n IDIpCgkJIHRzIChvcmctZmxvYXQtdGltZQoJCSAgICAgKGFwcGx5ICdlbmNvZGUtdGltZSAo b3JnLXBhcnNlLXRpbWUtc3RyaW5nIHRzKSkpCgkJIHRlIChvcmctZmxvYXQtdGltZQoJCSAg ICAgKGFwcGx5ICdlbmNvZGUtdGltZSAob3JnLXBhcnNlLXRpbWUtc3RyaW5nIHRlKSkpCgkJ IHRzIChpZiB0c3RhcnQgKG1heCB0cyB0c3RhcnQpIHRzKQoJCSB0ZSAoaWYgdGVuZCAobWlu IHRlIHRlbmQpIHRlKQoJCSB0bCAoaWYgKD4gKC0gdGUgdHMpIDApIChhcHBlbmQgKGxpc3Qg dHMgdGUpIHRsKSkpKSkpCiAgICAgICAodGltZXVuaXEgKHNvcnQgdGwgJzwpKSkpKSkKCihk ZWZ1biBvcmctZGJsb2NrLXdyaXRlOnJhbmdlcmVwb3J0IChwYXJhbXMpCiAgIkRpc3BsYXkg ZGF5LWJ5LWRheSB0aW1lIHJlcG9ydHMuIgogIChsZXQqICgodHMgKHBsaXN0LWdldCBwYXJh bXMgOnRzdGFydCkpCgkgKHRlIChwbGlzdC1nZXQgcGFyYW1zIDp0ZW5kKSkKCSAoYmxvY2sg KHBsaXN0LWdldCBwYXJhbXMgOmJsb2NrKSkKCSAod3MgKHBsaXN0LWdldCBwYXJhbXMgOndz dGFydCkpCgkgKG1zIChwbGlzdC1nZXQgcGFyYW1zIDptc3RhcnQpKQoJIGNjIHJhbmdlLXRl eHQpCiAgICAob3JnLWNsb2NrLXN1bSAwIDEpCiAgICAod2hlbiBibG9jawogICAgICAoc2V0 cSBjYyAob3JnLWNsb2NrLXNwZWNpYWwtcmFuZ2UgYmxvY2sgbmlsIHQgd3MgbXMpCgkgICAg dHMgKGNhciBjYykgdGUgKG50aCAxIGNjKSByYW5nZS10ZXh0IChudGggMiBjYykpKQogICAg KHNldHEgdHMgKG9yZy10aW1lLXN0cmluZy10by10aW1lIHRzKSkKICAgIChzZXRxIHRlIChv cmctdGltZS1zdHJpbmctdG8tdGltZSB0ZSkpCiAgICAoZGVmdW4gYWRkLWRheSAodGltZXZh bCkKICAgICAgIkFkZCBhIGRheSB0byB0aGUgZGF0ZSIKICAgICAgKHNldHEgY3VyciAoZGVj b2RlLXRpbWUgdGltZXZhbCkpCiAgICAgIChzZXRjYXIgKG50aGNkciAzIGN1cnIpICgrIChu dGggMyBjdXJyKSAxKSkKICAgICAgKGFwcGx5ICdlbmNvZGUtdGltZSAoYnV0bGFzdCBjdXJy IDMpKSkKCiAgICAodW5sZXNzIHJhbmdlLXRleHQKICAgICAgKHNldHEgcmFuZ2UtdGV4dCAo Y29uY2F0ICJbIiAodHN0ciB0cykgIiAtICIgKHRzdHIgdGUpICJdIikpKQoKICAgIChpbnNl cnQgIlRpbWUgcmVwb3J0ICIgcmFuZ2UtdGV4dCAiXG4iKQogICAgKHNldHEgdG90YWxtaW4g MCkKICAgICh3aGlsZSAodGltZS1sZXNzLXAgdHMgdGUpCiAgICAgIChzZXRxIG5kYXkgKGFk ZC1kYXkgdHMpKQogICAgICAob3JnLWNsb2NrLXN1bSAodGltZS10by1zZWNvbmRzIHRzKSAo dGltZS10by1zZWNvbmRzIG5kYXkpKQogICAgICAoc2V0cSBzZWIgKG9yZy1jbG9jay1zZWIg KHRpbWUtdG8tc2Vjb25kcyB0cykgKHRpbWUtdG8tc2Vjb25kcyBuZGF5KSkpCiAgICAgIChz ZXRxIG1pbnV0ZXMgb3JnLWNsb2NrLWZpbGUtdG90YWwtbWludXRlcykKICAgICAgKHNldHEg dG90YWxtaW4gKCsgbWludXRlcyB0b3RhbG1pbikpCiAgICAgIChzZXRxIHR0IChvcmctbWlu dXRlcy10by1jbG9ja3N1bS1zdHJpbmcgbWludXRlcykpCiAgICAgIChpZiAobm90IChzdHJp bmc9ICIwOjAwIiB0dCkpCgkgKHByb2duCgkgIChzZXRxIHNlYiAoYXBwZW5kIChjb25zIChj YXIgc2ViKSAobGFzdCBzZWIpKSAoYnV0bGFzdCAoY2RyIHNlYikpKSkKCSAgKHNldHEgc2Vi c3RyIChtYXBjYXIgJ2htc3RyIChtYXBjYXIgJ3NlY29uZHMtdG8tdGltZSBzZWIpKSkKCSAg KHNldHEgdGltZXN0ciAoZm9ybWF0ICIlcyAgICBbcyAlNXMgZSAlNXMgJTE1c10gICBbJTVz ICglMC4yZildXG4iCgkJCQkodHN0ciB0cykgKGNhciBzZWJzdHIpIChjYXIgKGNkciBzZWJz dHIpKQoJCQkJKGNkciAoY2RyIHNlYnN0cikpIHR0ICgvIG1pbnV0ZXMgNjAuMCkpKQoJICAo aW5zZXJ0IHRpbWVzdHIpKSkKICAgICAgKHNldHEgdHMgbmRheSApCiAgICAgICkKICAgIChp bnNlcnQgIlRvdGFsIHRpbWUgOiAiIChvcmctbWludXRlcy10by1jbG9ja3N1bS1zdHJpbmcg dG90YWxtaW4pIlxuIikKICAgIChpbnNlcnQgIlRvdGFsIG1pbnMgOiAiIChmb3JtYXQgIiVm IiAgdG90YWxtaW4pICJcbiIpCiAgICAoaW5zZXJ0ICJUb3RhbCBkYXlzIDogIiAoZm9ybWF0 ICIlZiIgKC8gdG90YWxtaW4gKCogNy43IDYwLjApKSkpCiAgICApKQo= --------------080809040003000000010805--