[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [patch suggestion] Mitigating the poor Emacs performance on huge org
From: |
Nicolas Goaziou |
Subject: |
Re: [patch suggestion] Mitigating the poor Emacs performance on huge org files: Do not use overlays for PROPERTY and LOGBOOK drawers |
Date: |
Fri, 08 May 2020 18:38:19 +0200 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/26.3 (gnu/linux) |
Hello,
Ihor Radchenko <address@hidden> writes:
> ;; Unfortunately isearch, sets inhibit-point-motion-hooks and we
> ;; cannot even use cursor-sensor-functions as a workaround
> ;; I used a less ideas approach with advice to isearch-search-string as
> ;; a workaround
OK.
> (defun org-find-text-property-region (pos prop)
> "Find a region containing PROP text property around point POS."
> (require 'org-macs) ;; org-with-point-at
> (org-with-point-at pos
Do we really need that since every function has a POS argument anyway?
Is it for the `widen' part?
> (let* ((beg (and (get-text-property pos prop) pos))
> (end beg))
> (when beg
> (setq beg (or (previous-single-property-change pos prop)
> beg))
Shouldn't fall-back be (point-min)?
> (setq end (or (next-single-property-change pos prop)
> end))
And (point-max) here?
> (unless (equal beg end)
Nitpick: `equal' -> =
> (cons beg end))))))
> ;; :FIXME: re-hide properties when point moves away
> (define-advice isearch-search-string (:after (&rest _) put-overlay)
> "Reveal hidden text at point."
> (when-let ((region (org-find-text-property-region (point) 'invisible)))
> (with-silent-modifications
> (put-text-property (car region) (cdr region) 'org-invisible
> (get-text-property (point) 'invisible)))
> (remove-text-properties (car region) (cdr region) '(invisible nil))))
Could we use `isearch-update-post-hook' here?
Or, it seems nicer to `add-function' around `isearch-filter-predicate'
and extend isearch-filter-visible to support (i.e., stop at, and
display) invisible text through text properties.
> ;; this seems to be unstable, but I cannot figure out why
> (defun org-restore-invisibility-specs (&rest _)
> ""
> (let ((pos (point-min)))
> (while (< (setq pos (next-single-property-change pos 'org-invisible nil
> (point-max))) (point-max))
> (when-let ((region (org-find-text-property-region pos 'org-invisible)))
> (with-silent-modifications
> (put-text-property (car region) (cdr region) 'invisible
> (get-text-property pos 'org-invisible))
> (remove-text-properties (car region) (cdr region) '(org-invisible
> nil)))))))
Could you use the hook above to store all visited invisible texts, and
re-hide them at the end of the search, e.g., using
`isearch-mode-end-hook'?
> (add-hook 'post-command-hook #'org-restore-invisibility-specs)
Ouch. I hope we can avoid that.
I wonder how it compares to drawers using the same invisible spec as
headlines, as it was the case before. Could you give it a try?
I think hiding all property drawers right after opening a subtree is
fast enough.
Another option, as I already suggested, would be to use text-properties
on property drawers only. Ignoring isearch inside those sounds
tolerable, at least.
Regards,
--
Nicolas Goaziou
- Re: [patch suggestion] Mitigating the poor Emacs performance on huge org files: Do not use overlays for PROPERTY and LOGBOOK drawers, Karl Voit, 2020/05/04
- Re: [patch suggestion] Mitigating the poor Emacs performance on huge org files: Do not use overlays for PROPERTY and LOGBOOK drawers, Christian Heinrich, 2020/05/07
- Re: [patch suggestion] Mitigating the poor Emacs performance on huge org files: Do not use overlays for PROPERTY and LOGBOOK drawers,
Nicolas Goaziou <=
- Re: [patch suggestion] Mitigating the poor Emacs performance on huge org files: Do not use overlays for PROPERTY and LOGBOOK drawers, Nicolas Goaziou, 2020/05/09
- Re: [patch suggestion] Mitigating the poor Emacs performance on huge org files: Do not use overlays for PROPERTY and LOGBOOK drawers, Ihor Radchenko, 2020/05/09
- Re: [patch suggestion] Mitigating the poor Emacs performance on huge org files: Do not use overlays for PROPERTY and LOGBOOK drawers, Nicolas Goaziou, 2020/05/09
- Re: [patch suggestion] Mitigating the poor Emacs performance on huge org files: Do not use overlays for PROPERTY and LOGBOOK drawers, Ihor Radchenko, 2020/05/10
- Re: [patch suggestion] Mitigating the poor Emacs performance on huge org files: Do not use overlays for PROPERTY and LOGBOOK drawers, Nicolas Goaziou, 2020/05/10
- Re: [patch suggestion] Mitigating the poor Emacs performance on huge org files: Do not use overlays for PROPERTY and LOGBOOK drawers, Ihor Radchenko, 2020/05/10
- Re: [patch suggestion] Mitigating the poor Emacs performance on huge org files: Do not use overlays for PROPERTY and LOGBOOK drawers, Nicolas Goaziou, 2020/05/10
- Re: [patch suggestion] Mitigating the poor Emacs performance on huge org files: Do not use overlays for PROPERTY and LOGBOOK drawers, Ihor Radchenko, 2020/05/10
- Re: [patch suggestion] Mitigating the poor Emacs performance on huge org files: Do not use overlays for PROPERTY and LOGBOOK drawers, Nicolas Goaziou, 2020/05/10
- Re: [patch suggestion] Mitigating the poor Emacs performance on huge org files: Do not use overlays for PROPERTY and LOGBOOK drawers, Ihor Radchenko, 2020/05/10