emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
* [bug] canonical context not work in 8.3
@ 2015-08-06 23:10 Samuel Wales
  2015-08-07  0:16 ` Nicolas Goaziou
  0 siblings, 1 reply; 11+ messages in thread
From: Samuel Wales @ 2015-08-06 23:10 UTC (permalink / raw)
  To: emacs-orgmode

(setq org-show-context-detail '((default . canonical))) not work

going from agenda appears to show the first child, and takes
5s or so.

my expectation is that canonical visibility shows no entry
and no children.  first child is non-canonical (i.e. cannot
be reproduced with arrows and tab).

reproduces with my -Q testcase on emacs-version "24.4.1" on
recent maint 8.3.

thanks.

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

* Re: [bug] canonical context not work in 8.3
  2015-08-06 23:10 [bug] canonical context not work in 8.3 Samuel Wales
@ 2015-08-07  0:16 ` Nicolas Goaziou
  2015-08-07  1:38   ` Samuel Wales
  0 siblings, 1 reply; 11+ messages in thread
From: Nicolas Goaziou @ 2015-08-07  0:16 UTC (permalink / raw)
  To: Samuel Wales; +Cc: emacs-orgmode

Hello,

Samuel Wales <samologist@gmail.com> writes:

> (setq org-show-context-detail '((default . canonical))) not work
>
> going from agenda appears to show the first child,

This should be fixed in maint. Thank you.

> and takes 5s or so.

Could you provide a profiling report for this?

> my expectation is that canonical visibility shows no entry
> and no children.  first child is non-canonical (i.e. cannot
> be reproduced with arrows and tab).

First child only is non-canonical. However, canonical is the state
obtained after hitting TAB on a headline. I think you want `minimal'
instead.


Regards,

-- 
Nicolas Goaziou

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

* Re: [bug] canonical context not work in 8.3
  2015-08-07  0:16 ` Nicolas Goaziou
@ 2015-08-07  1:38   ` Samuel Wales
  2015-08-07  8:45     ` Nicolas Goaziou
  0 siblings, 1 reply; 11+ messages in thread
From: Samuel Wales @ 2015-08-07  1:38 UTC (permalink / raw)
  To: Samuel Wales, emacs-orgmode

thank you for fixing.

canonical is always what i want, except for occur-tree.

i did profiler-start then went to org file a few times to average out
the results.  did i use the correct profiler?

 command-execute                                               60148  99%
 - call-interactively                                           60148  99%
  - org-agenda-switch-to                                        59299  98%
   - org-show-context                                           59299  98%
    - org-show-set-visibility                                   59299  98%
     - show-children                                            59170  97%
      - outline-end-of-subtree                                  35938  59%
         outline-next-heading                                    9399  15%
         org-outline-level                                       4047   6%
      - outline-map-region                                      23168  38%
       + #<compiled 0xfc19ab>                                    9558  15%
         outline-next-heading                                    7399  12%
     + org-up-heading-safe                                        117   0%
     + org-show-entry                                               4   0%
     + org-flag-heading                                             4   0%


On 8/6/15, Nicolas Goaziou <mail@nicolasgoaziou.fr> wrote:
> Hello,
>
> Samuel Wales <samologist@gmail.com> writes:
>
>> (setq org-show-context-detail '((default . canonical))) not work
>>
>> going from agenda appears to show the first child,
>
> This should be fixed in maint. Thank you.
>
>> and takes 5s or so.
>
> Could you provide a profiling report for this?
>
>> my expectation is that canonical visibility shows no entry
>> and no children.  first child is non-canonical (i.e. cannot
>> be reproduced with arrows and tab).
>
> First child only is non-canonical. However, canonical is the state
> obtained after hitting TAB on a headline. I think you want `minimal'
> instead.
>
>
> Regards,
>
> --
> Nicolas Goaziou
>


-- 
The Kafka Pandemic: http://thekafkapandemic.blogspot.com

Ramsay's disease DOES progress.  MANY people have died from it.  And
ANYBODY can get it.

Denmark: free Karina Hansen NOW.

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

