Re: [O] [NEW FEATURE] org-hlc.el - hidden-lines-cookies (hlc) for Org-mode
Carsten Dominik carsten.domi...@gmail.com writes: Hi Carsten, Hi List, , | Behind every folded headline, a little 'cookie' shows the number of | hidden lines till the next visible headline. ` However, I don't think the implementation is the right one. it happened again - François Pinard already had a fully fledged implementation of my new org-mode feature: 'org-weights.el' ,-- | https://github.com/pinard/org-weights `-- But this time I was saved from implementing a completely independent version of the same idea (see 'outorg.el' vs 'poporg.el') but rather forked his library on github and merged my ideas/code with his: , | https://github.com/tj64/org-weights ` Although the details are still a bit buggy, the general mechanism already works. 1. 'org-weights' works with Org-mode as well as with outshine buffers now (including Emacs Lisp files with conventional headers (^;;;+ ). It might even work with plain outline buffers. 2. 'org-weights' now offers to display the headline-weights (number of subtrees and number of paragraphs) or hidden-lines-cookies (the number of (hidden) lines till the next visible headline. Here are a few examples (don't bother about the numbers, they are made up, since I cannot copy overlays): 1. Org-mode/subtree-weights: ,--- | * Header 1 *2 + 1... | ** Header 2a ** 1 | | text text text text text | text text text text text | | ** Header 2b ** 1 `--- 2. Outshine Emacs Lisp/subtree-weights: ,-- | ;; * Header 1 *2 + 1... | ;; ** Header 2a ** 1 | | text text text text text | text text text text text | | ;; ** Header 2b ** 1 | `-- 3. Conventional Emacs-Lisp/hidden-lines-cookies , | ;;; Header 1 [#1] | Header 2a [#4] | | text text text text text | text text text text text | | Header 2b [#2] | ` 4. Outshine PicoLisp/hidden-lines-cookies , | ## * Header 1 [#1] | ## ** Header 2a [#4] | | text text text text text | text text text text text | | ## ** Header 2b [#2] | ` 'org-weights' is implemented with overlays, so the files are not touched. Command 'org-weights-mode' toggles activation, and 'org-weights-or-cookies' switches between subtree-weights and hidden-lines-cookies. Actually the hidden-lines-cookies are not really about hidden-lines anymore in this implementation, because I adapted to the semantics of 'org-weights' that shows the overlay-info for *all* headlines except the one where point is on. Besides the still buggy details for outshine buffers (the calculated numbers are not always quite right), one problem I hit is that a visibility change does not uptdate all cookies/weights at once, they are only updated headline per headline when point is moved up and down. Is that for performance reasons? -- cheers, Thorsten
Re: [O] [NEW FEATURE] org-hlc.el - hidden-lines-cookies (hlc) for Org-mode
Nick Dokos ndo...@gmail.com writes: Thorsten Jolitz tjol...@gmail.com writes: , and it should be hooked somehow into the folding/unfolding routines to auto-update. Thats what I thought too, but I ran into a problem I could not solve so far, so this user-command based implementation (show the cookies on demand) is kind of the second-best solution (better then nothing). Here is a thread related to the problem mentioned, unfortunately with no posts except my own so far: ,--- | http://lists.gnu.org/archive/html/help-gnu-emacs/2013-05/msg00511.html `--- You can try increasing max-specpdl-size: read the doc for it. If you are asking for a bounded amount of resources but that amount is bigger than what emacs is willing to give you, then increasing the size should work. OTOH, if you are asking for unlimited resources (e.g. you have an infinite recursion somewhere), then increasing the limit will only allow you to go a little further before blowing up again. So try making it 10 or even 100 times bigger and see what you get (and try it on a throwaway emacs instance, not the working instance). If it still blows up, you'll have to look at your code carefully: chances are there is a programming error. I read about that, but I did not simply want to increase the limit because looking at my code I thought it should not use so much bindings. However, the problem is more or less obsolete now since I switched to a completely different implementation using overlays - see my post with regards to 'org-weights.el'. Thanks for the info anyway. -- cheers, Thorsten
Re: [O] [NEW FEATURE] org-hlc.el - hidden-lines-cookies (hlc) for Org-mode
Thorsten Jolitz tjol...@gmail.com writes: it happened again [...]- François Pinard already had a fully fledged implementation of my new org-mode feature: 'org-weights.el' You're quite generous when you say full fledged :-). There are many details in which I find org-weights.el unsatisfactory, but as it is sufficient as it stands for my day-to-day usage, I'm not overly pushing on it (the pun is purely accidental). | * Header 1 *2 + 1... | ## * Header 1 [#1] I find the *2 + 1 far too verbose, in that it uses too much horizontal space, I much prefer the compact aspect of [#1]. What would be ideal, but I do not know if it can be organized, would keep the weights or hidden-lines information always glued to the ellipsis, and not hiding any underlying text as org-weights currently does. On the other hand, there are some virtue to the vertical alignment of weight information. Sigh! Nothing is perfect... [...] shows the overlay-info for *all* headlines except the one where point is on. That exception is a sad and questionable workaround, for being able to edit the current line. When, in normal and standard Org mode, I edit a line which has an ellipsis at the end, I may edit the line like any other one without seeing undesired effects. org-weights should be equally capable, and there should be no reason (ideally) to hide the information for the line where the point is, merely for editing to work. one problem I hit is that a visibility change does not uptdate all cookies/weights at once, they are only updated headline per headline when point is moved up and down. Is that for performance reasons? See the Caveats section at the end of org-weights documentation. Normally, the information to be updated may be minimized to the header above the line holding point, and then, recursively up. But there is a bug in this optimization when a header is demoted (as explained in Caveats). Another performance-related detail is the quadratic behaviour which may be seen in big, deeply nested Org files: it could be avoided by cleverly saving (in a hidden way) information on computations already done, and reusing it instead of recomputing it many times. But as usual with most cached optimization, it is difficult to get fully right. François
Re: [O] [NEW FEATURE] org-hlc.el - hidden-lines-cookies (hlc) for Org-mode
François Pinard pin...@iro.umontreal.ca writes: Hi Francios, You're quite generous when you say full fledged :-). There are many details in which I find org-weights.el unsatisfactory, but as it is sufficient as it stands for my day-to-day usage, I'm not overly pushing on it (the pun is purely accidental). | * Header 1 *2 + 1... | ## * Header 1 [#1] I find the *2 + 1 far too verbose, in that it uses too much horizontal space, I much prefer the compact aspect of [#1]. The weights are a bit heavy, and I had to move them to column 65 to make them fit in a vertically splitted screen. But they carry more information of course, the question is if one can process this information quickly enough, or if one single number is not enough to give an impression of the subtrees 'weight'. Or maybe ,-- | * Header 1 [2/1]... `-- is easier on the eyes than ,--- | * Header 1 *2 + 1... `--- What would be ideal, but I do not know if it can be organized, would keep the weights or hidden-lines information always glued to the ellipsis, and not hiding any underlying text as org-weights currently does. On the other hand, there are some virtue to the vertical alignment of weight information. Sigh! Nothing is perfect... It would be easy to make the position of the weight/cookie a user option - either direcctly behind the headline text, or aligned at a certain column. [...] shows the overlay-info for *all* headlines except the one where point is on. That exception is a sad and questionable workaround, for being able to edit the current line. When, in normal and standard Org mode, I edit a line which has an ellipsis at the end, I may edit the line like any other one without seeing undesired effects. org-weights should be equally capable, and there should be no reason (ideally) to hide the information for the line where the point is, merely for editing to work. I would still like to have my original idea (which was actually a user request for outshine.el by Jonas Bernoulli): show the number of hidden lines only when the headline is folded, and update with every visibility change. one problem I hit is that a visibility change does not uptdate all cookies/weights at once, they are only updated headline per headline when point is moved up and down. Is that for performance reasons? See the Caveats section at the end of org-weights documentation. Normally, the information to be updated may be minimized to the header above the line holding point, and then, recursively up. But there is a bug in this optimization when a header is demoted (as explained in Caveats). Another performance-related detail is the quadratic behaviour which may be seen in big, deeply nested Org files: it could be avoided by cleverly saving (in a hidden way) information on computations already done, and reusing it instead of recomputing it many times. But as usual with most cached optimization, it is difficult to get fully right. This task seems to bring Emacs to its limits, at least in 5000+ lines outshine buffers (e.g. my init.el). So maybe its not that suited for a visibility-change hook, but rather for occasional activation by an explicit user command? -- cheers, Thorsten
Re: [O] [NEW FEATURE] org-hlc.el - hidden-lines-cookies (hlc) for Org-mode
Thorsten Jolitz tjol...@gmail.com writes: Hi List, I ported this from outshine.el (i.e. outline-minor-mode) to Org-mode, hope it is useful. 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' , | 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 | | 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. | | *** 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. --- ORG-HLC.EL --- ;;; org-hlc.el --- hidden-lines-cookies for folded Org-mode headlines ;; Copyright (C) 2013 Thorsten Jolitz ;; Author: Thorsten Jolitz tjolitz at gmail dot com ;; 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 http://www.gnu.org/licenses/. ;;; Commentary: ;; 'hidden-lines-cookies' (hlc) are small cookies at the end of each folded ;; (and visible) headline in an Org-mode buffer that show the number of hidden ;; 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-cookies', ;; 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-delimiter' ;; (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 shown: ;; ,- ;; | *** 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 ()
Re: [O] [NEW FEATURE] org-hlc.el - hidden-lines-cookies (hlc) for Org-mode
Hi Thorsten, On 22 mei 2013, at 22:44, Thorsten Jolitz tjol...@gmail.com wrote: Hi List, I ported this from outshine.el (i.e. outline-minor-mode) to Org-mode, hope it is useful. What is it all about? With 'org-hlc' , | 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 | | 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. | | *** Usage [#165] `- This is is definitely a nice feature. Herbert Sitz has this in his vimorganizer implementation for vi, http://vimeo.com/16543959 and we have been jealous of this feature ever since. However, I don't think the implementation is the right one. Modifying the file to display this does not seem right. I would say it should use text properties or maybe overlays for display, and it should be hooked somehow into the folding/unfolding routines to auto-update. Cheers! - Carsten 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. --- ORG-HLC.EL --- ;;; org-hlc.el --- hidden-lines-cookies for folded Org-mode headlines ;; Copyright (C) 2013 Thorsten Jolitz ;; Author: Thorsten Jolitz tjolitz at gmail dot com ;; 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 http://www.gnu.org/licenses/. ;;; Commentary: ;; 'hidden-lines-cookies' (hlc) are small cookies at the end of each folded ;; (and visible) headline in an Org-mode buffer that show the number of hidden ;; 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-cookies', ;; 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-delimiter' ;; (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 shown: ;; ,- ;; | *** 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
Re: [O] [NEW FEATURE] org-hlc.el - hidden-lines-cookies (hlc) for Org-mode
Carsten Dominik carsten.domi...@gmail.com writes: Hi Carsten, On 22 mei 2013, at 22:44, Thorsten Jolitz tjol...@gmail.com wrote: What is it all about? With 'org-hlc' , | Behind every folded headline, a little 'cookie' shows the number of | hidden lines till the next visible headline. ` This is is definitely a nice feature. [...] However, I don't think the implementation is the right one. Modifying the file to display this does not seem right. I would say it should use text properties or maybe overlays for display I have not done anything with text properties or overlays before, so I have to take it look at the docs, but I guess this would only affect small parts of the implementation (do something with properties/overlays instead of inserting/deleting text). , and it should be hooked somehow into the folding/unfolding routines to auto-update. Thats what I thought too, but I ran into a problem I could not solve so far, so this user-command based implementation (show the cookies on demand) is kind of the second-best solution (better then nothing). Here is a thread related to the problem mentioned, unfortunately with no posts except my own so far: ,--- | http://lists.gnu.org/archive/html/help-gnu-emacs/2013-05/msg00511.html `--- -- cheers, Thorsten
Re: [O] [NEW FEATURE] org-hlc.el - hidden-lines-cookies (hlc) for Org-mode
Thorsten Jolitz tjol...@gmail.com writes: , and it should be hooked somehow into the folding/unfolding routines to auto-update. Thats what I thought too, but I ran into a problem I could not solve so far, so this user-command based implementation (show the cookies on demand) is kind of the second-best solution (better then nothing). Here is a thread related to the problem mentioned, unfortunately with no posts except my own so far: ,--- | http://lists.gnu.org/archive/html/help-gnu-emacs/2013-05/msg00511.html `--- You can try increasing max-specpdl-size: read the doc for it. If you are asking for a bounded amount of resources but that amount is bigger than what emacs is willing to give you, then increasing the size should work. OTOH, if you are asking for unlimited resources (e.g. you have an infinite recursion somewhere), then increasing the limit will only allow you to go a little further before blowing up again. So try making it 10 or even 100 times bigger and see what you get (and try it on a throwaway emacs instance, not the working instance). If it still blows up, you'll have to look at your code carefully: chances are there is a programming error. -- Nick
[O] [NEW FEATURE] org-hlc.el - hidden-lines-cookies (hlc) for Org-mode
Hi List, I ported this from outshine.el (i.e. outline-minor-mode) to Org-mode, hope it is useful. What is it all about? With 'org-hlc' , | 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 | | 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. | | *** 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. --- ORG-HLC.EL --- ;;; org-hlc.el --- hidden-lines-cookies for folded Org-mode headlines ;; Copyright (C) 2013 Thorsten Jolitz ;; Author: Thorsten Jolitz tjolitz at gmail dot com ;; 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 http://www.gnu.org/licenses/. ;;; Commentary: ;; 'hidden-lines-cookies' (hlc) are small cookies at the end of each folded ;; (and visible) headline in an Org-mode buffer that show the number of hidden ;; 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-cookies', ;; 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-delimiter' ;; (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 shown: ;; ,- ;; | *** 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