From mboxrd@z Thu Jan 1 00:00:00 1970 From: Rainer@krugs.de (Rainer M. Krug) Subject: Re: [NEW FEATURE] org-hlc.el - hidden-lines-cookies (hlc) for Org-mode Date: Thu, 23 May 2013 09:19:30 +0200 Message-ID: <87zjvmqi2l.fsf@krugs.de> References: <87zjvmiw1k.fsf@gmail.com> Mime-Version: 1.0 Content-Type: multipart/signed; boundary="=-=-="; micalg=pgp-sha1; protocol="application/pgp-signature" Return-path: Received: from eggs.gnu.org ([208.118.235.92]:50285) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UfQ8D-0005zj-6q for emacs-orgmode@gnu.org; Thu, 23 May 2013 03:40:19 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1UfQ86-0003qR-Ga for emacs-orgmode@gnu.org; Thu, 23 May 2013 03:40:13 -0400 Received: from plane.gmane.org ([80.91.229.3]:36519) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UfQ86-0003oy-5D for emacs-orgmode@gnu.org; Thu, 23 May 2013 03:40:06 -0400 Received: from list by plane.gmane.org with local (Exim 4.69) (envelope-from ) id 1UfQ83-000608-IK for emacs-orgmode@gnu.org; Thu, 23 May 2013 09:40:03 +0200 Received: from arn78-1-88-186-171-7.fbx.proxad.net ([88.186.171.7]) by main.gmane.org with esmtp (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Thu, 23 May 2013 09:40:03 +0200 Received: from Rainer by arn78-1-88-186-171-7.fbx.proxad.net with local (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Thu, 23 May 2013 09:40:03 +0200 List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Sender: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org To: emacs-orgmode@gnu.org --=-=-= Content-Type: text/plain Content-Transfer-Encoding: quoted-printable Thorsten Jolitz writes: > Hi List,=20 > > I ported this from outshine.el (i.e. outline-minor-mode) to Org-mode, > hope it is useful.=20 That looks very nice indeed and a very nice addition to the ellipsis shown - I would definitely support that it is included in org and I would use it. Cheers, Rainer > > What is it all about? With 'org-hlc'=20 > > ,-------------------------------------------------------------------- > | Behind every folded headline, a little 'cookie' shows the number of > | hidden lines till the next visible headline. > `-------------------------------------------------------------------- > > e.g. > > ,--------------------------------------------------------------------- > | * my-file.org [#13] > | ** Commentary [#1] > | *** About my-file > |=20 > | This file implements extensions for occur-mode. You can think of a > | navi-buffer as a kind of 'remote-control' for an (adecuately) > | outline-structured original-buffer. > |=20 > | *** Usage [#165] > `--------------------------------------------------------------------- > > I attach the code to this message, you can find the git-repo here: > > ,-------------------------------- > | https://github.com/tj64/org-hlc > | git clone https://github.com/tj64/org-hlc > `------------------------------------------ > > Please let me know if there is interest to include this in Org-mode.=20 > > ----------- > ORG-HLC.EL > ----------- > > ;;; org-hlc.el --- hidden-lines-cookies for folded Org-mode headlines > > ;; Copyright (C) 2013 Thorsten Jolitz > > ;; Author: Thorsten Jolitz > ;; Keywords: org-mode, outline, visibility, overlays > > ;; This file is (NOT YET) part of GNU Emacs. > > ;; GNU Emacs is free software: you can redistribute it and/or modify > ;; it under the terms of the GNU General Public License as published by > ;; the Free Software Foundation, either version 3 of the License, or > ;; (at your option) any later version. > > ;; GNU Emacs is distributed in the hope that it will be useful, > ;; but WITHOUT ANY WARRANTY; without even the implied warranty of > ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > ;; GNU General Public License for more details. > > ;; You should have received a copy of the GNU General Public License > ;; along with GNU Emacs. If not, see . > > ;;; Commentary: > > ;; 'hidden-lines-cookies' (hlc) are small cookies at the end of each fold= ed > ;; (and visible) headline in an Org-mode buffer that show the number of h= idden > ;; lines before the next visible headline. > > ;; hidden-lines-cookies can be handled with three user commands: > ;; `org-hlc-show-hidden-lines-cookies', `org-hlc-hide-hidden-lines-cookie= s', > ;; and the convenience command `org-hlc-toggle-hidden-lines-cookies' that > ;; toggles between the two other commands conditional on the last one > ;; executed. > > ;; The appearance of the cookies can be customized by changing the values= of > ;; four customizable variables: `org-hlc-hidden-lines-cookie-left-delimit= er' > ;; (with default value "["), `org-hlc-hidden-lines-cookie-right-delimiter' > ;; (with default value ']), `org-hlc-hidden-lines-cookie-left-signal-char' > ;; (with default value "#") and > ;; `org-hlc-hidden-lines-cookie-right-signal-char' (with default value ""= ). > > ;; Thus an exemplary folded headline with 165 hidden lines before the next > ;; visible headline might look like this when hidden-lines-cookies are sh= own: > > ;; ,----------------- > ;; | *** Headline [#165] > ;; `----------------- > > ;;; Code: > > ;;;; Variables > > (defvar org-hlc-hidden-lines-cookies-on-p nil > "If non-nil, hidden-lines cookies are shown, otherwise hidden.") > > (defgroup org-hlc nil > "Enhanced library for outline navigation in source code buffers." > :prefix "org-hlc-" > :group 'org) > > (defcustom org-hlc-hidden-lines-cookie-left-delimiter "[" > "Left delimiter of cookie that shows number of hidden lines." > :group 'org-hlc > :type 'string) > > (defcustom org-hlc-hidden-lines-cookie-right-delimiter "]" > "Left delimiter of cookie that shows number of hidden lines." > :group 'org-hlc > :type 'string) > > (defcustom org-hlc-hidden-lines-cookie-left-signal-char "#" > "Left signal character of cookie that shows number of hidden lines." > :group 'org-hlc > :type 'string) > > (defcustom org-hlc-hidden-lines-cookie-right-signal-char "" > "Right signal character of cookie that shows number of hidden lines." > :group 'org-hlc > :type 'string) > > (defvar org-hlc-hidden-lines-cookie-format-regexp > (concat > "\\( " > (regexp-quote org-hlc-hidden-lines-cookie-left-delimiter) > (regexp-quote org-hlc-hidden-lines-cookie-left-signal-char) > "\\)" > "\\([[:digit:]]+\\)" > "\\(" > (regexp-quote org-hlc-hidden-lines-cookie-right-signal-char) > ;; FIXME robust enough? > (format "\\%s" org-hlc-hidden-lines-cookie-right-delimiter) > "\\)") > "Matches cookies that show number of hidden lines for folded subtrees.") > > ;;;; Functions > > ;; Calc and show line number of hidden body for all visible headlines > (defun org-hlc-write-hidden-lines-cookies () > "Show line number of hidden lines in folded headline." > (save-excursion > (goto-char (point-min)) > (and (outline-on-heading-p) > (org-hlc-hidden-lines-cookie-status-changed-p) > (org-hlc-set-hidden-lines-cookie)) > (while (not (eobp)) > (outline-next-visible-heading 1) > (and (outline-on-heading-p) > (org-hlc-hidden-lines-cookie-status-changed-p) > (org-hlc-set-hidden-lines-cookie))))) > > > (defun org-hlc-hidden-lines-cookie-status-changed-p () > "Return non-nil if hidden-lines cookie needs modification." > (save-excursion > (save-match-data > (or (not (outline-body-visible-p)) > (re-search-forward > org-hlc-hidden-lines-cookie-format-regexp > (line-end-position) > 'NO-ERROR))))) > > (defun org-hlc-set-hidden-lines-cookie () > "Calculate and set number of hidden lines in folded headline." > (let* ((folded-p (not (outline-body-visible-p))) > (line-num-current-header (line-number-at-pos)) > (line-num-next-visible-header > (save-excursion > (outline-next-visible-heading 1) > (line-number-at-pos))) > (body-lines > (1- (- line-num-next-visible-header line-num-current-header)))) > (if (re-search-forward > org-hlc-hidden-lines-cookie-format-regexp > (line-end-position) > 'NO-ERROR) > (cond > ((not folded-p) (replace-match "")) > (folded-p (replace-match (format "%s" body-lines) nil nil nil 2)= )) > (show-entry) > (save-excursion > (end-of-line) > (insert > (format > " %s%s%s%s%s" > org-hlc-hidden-lines-cookie-left-delimiter > org-hlc-hidden-lines-cookie-left-signal-char > body-lines > org-hlc-hidden-lines-cookie-right-signal-char > org-hlc-hidden-lines-cookie-right-delimiter))) > (hide-entry)))) > > (defun org-hlc-show-hidden-lines-cookies () > "Show hidden-lines cookies for all visible and folded headlines." > (interactive) > (org-hlc-write-hidden-lines-cookies) > (setq org-hlc-hidden-lines-cookies-on-p 1)) > > (defun org-hlc-hide-hidden-lines-cookies () > "Delete all hidden-lines cookies." > (interactive) > (let* ((base-buf (point-marker)) > (indirect-buf-name > (generate-new-buffer-name > (buffer-name (marker-buffer base-buf))))) > (clone-indirect-buffer indirect-buf-name nil 'NORECORD) > (save-excursion > (switch-to-buffer indirect-buf-name) > (show-all) > (let ((indirect-buf (point-marker))) > (org-hlc-write-hidden-lines-cookies) > (switch-to-buffer (marker-buffer base-buf)) > (kill-buffer (marker-buffer indirect-buf)) > (set-marker indirect-buf nil)) > (set-marker base-buf nil))) > (setq org-hlc-hidden-lines-cookies-on-p nil)) > > (defun org-hlc-toggle-hidden-lines-cookies () > "Toggles status of hidden-lines cookies between shown and hidden." > (interactive) > (if org-hlc-hidden-lines-cookies-on-p > (org-hlc-hide-hidden-lines-cookies) > (org-hlc-show-hidden-lines-cookies))) > > (provide 'org-hlc) > > ;; Local variables: > ;; generated-autoload-file: "org-loaddefs.el" > ;; End: > > ;;; org-hlc.el ends here =2D-=20 Rainer M. Krug --=-=-= Content-Type: application/pgp-signature -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.12 (GNU/Linux) iQEcBAEBAgAGBQJRncMDAAoJENvXNx4PUvmCoMQH/1Ikn8bYA++YUi1+c5o61/HE DiFGYEeUqTOBtM0LkikTtaM2AN/yXNmfrN8RSETtcecFwTLaF23oyrzlYizjuy/d E+DltRgzVf95r/wdPes7GhktaT91GMXLc1pGn5UK1U8HS+WUpi/yK+mdRHACdD1S YuThCVNWTN17DEZoMraR5Q4mwrRtDZWLEsvn8k7O24XPWlm8UUVBSfcdpwBqlFdn L7z5fsQMJKEnrxpuupFksLtDsqjdKcKeQTzplt99vXO+MKz2+W6W4F+O3DKHseA+ VesGkTEdUjKMpqU1obQ3c9gIAA5rnhvL/GbpIol4e0eS+8gMdy3Wy9IRoBrrSXg= =3ZMq -----END PGP SIGNATURE----- --=-=-=--