From 8bc622ff09f3265fcbde75fdc35858e6cd6a8201 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alex=20Benn=C3=A9e?= Date: Mon, 6 Jul 2020 20:26:02 +0100 Subject: [PATCH 1/3] mu4e/mu4e-utils: refactor mu4e-log buffer creation Move all the one time setup for mu4e-log into its own private section. --- mu4e/mu4e-utils.el | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/mu4e/mu4e-utils.el b/mu4e/mu4e-utils.el index f909217b..55ede545 100644 --- a/mu4e/mu4e-utils.el +++ b/mu4e/mu4e-utils.el @@ -1000,11 +1000,10 @@ in the background; otherwise, pop up a window." "Max number of characters to keep around in the log buffer.") (defconst mu4e~log-buffer-name "*mu4e-log*" "*internal* Name of the logging buffer.") -(defun mu4e-log (type frm &rest args) - "Write a message of TYPE with format-string FRM and ARGS in -*mu4e-log* buffer, if the variable mu4e-debug is non-nil. Type is -either 'to-server, 'from-server or 'misc. This function is meant for debugging." - (when mu4e-debug + +(defun mu4e~get-log-buffer () + "Fetch (and maybe create) the log buffer." + (unless (get-buffer mu4e~log-buffer-name) (with-current-buffer (get-buffer-create mu4e~log-buffer-name) (view-mode) @@ -1012,7 +1011,15 @@ either 'to-server, 'from-server or 'misc. This function is meant for debugging." (unless (eq major-mode 'so-long-mode) (eval '(so-long-mode)))) - (setq buffer-undo-list t) + (setq buffer-undo-list t))) + mu4e~log-buffer-name) + +(defun mu4e-log (type frm &rest args) + "Write a message of TYPE with format-string FRM and ARGS in +*mu4e-log* buffer, if the variable mu4e-debug is non-nil. Type is +either 'to-server, 'from-server or 'misc. This function is meant for debugging." + (when mu4e-debug + (with-current-buffer (mu4e~get-log-buffer) (let* ((inhibit-read-only t) (tstamp (propertize (format-time-string "%Y-%m-%d %T.%3N" (current-time)) From 5040d52b46ca7f112c1df92396e0851911f6f4b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alex=20Benn=C3=A9e?= Date: Mon, 6 Jul 2020 20:32:27 +0100 Subject: [PATCH 2/3] mu4e/mu4e-utils: save-excursion before updating the log buffer If the user is scrolling and searching through the log buffer to see what went wrong it gets very annoying having an update change things. To avoid this wrap all buffer updating code in a save-excursion so point is preserved. --- mu4e/mu4e-utils.el | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/mu4e/mu4e-utils.el b/mu4e/mu4e-utils.el index 55ede545..d81a1415 100644 --- a/mu4e/mu4e-utils.el +++ b/mu4e/mu4e-utils.el @@ -1032,21 +1032,22 @@ either 'to-server, 'from-server or 'misc. This function is meant for debugging." (error 'font-lock-warning-face) (otherwise (mu4e-error "Unsupported log type")))) (msg (propertize (apply 'format frm args) 'face msg-face))) - (goto-char (point-max)) - (insert tstamp - (cl-case type - (from-server " <- ") - (to-server " -> ") - (error " !! ") - (otherwise " ")) - msg "\n") + (save-excursion + (goto-char (point-max)) + (insert tstamp + (cl-case type + (from-server " <- ") + (to-server " -> ") + (error " !! ") + (otherwise " ")) + msg "\n") - ;; if `mu4e-log-max-lines is specified and exceeded, clearest the oldest - ;; lines - (when (> (buffer-size) mu4e~log-max-size) - (goto-char (- (buffer-size) mu4e~log-max-size)) - (beginning-of-line) - (delete-region (point-min) (point))))))) + ;; if `mu4e-log-max-lines is specified and exceeded, clearest the oldest + ;; lines + (when (> (buffer-size) mu4e~log-max-size) + (goto-char (- (buffer-size) mu4e~log-max-size)) + (beginning-of-line) + (delete-region (point-min) (point)))))))) (defun mu4e-toggle-logging () "Toggle between enabling/disabling debug-mode (in debug-mode, From f40178fe8ab47acd7c0b5142a8875c0c5aad4fe0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alex=20Benn=C3=A9e?= Date: Mon, 6 Jul 2020 20:49:04 +0100 Subject: [PATCH 3/3] lib/index: fix deadlock when mu4e-index-cleanup is nil (#1749) If the user has wants to postpone clean-up we shouldn't lock the indexer waiting for something that will never happen. Clear the flag event though we are actually skipping cleanup. --- lib/index/mu-indexer.cc | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib/index/mu-indexer.cc b/lib/index/mu-indexer.cc index 79998dbd..f9ac032a 100644 --- a/lib/index/mu-indexer.cc +++ b/lib/index/mu-indexer.cc @@ -270,6 +270,9 @@ Indexer::Private::start(const Indexer::Config& conf) cleanup(); clean_done_ = true; g_debug ("cleanup finished"); + } else { + clean_done_ = true; + g_debug ("cleanup skipped"); } store_.commit();