Re: [O] Bug: TAB cycling and narrowing to subtree [8.2.6 (release_8.2.6-903-ga1b4d9 @ /home/youngfrog/sources/org-mode/lisp/)]
Hello Bastien, Bastien b...@gnu.org writes: Nicolas Richard theonewiththeevill...@yahoo.fr writes: If, instead, you first hit TAB (to open the subtree), then narrow to subtree and hit TAB again to fold, you get * love is followed by org-ellipsis followed by 'd' on the same line. The 'd' shouldn't be there. That's an annoying and known glitch -- I don't have time for this right now, but it is definitely in my radar. Maybe getting rid of (defadvice outline-end-of-subtree ...) in org.el is one way to start cleaning up that stuff. If you can have a look, that'd be good. Otherwise I will in the coming weeks. I love the idea of cleaning, but that might require some knowledge of the codebase that I don't have. e.g. why does the advice exist in the first place ? IIUC, org-end-of-subtree exists for speed reasons. Could we move the advice to within org-end-of-subtree itself, i.e. something like: (defun org-end-of-subtree (...) (if (derived-mode-p 'org-mode) (progn existing code) (outline-end-of-subtree))) and then only call *that* function from within org.el. Code that wants to be org-aware could use that function, code that doesn't need the speedup in org mode shouldn't use it. It might be more trouble than what it solves. Another question is why does the advice use (unless (eobp) (backward-char 1)) ? Couldn't that be moved to org-end-of-subtree itself ? Isn't that even superfluous given the 'to-heading' argument (which could be set to nil) ? Does the test suite cover that part of org ? Anyway, looking at the functions that get called, I spotted an easy fix. WDYT ? --- a/lisp/org.el +++ b/lisp/org.el @@ -6729,7 +6729,10 @@ in special contexts. (setq has-children (org-list-has-child-p (point) struct))) (org-back-to-heading) (setq eoh (save-excursion (outline-end-of-heading) (point))) - (setq eos (save-excursion (1- (org-end-of-subtree t t + (setq eos (save-excursion + (org-end-of-subtree t t) + (when (bolp) (backward-char)) + (point))) (setq has-children (or (save-excursion (let ((level (funcall outline-level))) -- Nico.
Re: [O] Bug: TAB cycling and narrowing to subtree [8.2.6 (release_8.2.6-903-ga1b4d9 @ /home/youngfrog/sources/org-mode/lisp/)]
Hi Nicolas, Nicolas Richard theonewiththeevill...@yahoo.fr writes: e.g. why does the advice exist in the first place ? No real reason, I removed it. IIUC, org-end-of-subtree exists for speed reasons. Could we move the advice to within org-end-of-subtree itself, i.e. something like: (defun org-end-of-subtree (...) (if (derived-mode-p 'org-mode) (progn existing code) (outline-end-of-subtree))) This would slow down `org-end-of-subtree'. Instead, I simply removed calls to `outline-end-of-subtree' and replaced it with appropriate calls to `org-end-of-subtree'. Anyway, looking at the functions that get called, I spotted an easy fix. WDYT ? I think it's good! I applied the patch, thanks for digging into this, probably the psychological/technical support I needed to move forward on this. Best, -- Bastien
Re: [O] Bug: TAB cycling and narrowing to subtree [8.2.6 (release_8.2.6-903-ga1b4d9 @ /home/youngfrog/sources/org-mode/lisp/)]
Hi Nicolas, Nicolas Richard theonewiththeevill...@yahoo.fr writes: If, instead, you first hit TAB (to open the subtree), then narrow to subtree and hit TAB again to fold, you get * love is followed by org-ellipsis followed by 'd' on the same line. The 'd' shouldn't be there. That's an annoying and known glitch -- I don't have time for this right now, but it is definitely in my radar. Maybe getting rid of (defadvice outline-end-of-subtree ...) in org.el is one way to start cleaning up that stuff. If you can have a look, that'd be good. Otherwise I will in the coming weeks. Thanks, -- Bastien
[O] Bug: TAB cycling and narrowing to subtree [8.2.6 (release_8.2.6-903-ga1b4d9 @ /home/youngfrog/sources/org-mode/lisp/)]
Hi, With the following file named /tmp/test.org #+BEGIN_SRC org ,* love is all you need ,* in the air #+END_SRC Run : emacs -q -L /path/to/org/lisp/ -l org /tmp/test.org -f org-version I get: : Org-mode version 8.2.6 (release_8.2.6-6-gfc37d1 @ /path/to/org/lisp/) then narrow to subtree C-x n s and hit TAB to open the subtree : the last 'd' (of the word need) is kept hidden and replaced by org-ellipsis. If, instead, you first hit TAB (to open the subtree), then narrow to subtree and hit TAB again to fold, you get * love is followed by org-ellipsis followed by 'd' on the same line. The 'd' shouldn't be there. Not exactly a terrible bug, but I usually find it distracting. If org-cycle-separator-lines is non-zero it is possible to work around the problem by adding blank lines at the end of subtrees. (It is 2 --the default-- in the above example, but I like to set it to 0.) IIUC, the problem amounts to the fact that TAB cycling is not working well with buffers that don't end with a newline. -- Nico.