From: Bastien <bzg@gnu.org>
To: Thomas Morgan <tlm@ziiuu.com>
Cc: emacs-orgmode@gnu.org
Subject: Re: Clock-in in agenda makes some headings with links disappear
Date: Wed, 21 May 2014 17:35:23 +0200 [thread overview]
Message-ID: <87ioozkuv8.fsf@bzg.ath.cx> (raw)
In-Reply-To: <87vbt6l98n.fsf@algol.ziiuu.com> (Thomas Morgan's message of "Thu, 15 May 2014 22:59:04 -0400")
[-- Attachment #1: Type: text/plain, Size: 499 bytes --]
Hi Thomas,
Thomas Morgan <tlm@ziiuu.com> writes:
> Here is a recipe for what might be another manifestation
> of this bug.
Thanks for this new report -- can you apply this patch against maint
and see if it works correctly? Not only for the bug at stake, but all
kind of agenda filtering, rescheduling, clocking, etc.
The tests are pretty weak for the agenda (my bad), and this is quite
a significant rewrite, using text properties instead of overlays for
agenda filtering.
Thanks in advance!
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: org-use-properties-for-agenda-filtering.patch --]
[-- Type: text/x-diff, Size: 6594 bytes --]
diff --git a/lisp/org-agenda.el b/lisp/org-agenda.el
index fe32202..c1a2e1b 100644
--- a/lisp/org-agenda.el
+++ b/lisp/org-agenda.el
@@ -2092,11 +2092,8 @@ When nil, `q' will kill the single agenda buffer."
org-agenda-info
org-agenda-pre-window-conf
org-agenda-columns-active
- org-agenda-tag-filter-overlays
org-agenda-tag-filter
- org-agenda-cat-filter-overlays
org-agenda-category-filter
- org-agenda-re-filter-overlays
org-agenda-regexp-filter
org-agenda-markers
org-agenda-last-search-view-search-was-boolean
@@ -3324,19 +3321,12 @@ If AGENDA-BUFFER-NAME, use this as the buffer name for the agenda to write."
(org-let (if nosettings nil org-agenda-exporter-settings)
'(save-excursion
(save-window-excursion
- (org-agenda-mark-filtered-text)
(let ((bs (copy-sequence (buffer-string))) beg content)
- (org-agenda-unmark-filtered-text)
(with-temp-buffer
(rename-buffer org-agenda-write-buffer-name t)
(set-buffer-modified-p nil)
(insert bs)
(org-agenda-remove-marked-text 'org-filtered)
- (while (setq beg (text-property-any (point-min) (point-max)
- 'org-filtered t))
- (delete-region
- beg (or (next-single-property-change beg 'org-filtered)
- (point-max))))
(run-hooks 'org-agenda-before-write-hook)
(cond
((org-bound-and-true-p org-mobile-creating-agendas)
@@ -3402,28 +3392,6 @@ If AGENDA-BUFFER-NAME, use this as the buffer name for the agenda to write."
org-agenda-buffer-name)))
(when open (org-open-file file)))
-(defvar org-agenda-tag-filter-overlays nil)
-(defvar org-agenda-cat-filter-overlays nil)
-(defvar org-agenda-re-filter-overlays nil)
-
-(defun org-agenda-mark-filtered-text ()
- "Mark all text hidden by filtering with a text property."
- (let ((inhibit-read-only t))
- (mapc
- (lambda (o)
- (when (equal (overlay-buffer o) (current-buffer))
- (put-text-property
- (overlay-start o) (overlay-end o)
- 'org-filtered t)))
- (append org-agenda-tag-filter-overlays
- org-agenda-cat-filter-overlays
- org-agenda-re-filter-overlays))))
-
-(defun org-agenda-unmark-filtered-text ()
- "Remove the filtering text property."
- (let ((inhibit-read-only t))
- (remove-text-properties (point-min) (point-max) '(org-filtered t))))
-
(defun org-agenda-remove-marked-text (property &optional value)
"Delete all text marked with VALUE of PROPERTY.
VALUE defaults to t."
@@ -3432,7 +3400,7 @@ VALUE defaults to t."
(while (setq beg (text-property-any (point-min) (point-max)
property value))
(delete-region
- beg (or (next-single-property-change beg 'org-filtered)
+ beg (or (next-single-property-change beg property)
(point-max))))))
(defun org-agenda-add-entry-text ()
@@ -7400,7 +7368,8 @@ With two prefix arguments, remove the regexp filters."
(when org-agenda-category-filter
(org-agenda-filter-show-all-cat))
(when org-agenda-regexp-filter
- (org-agenda-filter-show-all-re)))
+ (org-agenda-filter-show-all-re))
+ (org-agenda-finalize))
(defun org-agenda-filter-by-tag (strip &optional char narrow)
"Keep only those lines in the agenda buffer that have a specific tag.
@@ -7672,50 +7641,31 @@ When NO-OPERATOR is non-nil, do not add the + operator to returned tags."
(defun org-agenda-filter-hide-line (type)
"Hide lines with TYPE in the agenda buffer."
(let* ((b (max (point-min) (1- (point-at-bol))))
- (e (point-at-eol))
- (ov (make-overlay b e)))
- (overlay-put ov 'invisible t)
- (overlay-put ov 'intangible t)
- (overlay-put ov 'type type)
- (cond ((eq type 'tag) (push ov org-agenda-tag-filter-overlays))
- ((eq type 'category) (push ov org-agenda-cat-filter-overlays))
- ((eq type 'regexp) (push ov org-agenda-re-filter-overlays)))))
-
-(defun org-agenda-fix-tags-filter-overlays-at (&optional pos)
- (setq pos (or pos (point)))
- (save-excursion
- (dolist (ov (overlays-at pos))
- (when (and (overlay-get ov 'invisible)
- (eq (overlay-get ov 'type) 'tag))
- (goto-char pos)
- (if (< (overlay-start ov) (point-at-eol))
- (move-overlay ov (point-at-eol)
- (overlay-end ov)))))))
+ (e (point-at-eol)))
+ (let ((inhibit-read-only t))
+ (add-text-properties
+ b e `(invisible t org-filtered t org-filter-type ,type)))))
-(defun org-agenda-filter-show-all-tag nil
- "Remove tag filter overlays from the agenda buffer."
- (mapc 'delete-overlay org-agenda-tag-filter-overlays)
- (setq org-agenda-tag-filter-overlays nil
- org-agenda-tag-filter nil
- org-agenda-filter-form nil)
+(defun org-agenda-remove-filter (type)
+ (interactive)
+ "Remove filter of type TYPE from the agenda buffer."
+ (goto-char (point-min))
+ (let ((inhibit-read-only t) pos)
+ (while (setq pos (text-property-any (point) (point-max) 'org-filter-type type))
+ (goto-char pos)
+ (remove-text-properties
+ (point) (next-single-property-change (point) 'org-filter-type)
+ `(invisible t org-filter-type ,type))))
+ (set (intern (format "org-agenda-%s-filter" (intern-soft type))) nil)
+ (setq org-agenda-filter-form nil)
(org-agenda-set-mode-name))
+(defun org-agenda-filter-show-all-tag nil
+ (org-agenda-remove-filter 'tag))
(defun org-agenda-filter-show-all-re nil
- "Remove regexp filter overlays from the agenda buffer."
- (mapc 'delete-overlay org-agenda-re-filter-overlays)
- (setq org-agenda-re-filter-overlays nil
- org-agenda-regexp-filter nil
- org-agenda-filter-form nil)
- (org-agenda-set-mode-name))
-
+ (org-agenda-remove-filter 'regexp))
(defun org-agenda-filter-show-all-cat nil
- "Remove category filter overlays from the agenda buffer."
- (mapc 'delete-overlay org-agenda-cat-filter-overlays)
- (setq org-agenda-cat-filter-overlays nil
- org-agenda-filtered-by-category nil
- org-agenda-category-filter nil
- org-agenda-filter-form nil)
- (org-agenda-set-mode-name))
+ (org-agenda-remove-filter 'category))
(defun org-agenda-manipulate-query-add ()
"Manipulate the query by adding a search term with positive selection.
@@ -9180,8 +9130,6 @@ Called with a universal prefix arg, show the priority instead of setting it."
(when (equal marker (org-get-at-bol 'org-marker))
(remove-text-properties (point-at-bol) (point-at-eol) '(display))
(org-move-to-column (- (window-width) (length stamp)) t)
-
- (org-agenda-fix-tags-filter-overlays-at (point))
(if (featurep 'xemacs)
;; Use `duplicable' property to trigger undo recording
(let ((ex (make-extent nil nil))
[-- Attachment #3: Type: text/plain, Size: 14 bytes --]
--
Bastien
next prev parent reply other threads:[~2014-05-21 15:35 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-05-14 7:41 Clock-in in agenda makes some headings with links disappear Thomas Morgan
2014-05-15 9:21 ` Bastien
2014-05-16 2:59 ` Thomas Morgan
2014-05-19 3:29 ` Thomas Morgan
2014-05-21 2:25 ` Bastien
2014-05-21 15:35 ` Bastien [this message]
2014-05-22 10:51 ` Bastien
2014-05-25 9:27 ` Thomas Morgan
2014-05-25 12:52 ` Thomas Morgan
2014-05-25 17:58 ` Thomas Morgan
2014-05-26 13:03 ` Bastien
2014-05-26 13:02 ` 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=87ioozkuv8.fsf@bzg.ath.cx \
--to=bzg@gnu.org \
--cc=emacs-orgmode@gnu.org \
--cc=tlm@ziiuu.com \
/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).