Re: [PATCH] Re: [BUG] org-agenda-remove-restriction-lock does not remove file lock [9.5.2 (release_9.5.2-17-gea6b74 @ /nix/store/iqqk7iqfwmfc6r78xg2knyq7hww2mhs4-emacs-git-20220225.0/share/emacs/29.0.

2022-10-12 Thread Ihor Radchenko
Liu Hui  writes:

> I have added docstrings for related variables except
> `org-agenda-last-dispatch-buffer', which is actually not used by any
> other org-mode code. Please see the patch below.
>
> From 907499f16769e5a5353170c13f09595584530139 Mon Sep 17 00:00:00 2001
> From: Liu Hui 
> Date: Wed, 12 Oct 2022 14:02:05 +0800
> Subject: [PATCH] org-agenda: Make sure file restriction can be removed

Thanks!
Applied onto main.
https://git.savannah.gnu.org/cgit/emacs/org-mode.git/commit/?id=c57b03032380de519bafcf903ca9236668038d4e

I also removed the unused variable
https://git.savannah.gnu.org/cgit/emacs/org-mode.git/commit/?id=416c839c59a6186ca4f6cdd179c628ef49cd6c99

-- 
Ihor Radchenko // yantar92,
Org mode contributor,
Learn more about Org mode at .
Support Org development at ,
or support my work at 



Re: [PATCH] Re: [BUG] org-agenda-remove-restriction-lock does not remove file lock [9.5.2 (release_9.5.2-17-gea6b74 @ /nix/store/iqqk7iqfwmfc6r78xg2knyq7hww2mhs4-emacs-git-20220225.0/share/emacs/29.0.

2022-10-12 Thread Liu Hui

Hi Ihor,

Ihor Radchenko  writes:

> Could you please add docstrings and possibly code comments for
> `org-agenda-restrict', `org-agenda-restrict-begin',
> `org-agenda-restrict-end', `org-agenda-last-dispatch-buffer', and
> possibly other elated variables?

I have added docstrings for related variables except
`org-agenda-last-dispatch-buffer', which is actually not used by any
other org-mode code. Please see the patch below.

>From 907499f16769e5a5353170c13f09595584530139 Mon Sep 17 00:00:00 2001
From: Liu Hui 
Date: Wed, 12 Oct 2022 14:02:05 +0800
Subject: [PATCH] org-agenda: Make sure file restriction can be removed

* lisp/org-agenda.el: (org-agenda-restrict):
(org-agenda-restrict-begin):
(org-agenda-restrict-end):
(org-agenda-overriding-restriction): add docstrings.
(org-agenda):
(org-agenda-set-restriction-lock): Set `org-agenda-restrict' non-nil
during both temporary and extended file restriction.
(org-agenda-remove-restriction-lock): Revert commit df0e96ba4.
* testing/lisp/test-org-agenda.el (test-org-agenda/file-restriction):
Add a test.
---
 lisp/org-agenda.el  | 43 +
 testing/lisp/test-org-agenda.el | 28 +
 2 files changed, 56 insertions(+), 15 deletions(-)

diff --git a/lisp/org-agenda.el b/lisp/org-agenda.el
index 86ed6a5f5..82ca2913a 100644
--- a/lisp/org-agenda.el
+++ b/lisp/org-agenda.el
@@ -2202,7 +2202,17 @@ string that it returns."
 (org-remap org-agenda-mode-map 'move-end-of-line 'org-agenda-end-of-line)
 
 (defvar org-agenda-menu) ; defined later in this file.
-(defvar org-agenda-restrict nil)
+(defvar org-agenda-restrict nil
+  "Non-nil means agenda restriction is active.
+This is an internal flag indicating either temporary or extended
+agenda restriction.  Specifically, it is set to t if the agenda
+is restricted to an entire file, and is set to the corresponding
+buffer if the agenda is restricted to a part of a file, e.g. a
+region or a substree.  In the latter case,
+`org-agenda-restrict-begin' and `org-agenda-restrict-end' are set
+to the beginning and the end of the part.
+
+See also `org-agenda-set-restriction-lock'.")
 (defvar org-agenda-follow-mode nil)
 (defvar org-agenda-entry-text-mode nil)
 (defvar org-agenda-clockreport-mode nil)
@@ -2734,10 +2744,16 @@ that have been changed along."
 
 ;;; Agenda dispatch
 
-(defvar org-agenda-restrict-begin (make-marker))
-(defvar org-agenda-restrict-end (make-marker))
+(defvar org-agenda-restrict-begin (make-marker)
+  "Internal variable used to mark the restriction beginning.
+It is only relevant when `org-agenda-restrict' is a buffer.")
+(defvar org-agenda-restrict-end (make-marker)
+  "Internal variable used to mark the restriction end.
+It is only relevant when `org-agenda-restrict' is a buffer.")
 (defvar org-agenda-last-dispatch-buffer nil)
-(defvar org-agenda-overriding-restriction nil)
+(defvar org-agenda-overriding-restriction nil
+  "Non-nil means extended agenda restriction is active.
+This is an internal flag set by `org-agenda-set-restriction-lock'.")
 
 (defcustom org-agenda-custom-commands-contexts nil
   "Alist of custom agenda keys and contextual rules.
@@ -2962,12 +2978,12 @@ Pressing `<' twice means to restrict to the current subtree or region
 	(move-marker org-agenda-restrict-begin (point))
 	(move-marker org-agenda-restrict-end
 			 (progn (org-end-of-subtree t)
-	 ((and (eq restriction 'buffer)
-	   (or (< 1 (point-min))
-		   (< (point-max) (1+ (buffer-size)
-	  (setq org-agenda-restrict (current-buffer))
-	  (move-marker org-agenda-restrict-begin (point-min))
-	  (move-marker org-agenda-restrict-end (point-max)
+	 ((eq restriction 'buffer)
+  (if (not (buffer-narrowed-p))
+  (setq org-agenda-restrict t)
+(setq org-agenda-restrict (current-buffer))
+	(move-marker org-agenda-restrict-begin (point-min))
+	(move-marker org-agenda-restrict-end (point-max))
 
   ;; For example the todo list should not need it (but does...)
   (cond
@@ -7958,7 +7974,7 @@ subtree."
 	  (message "Locking agenda restriction to subtree"))
   (put 'org-agenda-files 'org-restrict
 	   (list (buffer-file-name (buffer-base-buffer
-  (setq org-agenda-restrict nil)
+  (setq org-agenda-restrict t)
   (setq org-agenda-overriding-restriction 'file)
   (move-marker org-agenda-restrict-begin nil)
   (move-marker org-agenda-restrict-end nil)
@@ -7969,14 +7985,11 @@ subtree."
 (defun org-agenda-remove-restriction-lock ( noupdate)
   "Remove agenda restriction lock."
   (interactive "P")
-  (if (not (or org-agenda-restrict org-agenda-overriding-restriction))
+  (if (not org-agenda-restrict)
   (message "No agenda restriction to remove.")
 (delete-overlay org-agenda-restriction-lock-overlay)
 (delete-overlay org-speedbar-restriction-lock-overlay)
 (setq org-agenda-overriding-restriction nil)
-(unless org-agenda-keep-restricted-file-list
-  ;; There is a request 

Re: [PATCH] Re: [BUG] org-agenda-remove-restriction-lock does not remove file lock [9.5.2 (release_9.5.2-17-gea6b74 @ /nix/store/iqqk7iqfwmfc6r78xg2knyq7hww2mhs4-emacs-git-20220225.0/share/emacs/29.0.

2022-10-10 Thread Ihor Radchenko
Liu Hui  writes:

>> >> C-u C-c C-x < followed by C-c C-x > does not remove the file restriction
>> >> lock.
>> >>
>> >> `org-agenda-remove-restriction-lock' checks for non-nil value of
>> >> `org-agenda-restriction' but `org-agenda-set-restriction-lock' explicitly
>> >> sets it to nil when TYPE is 'file.  Setting `org-agenda-restriction' to
>> >> a dummy value like 'dummy gets the job done.
>> >
>> > Confirmed.
>> >
>> > The fix is attached.
>> > Setting org-agenda-restriction to non-nil appears to be risky since
>> > org-agenda-set-restriction-lock explicitly sets it to nil. So, I use
>> > different approach.
>>
>> Fixed.
>> Applied onto main via df0e96ba4.
>
> File restriction can be also temporarily set by pressing '<' in the
> agenda dispatcher, e.g. pressing 'C-c a < a' in an org-mode file.
> `org-agenda-remove-restriction-lock' still cannot remove the temporary
> file restriction with the fix.
>
> Setting `org-agenda-restrict' to a non-nil value is a straightforward
> way to fixing both cases. The variable is only tested in several
> places and I don't find any problem with the change. Therefore I
> suggest the attached patch, where the value of `org-agenda-restrict'
> is changed from nil to t during temporary and extended file
> restriction.

Thanks for the patch! The main issue with all this restriction business
is that `org-agenda-restrict' and other variables used to save
restriction are not documented at all. One has to check all the
instances of their usage to figure out how things work.

Could you please add docstrings and possibly code comments for
`org-agenda-restrict', `org-agenda-restrict-begin',
`org-agenda-restrict-end', `org-agenda-last-dispatch-buffer', and
possibly other elated variables?

This will make things easier for future maintenance.

-- 
Ihor Radchenko // yantar92,
Org mode contributor,
Learn more about Org mode at .
Support Org development at ,
or support my work at 



Re: [PATCH] Re: [BUG] org-agenda-remove-restriction-lock does not remove file lock [9.5.2 (release_9.5.2-17-gea6b74 @ /nix/store/iqqk7iqfwmfc6r78xg2knyq7hww2mhs4-emacs-git-20220225.0/share/emacs/29.0.

2022-10-09 Thread Liu Hui

Hi Ihor,

> Ihor Radchenko  writes:
>
> > Visuwesh  writes:
> >
> >> C-u C-c C-x < followed by C-c C-x > does not remove the file restriction
> >> lock.
> >>
> >> `org-agenda-remove-restriction-lock' checks for non-nil value of
> >> `org-agenda-restriction' but `org-agenda-set-restriction-lock' explicitly
> >> sets it to nil when TYPE is 'file.  Setting `org-agenda-restriction' to
> >> a dummy value like 'dummy gets the job done.
> >
> > Confirmed.
> >
> > The fix is attached.
> > Setting org-agenda-restriction to non-nil appears to be risky since
> > org-agenda-set-restriction-lock explicitly sets it to nil. So, I use
> > different approach.
>
> Fixed.
> Applied onto main via df0e96ba4.

File restriction can be also temporarily set by pressing '<' in the
agenda dispatcher, e.g. pressing 'C-c a < a' in an org-mode file.
`org-agenda-remove-restriction-lock' still cannot remove the temporary
file restriction with the fix.

Setting `org-agenda-restrict' to a non-nil value is a straightforward
way to fixing both cases. The variable is only tested in several
places and I don't find any problem with the change. Therefore I
suggest the attached patch, where the value of `org-agenda-restrict'
is changed from nil to t during temporary and extended file
restriction.

>From f4e46051fbb13adadbbafeebab343383e1bca35a Mon Sep 17 00:00:00 2001
From: Liu Hui 
Date: Sun, 9 Oct 2022 15:00:50 +0800
Subject: [PATCH] org-agenda: Make sure file restriction can be removed

* lisp/org-agenda.el: (org-agenda):
(org-agenda-set-restriction-lock): Set `org-agenda-restrict' non-nil
during both temporary and extended file restriction.
(org-agenda-remove-restriction-lock): Revert commit df0e96ba4.
* testing/lisp/test-org-agenda.el (test-org-agenda/file-restriction):
Add a test.
---
 lisp/org-agenda.el  | 19 ---
 testing/lisp/test-org-agenda.el | 28 
 2 files changed, 36 insertions(+), 11 deletions(-)

diff --git a/lisp/org-agenda.el b/lisp/org-agenda.el
index 86ed6a5f5..a4f766cd9 100644
--- a/lisp/org-agenda.el
+++ b/lisp/org-agenda.el
@@ -2962,12 +2962,12 @@ Pressing `<' twice means to restrict to the current subtree or region
 	(move-marker org-agenda-restrict-begin (point))
 	(move-marker org-agenda-restrict-end
 			 (progn (org-end-of-subtree t)
-	 ((and (eq restriction 'buffer)
-	   (or (< 1 (point-min))
-		   (< (point-max) (1+ (buffer-size)
-	  (setq org-agenda-restrict (current-buffer))
-	  (move-marker org-agenda-restrict-begin (point-min))
-	  (move-marker org-agenda-restrict-end (point-max)
+	 ((eq restriction 'buffer)
+  (if (not (buffer-narrowed-p))
+  (setq org-agenda-restrict t)
+(setq org-agenda-restrict (current-buffer))
+	(move-marker org-agenda-restrict-begin (point-min))
+	(move-marker org-agenda-restrict-end (point-max))

   ;; For example the todo list should not need it (but does...)
   (cond
@@ -7958,7 +7958,7 @@ subtree."
 	  (message "Locking agenda restriction to subtree"))
   (put 'org-agenda-files 'org-restrict
 	   (list (buffer-file-name (buffer-base-buffer
-  (setq org-agenda-restrict nil)
+  (setq org-agenda-restrict t)
   (setq org-agenda-overriding-restriction 'file)
   (move-marker org-agenda-restrict-begin nil)
   (move-marker org-agenda-restrict-end nil)
@@ -7969,14 +7969,11 @@ subtree."
 (defun org-agenda-remove-restriction-lock ( noupdate)
   "Remove agenda restriction lock."
   (interactive "P")
-  (if (not (or org-agenda-restrict org-agenda-overriding-restriction))
+  (if (not org-agenda-restrict)
   (message "No agenda restriction to remove.")
 (delete-overlay org-agenda-restriction-lock-overlay)
 (delete-overlay org-speedbar-restriction-lock-overlay)
 (setq org-agenda-overriding-restriction nil)
-(unless org-agenda-keep-restricted-file-list
-  ;; There is a request to keep the file list in place
-  (put 'org-agenda-files 'org-restrict nil))
 (setq org-agenda-restrict nil)
 (put 'org-agenda-files 'org-restrict nil)
 (move-marker org-agenda-restrict-begin nil)
diff --git a/testing/lisp/test-org-agenda.el b/testing/lisp/test-org-agenda.el
index 256f701df..bd96163e9 100644
--- a/testing/lisp/test-org-agenda.el
+++ b/testing/lisp/test-org-agenda.el
@@ -255,6 +255,34 @@ See https://list.orgmode.org/06d301d83d9e$f8b44340$ea1cc9c0$@tomdavey.com;
   (get-text-property (point) 'day
 (org-test-agenda--kill-all-agendas)))

+(ert-deftest test-org-agenda/file-restriction ()
+  "Test file restriction for org agenda."
+  (org-test-with-temp-text-in-file "* TODO Foo"
+(org-agenda-set-restriction-lock t)
+(org-agenda nil "t")
+(should (search-forward "Foo"))
+(should (org-agenda-files))
+(should-not (org-agenda-files t))
+(org-agenda-remove-restriction-lock)
+(goto-char (point-min))
+(should-not (search-forward "Foo" nil t))
+(should-not (org-agenda-files)))
+  

Re: [PATCH] Re: [BUG] org-agenda-remove-restriction-lock does not remove file lock [9.5.2 (release_9.5.2-17-gea6b74 @ /nix/store/iqqk7iqfwmfc6r78xg2knyq7hww2mhs4-emacs-git-20220225.0/share/emacs/29.0.

2022-07-17 Thread Ihor Radchenko
Ihor Radchenko  writes:

> Visuwesh  writes:
>
>> C-u C-c C-x < followed by C-c C-x > does not remove the file restriction
>> lock.  
>>
>> `org-agenda-remove-restriction-lock' checks for non-nil value of
>> `org-agenda-restriction' but `org-agenda-set-restriction-lock' explicitly
>> sets it to nil when TYPE is 'file.  Setting `org-agenda-restriction' to
>> a dummy value like 'dummy gets the job done.
>
> Confirmed.
>
> The fix is attached.
> Setting org-agenda-restriction to non-nil appears to be risky since
> org-agenda-set-restriction-lock explicitly sets it to nil. So, I use
> different approach.

Fixed.
Applied onto main via df0e96ba4.

Best,
Ihor