On 9.3.2011, at 06:49, David Maus wrote: > At Tue, 8 Mar 2011 15:08:57 -0800, > Josh Berry wrote: >> >> Hi list, >> >> I just upgraded from org-mode 7.4 to 7.5, and I can't set or change >> TODO states at all with C-c C-t now; an args-out-of-range error gets >> raised. I've tried doing a "make clean" in my org-mode checkout, to >> no avail. >> >> I'm running GNU emacs 23.2.1 on Mac OSX (in Aqua), installed via >> Homebrew. Debugger backtrace is pasted below. >> >> [[BTW, please forgive me if this isn't a well-formed bug report; I'm >> relatively new to Emacs and don't know Elisp. Just let me know if you >> need anything else.]] > > Just a fast comment: Couldn't this be a problem with the macro > `org-with-wide-buffer'? > > #+begin_src emacs-lisp > (defmacro org-with-wide-buffer (&rest body) > "Execute body while temporarily widening the buffer." > `(let ((beg (point-min)) (end (point-max)) (pos (point))) > (prog2 > (widen) > ,@body > (narrow-to-region beg end) > (goto-char pos)))) > #+end_src
This macro is indeed not written in a stable way and will fail of the buffer gets modified with @body. But Emacs already has save-restriction, so there is no need to re-invent the wheel: (defmacro org-with-wide-buffer (&rest body) "Execute body while temporarily widening the buffer." `(save-excursion (save-restriction (widen) ,@body))) Cheers - Carsten > > What if BODY inserts or deletes characters inside the narrowed region? > In this case the upper boundary of the region is no longer (point-max) > before executing body. Thus the buffer might be narrowed to the wrong > region after executing body. No, wait: If BODY inserts or deletes > something inside OR above the region the boundaries of the originally > narrowed region change, don't they? > > This would explain the error: Buffer is narrowed to a region that > happens to end at eob. BODY deletes something inside the region, eob > is decreased by the number of characters deleted. The call to > `narrow-to-region' tries to narrow to a region with an upper boundary > greater than eob -- and that's not possible. > > Solution? Not sure. The function must take into account that BODY > modifies buffer in a way that changes buffer in a way that requires > adjustment of the region boundaries OR even in a way that removes the > part of buffer that contained the region. > > So something like this would fix it: Store markers of beginning and > end of region. IIRC they will move with inserts and deletes. After > executing body narrow to position of these markers if they exist. If > marker for point-max is gone, use eob. If both are gone... Don't > narrow at all? > > Best, > > -- David > -- > OpenPGP... 0x99ADB83B5A4478E6 > Jabber.... dmj...@jabber.org > Email..... dm...@ictsoc.de