emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
* Bug: TAB cycling and narrowing to subtree [8.2.6 (release_8.2.6-903-ga1b4d9 @ /home/youngfrog/sources/org-mode/lisp/)]
@ 2014-04-30 10:12 Nicolas Richard
  2014-05-23  5:54 ` Bastien
  0 siblings, 1 reply; 4+ messages in thread
From: Nicolas Richard @ 2014-04-30 10:12 UTC (permalink / raw)
  To: emacs-orgmode

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.

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: Bug: TAB cycling and narrowing to subtree [8.2.6 (release_8.2.6-903-ga1b4d9 @ /home/youngfrog/sources/org-mode/lisp/)]
  2014-04-30 10:12 Bug: TAB cycling and narrowing to subtree [8.2.6 (release_8.2.6-903-ga1b4d9 @ /home/youngfrog/sources/org-mode/lisp/)] Nicolas Richard
@ 2014-05-23  5:54 ` Bastien
  2014-05-23  8:56   ` Nicolas Richard
  0 siblings, 1 reply; 4+ messages in thread
From: Bastien @ 2014-05-23  5:54 UTC (permalink / raw)
  To: Nicolas Richard; +Cc: emacs-orgmode

Hi Nicolas,

Nicolas Richard <theonewiththeevillook@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

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: Bug: TAB cycling and narrowing to subtree [8.2.6 (release_8.2.6-903-ga1b4d9 @ /home/youngfrog/sources/org-mode/lisp/)]
  2014-05-23  5:54 ` Bastien
@ 2014-05-23  8:56   ` Nicolas Richard
  2014-05-23 11:14     ` Bastien
  0 siblings, 1 reply; 4+ messages in thread
From: Nicolas Richard @ 2014-05-23  8:56 UTC (permalink / raw)
  To: Bastien; +Cc: Nicolas Richard, emacs-orgmode

Hello Bastien,

Bastien <bzg@gnu.org> writes:
> Nicolas Richard <theonewiththeevillook@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.

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: Bug: TAB cycling and narrowing to subtree [8.2.6 (release_8.2.6-903-ga1b4d9 @ /home/youngfrog/sources/org-mode/lisp/)]
  2014-05-23  8:56   ` Nicolas Richard
@ 2014-05-23 11:14     ` Bastien
  0 siblings, 0 replies; 4+ messages in thread
From: Bastien @ 2014-05-23 11:14 UTC (permalink / raw)
  To: Nicolas Richard; +Cc: emacs-orgmode

Hi Nicolas,

Nicolas Richard <theonewiththeevillook@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

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2014-05-23 13:29 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-04-30 10:12 Bug: TAB cycling and narrowing to subtree [8.2.6 (release_8.2.6-903-ga1b4d9 @ /home/youngfrog/sources/org-mode/lisp/)] Nicolas Richard
2014-05-23  5:54 ` Bastien
2014-05-23  8:56   ` Nicolas Richard
2014-05-23 11:14     ` Bastien

Code repositories for project(s) associated with this inbox:

	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).