Let `org-agenda-set-restriction-lock' remove restriction at point

* lisp/org-compat.el (org-speedbar-set-agenda-restriction):
* lisp/org-agenda.el (org-agenda-set-restriction-lock):
If there is an agenda restriction at point, remove it.

* doc/org-manual.org:
* etc/ORG-NEWS: Document the new feature.
This commit is contained in:
Bastien 2018-04-28 12:09:56 +02:00
parent bc37b32580
commit 011f1c6181
4 changed files with 72 additions and 51 deletions

View File

@ -8338,20 +8338,20 @@ scope for an extended period, use the following commands:
#+kindex: C-c C-x <
#+findex: org-agenda-set-restriction-lock
Permanently restrict the agenda to the current subtree. When
called with a prefix argument, or with the cursor before the
first headline in a file, set the agenda scope to the entire
file. This restriction remains in effect until removed with
{{{kbd(C-c C-x >)}}}, or by typing either {{{kbd(<)}}} or
{{{kbd(>)}}} in the agenda dispatcher. If there is a window
displaying an agenda view, the new restriction takes effect
immediately.
Restrict the agenda to the current subtree. If there already is
a restriction at point, remove it. When called with a universal
prefix argument or with the cursor before the first headline in a
file, set the agenda scope to the entire file. This restriction
remains in effect until removed with {{{kbd(C-c C-x >)}}}, or by typing
either {{{kbd(<)}}} or {{{kbd(>)}}} in the agenda dispatcher. If there is a
window displaying an agenda view, the new restriction takes
effect immediately.
- {{{kbd(C-c C-x >)}}} (~org-agenda-remove-restriction-lock~) ::
#+kindex: C-c C-x >
#+findex: org-agenda-remove-restriction-lock
Remove the permanent restriction created by {{{kbd(C-c C-x <)}}}.
Remove the restriction created by {{{kbd(C-c C-x <)}}}.
#+texinfo: @noindent
When working with =speedbar.el=, you can use the following commands in
@ -8360,15 +8360,16 @@ the Speedbar frame:
- {{{kbd(<)}}} (~org-speedbar-set-agenda-restriction~) ::
#+findex: org-speedbar-set-agenda-restriction
Permanently restrict the agenda to the item---either an Org file
or a subtree in such a file---at the cursor in the Speedbar
frame. If there is a window displaying an agenda view, the new
restriction takes effect immediately.
Restrict the agenda to the item---either an Org file or a subtree
in such a file---at the cursor in the Speedbar frame. If agenda
is already restricted there, remove the restriction. If there is
a window displaying an agenda view, the new restriction takes
effect immediately.
- {{{kbd(>)}}} (~org-agenda-remove-restriction-lock~) ::
#+findex: org-agenda-remove-restriction-lock
Lift the restriction.
Remove the restriction.
** The Agenda Dispatcher
:PROPERTIES:

View File

@ -298,6 +298,13 @@ parameters. See example bellow.
,#+END_SRC
#+END_SRC
*** ~org-agenda-set-restriction-lock~ toggle agenda restriction at point
You can set an agenda restriction lock with =C-x C-x <= or with =<= at the
beginning of a headline when using Org speed commands. Now, if there
is already a restriction at point, hitting =<= again (or =C-x C-x <=) will
remove it.
** New functions
*** ~org-insert-structure-template~

View File

@ -7124,43 +7124,50 @@ Argument ARG is the prefix argument."
;;;###autoload
(defun org-agenda-set-restriction-lock (&optional type)
"Set restriction lock for agenda, to current subtree or file.
Restriction will be the file if TYPE is `file', or if type is the
universal prefix \\='(4), or if the cursor is before the first headline
in the file. Otherwise, restriction will be to the current subtree."
"Set restriction lock for agenda to current subtree or file.
When in a restricted subtree, remove it.
The restriction will span over the entire file if TYPE is `file',
or if type is '(4), or if the cursor is before the first headline
in the file. Otherwise, only apply the restriction to the current
subtree."
(interactive "P")
(org-agenda-remove-restriction-lock 'noupdate)
(and (equal type '(4)) (setq type 'file))
(setq type (cond
(type type)
((org-at-heading-p) 'subtree)
((condition-case nil (org-back-to-heading t) (error nil))
'subtree)
(t 'file)))
(if (eq type 'subtree)
(progn
(setq org-agenda-restrict (current-buffer))
(setq org-agenda-overriding-restriction 'subtree)
(put 'org-agenda-files 'org-restrict
(list (buffer-file-name (buffer-base-buffer))))
(org-back-to-heading t)
(move-overlay org-agenda-restriction-lock-overlay
(point)
(if org-agenda-restriction-lock-highlight-subtree
(save-excursion (org-end-of-subtree t t) (point))
(point-at-eol)))
(move-marker org-agenda-restrict-begin (point))
(move-marker org-agenda-restrict-end
(save-excursion (org-end-of-subtree t t)))
(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-overriding-restriction 'file)
(move-marker org-agenda-restrict-begin nil)
(move-marker org-agenda-restrict-end nil)
(message "Locking agenda restriction to file"))
(setq current-prefix-arg nil)
(if (and org-agenda-overriding-restriction
(member org-agenda-restriction-lock-overlay
(overlays-at (point))))
(org-agenda-remove-restriction-lock 'noupdate)
(org-agenda-remove-restriction-lock 'noupdate)
(and (equal type '(4)) (setq type 'file))
(setq type (cond
(type type)
((org-at-heading-p) 'subtree)
((condition-case nil (org-back-to-heading t) (error nil))
'subtree)
(t 'file)))
(if (eq type 'subtree)
(progn
(setq org-agenda-restrict (current-buffer))
(setq org-agenda-overriding-restriction 'subtree)
(put 'org-agenda-files 'org-restrict
(list (buffer-file-name (buffer-base-buffer))))
(org-back-to-heading t)
(move-overlay org-agenda-restriction-lock-overlay
(point)
(if org-agenda-restriction-lock-highlight-subtree
(save-excursion (org-end-of-subtree t t) (point))
(point-at-eol)))
(move-marker org-agenda-restrict-begin (point))
(move-marker org-agenda-restrict-end
(save-excursion (org-end-of-subtree t t)))
(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-overriding-restriction 'file)
(move-marker org-agenda-restrict-begin nil)
(move-marker org-agenda-restrict-end nil)
(message "Locking agenda restriction to file"))
(setq current-prefix-arg nil))
(org-agenda-maybe-redo))
(defun org-agenda-remove-restriction-lock (&optional noupdate)

View File

@ -688,6 +688,8 @@ This also applied for speedbar access."
(defun org-speedbar-set-agenda-restriction ()
"Restrict future agenda commands to the location at point in speedbar.
If there is already a restriction lock at the location, remove it.
To get rid of the restriction, use `\\[org-agenda-remove-restriction-lock]'."
(interactive)
(require 'org-agenda)
@ -698,7 +700,11 @@ To get rid of the restriction, use `\\[org-agenda-remove-restriction-lock]'."
(setq m (get-text-property p 'org-imenu-marker))
(with-current-buffer (marker-buffer m)
(goto-char m)
(org-agenda-set-restriction-lock 'subtree)))
(if (and org-agenda-overriding-restriction
(member org-agenda-restriction-lock-overlay
(overlays-at (point))))
(org-agenda-remove-restriction-lock 'noupdate)
(org-agenda-set-restriction-lock 'subtree))))
((setq p (text-property-any (point-at-bol) (point-at-eol)
'speedbar-function 'speedbar-find-file))
(setq tp (previous-single-property-change