Add other-tab option for org-agenda-window-setup

* org-agenda.el (org-agenda-prepare-window, org-agenda--quit): Handle
other-tab option for agenda view creation and exit.
This commit is contained in:
Eric S Fraga 2020-08-26 17:17:42 +01:00 committed by Kyle Meyer
parent 632ceabb14
commit e8ebf5d6c9
2 changed files with 27 additions and 6 deletions

View File

@ -291,6 +291,12 @@ possible via column view value edit or with =<C-c C-q>=.
Counterpart of ~org-show-entry~. Counterpart of ~org-show-entry~.
** New options ** New options
*** New option for using tabs in ~org-agenda-window-setup~
Choosing ~other-tab~ for ~org-agenda-window-setup~ will open the
agenda view in a new tab. This will work with versions of Emacs since
27.1 when ~tab-bar-mode~ was introduced.
*** New option ~org-clock-auto-clockout-timer~ *** New option ~org-clock-auto-clockout-timer~
When this option is set to a number and the user configuration When this option is set to a number and the user configuration

View File

@ -1100,14 +1100,21 @@ reorganize-frame Show only two windows on the current frame, the current
window and the agenda. window and the agenda.
other-frame Use `switch-to-buffer-other-frame' to display agenda. other-frame Use `switch-to-buffer-other-frame' to display agenda.
Also, when exiting the agenda, kill that frame. Also, when exiting the agenda, kill that frame.
other-tab Use `switch-to-buffer-other-tab' to display the
agenda, making use of the `tab-bar-mode' introduced
in Emacs version 27.1. Also, kill that tab when
exiting the agenda view.
See also the variable `org-agenda-restore-windows-after-quit'." See also the variable `org-agenda-restore-windows-after-quit'."
:group 'org-agenda-windows :group 'org-agenda-windows
:type '(choice :type '(choice
(const current-window) (const current-window)
(const other-frame) (const other-frame)
(const other-tab)
(const other-window) (const other-window)
(const only-window) (const only-window)
(const reorganize-frame))) (const reorganize-frame))
:package-version '(Org . "9.4"))
(defcustom org-agenda-window-frame-fractions '(0.5 . 0.75) (defcustom org-agenda-window-frame-fractions '(0.5 . 0.75)
"The min and max height of the agenda window as a fraction of frame height. "The min and max height of the agenda window as a fraction of frame height.
@ -1118,11 +1125,11 @@ It only matters if `org-agenda-window-setup' is `reorganize-frame'."
(defcustom org-agenda-restore-windows-after-quit nil (defcustom org-agenda-restore-windows-after-quit nil
"Non-nil means restore window configuration upon exiting agenda. "Non-nil means restore window configuration upon exiting agenda.
Before the window configuration is changed for displaying the agenda, Before the window configuration is changed for displaying the
the current status is recorded. When the agenda is exited with agenda, the current status is recorded. When the agenda is
`q' or `x' and this option is set, the old state is restored. If exited with `q' or `x' and this option is set, the old state is
`org-agenda-window-setup' is `other-frame', the value of this restored. If `org-agenda-window-setup' is `other-frame' or
option will be ignored." `other-tab', the value of this option will be ignored."
:group 'org-agenda-windows :group 'org-agenda-windows
:type 'boolean) :type 'boolean)
@ -3769,6 +3776,10 @@ FILTER-ALIST is an alist of filters we need to apply when
(org-switch-to-buffer-other-window abuf)) (org-switch-to-buffer-other-window abuf))
((eq org-agenda-window-setup 'other-frame) ((eq org-agenda-window-setup 'other-frame)
(switch-to-buffer-other-frame abuf)) (switch-to-buffer-other-frame abuf))
((eq org-agenda-window-setup 'other-tab)
(if (fboundp 'switch-to-buffer-other-tab)
(switch-to-buffer-other-tab abuf)
(user-error "Your version of Emacs does not have tab bar support")))
((eq org-agenda-window-setup 'only-window) ((eq org-agenda-window-setup 'only-window)
(delete-other-windows) (delete-other-windows)
(pop-to-buffer-same-window abuf)) (pop-to-buffer-same-window abuf))
@ -7389,6 +7400,10 @@ agenda."
(cond (cond
((eq org-agenda-window-setup 'other-frame) ((eq org-agenda-window-setup 'other-frame)
(delete-frame)) (delete-frame))
((eq org-agenda-window-setup 'other-tab)
(if (fboundp 'tab-bar-close-tab)
(tab-bar-close-tab)
(user-error "Your version of Emacs does not have tab bar mode support")))
((and org-agenda-restore-windows-after-quit ((and org-agenda-restore-windows-after-quit
wconf) wconf)
;; Maybe restore the pre-agenda window configuration. Reset ;; Maybe restore the pre-agenda window configuration. Reset