From mboxrd@z Thu Jan 1 00:00:00 1970 From: Carsten Dominik Subject: Re: Version 7.5: C-c C-t fails with "args out of range" Date: Wed, 9 Mar 2011 07:55:31 +0100 Message-ID: References: <87sjuw973f.wl%dmaus@ictsoc.de> Mime-Version: 1.0 (Apple Message framework v1082) Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Return-path: Received: from [140.186.70.92] (port=59835 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1PxDKq-0001Lx-8M for emacs-orgmode@gnu.org; Wed, 09 Mar 2011 01:57:31 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1PxDKH-0001dv-CR for emacs-orgmode@gnu.org; Wed, 09 Mar 2011 01:56:54 -0500 Received: from mail-ew0-f41.google.com ([209.85.215.41]:58449) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1PxDKH-0001dj-7k for emacs-orgmode@gnu.org; Wed, 09 Mar 2011 01:56:53 -0500 Received: by ewy9 with SMTP id 9so65707ewy.0 for ; Tue, 08 Mar 2011 22:56:51 -0800 (PST) In-Reply-To: <87sjuw973f.wl%dmaus@ictsoc.de> List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org To: David Maus Cc: emacs-orgmode@gnu.org, Josh Berry 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.... dmjena@jabber.org > Email..... dmaus@ictsoc.de