* Re: [bug] canonical context not work in 8.3
  2015-08-07  1:38   ` Samuel Wales
@ 2015-08-07  8:45     ` Nicolas Goaziou
  2015-08-07 20:27       ` Samuel Wales
  0 siblings, 1 reply; 11+ messages in thread
From: Nicolas Goaziou @ 2015-08-07  8:45 UTC (permalink / raw)
  To: Samuel Wales; +Cc: emacs-orgmode

Samuel Wales <samologist@gmail.com> writes:

> thank you for fixing.
>
> canonical is always what i want, except for occur-tree.
>
> i did profiler-start then went to org file a few times to average out
> the results.  did i use the correct profiler?

You did.
>
>  command-execute                                               60148  99%
>  - call-interactively                                           60148  99%
>   - org-agenda-switch-to                                        59299  98%
>    - org-show-context                                           59299  98%
>     - org-show-set-visibility                                   59299  98%
>      - show-children                                            59170  97%
>       - outline-end-of-subtree                                  35938  59%
>          outline-next-heading                                    9399  15%
>          org-outline-level                                       4047   6%
>       - outline-map-region                                      23168  38%
>        + #<compiled 0xfc19ab>                                    9558  15%
>          outline-next-heading                                    7399  12%
>      + org-up-heading-safe                                        117   0%
>      + org-show-entry                                               4   0%
>      + org-flag-heading                                             4   0%

`show-children' is the culprit.

Could you evaluate the following function and time it again?

  (defun show-children (&optional level)
    (save-excursion
      (org-back-to-heading t)
      (let* ((current-level (funcall outline-level))
             (level (if level (+ (prefix-numeric-value level) current-level)
                      (save-excursion
                        (outline-next-heading)
                        (if (eobp) current-level (funcall outline-level))))))
        (org-map-region
         (lambda ()
           (when (<= (funcall outline-level) level)
             (outline-flag-region (if (bobp) (point) (1- (point)))
                                  (line-end-position)
                                  nil)))
         (point)
         (org-end-of-subtree t t)))))

Thank you.


Regards,

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

