emacs-orgmode
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [O] Version 7.5: C-c C-t <anything> fails with "args out of range"


From: Carsten Dominik
Subject: Re: [O] Version 7.5: C-c C-t <anything> fails with "args out of range"
Date: Wed, 9 Mar 2011 07:55:31 +0100

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.... address@hidden
> Email..... address@hidden




reply via email to

[Prev in Thread] Current Thread [Next in Thread]