Hi List, I copied this from Bernt Hansens set-up: ,----------------------------------------------------------- | org-insert-heading-hook is a variable defined in `org.el'. | Its value is (bh/insert-heading-inactive-timestamp) | Original value was nil `----------------------------------------------------------- and its often quite usefull to have a timestamp for each newly inserted todo-item (e.g.). But in other cases, like writing documents or building Org files programmatically, there is no need for heading-creation-timestamps, so I would like to turn the timestamp insertion off. I could probably use ,----------------------------------------- | (remove-hook | 'org-insert-heading-hook | 'bh/insert-heading-inactive-timestamp | ’LOCAL) `----------------------------------------- to deactivate the behaviour locally, since: ,------------------------------------------------------------------------ | remove-hook is a compiled Lisp function in `subr.el'. | | (remove-hook HOOK FUNCTION &optional LOCAL) | | Remove from the value of HOOK the function FUNCTION. | HOOK should be a symbol, and FUNCTION may be any valid function. If | FUNCTION isn't the value of HOOK, or, if FUNCTION doesn't appear in the | list of hooks to run in HOOK, then nothing is done. See `add-hook'. | | The optional third argument, LOCAL, if non-nil, says to modify | the hook's buffer-local value rather than its default value. `------------------------------------------------------------------------ but this is of course not a very generic solution for a program I want to share with others, their 'org-insert-heading-hook' might look different. Is there a way to inhibit a hook in a program, or to run it only conditionally in certain situations? -- cheers, Thorsten
Thorsten Jolitz <tjolitz@googlemail.com> writes: > I copied this from Bernt Hansens set-up: > > ,----------------------------------------------------------- > | org-insert-heading-hook is a variable defined in `org.el'. > | Its value is (bh/insert-heading-inactive-timestamp) > | Original value was nil > `----------------------------------------------------------- > > and its often quite usefull to have a timestamp for each newly inserted > todo-item (e.g.). But in other cases, like writing documents or building > Org files programmatically, there is no need for > heading-creation-timestamps, so I would like to turn the timestamp > insertion off. > > I could probably use > > ,----------------------------------------- > | (remove-hook <snip> > but this is of course not a very generic solution for a program I want > to share with others, their 'org-insert-heading-hook' might look > different. > > Is there a way to inhibit a hook in a program, or to run it only > conditionally in certain situations? Hi Thorsten! I would leave the hook always enabled but make it smart enough to skip inserting timestamps when you don't want them. Something like the following: f9-T will toggle adding the timestamps ON and OFF f9-t will always insert a timestamp at point C-RET and M-RET will use the hook which checks if the variable bh/insert-inactive-timestamps is t before adding the timestamp, otherwise it does nothing. --8<---------------cut here---------------start------------->8--- (global-set-key (kbd "<f9> T") 'bh/toggle-insert-inactive-timestamp) (global-set-key (kbd "<f9> t") 'bh/insert-inactive-timestamp) (defvar bh/insert-inactive-timestamp t) (defun bh/toggle-insert-inactive-timestamp () (interactive) (setq bh/insert-inactive-timestamp (not bh/insert-inactive-timestamp)) (message "Heading timestamps are %s" (if bh/insert-inactive-timestamp "ON" "OFF"))) (defun bh/insert-inactive-timestamp () (interactive) (org-insert-time-stamp nil t t nil nil nil)) (defun bh/insert-heading-inactive-timestamp () (save-excursion (when bh/insert-inactive-timestamp (org-return) (org-cycle) (bh/insert-inactive-timestamp)))) (add-hook 'org-insert-heading-hook 'bh/insert-heading-inactive-timestamp 'append) --8<---------------cut here---------------end--------------->8--- Thanks for this idea :) Regards, Bernt
Bernt Hansen <bernt@norang.ca> writes:
Hi Bernt,
> I would leave the hook always enabled but make it smart enough to skip
> inserting timestamps when you don't want them. Something like the
> following:
>
> f9-T will toggle adding the timestamps ON and OFF
> f9-t will always insert a timestamp at point
> C-RET and M-RET will use the hook which checks if the variable
> bh/insert-inactive-timestamps is t before adding the timestamp,
> otherwise it does nothing.
great, thank you!
--
cheers,
Thorsten