Re: [O] Capture with org-directory not working?

2016-11-30 Thread Nick Dokos
Alexander Vorobiev  writes:

> The workaround with lambda worked, thanks a lot! As I mentioned I didn't have 
> any problems with the
> templates in years but they stopped working after a recent update.
>

The change was made last June (I presume it was committed on the master branch, 
so it
became generally available only when Org 9.0 was released):

,
| commit 5485170263a46fa17db67b0324c4c4e48bcdfe49
| Author: Nicolas Goaziou 
| Date:   Fri Jun 24 01:11:49 2016 +0200
| 
| org-capture: Remove forbidden value type from "file" templates
| 
| * lisp/org-capture.el (org-capture-expand-file): Remove plain S-exps
|   from allowed values.
`

-- 
Nick




Re: [O] Capture with org-directory not working?

2016-11-29 Thread Alexander Vorobiev
The workaround with lambda worked, thanks a lot! As I mentioned I didn't
have any problems with the templates in years but they stopped working
after a recent update.

Alex

On Tue, Nov 29, 2016 at 3:05 PM, Nick Dokos  wrote:

> Alexander Vorobiev  writes:
>
> > I have recently started having this issue with my capture templates. In
> my case I want to ask the user
> > (me) which file should be used to store the note, so I have a bunch of
> templates like this
> >
> > (setq org-capture-templates
> >  '(("o" "Project todo" entry (file+headline
> (av/choose-agenda-file) "Tasks") ))
> >
> > where av/choose-agenda-file uses completing-read to ask the user to
> choose a file from a list it
> > constructs on the fly. This approach has worked for years and now it
> results in the "invalid file
> > location" message. The backquote does not help because the function
> needs to be called at run time, not
> > when the variable is defined.
> >
>
> IIUC, you cannot use arbitrary sexps, but you *can* use
>
> ("o" "Project todo" entry (file+headline (lambda ()
> (av/choose-agenda-file)) "Tasks"))
>
> Other plausible forms (e.g. (function av/choose-agenda-file) or (quote
> av/choose-agenda-file) )
> run afoul of the abritrary sexp exception and do not work AFAICS.
>
> --
> Nick
>
>
>


Re: [O] Capture with org-directory not working?

2016-11-29 Thread Nick Dokos
Alexander Vorobiev  writes:

> I have recently started having this issue with my capture templates. In my 
> case I want to ask the user
> (me) which file should be used to store the note, so I have a bunch of 
> templates like this
>
> (setq org-capture-templates
>              '(("o" "Project todo" entry (file+headline 
> (av/choose-agenda-file) "Tasks") ))
>
> where av/choose-agenda-file uses completing-read to ask the user to choose a 
> file from a list it
> constructs on the fly. This approach has worked for years and now it results 
> in the "invalid file
> location" message. The backquote does not help because the function needs to 
> be called at run time, not
> when the variable is defined.
>

IIUC, you cannot use arbitrary sexps, but you *can* use

("o" "Project todo" entry (file+headline (lambda () (av/choose-agenda-file)) 
"Tasks"))

Other plausible forms (e.g. (function av/choose-agenda-file) or (quote 
av/choose-agenda-file) )
run afoul of the abritrary sexp exception and do not work AFAICS.

-- 
Nick




Re: [O] Capture with org-directory not working?

2016-11-29 Thread Alexander Vorobiev
I have recently started having this issue with my capture templates. In my
case I want to ask the user (me) which file should be used to store the
note, so I have a bunch of templates like this

(setq org-capture-templates
 '(("o" "Project todo" entry (file+headline
(av/choose-agenda-file) "Tasks") ))

where av/choose-agenda-file uses completing-read to ask the user to choose
a file from a list it constructs on the fly. This approach has worked for
years and now it results in the "invalid file location" message. The
backquote does not help because the function needs to be called at run
time, not when the variable is defined.

Thanks,
Alex

On Wed, Sep 21, 2016 at 7:49 AM, Rainer M Krug  wrote:

> Adam Porter  writes:
>
> > Rainer Krug  writes:
> >
> >> But It seems to abusing the basic idea of custom-set-variables as this
> >> sounds as if it is used by the customise interface.
> >
> > What I mean is, you can use the customize interface to store your
> > org-capture-templates.  It's already set up for that.  You can either
> > edit it through the customize interface, or you can edit it directly in
> > the init file and then evaluate the ~(custom-set-variables~ sexp
> manually.
> >
>
> OK - but I prefer to keep my configurations in my .emacs.el file to make
> it reproducible.
>
>
> Thanks,
>
> Rainer
>
> >
>
> --
> Rainer M. Krug
> email: Rainerkrugsde
> PGP: 0x0F52F982
>


Re: [O] Capture with org-directory not working?

2016-09-21 Thread Rainer M Krug
Adam Porter  writes:

> Rainer Krug  writes:
>
>> But It seems to abusing the basic idea of custom-set-variables as this
>> sounds as if it is used by the customise interface.
>
> What I mean is, you can use the customize interface to store your
> org-capture-templates.  It's already set up for that.  You can either
> edit it through the customize interface, or you can edit it directly in
> the init file and then evaluate the ~(custom-set-variables~ sexp manually.
>

OK - but I prefer to keep my configurations in my .emacs.el file to make
it reproducible.


Thanks,

Rainer

>

-- 
Rainer M. Krug
email: Rainerkrugsde
PGP: 0x0F52F982


signature.asc
Description: PGP signature


Re: [O] Capture with org-directory not working?

2016-09-21 Thread Adam Porter
Rainer Krug  writes:

> But It seems to abusing the basic idea of custom-set-variables as this
> sounds as if it is used by the customise interface.

What I mean is, you can use the customize interface to store your
org-capture-templates.  It's already set up for that.  You can either
edit it through the customize interface, or you can edit it directly in
the init file and then evaluate the ~(custom-set-variables~ sexp manually.




Re: [O] Capture with org-directory not working?

2016-09-21 Thread Rainer Krug

> On 20 Sep 2016, at 19:08, Adam Porter  wrote:
> 
> Rainer Krug  writes:
> 
>> Could you please provide an example? It is not clear to me what you mean - I 
>> prefer simpler!
> 
> Sure, here's an abbreviated example of custom-set-variables from my
> init.el:
> 
> #+BEGIN_SRC elisp
>  (custom-set-variables
>   ;; custom-set-variables was added by Custom.
>   ;; If you edit it by hand, you could mess it up, so be careful.
>   ;; Your init file should contain only one such instance.
>   ;; If there is more than one, they won't work right.
>   '(org-capture-templates
> (quote
>  (("a" "Appointment" entry
>(file+datetree+prompt
> (concat org-directory "/calendar.org")
> "Calendar")
>"* %^{Description} %T %^G
> 
>  %U %?" :clock-in t :clock-resume t)
> #+END_SRC
> 
> The downside is that, if you're editing them in your init file instead
> of through the customize interface, you have to eval the entire
> custom-set-variables to apply changes, which requires a few extra
> keystrokes.
> 
> 

Thanks - I see what you mean. But It seems to abusing the basic idea of 
custom-set-variables as this sounds as if it is used by the customise interface.

So it should be possible to set it using my initial approach?

Rainer


--
Rainer M. Krug
email: Rainerkrugsde
PGP: 0x0F52F982



signature.asc
Description: Message signed with OpenPGP using GPGMail


Re: [O] Capture with org-directory not working?

2016-09-20 Thread Adam Porter
Rainer Krug  writes:

> Could you please provide an example? It is not clear to me what you mean - I 
> prefer simpler!

Sure, here's an abbreviated example of custom-set-variables from my
init.el:

#+BEGIN_SRC elisp
  (custom-set-variables
   ;; custom-set-variables was added by Custom.
   ;; If you edit it by hand, you could mess it up, so be careful.
   ;; Your init file should contain only one such instance.
   ;; If there is more than one, they won't work right.
   '(org-capture-templates
 (quote
  (("a" "Appointment" entry
(file+datetree+prompt
 (concat org-directory "/calendar.org")
 "Calendar")
"* %^{Description} %T %^G
  
  %U %?" :clock-in t :clock-resume t)
#+END_SRC

The downside is that, if you're editing them in your init file instead
of through the customize interface, you have to eval the entire
custom-set-variables to apply changes, which requires a few extra
keystrokes.




Re: [O] Capture with org-directory not working?

2016-09-20 Thread Rainer Krug

> On 20 Sep 2016, at 17:00, Adam Porter  wrote:
> 
> Rainer M Krug  writes:
> 
>> Thanks! the problem was the missing comma, as I had the backquote
>> already there. This must have changed some time ago, as I used these
>> templates before. This is working now.
>> 
>> But now I realized that my other in-file capture templates are giving
>> the same message.
> 
> This might be like heresy to some Emacs users, but if you put
> org-capture-templates in custom-set-variables, you can skip the
> backquoting and comma-quoting.  Makes it a bit simpler.  :)
> 

Could you please provide an example? It is not clear to me what you mean - I 
prefer simpler!

Rainer

--
Rainer M. Krug
email: Rainerkrugsde
PGP: 0x0F52F982



signature.asc
Description: Message signed with OpenPGP using GPGMail


Re: [O] Capture with org-directory not working?

2016-09-20 Thread Adam Porter
Rainer M Krug  writes:

> Thanks! the problem was the missing comma, as I had the backquote
> already there. This must have changed some time ago, as I used these
> templates before. This is working now.
>
> But now I realized that my other in-file capture templates are giving
> the same message.

This might be like heresy to some Emacs users, but if you put
org-capture-templates in custom-set-variables, you can skip the
backquoting and comma-quoting.  Makes it a bit simpler.  :)




Re: [O] Capture with org-directory not working?

2016-09-20 Thread Rainer M Krug
Nick Dokos  writes:

> Rainer M Krug  writes:
>
>> Hi
>>
>> I have the following capture template:
>>
>> ,
>> |   ("T"   "TODO to be logged in notes.org"
>> |entry   (file+headline (concat org-directory "/notes.org") "Tasks") 
>>
>> |;; entry   (file+headline "~/org/notes.org" "Tasks")
>> |"* TODO [#D] \n%i \n:PROPERTIES: \n:END: \n%? \n%a")
>> `
>>
>> As it is now, it is not working, but when I use the secont=d entry line,
>> it is working.
>>
>
> Try (!!note the backquote at the beginning  and the comma before the concat 
> form!!):
>
> (setq org-capture-templates
>  `(
>...
>("T"   "TODO to be logged in notes.org"
> entry   (file+headline ,(concat org-directory "/notes.org") "Tasks")  
>   
> "* TODO [#D] \n%i \n:PROPERTIES: \n:END: \n%? \n%a")
>...))
>

Thanks! the problem was the missing comma, as I had the backquote
already there. This must have changed some time ago, as I used these
templates before. This is working now.

But now I realized that my other in-file capture templates are giving
the same message. Here is one of my in-file capture templates:

,
| (setq org-capture-templates
|   `(
| ;; ::
| ;; In File Logging ::
| ;; ::
| ("p"   "Problem to be logged in buffer"
|  entry   (file+headline (buffer-file-name) "QUESTIONS")  
| ...
| ))
`

I assume it also has to do with the evaluation, but putting a comma in
front of (buffer-file-name) does not change anything. 

Thanks,

Rainer


>
> See
>
>   (info "(elisp) Backquote")

-- 
Rainer M. Krug
email: Rainerkrugsde
PGP: 0x0F52F982


signature.asc
Description: PGP signature


Re: [O] Capture with org-directory not working?

2016-09-19 Thread Nick Dokos
Rainer M Krug  writes:

> Hi
>
> I have the following capture template:
>
> ,
> |   ("T"   "TODO to be logged in notes.org"
> |entry   (file+headline (concat org-directory "/notes.org") "Tasks")  
>   
> |;; entry   (file+headline "~/org/notes.org" "Tasks")
> |"* TODO [#D] \n%i \n:PROPERTIES: \n:END: \n%? \n%a")
> `
>
> As it is now, it is not working, but when I use the secont=d entry line,
> it is working.
>

Try (!!note the backquote at the beginning  and the comma before the concat 
form!!):

--8<---cut here---start->8---
(setq org-capture-templates
 `(
   ...
   ("T"   "TODO to be logged in notes.org"
entry   (file+headline ,(concat org-directory "/notes.org") "Tasks")
"* TODO [#D] \n%i \n:PROPERTIES: \n:END: \n%? \n%a")
   ...))
--8<---cut here---end--->8---


See

  (info "(elisp) Backquote")


-- 
Nick




[O] Capture with org-directory not working?

2016-09-19 Thread Rainer M Krug
Hi

I have the following capture template:

,
|   ("T"   "TODO to be logged in notes.org"
|entry   (file+headline (concat org-directory "/notes.org") "Tasks")
|;; entry   (file+headline "~/org/notes.org" "Tasks")
|"* TODO [#D] \n%i \n:PROPERTIES: \n:END: \n%? \n%a")
`

As it is now, it is not working, but when I use the secont=d entry line,
it is working.

But:

,
|  (concat org-directory "/notes.org")
| "~/org/notes.org"
`

So why is the first version (which I prefer as the path is not hard
coded) not working anymore?

,
| GNU Emacs 25.1.1 (x86_64-apple-darwin15.6.0, Carbon Version 157 AppKit 
1404.47) of 2016-09-19
| Org-mode version 8.3.6 (release_8.3.6-1149-g582233 @ 
/Users/rainerkrug/.emacs.d/org-mode/lisp/)
`

Backtrace:

--8<---cut here---start->8---
Debugger entered--Lisp error: (error "Target buffer \".notes\" for 
file+headline should be in Org mode")
  signal(error ("Target buffer \".notes\" for file+headline should be in Org 
mode"))
  error("Target buffer \"%s\" for file+headline should be in Org mode" #)
  (if (derived-mode-p (quote org-mode)) nil (error "Target buffer \"%s\" for 
file+headline should be in Org mode" (current-buffer)))
  (let ((hd (nth 2 target))) (goto-char (point-min)) (if (derived-mode-p (quote 
org-mode)) nil (error "Target buffer \"%s\" for file+headline should be in Org 
mode" (current-buffer))) (if (re-search-forward (format 
org-complex-heading-regexp-format (regexp-quote hd)) nil t) (goto-char 
(point-at-bol)) (goto-char (point-max)) (or (bolp) (insert "\n")) (insert "* " 
hd "\n") (beginning-of-line 0)))
  (cond ((eq (car target) (quote file)) (set-buffer (org-capture-target-buffer 
(nth 1 target))) (org-capture-put-target-region-and-position) (widen) (setq 
target-entry-p nil)) ((eq (car target) (quote id)) (let ((loc (org-id-find (nth 
1 target (if (not loc) (error "Cannot find target ID \"%s\"" (nth 1 
target)) (set-buffer (org-capture-target-buffer (car loc))) (widen) 
(org-capture-put-target-region-and-position) (goto-char (cdr loc) ((eq (car 
target) (quote file+headline)) (set-buffer (org-capture-target-buffer (nth 1 
target))) (org-capture-put-target-region-and-position) (widen) (let ((hd (nth 2 
target))) (goto-char (point-min)) (if (derived-mode-p (quote org-mode)) nil 
(error "Target buffer \"%s\" for file+headline should be in Org mode" 
(current-buffer))) (if (re-search-forward (format 
org-complex-heading-regexp-format (regexp-quote hd)) nil t) (goto-char 
(point-at-bol)) (goto-char (point-max)) (or (bolp) (insert "\n")) (insert "* " 
hd "\n") (beginning-of-line 0 ((eq (car target) (quote file+olp)) (let ((m 
(org-find-olp (cons (org-capture-expand-file ...) (cdr ...) (set-buffer 
(marker-buffer m)) (org-capture-put-target-region-and-position) (widen) 
(goto-char m))) ((eq (car target) (quote file+regexp)) (set-buffer 
(org-capture-target-buffer (nth 1 target))) 
(org-capture-put-target-region-and-position) (widen) (goto-char (point-min)) 
(if (re-search-forward (nth 2 target) nil t) (progn (goto-char (if 
(org-capture-get :prepend) (match-beginning 0) (match-end 0))) (org-capture-put 
:exact-position (point)) (setq target-entry-p (and (derived-mode-p (quote 
org-mode)) (org-at-heading-p (error "No match for target regexp in file %s" 
(nth 1 target ((memq (car target) (quote (file+datetree 
file+datetree+prompt file+weektree file+weektree+prompt))) (require (quote 
org-datetree)) (set-buffer (org-capture-target-buffer (nth 1 target))) 
(org-capture-put-target-region-and-position) (widen) (funcall (cond ((memq (car 
target) (quote (file+weektree file+weektree+prompt))) (function 
org-datetree-find-iso-week-create)) (t (function 
org-datetree-find-date-create))) (calendar-gregorian-from-absolute (cond 
(org-overriding-default-time (time-to-days org-overriding-default-time)) ((memq 
(car target) (quote ...)) (let (...) (org-capture-put :default-time ...) 
(time-to-days prompt-time))) (t (org-today)) ((eq (car target) (quote 
file+function)) (set-buffer (org-capture-target-buffer (nth 1 target))) 
(org-capture-put-target-region-and-position) (widen) (funcall (nth 2 target)) 
(org-capture-put :exact-position (point)) (setq target-entry-p (and 
(derived-mode-p (quote org-mode)) (org-at-heading-p ((eq (car target) 
(quote function)) (funcall (nth 1 target)) (org-capture-put :exact-position 
(point)) (setq target-entry-p (and (derived-mode-p (quote org-mode)) 
(org-at-heading-p ((eq (car target) (quote clock)) (if (and (markerp 
org-clock-hd-marker) (marker-buffer org-clock-hd-marker)) (progn (set-buffer 
(marker-buffer org-clock-hd-marker)) 
(org-capture-put-target-region-and-position) (widen) (goto-char 
org-clock-hd-marker)) (error "No running clock that could be used as capture 
target"))) (t (error "Invalid capture target specification")))
  (save-excursion (cond ((eq (car target) (quote file)) (set-buffer 
(org-capture-target-b