From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Piotr Zielinski" Subject: Re: Autocollapse of outline nodes Date: Fri, 12 May 2006 03:26:48 +0200 Message-ID: <3c12eb8d0605111826m7ebdf5d5mdab748c16f04a225@mail.gmail.com> References: <3c12eb8d0604240515l3313b552o2ba25db2e7012f97@mail.gmail.com> <39e6a980b34a61ebb4e57f452699359c@science.uva.nl> Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: quoted-printable Return-path: Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1FeMQd-0002vB-0Q for emacs-orgmode@gnu.org; Thu, 11 May 2006 21:26:51 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1FeMQa-0002uy-Tl for emacs-orgmode@gnu.org; Thu, 11 May 2006 21:26:50 -0400 Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1FeMQa-0002uv-On for emacs-orgmode@gnu.org; Thu, 11 May 2006 21:26:48 -0400 Received: from [64.233.162.192] (helo=nz-out-0102.google.com) by monty-python.gnu.org with esmtp (Exim 4.52) id 1FeMSD-0002ZX-TP for emacs-orgmode@gnu.org; Thu, 11 May 2006 21:28:30 -0400 Received: by nz-out-0102.google.com with SMTP id z6so307374nzd for ; Thu, 11 May 2006 18:26:48 -0700 (PDT) In-Reply-To: <39e6a980b34a61ebb4e57f452699359c@science.uva.nl> Content-Disposition: inline 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: Carsten Dominik Cc: emacs-orgmode@gnu.org Below is a version of autocollapse that works correctly even if several windows show the same buffer. It periodically collapses outline nodes that are far from the current point position [1]. Piotr [1] http://zerotau.blogspot.com/2006/04/autocollapse-mode-for-emacs.html (defun local-fold-from-level (beg end level) (hide-region-body beg end) (goto-char beg) (unless (looking-at outline-regexp) (outline-next-visible-heading 1)) (while (and (<=3D (point) end) (not (eobp))) (when (> (outline-level) level) (hide-subtree)) (outline-next-visible-heading 1))) (defun local-contains-point (beg end pointlist) (let ((result)) (dolist (point pointlist result) (setq result (or result (and (>=3D point beg) (<=3D point end))))))) (defun local-auto-fold () (save-excursion (let ((pointlist (mapcar 'window-point =09=09=09 (get-buffer-window-list (current-buffer) nil t)))) (message "fold: %S: %S" (current-buffer) pointlist) (beginning-of-buffer) (unless (looking-at outline-regexp) =09(outline-next-visible-heading 1)) (while (not (eobp)) =09(let ((end (save-excursion (outline-end-of-subtree) (point)))) =09 (if (local-contains-point (point) end pointlist) =09 (outline-next-visible-heading 1) =09 (local-fold-from-level (point) end (outline-level)))))))) =09 (defun local-auto-fold-all () (save-excursion (dolist (buffer (buffer-list)) (set-buffer buffer) (when (eq major-mode 'org-mode) =09(local-auto-fold))))) =09=09 (run-with-idle-timer 60 t 'local-auto-fold-all)