mirror of https://github.com/djcb/mu.git
* make the 'window management' (killing windows etc.) a bit less aggressive
This commit is contained in:
parent
3c72b336f4
commit
cb9b2095a6
|
@ -134,7 +134,7 @@ are of the form:
|
||||||
(let ((inhibit-read-only t))
|
(let ((inhibit-read-only t))
|
||||||
(with-current-buffer mu4e~headers-buffer
|
(with-current-buffer mu4e~headers-buffer
|
||||||
(erase-buffer)
|
(erase-buffer)
|
||||||
(mu4e~mark-clear)))))
|
(mu4e~mark-clear)))))
|
||||||
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
;; handler functions
|
;; handler functions
|
||||||
|
@ -347,8 +347,8 @@ after the end of the search results."
|
||||||
(define-key map "P" 'mu4e-headers-toggle-threading)
|
(define-key map "P" 'mu4e-headers-toggle-threading)
|
||||||
(define-key map "Q" 'mu4e-headers-toggle-full-search)
|
(define-key map "Q" 'mu4e-headers-toggle-full-search)
|
||||||
|
|
||||||
(define-key map "q" 'mu4e~headers-kill-buffer-and-window)
|
(define-key map "q" 'mu4e~headers-quit-buffer)
|
||||||
(define-key map "z" 'mu4e~headers-kill-buffer-and-window)
|
(define-key map "z" 'mu4e~headers-quit-buffer)
|
||||||
|
|
||||||
(define-key map "r" 'mu4e-headers-rerun-search)
|
(define-key map "r" 'mu4e-headers-rerun-search)
|
||||||
(define-key map "g" 'mu4e-headers-rerun-search) ;; for compatibility
|
(define-key map "g" 'mu4e-headers-rerun-search) ;; for compatibility
|
||||||
|
@ -415,8 +415,8 @@ after the end of the search results."
|
||||||
(let ((menumap (make-sparse-keymap "Headers")))
|
(let ((menumap (make-sparse-keymap "Headers")))
|
||||||
(define-key map [menu-bar headers] (cons "Headers" menumap))
|
(define-key map [menu-bar headers] (cons "Headers" menumap))
|
||||||
|
|
||||||
(define-key menumap [mu4e~headers-kill-buffer-and-window]
|
(define-key menumap [mu4e~headers-quit-buffer]
|
||||||
'("Quit view" . mu4e~headers-kill-buffer-and-window))
|
'("Quit view" . mu4e~headers-quit-buffer))
|
||||||
(define-key menumap [display-help] '("Help" . mu4e-display-manual))
|
(define-key menumap [display-help] '("Help" . mu4e-display-manual))
|
||||||
|
|
||||||
(define-key menumap [sepa0] '("--"))
|
(define-key menumap [sepa0] '("--"))
|
||||||
|
@ -663,6 +663,7 @@ buffer for the results. If IGNORE-HISTORY is true, do *not* update
|
||||||
the query history stack."
|
the query history stack."
|
||||||
;; note: we don't want to update the history if this query comes from
|
;; note: we don't want to update the history if this query comes from
|
||||||
;; `mu4e~headers-query-next' or `mu4e~headers-query-prev'.
|
;; `mu4e~headers-query-next' or `mu4e~headers-query-prev'.
|
||||||
|
(mu4e-hide-other-mu4e-buffers)
|
||||||
(let ((buf (get-buffer-create mu4e~headers-buffer-name))
|
(let ((buf (get-buffer-create mu4e~headers-buffer-name))
|
||||||
(inhibit-read-only t))
|
(inhibit-read-only t))
|
||||||
(with-current-buffer buf
|
(with-current-buffer buf
|
||||||
|
@ -682,18 +683,15 @@ the query history stack."
|
||||||
mu4e-headers-show-threads
|
mu4e-headers-show-threads
|
||||||
mu4e-headers-sortfield
|
mu4e-headers-sortfield
|
||||||
mu4e-headers-sort-revert
|
mu4e-headers-sort-revert
|
||||||
(unless mu4e-headers-full-search mu4e-search-results-limit))
|
(unless mu4e-headers-full-search mu4e-search-results-limit))))
|
||||||
;;; when we're starting a new search, we also kill the
|
|
||||||
;;; view window, if any
|
|
||||||
(ignore-errors (delete-window mu4e~headers-view-win))))
|
|
||||||
|
|
||||||
(defun mu4e~headers-redraw-get-view-window ()
|
(defun mu4e~headers-redraw-get-view-window ()
|
||||||
"Close all windows, redraw the headers buffer based on the value
|
"Close all windows, redraw the headers buffer based on the value
|
||||||
of `mu4e-split-view', and return a window for the message view."
|
of `mu4e-split-view', and return a window for the message view."
|
||||||
|
(mu4e-hide-other-mu4e-buffers)
|
||||||
(unless (buffer-live-p mu4e~headers-buffer)
|
(unless (buffer-live-p mu4e~headers-buffer)
|
||||||
(error "No headers buffer available"))
|
(error "No headers buffer available"))
|
||||||
(switch-to-buffer mu4e~headers-buffer)
|
(switch-to-buffer mu4e~headers-buffer)
|
||||||
(delete-other-windows)
|
|
||||||
(setq mu4e~headers-view-win
|
(setq mu4e~headers-view-win
|
||||||
(cond
|
(cond
|
||||||
((eq mu4e-split-view 'horizontal) ;; split horizontally
|
((eq mu4e-split-view 'horizontal) ;; split horizontally
|
||||||
|
@ -959,7 +957,6 @@ rerun the last search with the new setting for threading."
|
||||||
(when rerun (mu4e-headers-rerun-search)))
|
(when rerun (mu4e-headers-rerun-search)))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
(defun mu4e-headers-view-message ()
|
(defun mu4e-headers-view-message ()
|
||||||
"View message at point. If there's an existing window for the
|
"View message at point. If there's an existing window for the
|
||||||
view, re-use that one. If not, create a new one, depending on the
|
view, re-use that one. If not, create a new one, depending on the
|
||||||
|
@ -981,15 +978,13 @@ current window. "
|
||||||
'face 'mu4e-system-face 'intangible t))
|
'face 'mu4e-system-face 'intangible t))
|
||||||
(mu4e~proc-view docid mu4e-view-show-images))))
|
(mu4e~proc-view docid mu4e-view-show-images))))
|
||||||
|
|
||||||
(defun mu4e~headers-kill-buffer-and-window ()
|
(defun mu4e~headers-quit-buffer ()
|
||||||
"Quit the headers view and return to the main view."
|
"Quit the headers view and return to the main view."
|
||||||
(interactive)
|
(interactive)
|
||||||
|
(unless (eq major-mode 'mu4e-headers-mode)
|
||||||
|
(error "Must be in mu4e-headers-mode (%S)" major-mode))
|
||||||
(mu4e-mark-handle-when-leaving)
|
(mu4e-mark-handle-when-leaving)
|
||||||
(let ((buf mu4e~headers-buffer))
|
(mu4e-quit-buffer)
|
||||||
(when (buffer-live-p buf)
|
|
||||||
(bury-buffer)
|
|
||||||
(delete-windows-on buf) ;; destroy all windows for this buffer
|
|
||||||
(kill-buffer buf)))
|
|
||||||
(mu4e~main-view))
|
(mu4e~main-view))
|
||||||
|
|
||||||
(defun mu4e-headers-rerun-search ()
|
(defun mu4e-headers-rerun-search ()
|
||||||
|
@ -1032,12 +1027,18 @@ backward (if LINES is negative). If this succeeds, return the new
|
||||||
docid. Otherwise, return nil."
|
docid. Otherwise, return nil."
|
||||||
(unless (eq major-mode 'mu4e-headers-mode)
|
(unless (eq major-mode 'mu4e-headers-mode)
|
||||||
(error "Must be in mu4e-headers-mode (%S)" major-mode))
|
(error "Must be in mu4e-headers-mode (%S)" major-mode))
|
||||||
(let ((succeeded (= 0 (forward-line lines)))
|
(let ((succeeded (zerop (forward-line lines)))
|
||||||
(docid (mu4e~headers-docid-at-point)))
|
(docid (mu4e~headers-docid-at-point)))
|
||||||
;; move point, even if this function is called when this window is not
|
;; move point, even if this function is called when this window is not
|
||||||
;; visible
|
;; visible
|
||||||
(when docid
|
(when docid
|
||||||
(set-window-point (get-buffer-window mu4e~headers-buffer) (point))
|
;; update all windows showing the headers buffer
|
||||||
|
(walk-windows
|
||||||
|
(lambda (win)
|
||||||
|
(when (eq (window-buffer win) mu4e~headers-buffer)
|
||||||
|
(set-window-point win (point))))
|
||||||
|
nil t)
|
||||||
|
;;(set-window-point (get-buffer-window mu4e~headers-buffer t) (point))
|
||||||
;; attempt to highlight the new line, display the message
|
;; attempt to highlight the new line, display the message
|
||||||
(mu4e~headers-highlight docid)
|
(mu4e~headers-highlight docid)
|
||||||
;; update message view if it was already showing
|
;; update message view if it was already showing
|
||||||
|
|
|
@ -133,8 +133,7 @@ clicked."
|
||||||
(mu4e~main-action-str "\t* [H]elp\n" 'mu4e-display-manual)
|
(mu4e~main-action-str "\t* [H]elp\n" 'mu4e-display-manual)
|
||||||
(mu4e~main-action-str "\t* [q]uit\n" 'mu4e-quit))
|
(mu4e~main-action-str "\t* [q]uit\n" 'mu4e-quit))
|
||||||
(mu4e-main-mode)
|
(mu4e-main-mode)
|
||||||
(switch-to-buffer buf)
|
(switch-to-buffer buf))))
|
||||||
(delete-other-windows))))
|
|
||||||
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
;; Interactive functions
|
;; Interactive functions
|
||||||
|
|
|
@ -625,8 +625,14 @@ FUNC (if non-nil) afterwards."
|
||||||
mu4e-update-timer nil
|
mu4e-update-timer nil
|
||||||
mu4e~maildir-list nil))
|
mu4e~maildir-list nil))
|
||||||
(mu4e~proc-kill)
|
(mu4e~proc-kill)
|
||||||
(kill-buffer))
|
;; kill all main/view/headers buffer
|
||||||
|
(mapcar
|
||||||
|
(lambda (buf)
|
||||||
|
(with-current-buffer buf
|
||||||
|
(when (member major-mode '(mu4e-headers-mode mu4e-view-mode mu4e-main-mode))
|
||||||
|
(kill-buffer))))
|
||||||
|
(buffer-list)))
|
||||||
|
|
||||||
|
|
||||||
(defvar mu4e-update-timer nil
|
(defvar mu4e-update-timer nil
|
||||||
"*internal* The mu4e update timer.")
|
"*internal* The mu4e update timer.")
|
||||||
|
@ -790,5 +796,33 @@ is ignored."
|
||||||
(newline)
|
(newline)
|
||||||
(insert-image img imgpath nil t))))
|
(insert-image img imgpath nil t))))
|
||||||
|
|
||||||
|
|
||||||
|
(defun mu4e-quit-buffer ()
|
||||||
|
"Bury the current buffer (and delete all windows displaying it)."
|
||||||
|
(interactive)
|
||||||
|
(walk-windows
|
||||||
|
;; kill any window that:
|
||||||
|
;; a) displays the current buffer
|
||||||
|
;; b) is not the only win
|
||||||
|
(lambda (win)
|
||||||
|
(when (eq (window-buffer win) (current-buffer))
|
||||||
|
(unless (one-window-p t)
|
||||||
|
(delete-window win)))) nil t))
|
||||||
|
|
||||||
|
|
||||||
|
(defun mu4e-hide-other-mu4e-buffers ()
|
||||||
|
"Bury mu4e-buffers (main, headers, view) (and delete all windows
|
||||||
|
displaying it). Do _not_ bury the current buffer, though."
|
||||||
|
(interactive)
|
||||||
|
(let ((curbuf (current-buffer)))
|
||||||
|
(walk-windows
|
||||||
|
(lambda (win)
|
||||||
|
(with-current-buffer (window-buffer win)
|
||||||
|
(unless (eq curbuf (current-buffer))
|
||||||
|
(when (member major-mode '(mu4e-headers-mode mu4e-view-mode mu4e-main-mode))
|
||||||
|
(unless (one-window-p t)
|
||||||
|
(delete-window win)))))) nil t)))
|
||||||
|
|
||||||
|
|
||||||
(provide 'mu4e-utils)
|
(provide 'mu4e-utils)
|
||||||
;;; End of mu4e-utils.el
|
;;; End of mu4e-utils.el
|
||||||
|
|
|
@ -350,11 +350,11 @@ is nil, and otherwise open it."
|
||||||
(setq mu4e-view-mode-map
|
(setq mu4e-view-mode-map
|
||||||
(let ((map (make-sparse-keymap)))
|
(let ((map (make-sparse-keymap)))
|
||||||
|
|
||||||
(define-key map "q" 'mu4e-view-kill-buffer-and-window)
|
(define-key map "q" 'mu4e-quit-buffer)
|
||||||
|
|
||||||
;; note, 'z' is by-default bound to 'bury-buffer'
|
;; note, 'z' is by-default bound to 'bury-buffer'
|
||||||
;; but that's not very useful in this case
|
;; but that's not very useful in this case
|
||||||
(define-key map "z" 'mu4e-view-kill-buffer-and-window)
|
(define-key map "z" 'mu4e-quit-buffer)
|
||||||
|
|
||||||
(define-key map "s" 'mu4e-headers-search)
|
(define-key map "s" 'mu4e-headers-search)
|
||||||
(define-key map "S" 'mu4e-view-search-edit)
|
(define-key map "S" 'mu4e-view-search-edit)
|
||||||
|
@ -449,7 +449,7 @@ is nil, and otherwise open it."
|
||||||
(define-key map [menu-bar headers] (cons "View" menumap))
|
(define-key map [menu-bar headers] (cons "View" menumap))
|
||||||
|
|
||||||
(define-key menumap [quit-buffer]
|
(define-key menumap [quit-buffer]
|
||||||
'("Quit view" . mu4e-view-kill-buffer-and-window))
|
'("Quit view" . mu4e-quit-buffer))
|
||||||
(define-key menumap [display-help] '("Help" . mu4e-display-manual))
|
(define-key menumap [display-help] '("Help" . mu4e-display-manual))
|
||||||
|
|
||||||
(define-key menumap [sepa0] '("--"))
|
(define-key menumap [sepa0] '("--"))
|
||||||
|
@ -695,21 +695,7 @@ citations."
|
||||||
(setq
|
(setq
|
||||||
mu4e~view-lines-wrapped nil
|
mu4e~view-lines-wrapped nil
|
||||||
mu4e~view-cited-hidden nil))
|
mu4e~view-cited-hidden nil))
|
||||||
|
|
||||||
(defun mu4e-view-kill-buffer-and-window ()
|
|
||||||
"Quit the message view and return to the headers."
|
|
||||||
(interactive)
|
|
||||||
(when (buffer-live-p mu4e~view-buffer)
|
|
||||||
(with-current-buffer mu4e~view-buffer
|
|
||||||
(if (fboundp 'window-parent) ;; window-parent is an emacs24ism
|
|
||||||
(if (window-parent)
|
|
||||||
(kill-buffer-and-window)
|
|
||||||
(kill-buffer))
|
|
||||||
;; emacs23 hack: trial and error
|
|
||||||
(condition-case nil
|
|
||||||
(kill-buffer-and-window)
|
|
||||||
(kill-buffer))))))
|
|
||||||
|
|
||||||
(defun mu4e-view-action (&optional msg)
|
(defun mu4e-view-action (&optional msg)
|
||||||
"Ask user for some action to apply on MSG (or message-at-point,
|
"Ask user for some action to apply on MSG (or message-at-point,
|
||||||
if nil), then do it. The actions are specified in
|
if nil), then do it. The actions are specified in
|
||||||
|
@ -995,7 +981,7 @@ user that unmarking only works in the header list."
|
||||||
(let ((url (gethash num mu4e~view-link-map)))
|
(let ((url (gethash num mu4e~view-link-map)))
|
||||||
(unless url (error "Invalid number for URL"))
|
(unless url (error "Invalid number for URL"))
|
||||||
(browse-url url)))
|
(browse-url url)))
|
||||||
|
|
||||||
(defconst mu4e~view-raw-buffer-name "*mu4e-raw-view*"
|
(defconst mu4e~view-raw-buffer-name "*mu4e-raw-view*"
|
||||||
"*internal* Name for the raw message view buffer")
|
"*internal* Name for the raw message view buffer")
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue