Re: [Orgmode] Help debugging a problem when saving org-agenda files with C-x s

2009-05-16 Thread Carsten Dominik


On May 14, 2009, at 8:41 PM, Tassilo Horn wrote:


Carsten Dominik carsten.domi...@gmail.com writes:

Did you restart Emacs?  My idea was that the first time you call  
this,

you change the file name of a buffer, and the second time the problem
happens.


First, I only evaled my function anew, but now I tried with a new  
emacs

instance and the error is still the same.

But now I can see what happens (but I don't have a solution right  
now):


- `C-x s' saves the modified org buffer (I checked that the changes
  are saved to disk)

- my function is triggered cause it's in `after-save-hook' buffer
  locally


Calling such functions recursively is never a good idea, even if
it is accidental recursion in this case.

You could and should turn off your hook function in after-safe-hook
for the duration of your command.  On common way to do this is to
make it dependent on a variable and bind this variable dynamically
while you run the hook function


Like

(defvar do-my-hook t)

...

(defun th-org-update-agenda-file (optional force)
(interactive)
(when (and do-my-hook
   (eq major-mode 'org-mode)
   (member buffer-file-name org-agenda-files))
  (save-excursion
(save-window-excursion
  (let ((do-my-hook nil)
 (file /tmp/org-agenda.txt))
(org-agenda-list)
(org-write-agenda file))


HTH

- Carsten





- somehow the buffer associated with the saved org file uni.org is
  erased and org tries to insert an agendo into this buffer (only one
  propertized line)

 Week-agenda (W20):

  and the major mode is now `org-agenda-mode', which results in the
  error I posted when org tries to create the agenda page.

Bye,
Tassilo
--
[Emacs] is written in Lisp, which is the only computer language that  
is
beautiful.  -- Neal Stephenson, _In the Beginning was the Command  
Line_




___
Emacs-orgmode mailing list
Remember: use `Reply All' to send replies to the list.
Emacs-orgmode@gnu.org
http://lists.gnu.org/mailman/listinfo/emacs-orgmode


Re: [Orgmode] Help debugging a problem when saving org-agenda files with C-x s

2009-05-14 Thread Carsten Dominik


On May 13, 2009, at 8:12 AM, Tassilo Horn wrote:


Hi all,

I use an own function to save the current agenta to a text file,  
which I

display in a tooltip on my desktop:

--8---cut here---start-8---
(defun th-org-mode-init ()
 (add-hook 'after-save-hook 'th-org-update-agenda-file t t))

(add-hook 'org-mode-hook 'th-org-mode-init)

;; TODO: This errors when calling C-x s after modifying things in  
the agenda.

(defun th-org-update-agenda-file (optional force)
 (interactive)
 (when (and (eq major-mode 'org-mode)
(member buffer-file-name org-agenda-files))
   (save-excursion
 (save-window-excursion
   (let ((file /tmp/org-agenda.txt))
 (org-agenda-list)
 (org-write-agenda file))
--8---cut here---end---8---

This works fine when I save an agenda file while in its buffer, but  
when
I edit the file via agenda commands and hit `C-x s', I'm asked if I  
want

to save /home/horn/repos/org/uni.org and say yes, I get this error:



This probably happens because you are relying on org-agenda-list which  
is supposed to display the agenda window and in this way set the  
selected window and buffer.  In non-interactive use, the buffer is  
created, but display is delayed until after the next idle moment.


Not tested, but this may help:

Replace (org-agenda-write) with this:

(with-current-buffer org-agenda-buffer-name (org-write-agenda file))

HTH

- Carsten


___
Emacs-orgmode mailing list
Remember: use `Reply All' to send replies to the list.
Emacs-orgmode@gnu.org
http://lists.gnu.org/mailman/listinfo/emacs-orgmode


Re: [Orgmode] Help debugging a problem when saving org-agenda files with C-x s

2009-05-14 Thread Tassilo Horn
Carsten Dominik carsten.domi...@gmail.com writes:

Hi Carsten,

 --8---cut here---start-8---
 (defun th-org-mode-init ()
  (add-hook 'after-save-hook 'th-org-update-agenda-file t t))

 (add-hook 'org-mode-hook 'th-org-mode-init)

 ;; TODO: This errors when calling C-x s after modifying things in the agenda.
 (defun th-org-update-agenda-file (optional force)
  (interactive)
  (when (and (eq major-mode 'org-mode)
 (member buffer-file-name org-agenda-files))
(save-excursion
  (save-window-excursion
(let ((file /tmp/org-agenda.txt))
  (org-agenda-list)
  (org-write-agenda file))
 --8---cut here---end---8---

 This works fine when I save an agenda file while in its buffer, but
 when I edit the file via agenda commands and hit `C-x s', I'm asked
 if I want to save /home/horn/repos/org/uni.org and say yes, I get
 this error:

 This probably happens because you are relying on org-agenda-list which
 is supposed to display the agenda window and in this way set the
 selected window and buffer.  In non-interactive use, the buffer is
 created, but display is delayed until after the next idle moment.

 Not tested, but this may help:

 Replace (org-agenda-write) with this:

 (with-current-buffer org-agenda-buffer-name (org-write-agenda file))

No, I'm sorry.  I still get the error, and it's already triggered in the
call to `org-agenda-list' before `org-write-agenda' is called.  The
error is thrown in `org-agenda-get-day-entries'.

Bye,
Tassilo


___
Emacs-orgmode mailing list
Remember: use `Reply All' to send replies to the list.
Emacs-orgmode@gnu.org
http://lists.gnu.org/mailman/listinfo/emacs-orgmode


Re: [Orgmode] Help debugging a problem when saving org-agenda files with C-x s

2009-05-14 Thread Carsten Dominik
Did you restart Emacs?  My idea was that the first time you call this,  
you change the file name of a buffer, and the second time the problem  
happens.


- Carsten

On May 14, 2009, at 6:43 PM, Tassilo Horn wrote:


Carsten Dominik carsten.domi...@gmail.com writes:

Hi Carsten,


--8---cut here---start-8---
(defun th-org-mode-init ()
(add-hook 'after-save-hook 'th-org-update-agenda-file t t))

(add-hook 'org-mode-hook 'th-org-mode-init)

;; TODO: This errors when calling C-x s after modifying things in  
the agenda.

(defun th-org-update-agenda-file (optional force)
(interactive)
(when (and (eq major-mode 'org-mode)
   (member buffer-file-name org-agenda-files))
  (save-excursion
(save-window-excursion
  (let ((file /tmp/org-agenda.txt))
(org-agenda-list)
(org-write-agenda file))
--8---cut here---end---8---

This works fine when I save an agenda file while in its buffer, but
when I edit the file via agenda commands and hit `C-x s', I'm asked
if I want to save /home/horn/repos/org/uni.org and say yes, I get
this error:


This probably happens because you are relying on org-agenda-list  
which

is supposed to display the agenda window and in this way set the
selected window and buffer.  In non-interactive use, the buffer is
created, but display is delayed until after the next idle moment.

Not tested, but this may help:

Replace (org-agenda-write) with this:

(with-current-buffer org-agenda-buffer-name (org-write-agenda file))


No, I'm sorry.  I still get the error, and it's already triggered in  
the

call to `org-agenda-list' before `org-write-agenda' is called.  The
error is thrown in `org-agenda-get-day-entries'.

Bye,
Tassilo




___
Emacs-orgmode mailing list
Remember: use `Reply All' to send replies to the list.
Emacs-orgmode@gnu.org
http://lists.gnu.org/mailman/listinfo/emacs-orgmode


Re: [Orgmode] Help debugging a problem when saving org-agenda files with C-x s

2009-05-14 Thread Tassilo Horn
Carsten Dominik carsten.domi...@gmail.com writes:

 Did you restart Emacs?  My idea was that the first time you call this,
 you change the file name of a buffer, and the second time the problem
 happens.

First, I only evaled my function anew, but now I tried with a new emacs
instance and the error is still the same.

But now I can see what happens (but I don't have a solution right now):

  - `C-x s' saves the modified org buffer (I checked that the changes
are saved to disk)

  - my function is triggered cause it's in `after-save-hook' buffer
locally

  - somehow the buffer associated with the saved org file uni.org is
erased and org tries to insert an agendo into this buffer (only one
propertized line)

   Week-agenda (W20):

and the major mode is now `org-agenda-mode', which results in the
error I posted when org tries to create the agenda page.

Bye,
Tassilo
-- 
[Emacs] is written in Lisp, which is the only computer language that is
beautiful.  -- Neal Stephenson, _In the Beginning was the Command Line_


___
Emacs-orgmode mailing list
Remember: use `Reply All' to send replies to the list.
Emacs-orgmode@gnu.org
http://lists.gnu.org/mailman/listinfo/emacs-orgmode


[Orgmode] Help debugging a problem when saving org-agenda files with C-x s

2009-05-13 Thread Tassilo Horn
Hi all,

I use an own function to save the current agenta to a text file, which I
display in a tooltip on my desktop:

--8---cut here---start-8---
(defun th-org-mode-init ()
  (add-hook 'after-save-hook 'th-org-update-agenda-file t t))

(add-hook 'org-mode-hook 'th-org-mode-init)

;; TODO: This errors when calling C-x s after modifying things in the agenda.
(defun th-org-update-agenda-file (optional force)
  (interactive)
  (when (and (eq major-mode 'org-mode)
 (member buffer-file-name org-agenda-files))
(save-excursion
  (save-window-excursion
(let ((file /tmp/org-agenda.txt))
  (org-agenda-list)
  (org-write-agenda file))
--8---cut here---end---8---

This works fine when I save an agenda file while in its buffer, but when
I edit the file via agenda commands and hit `C-x s', I'm asked if I want
to save /home/horn/repos/org/uni.org and say yes, I get this error:

--8---cut here---start-8---
Debugger entered--Lisp error: (error Agenda file /home/horn/repos/org/uni.org 
is not in `org-mode')
  signal(error (Agenda file /home/horn/repos/org/uni.org is not in 
`org-mode'))
  error(Agenda file %s is not in `org-mode' /home/horn/repos/org/uni.org)
  org-agenda-get-day-entries(/home/horn/repos/org/uni.org (5 11 2009) 
:deadline :scheduled :sexp :timestamp)
  byte-code(...)
  org-agenda-list()
  (let ((file /tmp/org-agenda.txt)) (org-agenda-list) (org-write-agenda file))
  (save-window-excursion (let (...) (org-agenda-list) (org-write-agenda file)))
  (save-excursion (save-window-excursion (let ... ... ...)))
  (progn (save-excursion (save-window-excursion ...)))
  (if (and (eq major-mode ...) (member buffer-file-name org-agenda-files)) 
(progn (save-excursion ...)))
  (when (and (eq major-mode ...) (member buffer-file-name org-agenda-files)) 
(save-excursion (save-window-excursion ...)))
  th-org-update-agenda-file()
  run-hooks(after-save-hook)
  basic-save-buffer()
  save-buffer()
  #[(buffer) rq. ) [buffer save-buffer] 1](#buffer uni.org)
  map-y-or-n-p(#[(buffer) .!V.!...])
  byte-code(...)
  save-some-buffers(nil)
  call-interactively(save-some-buffers nil nil)
--8---cut here---end---8---

I'm not sure what's the problem here.  /home/horn/repos/org/uni.org is
surely in org-mode!

Any help on that?

Bye,
Tassilo



___
Emacs-orgmode mailing list
Remember: use `Reply All' to send replies to the list.
Emacs-orgmode@gnu.org
http://lists.gnu.org/mailman/listinfo/emacs-orgmode