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
|
`reply' and `forward' we require a PARENT; for the other compose
|
||||||
it must be nil.
|
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)
|
(mu4e--prepare-draft parent)
|
||||||
;; evaluate BODY; this must yield a hidden, live buffer. This is evaluated in
|
;; 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
|
;; 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.
|
;; interference.
|
||||||
(setq draft-buffer (mu4e--validate-hidden-buffer (funcall compose-func)))
|
(setq draft-buffer (mu4e--validate-hidden-buffer (funcall compose-func)))
|
||||||
(with-current-buffer draft-buffer
|
(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)))
|
(mu4e--prepare-draft-buffer compose-type parent)))
|
||||||
;; we're ready for composition; let's display it in the way user configured
|
;; we're ready for composition; let's display it in the way user configured
|
||||||
;; things.
|
;; things: directly through display buffer (via pop-t or otherwise through mu4e-window.
|
||||||
(mu4e-display-buffer draft-buffer 'do-select)
|
(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)
|
;; prepare possible message actions (such as cleaning-up)
|
||||||
(mu4e--prepare-message-actions oldframe)
|
(mu4e--prepare-message-actions oldframe)
|
||||||
draft-buffer))
|
draft-buffer))
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
;;; mu4e-window.el --- Window management -*- lexical-binding: t; -*-
|
;;; mu4e-window.el --- Window management -*- lexical-binding: t; -*-
|
||||||
|
|
||||||
;; Copyright (C) 2022 Mickey Petersen
|
;; Copyright (C) 2022 Mickey Petersen
|
||||||
|
;; Copyright (C) 2023-2024 Dirk-Jan C. Binnema
|
||||||
|
|
||||||
;; Author: Mickey Petersen <mickey@masteringemacs.org>
|
;; Author: Mickey Petersen <mickey@masteringemacs.org>
|
||||||
;; Keywords: mail
|
;; Keywords: mail
|
||||||
|
@ -33,7 +34,6 @@
|
||||||
(defvar mu4e-embedded-buffer-name " *mu4e-embedded*"
|
(defvar mu4e-embedded-buffer-name " *mu4e-embedded*"
|
||||||
"Name for the embedded message view buffer.")
|
"Name for the embedded message view buffer.")
|
||||||
|
|
||||||
|
|
||||||
;; Buffer names for public use
|
;; Buffer names for public use
|
||||||
|
|
||||||
(defvar mu4e-headers-buffer-name "*mu4e-headers*"
|
(defvar mu4e-headers-buffer-name "*mu4e-headers*"
|
||||||
|
@ -89,6 +89,20 @@ vertical split-view."
|
||||||
:type 'integer
|
:type 'integer
|
||||||
:group 'mu4e-headers)
|
: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-view-mode "mu4e-view")
|
||||||
(declare-function mu4e-error "mu4e-helpers")
|
(declare-function mu4e-error "mu4e-helpers")
|
||||||
(declare-function mu4e-warn "mu4e-helpers")
|
(declare-function mu4e-warn "mu4e-helpers")
|
||||||
|
@ -196,20 +210,24 @@ being created if CREATE is non-nil."
|
||||||
(let ((buffer)
|
(let ((buffer)
|
||||||
;; If `mu4e-view-buffer-name-func' is non-nil, then use that
|
;; 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.
|
;; to source the name of the view buffer to create or re-use.
|
||||||
(buffer-name (or (and mu4e-view-buffer-name-func
|
(buffer-name
|
||||||
(funcall mu4e-view-buffer-name-func headers-buffer))
|
(or (and mu4e-view-buffer-name-func
|
||||||
;; If the variable is nil, use the default
|
(funcall mu4e-view-buffer-name-func headers-buffer))
|
||||||
;; name
|
;; If the variable is nil, use the default
|
||||||
mu4e-view-buffer-name))
|
;; name
|
||||||
|
mu4e-view-buffer-name))
|
||||||
;; Search all view buffers and return those that are linked to
|
;; Search all view buffers and return those that are linked to
|
||||||
;; `headers-buffer'.
|
;; `headers-buffer'.
|
||||||
(linked-buffer (mu4e-get-view-buffers
|
(linked-buffer
|
||||||
(lambda (buf)
|
(mu4e-get-view-buffers
|
||||||
(and (mu4e--buffer-local-boundp 'mu4e-linked-headers-buffer buf)
|
(lambda (buf)
|
||||||
(eq mu4e-linked-headers-buffer headers-buffer))))))
|
(and (mu4e--buffer-local-boundp 'mu4e-linked-headers-buffer buf)
|
||||||
;; If such a linked buffer exists and its buffer is live, we use that buffer.
|
(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)))
|
(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
|
;; What, if anything, should the heuristic be to pick the
|
||||||
;; one to use? Presently `car' is used, but there are better
|
;; 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))
|
(setq mu4e-split-view 'horizontal))
|
||||||
|
|
||||||
(let* ((buffer-name (or (get-buffer buffer-or-name)
|
(let* ((buffer-name (or (get-buffer buffer-or-name)
|
||||||
(mu4e-error "Buffer `%s' does not exist" buffer-or-name)))
|
(mu4e-error "Buffer `%s' does not exist"
|
||||||
(buffer-type (with-current-buffer buffer-name (mu4e--get-current-buffer-type)))
|
buffer-or-name)))
|
||||||
|
(buffer-type
|
||||||
|
(with-current-buffer buffer-name (mu4e--get-current-buffer-type)))
|
||||||
(direction (cons 'direction
|
(direction (cons 'direction
|
||||||
(pcase (cons buffer-type mu4e-split-view)
|
(pcase (cons buffer-type mu4e-split-view)
|
||||||
;; views or headers can display
|
;; views or headers can display
|
||||||
|
@ -289,19 +309,34 @@ for BUFFER-OR-NAME to be displayed in."
|
||||||
;; views or headers can display
|
;; views or headers can display
|
||||||
;; horz/vert depending on the value of
|
;; horz/vert depending on the value of
|
||||||
;; `mu4e-split-view'
|
;; `mu4e-split-view'
|
||||||
('(view . horizontal) '((window-height . shrink-window-if-larger-than-buffer)))
|
('(view . horizontal)
|
||||||
('(view . vertical) '((window-min-width . fit-window-to-buffer)))
|
'((window-height . shrink-window-if-larger-than-buffer)))
|
||||||
|
('(view . vertical)
|
||||||
|
'((window-min-width . fit-window-to-buffer)))
|
||||||
(`(,_ . t) nil)))
|
(`(,_ . t) nil)))
|
||||||
(window-action (cond
|
(window-action (cond
|
||||||
((eq buffer-type 'main) '(display-buffer-reuse-window
|
;; main-buffer
|
||||||
display-buffer-reuse-mode-window
|
((eq buffer-type 'main)
|
||||||
display-buffer-full-frame))
|
'(display-buffer-reuse-window
|
||||||
((memq buffer-type '(headers compose))
|
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-window
|
||||||
display-buffer-reuse-mode-window
|
display-buffer-reuse-mode-window
|
||||||
display-buffer-same-window))
|
display-buffer-same-window))
|
||||||
|
|
||||||
((memq mu4e-split-view '(horizontal vertical))
|
((memq mu4e-split-view '(horizontal vertical))
|
||||||
'(display-buffer-in-direction))
|
'(display-buffer-in-direction))
|
||||||
|
|
||||||
((memq mu4e-split-view '(single-window))
|
((memq mu4e-split-view '(single-window))
|
||||||
'(display-buffer-reuse-window
|
'(display-buffer-reuse-window
|
||||||
display-buffer-reuse-mode-window
|
display-buffer-reuse-mode-window
|
||||||
|
@ -314,8 +349,7 @@ for BUFFER-OR-NAME to be displayed in."
|
||||||
display-buffer-same-window))))
|
display-buffer-same-window))))
|
||||||
(arg `((,@window-action)
|
(arg `((,@window-action)
|
||||||
,@window-size
|
,@window-size
|
||||||
,direction
|
,direction)))
|
||||||
)))
|
|
||||||
(funcall (if select #'pop-to-buffer #'display-buffer)
|
(funcall (if select #'pop-to-buffer #'display-buffer)
|
||||||
buffer-name
|
buffer-name
|
||||||
arg)))
|
arg)))
|
||||||
|
@ -339,11 +373,11 @@ This function is best called from the hook
|
||||||
;; cause for error.
|
;; cause for error.
|
||||||
(ignore-errors
|
(ignore-errors
|
||||||
(cond ((eq mu4e-split-view 'vertical)
|
(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))
|
t t nil))
|
||||||
((eq mu4e-split-view 'horizontal)
|
((eq mu4e-split-view 'horizontal)
|
||||||
(set-window-text-height win mu4e-headers-visible-lines))))))
|
(set-window-text-height win mu4e-headers-visible-lines))))))
|
||||||
|
|
||||||
|
|
||||||
(provide 'mu4e-window)
|
(provide 'mu4e-window)
|
||||||
;;; mu4e-window.el ends here
|
;;; mu4e-window.el ends here
|
||||||
|
|
Loading…
Reference in New Issue