* Re: [bug] canonical context not work in 8.3
  2015-08-07  8:45     ` Nicolas Goaziou
@ 2015-08-07 20:27       ` Samuel Wales
  2015-08-08  8:07         ` Nicolas Goaziou
  0 siblings, 1 reply; 11+ messages in thread
From: Samuel Wales @ 2015-08-07 20:27 UTC (permalink / raw)
  To: Samuel Wales, emacs-orgmode

thank you.

i compiled it and tried it.  it seems improved, to maybe 2.5s.

- command-execute                                               17977  99%
 - call-interactively                                           17977  99%
  - org-agenda-switch-to                                        16144  88%
   - org-show-context                                           16142  88%
    - org-show-set-visibility                                   16142  88%
     - show-children                                            16042  88%
      - org-map-region                                          15617  86%
       - #<compiled 0x1220ff9>                                   6905  38%
          org-outline-level                                      1780   9%
        - outline-flag-region                                      12   0%
           remove-overlays                                          4   0%
         outline-next-heading                                    4381  24%
        org-end-of-subtree                                        401   2%
       org-up-heading-safe                                         72   0%
     - org-show-entry                                              16   0%
      + byte-code                                                  16   0%
     + org-flag-heading                                             4   0%
     org-mark-ring-push                                             2   0%
  - #<compiled 0xc259e3>                                         1189   6%
   - org-agenda                                                  1189   6%
    - byte-code                                                  1189   6%
     - org-let                                                   1189   6%
      - eval                                                     1189   6%
       - let                                                     1189   6%
        - org-agenda-list                                        1189   6%
         - byte-code                                             1185   6%
          - org-agenda-prepare                                    625   3%
           - org-agenda-prepare-buffers                           618   3%
            - byte-code                                           618   3%
             + org-refresh-category-properties                    262   1%
             + org-refresh-stats-properties                       184   1%
             + org-set-regexps-and-options                         40   0%
             + org-refresh-effort-properties                       36   0%
               org-refresh-properties                              32   0%
          + byte-code                                             440   2%
          + org-agenda-finalize-entries                           104   0%
          + org-agenda-finalize                                     8   0%
  - org-agenda-next-line                                          287   1%
   - org-agenda-do-context-action                                 273   1%
    - org-display-outline-path                                    273   1%
     + org-get-outline-path                                       241   1%
     + org-unlogged-message                                        24   0%
     + org-format-outline-path                                      8   0%
   + call-interactively                                            13   0%
  + ido-hacks-execute-extended-command                            189   1%


On 8/7/15, Nicolas Goaziou <mail@nicolasgoaziou.fr> wrote:
> Samuel Wales <samologist@gmail.com> writes:
>
>> thank you for fixing.
>>
>> canonical is always what i want, except for occur-tree.
>>
>> i did profiler-start then went to org file a few times to average out
>> the results.  did i use the correct profiler?
>
> You did.
>>
>>  command-execute                                               60148  99%
>>  - call-interactively                                           60148
>> 99%
>>   - org-agenda-switch-to                                        59299
>> 98%
>>    - org-show-context                                           59299
>> 98%
>>     - org-show-set-visibility                                   59299
>> 98%
>>      - show-children                                            59170
>> 97%
>>       - outline-end-of-subtree                                  35938
>> 59%
>>          outline-next-heading                                    9399
>> 15%
>>          org-outline-level                                       4047
>> 6%
>>       - outline-map-region                                      23168
>> 38%
>>        + #<compiled 0xfc19ab>                                    9558
>> 15%
>>          outline-next-heading                                    7399
>> 12%
>>      + org-up-heading-safe                                        117
>> 0%
>>      + org-show-entry                                               4
>> 0%
>>      + org-flag-heading                                             4
>> 0%
>
> `show-children' is the culprit.
>
> Could you evaluate the following function and time it again?
>
>   (defun show-children (&optional level)
>     (save-excursion
>       (org-back-to-heading t)
>       (let* ((current-level (funcall outline-level))
>              (level (if level (+ (prefix-numeric-value level)
> current-level)
>                       (save-excursion
>                         (outline-next-heading)
>                         (if (eobp) current-level (funcall
> outline-level))))))
>         (org-map-region
>          (lambda ()
>            (when (<= (funcall outline-level) level)
>              (outline-flag-region (if (bobp) (point) (1- (point)))
>                                   (line-end-position)
>                                   nil)))
>          (point)
>          (org-end-of-subtree t t)))))
>
> Thank you.
>
>
> Regards,
>


-- 
The Kafka Pandemic: http://thekafkapandemic.blogspot.com

Ramsay's disease DOES progress.  MANY people have died from it.  And
ANYBODY can get it.

Denmark: free Karina Hansen NOW.

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

* Re: [bug] canonical context not work in 8.3
  2015-08-07 20:27       ` Samuel Wales
@ 2015-08-08  8:07         ` Nicolas Goaziou
  2015-08-08  9:19           ` Nicolas Goaziou
  0 siblings, 1 reply; 11+ messages in thread
From: Nicolas Goaziou @ 2015-08-08  8:07 UTC (permalink / raw)
  To: Samuel Wales; +Cc: emacs-orgmode

Samuel Wales <samologist@gmail.com> writes:

> i compiled it and tried it.  it seems improved, to maybe 2.5s.

I think it is as good as it can get. You probably have an awful lot of
children to display.

Anyway, could you provide the same report using an un-compiled Org?
A report using ELP (elp-instrument-package and elp-report) would be nice
too, as it gives the number of times a function is called.

Regards,

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

* Re: [bug] canonical context not work in 8.3
  2015-08-08  8:07         ` Nicolas Goaziou
@ 2015-08-08  9:19           ` Nicolas Goaziou
  2015-08-09 18:53             ` Samuel Wales
  0 siblings, 1 reply; 11+ messages in thread
From: Nicolas Goaziou @ 2015-08-08  9:19 UTC (permalink / raw)
  To: Samuel Wales; +Cc: emacs-orgmode

Correcting myself,

> I think it is as good as it can get. You probably have an awful lot of
> children to display.

