emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
From: Nicolas Richard <theonewiththeevillook@yahoo.fr>
To: Bastien <bzg@gnu.org>
Cc: Nicolas Richard <theonewiththeevillook@yahoo.fr>, emacs-orgmode@gnu.org
Subject: Re: Bug: TAB cycling and narrowing to subtree [8.2.6 (release_8.2.6-903-ga1b4d9 @ /home/youngfrog/sources/org-mode/lisp/)]
Date: Fri, 23 May 2014 10:56:00 +0200	[thread overview]
Message-ID: <87lhtsx49r.fsf@yahoo.fr> (raw)
In-Reply-To: <87oaypf39t.fsf@bzg.ath.cx> (Bastien's message of "Fri, 23 May 2014 07:54:54 +0200")

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.

  reply	other threads:[~2014-05-23  8:56 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
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 [this message]
2014-05-23 11:14     ` Bastien

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.orgmode.org/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87lhtsx49r.fsf@yahoo.fr \
    --to=theonewiththeevillook@yahoo.fr \
    --cc=bzg@gnu.org \
    --cc=emacs-orgmode@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public 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).