On 31 August 2017 at 08:55, Tim Visher <tim.vis...@gmail.com> wrote: > I would like to track the time I created a tree and the last time it was > edited, like ctime and mtime on a filesystem. Is that possible to have > happen automatically?
To insert a creation timestamp I use org-expiry. I have added ~(require 'org-expiry)~ to my Org Mode setup file. I could then have enabled automatic CREATED property insertion by adding ~(org-expiry-insinuate)~. However, that would make Org insert CREATED not only on heading creation, but also whenever I performed certain actions – such as scheduling or deadlining – on headings that lacked CREATED. I do not want that. I want CREATED to reflect the actual creation time. Old headlines (from before I enabled org-expiry) are better off without CREATED than with an inaccurate CREATED timestamp. Also, I want to be able to disable on certain files the automatic CREATED insertion. So instead of ~(org-expiry-insinuate)~, I added this: ;; HACK? (defcustom J-insert-created t "Whether to automatically add CREATED property (org-expiry) on heading creation" :type 'boolean :safe #'booleanp) (defun J-insert-created () (when J-insert-created (org-expiry-insert-created))) (add-hook 'org-insert-heading-hook #'J-insert-created) (add-hook 'org-capture-prepare-finalize-hook (lambda () (org-map-entries #'org-expiry-insert-created))) So the CREATED timestamp is always added on capture, and also added on headline creation except for manually typed headings and buffers where option ~J-insert-created~ is nil. I created that option as an option (instead of a simple variable) so it could be file-local. This works, but I'm not sure it's correct and elegant. I know little Elisp and very little about defining Emacs options. Suggestions welcome. It currently gives compile warnings, which I ignore for now: J-org.el:18:1:Warning: defcustom for ‘J-insert-created’ fails to specify containing group Org-expiry can also add an EXPIRY property, so it can expire entries after they become irrelevant with time. And for entries without EXPIRY, it can use a (customizable) default time span. It is documented via comments on ~org-expiry.el~. That file comes with org-plus-contrib. I also customized the following options: - org-expiry-handler-function - org-expiry-inactive-timestamps - org-expiry-wait Beware that org-expiry interacts badly with the ~org-clone-subtree-with-time-shift~ command. It messes with org-expiry timestamps on the clones. For example, if the original entry is: * Meeting :PROPERTIES: :CREATED: [2017-09-02 Sáb 20:10] :EXPIRY: [2017-12-31] :END: <2017-09-04 Seg 10:00-11:00> and one invokes ~org-clone-subtree-with-time-shift~, asking for one clone and a ~+1w~ shift, the clone will be: * Meeting :PROPERTIES: :CREATED: [2017-09-09 Sáb 20:10] :EXPIRY: [2018-01-07 Dom] :END: <2017-09-11 Seg 10:00-11:00> which is clearly wrong. Regards -- - I am Brazilian. I hope my English is correct and I welcome feedback - Please adopt free formats like PDF, ODF, Org, LaTeX, Opus, WebM and 7z - Free (as in free speech) software for Android: https://f-droid.org/