mirror of https://github.com/djcb/mu.git
mu4e-draft/window: handle buffer display in mu4e-window
Handle buffer display where all mu4e's buffer display is done: in mu4e-window.el. Avoid overly long lines in mu4e-window.el.
This commit is contained in:
parent
813ce795ff
commit
a9b78718b2
|
@ -635,7 +635,9 @@ Optionally, PARENT is the message parent or nil. For compose-type
|
|||
`reply' and `forward' we require a PARENT; for the other compose
|
||||
it must be nil.
|
||||
|
||||
After this, user is presented with a message composition buffer."
|
||||
After this, user is presented with a message composition buffer.
|
||||
|
||||
Returns the new buffer."
|
||||
(mu4e--prepare-draft parent)
|
||||
;; evaluate BODY; this must yield a hidden, live buffer. This is evaluated in
|
||||
;; a temp buffer with contains the parent-message, if any. if there's a
|
||||
|
@ -647,11 +649,14 @@ After this, user is presented with a message composition buffer."
|
|||
;; interference.
|
||||
(setq draft-buffer (mu4e--validate-hidden-buffer (funcall compose-func)))
|
||||
(with-current-buffer draft-buffer
|
||||
;; we have our basic buffer; turn it into a full mu4e composition buffer.
|
||||
;; we have our basic buffer; turn it into a full mu4e composition
|
||||
;; buffer.
|
||||
(mu4e--prepare-draft-buffer compose-type parent)))
|
||||
;; we're ready for composition; let's display it in the way user configured
|
||||
;; things.
|
||||
(mu4e-display-buffer draft-buffer 'do-select)
|
||||
;; things: directly through display buffer (via pop-t or otherwise through mu4e-window.
|
||||
(if (eq mu4e-compose-switch 'display-buffer)
|
||||
(pop-to-buffer draft-buffer)
|
||||
(mu4e-display-buffer draft-buffer 'do-select))
|
||||
;; prepare possible message actions (such as cleaning-up)
|
||||
(mu4e--prepare-message-actions oldframe)
|
||||
draft-buffer))
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
;;; mu4e-window.el --- Window management -*- lexical-binding: t; -*-
|
||||
|
||||
;; Copyright (C) 2022 Mickey Petersen
|
||||
;; Copyright (C) 2023-2024 Dirk-Jan C. Binnema
|
||||
|
||||
;; Author: Mickey Petersen <mickey@masteringemacs.org>
|
||||
;; Keywords: mail
|
||||
|
@ -33,7 +34,6 @@
|
|||
(defvar mu4e-embedded-buffer-name " *mu4e-embedded*"
|
||||
"Name for the embedded message view buffer.")
|
||||
|
||||
|
||||
;; Buffer names for public use
|
||||
|
||||
(defvar mu4e-headers-buffer-name "*mu4e-headers*"
|
||||
|
@ -89,6 +89,20 @@ vertical split-view."
|
|||
:type 'integer
|
||||
:group 'mu4e-headers)
|
||||
|
||||
(defcustom mu4e-compose-switch nil
|
||||
"Where to display the new message?
|
||||
A symbol:
|
||||
- nil : default (new buffer)
|
||||
- window : compose in new window
|
||||
- frame or t : compose in new frame
|
||||
- display-buffer: use `display-buffer' / `display-buffer-alist'
|
||||
(for fine-tuning).
|
||||
|
||||
For backward compatibility with `mu4e-compose-in-new-frame', t is
|
||||
treated as =\\'frame."
|
||||
:type 'symbol
|
||||
:group 'mu4e-compose)
|
||||
|
||||
(declare-function mu4e-view-mode "mu4e-view")
|
||||
(declare-function mu4e-error "mu4e-helpers")
|
||||
(declare-function mu4e-warn "mu4e-helpers")
|
||||
|
@ -196,20 +210,24 @@ being created if CREATE is non-nil."
|
|||
(let ((buffer)
|
||||
;; If `mu4e-view-buffer-name-func' is non-nil, then use that
|
||||
;; to source the name of the view buffer to create or re-use.
|
||||
(buffer-name (or (and mu4e-view-buffer-name-func
|
||||
(funcall mu4e-view-buffer-name-func headers-buffer))
|
||||
;; If the variable is nil, use the default
|
||||
;; name
|
||||
mu4e-view-buffer-name))
|
||||
(buffer-name
|
||||
(or (and mu4e-view-buffer-name-func
|
||||
(funcall mu4e-view-buffer-name-func headers-buffer))
|
||||
;; If the variable is nil, use the default
|
||||
;; name
|
||||
mu4e-view-buffer-name))
|
||||
;; Search all view buffers and return those that are linked to
|
||||
;; `headers-buffer'.
|
||||
(linked-buffer (mu4e-get-view-buffers
|
||||
(lambda (buf)
|
||||
(and (mu4e--buffer-local-boundp 'mu4e-linked-headers-buffer buf)
|
||||
(eq mu4e-linked-headers-buffer headers-buffer))))))
|
||||
;; If such a linked buffer exists and its buffer is live, we use that buffer.
|
||||
(linked-buffer
|
||||
(mu4e-get-view-buffers
|
||||
(lambda (buf)
|
||||
(and (mu4e--buffer-local-boundp 'mu4e-linked-headers-buffer buf)
|
||||
(eq mu4e-linked-headers-buffer headers-buffer))))))
|
||||
;; If such a linked buffer exists and its buffer is live, we use that
|
||||
;; buffer.
|
||||
(if (and linked-buffer (buffer-live-p (car linked-buffer)))
|
||||
;; NOTE: It's possible for there to be more than one linked view buffer.
|
||||
;; NOTE: It's possible for there to be more than one linked view
|
||||
;; buffer.
|
||||
;;
|
||||
;; What, if anything, should the heuristic be to pick the
|
||||
;; one to use? Presently `car' is used, but there are better
|
||||
|
@ -274,8 +292,10 @@ for BUFFER-OR-NAME to be displayed in."
|
|||
(setq mu4e-split-view 'horizontal))
|
||||
|
||||
(let* ((buffer-name (or (get-buffer buffer-or-name)
|
||||
(mu4e-error "Buffer `%s' does not exist" buffer-or-name)))
|
||||
(buffer-type (with-current-buffer buffer-name (mu4e--get-current-buffer-type)))
|
||||
(mu4e-error "Buffer `%s' does not exist"
|
||||
buffer-or-name)))
|
||||
(buffer-type
|
||||
(with-current-buffer buffer-name (mu4e--get-current-buffer-type)))
|
||||
(direction (cons 'direction
|
||||
(pcase (cons buffer-type mu4e-split-view)
|
||||
;; views or headers can display
|
||||
|
@ -289,19 +309,34 @@ for BUFFER-OR-NAME to be displayed in."
|
|||
;; views or headers can display
|
||||
;; horz/vert depending on the value of
|
||||
;; `mu4e-split-view'
|
||||
('(view . horizontal) '((window-height . shrink-window-if-larger-than-buffer)))
|
||||
('(view . vertical) '((window-min-width . fit-window-to-buffer)))
|
||||
('(view . horizontal)
|
||||
'((window-height . shrink-window-if-larger-than-buffer)))
|
||||
('(view . vertical)
|
||||
'((window-min-width . fit-window-to-buffer)))
|
||||
(`(,_ . t) nil)))
|
||||
(window-action (cond
|
||||
((eq buffer-type 'main) '(display-buffer-reuse-window
|
||||
display-buffer-reuse-mode-window
|
||||
display-buffer-full-frame))
|
||||
((memq buffer-type '(headers compose))
|
||||
;; main-buffer
|
||||
((eq buffer-type 'main)
|
||||
'(display-buffer-reuse-window
|
||||
display-buffer-reuse-mode-window
|
||||
display-buffer-full-frame))
|
||||
;; compose-buffer
|
||||
((eq buffer-type 'compose)
|
||||
(pcase mu4e-compose-switch
|
||||
('window #'display-buffer-pop-up-window)
|
||||
((or 'frame 't) #'display-buffer-pop-up-frame)
|
||||
(_ '(display-buffer-reuse-window
|
||||
display-buffer-reuse-mode-window
|
||||
display-buffer-same-window))))
|
||||
;; headers buffer
|
||||
((memq buffer-type '(headers))
|
||||
'(display-buffer-reuse-window
|
||||
display-buffer-reuse-mode-window
|
||||
display-buffer-same-window))
|
||||
|
||||
((memq mu4e-split-view '(horizontal vertical))
|
||||
'(display-buffer-in-direction))
|
||||
|
||||
((memq mu4e-split-view '(single-window))
|
||||
'(display-buffer-reuse-window
|
||||
display-buffer-reuse-mode-window
|
||||
|
@ -314,8 +349,7 @@ for BUFFER-OR-NAME to be displayed in."
|
|||
display-buffer-same-window))))
|
||||
(arg `((,@window-action)
|
||||
,@window-size
|
||||
,direction
|
||||
)))
|
||||
,direction)))
|
||||
(funcall (if select #'pop-to-buffer #'display-buffer)
|
||||
buffer-name
|
||||
arg)))
|
||||
|
@ -339,11 +373,11 @@ This function is best called from the hook
|
|||
;; cause for error.
|
||||
(ignore-errors
|
||||
(cond ((eq mu4e-split-view 'vertical)
|
||||
(window-resize win (- mu4e-headers-visible-columns (window-width win nil))
|
||||
(window-resize win (- mu4e-headers-visible-columns
|
||||
(window-width win nil))
|
||||
t t nil))
|
||||
((eq mu4e-split-view 'horizontal)
|
||||
(set-window-text-height win mu4e-headers-visible-lines))))))
|
||||
|
||||
|
||||
(provide 'mu4e-window)
|
||||
;;; mu4e-window.el ends here
|
||||
|
|
Loading…
Reference in New Issue