ui/popup: refactor org hacks

This removes a few popup advice functions that are no longer necessary
and changes how we handle org agenda windows (they're now displayed in
the current window, rather than a popup -- see org-agenda-window-setup
to change this).

Other issues addressed:

+ Fixes 'Attempt to delete main window of frame' errors when using
  org-todo from popups (particularly in daemon Emacs).
+ Removed the custom 'popup-window options for org-agenda-window-setup
  and org-src-window-setup, and change them to 'current-window and
  'other-window, respectively.
This commit is contained in:
Henrik Lissner 2019-09-10 14:54:13 -04:00
parent 887bc05478
commit 6f6e30c428
No known key found for this signature in database
GPG key ID: 5F6C0EA160557395
2 changed files with 14 additions and 43 deletions

View file

@ -7,6 +7,8 @@
(unless org-agenda-files (unless org-agenda-files
(setq org-agenda-files (list org-directory))) (setq org-agenda-files (list org-directory)))
(setq-default (setq-default
;; Don't monopolize the whole frame just for the agenda
org-agenda-window-setup 'current-window
;; Hide blocked tasks in the agenda view. ;; Hide blocked tasks in the agenda view.
org-agenda-dim-blocked-tasks 'invisible org-agenda-dim-blocked-tasks 'invisible
org-agenda-inhibit-startup t org-agenda-inhibit-startup t
@ -84,8 +86,9 @@
(defun +org-init-babel-h () (defun +org-init-babel-h ()
(setq org-src-preserve-indentation t ; use native major-mode indentation (setq org-src-preserve-indentation t ; use native major-mode indentation
org-src-tab-acts-natively t org-src-tab-acts-natively t
org-src-window-setup 'current-window org-confirm-babel-evaluate nil ; you don't need my permission
org-confirm-babel-evaluate nil) ; you don't need my permission ;; Show src buffer in popup, and don't monopolize the frame
org-src-window-setup 'other-window)
;; I prefer C-c C-c over C-c ' (more consistent) ;; I prefer C-c C-c over C-c ' (more consistent)
(define-key org-src-mode-map (kbd "C-c C-c") #'org-edit-src-exit) (define-key org-src-mode-map (kbd "C-c C-c") #'org-edit-src-exit)
@ -707,8 +710,8 @@ between the two."
'(("^\\*Org Links" :slot -1 :vslot -1 :size 2 :ttl 0) '(("^\\*Org Links" :slot -1 :vslot -1 :size 2 :ttl 0)
("^\\*\\(?:Agenda Com\\|Calendar\\|Org \\(?:Export Dispatcher\\|Select\\)\\)" ("^\\*\\(?:Agenda Com\\|Calendar\\|Org \\(?:Export Dispatcher\\|Select\\)\\)"
:slot -1 :vslot -1 :size #'+popup-shrink-to-fit :ttl 0) :slot -1 :vslot -1 :size #'+popup-shrink-to-fit :ttl 0)
("^\\*Org Agenda" :size 0.35 :select t :ttl nil) ("^\\*Org Agenda" :ignore t)
("^\\*Org Src" :size 0.3 :quit nil :select t :autosave t :ttl nil) ("^\\*Org Src" :size 0.4 :quit nil :select t :autosave t :modeline t :ttl nil)
("^CAPTURE.*\\.org$" :size 0.2 :quit nil :select t :autosave t)))) ("^CAPTURE.*\\.org$" :size 0.2 :quit nil :select t :autosave t))))

View file

@ -242,8 +242,8 @@ the command buffer."
org-fast-tag-selection org-fast-tag-selection
org-fast-todo-selection) org-fast-todo-selection)
(if +popup-mode (if +popup-mode
(cl-letf (((symbol-function 'delete-other-windows) (cl-letf (((symbol-function #'delete-other-windows)
(symbol-function 'ignore))) (symbol-function #'ignore)))
(apply orig-fn args)) (apply orig-fn args))
(apply orig-fn args))) (apply orig-fn args)))
@ -254,58 +254,26 @@ Ugh, such an ugly hack."
:around '(org-fast-tag-selection :around '(org-fast-tag-selection
org-fast-todo-selection) org-fast-todo-selection)
(if +popup-mode (if +popup-mode
(cl-letf* ((old-fit-buffer-fn (symbol-function 'org-fit-window-to-buffer)) (cl-letf* ((old-fit-buffer-fn (symbol-function #'org-fit-window-to-buffer))
((symbol-function 'org-fit-window-to-buffer) ((symbol-function #'org-fit-window-to-buffer)
(lambda (&optional window max-height min-height shrink-only) (lambda (&optional window max-height min-height shrink-only)
(when-let (buf (window-buffer window)) (when-let (buf (window-buffer window))
(delete-window window) (delete-window window)
(setq window (display-buffer-in-side-window buf nil)) (select-window
(select-window window) (setq window (display-buffer-at-bottom buf nil)))
(with-current-buffer buf (with-current-buffer buf
(setq mode-line-format nil))) (setq mode-line-format nil)))
(funcall old-fit-buffer-fn window max-height min-height shrink-only)))) (funcall old-fit-buffer-fn window max-height min-height shrink-only))))
(apply orig-fn args)) (apply orig-fn args))
(apply orig-fn args))) (apply orig-fn args)))
(defadvice! +popup--org-src-pop-to-buffer-a (orig-fn buffer context)
"Hand off the src-block window to the popup system by using `display-buffer'
instead of switch-to-buffer-*."
:around #'org-src-switch-to-buffer
(if (and (eq org-src-window-setup 'popup-window)
+popup-mode)
(pop-to-buffer buffer)
(funcall orig-fn buffer context)))
(setq org-src-window-setup 'popup-window)
;; Ensure todo, agenda, and other minor popups are delegated to the popup system. ;; Ensure todo, agenda, and other minor popups are delegated to the popup system.
(defadvice! +popup--org-pop-to-buffer-a (orig-fn buf &optional norecord) (defadvice! +popup--org-pop-to-buffer-a (orig-fn buf &optional norecord)
"Use `pop-to-buffer' instead of `switch-to-buffer' to open buffer.'" "Use `pop-to-buffer' instead of `switch-to-buffer' to open buffer.'"
:around #'org-switch-to-buffer-other-window :around #'org-switch-to-buffer-other-window
(if +popup-mode (if +popup-mode
(pop-to-buffer buf nil norecord) (pop-to-buffer buf nil norecord)
(funcall orig-fn buf norecord))) (funcall orig-fn buf norecord))))
;; `org-agenda'
(setq org-agenda-window-setup 'popup-window
org-agenda-restore-windows-after-quit nil)
;; Don't monopolize the frame!
(defadvice! +popup--org-agenda-suppress-delete-other-windows-a (orig-fn &rest args)
:around #'org-agenda-prepare-window
(cond ((not +popup-mode)
(apply orig-fn args))
((eq org-agenda-window-setup 'popup-window)
(let ((org-agenda-window-setup 'other-window)
org-agenda-restore-windows-after-quit)
(cl-letf (((symbol-function 'delete-other-windows)
(symbol-function 'ignore)))
(apply orig-fn args))))
((memq org-agenda-window-setup '(current-window other-window))
(with-popup-rules! nil
(cl-letf (((symbol-function 'delete-other-windows)
(symbol-function 'ignore)))
(apply orig-fn args))))
((with-popup-rules! nil
(apply orig-fn args))))))
;;;###package persp-mode ;;;###package persp-mode