This one may improve the situation:

  (defun show-children (&optional level)
    (save-excursion
      (org-back-to-heading t)
      (let* ((current-level (funcall outline-level))
             (level (if level (+ (prefix-numeric-value level) current-level)
                      (save-excursion
                        (outline-next-heading)
                        (if (eobp) current-level (funcall outline-level)))))
             (re (format "^\\*\\{%d,%d\\} +" current-level level))
             (end (save-excursion (org-end-of-subtree t t))))
        (while (re-search-forward re end t)
          (outline-flag-region (line-end-position 0) (line-end-position) nil)))))

Would you mind testing it?


Regards,

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

* Re: [bug] canonical context not work in 8.3
  2015-08-08  9:19           ` Nicolas Goaziou
@ 2015-08-09 18:53             ` Samuel Wales
  2015-08-10 11:39               ` Nicolas Goaziou
  0 siblings, 1 reply; 11+ messages in thread
From: Samuel Wales @ 2015-08-09 18:53 UTC (permalink / raw)
  To: Samuel Wales, emacs-orgmode

thank you.  this version is significantly faster.  qualitatively
improved.

it has a possibly minor bug.

evalled as source:

- command-execute                                                8072  98%
 - call-interactively                                            8072  98%
  - org-agenda-switch-to                                         7595  92%
   - org-show-context                                            7595  92%
    - org-show-set-visibility                                    7595  92%
     - show-children                                             7039  86%
      - save-excursion                                           7015  85%
       - let*                                                    7015  85%
        - while                                                  4832  59%
         - outline-flag-region                                    692   8%
            remove-overlays                                        12   0%
        - save-excursion                                         2179  26%
           org-end-of-subtree                                    2179  26%
        - funcall                                                   4   0%
           org-outline-level                                        4   0%

however, if the next heading has fewer stars, it errors:

Debugger entered--Lisp error: (invalid-regexp "Invalid content of \\{\\}")
  re-search-forward("^\\*\\{27,13\\} +" 2473493 t)
  (while (re-search-forward re end t) (outline-flag-region
(line-end-position 0) (line-end-position) nil))
  (let* ((current-level (funcall outline-level)) (level (if level (+
(prefix-numeric-value level) current-level) (save-excursion
(outline-next-heading) (if (eobp) current-level (funcall
outline-level))))) (re (format "^\\*\\{%d,%d\\} +" current-level
level)) (end (save-excursion (org-end-of-subtree t t)))) (while
(re-search-forward re end t) (outline-flag-region (line-end-position
0) (line-end-position) nil)))
  (save-excursion (org-back-to-heading t) (let* ((current-level
(funcall outline-level)) (level (if level (+ (prefix-numeric-value
level) current-level) (save-excursion (outline-next-heading) (if
(eobp) current-level (funcall outline-level))))) (re (format
"^\\*\\{%d,%d\\} +" current-level level)) (end (save-excursion
(org-end-of-subtree t t)))) (while (re-search-forward re end t)
(outline-flag-region (line-end-position 0) (line-end-position) nil))))
  show-children()
  org-show-set-visibility(canonical)
  org-show-context(agenda)
  org-agenda-switch-to()
  call-interactively(org-agenda-switch-to nil nil)
  command-execute(org-agenda-switch-to)


   (defun show-children (&optional level)
    (save-excursion
      (org-back-to-heading t)
      (let* ((current-level (funcall outline-level))
             (level (if level (+ (prefix-numeric-value level) current-level)
                      (save-excursion
                        (outline-next-heading)
                        (if (eobp) current-level (funcall outline-level)))))
             (re (format "^\\*\\{%d,%d\\} +" current-level level))
             (end (save-excursion (org-end-of-subtree t t))))
        (while (re-search-forward re end t)
          (outline-flag-region (line-end-position 0)
(line-end-position) nil)))))


On 8/8/15, Nicolas Goaziou <mail@nicolasgoaziou.fr> wrote:
> This one may improve the situation:

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

* Re: [bug] canonical context not work in 8.3
  2015-08-09 18:53             ` Samuel Wales
@ 2015-08-10 11:39               ` Nicolas Goaziou
  2015-08-10 18:31                 ` Samuel Wales
  0 siblings, 1 reply; 11+ messages in thread
From: Nicolas Goaziou @ 2015-08-10 11:39 UTC (permalink / raw)
  To: Samuel Wales; +Cc: emacs-orgmode

Samuel Wales <samologist@gmail.com> writes:

> thank you.  this version is significantly faster.  qualitatively
> improved.
>
> it has a possibly minor bug.

Yes, this was a draft anyway. 

I pushed the new function to code base. However, due to the nature of
the change, it landed in master. So it will be available in Org 8.4.

Thank you.

Regards,

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

* Re: [bug] canonical context not work in 8.3
  2015-08-10 11:39               ` Nicolas Goaziou
@ 2015-08-10 18:31                 ` Samuel Wales
  2015-08-10 21:39                   ` Nicolas Goaziou
  0 siblings, 1 reply; 11+ messages in thread
From: Samuel Wales @ 2015-08-10 18:31 UTC (permalink / raw)
  To: Samuel Wales, emacs-orgmode

On 8/10/15, Nicolas Goaziou <mail@nicolasgoaziou.fr> wrote:
> I pushed the new function to code base. However, due to the nature of
> the change, it landed in master. So it will be available in Org 8.4.

thank you.  will it work in 8.3 (maint) if i load it after loading org?

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

* Re: [bug] canonical context not work in 8.3
  2015-08-10 18:31                 ` Samuel Wales
@ 2015-08-10 21:39                   ` Nicolas Goaziou
  0 siblings, 0 replies; 11+ messages in thread
From: Nicolas Goaziou @ 2015-08-10 21:39 UTC (permalink / raw)
  To: Samuel Wales; +Cc: emacs-orgmode

Samuel Wales <samologist@gmail.com> writes:

> On 8/10/15, Nicolas Goaziou <mail@nicolasgoaziou.fr> wrote:
>> I pushed the new function to code base. However, due to the nature of
>> the change, it landed in master. So it will be available in Org 8.4.
>
> thank you.  will it work in 8.3 (maint) if i load it after loading
> org?

If you don't plan to use "outline.el", you can override `show-children'
with the following:

--8<---------------cut here---------------start------------->8---
(defun show-children (&optional level)
  "Show all direct subheadings of this heading.
Prefix arg LEVEL is how many levels below the current level should be shown.
Default is enough to cause the following heading to appear."
  (save-excursion
    (org-back-to-heading t)
    (let* ((current-level (funcall outline-level))
           (max-level (org-get-valid-level
                       current-level (if level (prefix-numeric-value level) 1)))
           (end (save-excursion (org-end-of-subtree t t)))
           (regexp-fmt "^\\*\\{%d,%s\\}\\(?: \\|$\\)")
           (past-first-child nil)
	   ;; Make sure to skip inlinetasks.
           (re (format regexp-fmt
		       current-level
		       (cond
			((not (featurep 'org-inlinetask)) "")
			(org-odd-levels-only (- (* 2 org-inlinetask-min-level)
						3))
			(t (1- org-inlinetask-min-level))))))
      ;; Display parent heading.
      (outline-flag-region (line-end-position 0) (line-end-position) nil)
      (forward-line)
      ;; Display children.  First child may be deeper than expected
      ;; MAX-LEVEL.  Since we want to display it anyway, adjust
      ;; MAX-LEVEL accordingly.
      (while (re-search-forward re end t)
        (unless past-first-child
          (setq re (format regexp-fmt
			   current-level
			   (max (funcall outline-level) max-level)))
          (setq past-first-child t))
        (outline-flag-region (line-end-position 0) (line-end-position) nil)))))
--8<---------------cut here---------------end--------------->8---

However, the patch that landed in master implements `org-show-children'
instead.


Regards,

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

end of thread, other threads:[~2015-08-10 21:38 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-08-06 23:10 [bug] canonical context not work in 8.3 Samuel Wales
2015-08-07  0:16 ` Nicolas Goaziou
2015-08-07  1:38   ` Samuel Wales
2015-08-07  8:45     ` Nicolas Goaziou
2015-08-07 20:27       ` Samuel Wales
2015-08-08  8:07         ` Nicolas Goaziou
2015-08-08  9:19           ` Nicolas Goaziou
2015-08-09 18:53             ` Samuel Wales
2015-08-10 11:39               ` Nicolas Goaziou
2015-08-10 18:31                 ` Samuel Wales
2015-08-10 21:39                   ` Nicolas Goaziou

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).