rougier / mu4e-thread-folding

Functions for folding threads in mu4e headers view
GNU General Public License v3.0
136 stars 12 forks source link

Requires `nano-color-background` #19

Closed tasmo closed 3 years ago

tasmo commented 3 years ago

Without using the nano theme Emacs gives the error:

Message: Symbol's value as variable is void
Data: (void-variable . nano-color-background)
pmiddend commented 3 years ago

Stumbled over that as well. Any quick fix for this available?

jeslie0 commented 3 years ago

I managed to fix it by commenting out the instances of "nano-colour-background" in the .el file, and replacing their value with "nil". This is what the top of my .el file now looks like:

;; (color-darken nano-color-background 5)

(defgroup mu4e-thread-folding '() "Group for mu4e thread folding options" :group 'mu4e)

(defface mu4e-thread-folding-root-unfolded-face `((t :extend t :overline nil ;; ,(color-darken nano-color-background 10) :underline nil :foreground nil :background nil ;;,(color-darken (nano-color-background 0)) )) "Face for the root node thread when it is unfolded." :group 'mu4e-thread-folding)

(defface mu4e-thread-folding-root-folded-face '((t :inherit nil :overline nil :underline nil :foreground nil :background nil)) "Face for the root node of a thread when it is folded." :group 'mu4e-thread-folding)

(defface mu4e-thread-folding-child-face `((t :extend t :overline nil :underline nil :foreground nil :background nil ;;,(color-darken (nano-color-background 0)) )) "Face for a thread when it is unfolded (child node)" :group 'mu4e-thread-folding)

rougier commented 3 years ago

Oups, sorry for that. I use it with nano and the nano color background comes from here. We should use the default face background instead. Can you make a PR?

jsilve24 commented 3 years ago

Thanks for putting this together. I just followed the fix proposed by @jeslie0 and I am getting a progn: Wrong type argument: overlayp, nil [9 times] warning. Any ideas?

jsilve24 commented 3 years ago

This was the incredibly verbose backtrace:

Debugger entered--Lisp error: (wrong-type-argument overlayp nil)
  overlay-put(nil display "▸ ")
  (progn (overlay-put root-prefix-overlay (quote display) root-folded-prefix) (overlay-put root-overlay (quote face) root-folded-face))
  (if value (progn (overlay-put root-prefix-overlay (quote display) root-folded-prefix) (overlay-put root-overlay (quote face) root-folded-face)) (progn (overlay-put root-prefix-overlay (quote display) root-unfolded-prefix) (overlay-put root-overlay (quote face) root-unfolded-face)))
  (progn (overlay-put root-overlay (quote folded) value) (if value (progn (overlay-put root-prefix-overlay (quote display) root-folded-prefix) (overlay-put root-overlay (quote face) root-folded-face)) (progn (overlay-put root-prefix-overlay (quote display) root-unfolded-prefix) (overlay-put root-overlay (quote face) root-unfolded-face))))
  (if (or (not thread-id) (string= id thread-id)) (progn (overlay-put root-overlay (quote folded) value) (if value (progn (overlay-put root-prefix-overlay (quote display) root-folded-prefix) (overlay-put root-overlay (quote face) root-folded-face)) (progn (overlay-put root-prefix-overlay (quote display) root-unfolded-prefix) (overlay-put root-overlay (quote face) root-unfolded-face)))))
  (let ((id (overlay-get local-root-overlay (quote thread-id))) (root-prefix-overlay (mu4e-headers-get-overlay (quote display) root-prefix-beg))) (setq root-overlay local-root-overlay) (if (or (not thread-id) (string= id thread-id)) (progn (overlay-put root-overlay (quote folded) value) (if value (progn (overlay-put root-prefix-overlay (quote display) root-folded-prefix) (overlay-put root-overlay (quote face) root-folded-face)) (progn (overlay-put root-prefix-overlay (quote display) root-unfolded-prefix) (overlay-put root-overlay (quote face) root-unfolded-face))))))
  (if local-root-overlay (let ((id (overlay-get local-root-overlay (quote thread-id))) (root-prefix-overlay (mu4e-headers-get-overlay (quote display) root-prefix-beg))) (setq root-overlay local-root-overlay) (if (or (not thread-id) (string= id thread-id)) (progn (overlay-put root-overlay (quote folded) value) (if value (progn (overlay-put root-prefix-overlay (quote display) root-folded-prefix) (overlay-put root-overlay (quote face) root-folded-face)) (progn (overlay-put root-prefix-overlay (quote display) root-unfolded-prefix) (overlay-put root-overlay (quote face) root-unfolded-face)))))))
  (let ((local-child-overlay (mu4e-headers-get-overlay (quote thread-child))) (local-root-overlay (mu4e-headers-get-overlay (quote thread-root)))) (if local-child-overlay (let ((id (overlay-get local-child-overlay (quote thread-id))) (unread (overlay-get local-child-overlay (quote unread)))) (setq child-overlay local-child-overlay) (if (or (not thread-id) (string= id thread-id)) (if unread (if root-overlay (overlay-put root-overlay (quote face) root-unfolded-face)) (overlay-put child-overlay (quote invisible) value))))) (if local-root-overlay (let ((id (overlay-get local-root-overlay (quote thread-id))) (root-prefix-overlay (mu4e-headers-get-overlay (quote display) root-prefix-beg))) (setq root-overlay local-root-overlay) (if (or (not thread-id) (string= id thread-id)) (progn (overlay-put root-overlay (quote folded) value) (if value (progn (overlay-put root-prefix-overlay ... root-folded-prefix) (overlay-put root-overlay ... root-folded-face)) (progn (overlay-put root-prefix-overlay ... root-unfolded-prefix) (overlay-put root-overlay ... root-unfolded-face))))))) (if (and (not local-child-overlay) (not local-root-overlay)) (setq root-overlay nil)) (forward-line 1))
  (while (not (eobp)) (let ((local-child-overlay (mu4e-headers-get-overlay (quote thread-child))) (local-root-overlay (mu4e-headers-get-overlay (quote thread-root)))) (if local-child-overlay (let ((id (overlay-get local-child-overlay (quote thread-id))) (unread (overlay-get local-child-overlay (quote unread)))) (setq child-overlay local-child-overlay) (if (or (not thread-id) (string= id thread-id)) (if unread (if root-overlay (overlay-put root-overlay ... root-unfolded-face)) (overlay-put child-overlay (quote invisible) value))))) (if local-root-overlay (let ((id (overlay-get local-root-overlay (quote thread-id))) (root-prefix-overlay (mu4e-headers-get-overlay (quote display) root-prefix-beg))) (setq root-overlay local-root-overlay) (if (or (not thread-id) (string= id thread-id)) (progn (overlay-put root-overlay (quote folded) value) (if value (progn ... ...) (progn ... ...)))))) (if (and (not local-child-overlay) (not local-root-overlay)) (setq root-overlay nil)) (forward-line 1)))
  (let ((root-overlay nil) (child-overlay nil) (root-prefix-beg (car mu4e-thread-folding-root-prefix-position)) (root-folded-face (quote mu4e-thread-folding-root-folded-face)) (root-unfolded-face (quote mu4e-thread-folding-root-unfolded-face)) (root-folded-prefix mu4e-thread-folding-root-folded-prefix-string) (root-unfolded-prefix mu4e-thread-folding-root-unfolded-prefix-string)) (while (not (eobp)) (let ((local-child-overlay (mu4e-headers-get-overlay (quote thread-child))) (local-root-overlay (mu4e-headers-get-overlay (quote thread-root)))) (if local-child-overlay (let ((id (overlay-get local-child-overlay ...)) (unread (overlay-get local-child-overlay ...))) (setq child-overlay local-child-overlay) (if (or (not thread-id) (string= id thread-id)) (if unread (if root-overlay ...) (overlay-put child-overlay ... value))))) (if local-root-overlay (let ((id (overlay-get local-root-overlay ...)) (root-prefix-overlay (mu4e-headers-get-overlay ... root-prefix-beg))) (setq root-overlay local-root-overlay) (if (or (not thread-id) (string= id thread-id)) (progn (overlay-put root-overlay ... value) (if value ... ...))))) (if (and (not local-child-overlay) (not local-root-overlay)) (setq root-overlay nil)) (forward-line 1))))
  (save-excursion (goto-char (point-min)) (let ((root-overlay nil) (child-overlay nil) (root-prefix-beg (car mu4e-thread-folding-root-prefix-position)) (root-folded-face (quote mu4e-thread-folding-root-folded-face)) (root-unfolded-face (quote mu4e-thread-folding-root-unfolded-face)) (root-folded-prefix mu4e-thread-folding-root-folded-prefix-string) (root-unfolded-prefix mu4e-thread-folding-root-unfolded-prefix-string)) (while (not (eobp)) (let ((local-child-overlay (mu4e-headers-get-overlay (quote thread-child))) (local-root-overlay (mu4e-headers-get-overlay (quote thread-root)))) (if local-child-overlay (let ((id ...) (unread ...)) (setq child-overlay local-child-overlay) (if (or ... ...) (if unread ... ...)))) (if local-root-overlay (let ((id ...) (root-prefix-overlay ...)) (setq root-overlay local-root-overlay) (if (or ... ...) (progn ... ...)))) (if (and (not local-child-overlay) (not local-root-overlay)) (setq root-overlay nil)) (forward-line 1)))))
  (save-current-buffer (set-buffer "*mu4e-headers*") (if thread-id nil (setq mu4e-thread-folding-all-folded (not value))) (save-excursion (goto-char (point-min)) (let ((root-overlay nil) (child-overlay nil) (root-prefix-beg (car mu4e-thread-folding-root-prefix-position)) (root-folded-face (quote mu4e-thread-folding-root-folded-face)) (root-unfolded-face (quote mu4e-thread-folding-root-unfolded-face)) (root-folded-prefix mu4e-thread-folding-root-folded-prefix-string) (root-unfolded-prefix mu4e-thread-folding-root-unfolded-prefix-string)) (while (not (eobp)) (let ((local-child-overlay (mu4e-headers-get-overlay ...)) (local-root-overlay (mu4e-headers-get-overlay ...))) (if local-child-overlay (let (... ...) (setq child-overlay local-child-overlay) (if ... ...))) (if local-root-overlay (let (... ...) (setq root-overlay local-root-overlay) (if ... ...))) (if (and (not local-child-overlay) (not local-root-overlay)) (setq root-overlay nil)) (forward-line 1))))))
  (if (and (get-buffer "*mu4e-headers*") mu4e-headers-show-threads) (save-current-buffer (set-buffer "*mu4e-headers*") (if thread-id nil (setq mu4e-thread-folding-all-folded (not value))) (save-excursion (goto-char (point-min)) (let ((root-overlay nil) (child-overlay nil) (root-prefix-beg (car mu4e-thread-folding-root-prefix-position)) (root-folded-face (quote mu4e-thread-folding-root-folded-face)) (root-unfolded-face (quote mu4e-thread-folding-root-unfolded-face)) (root-folded-prefix mu4e-thread-folding-root-folded-prefix-string) (root-unfolded-prefix mu4e-thread-folding-root-unfolded-prefix-string)) (while (not (eobp)) (let ((local-child-overlay ...) (local-root-overlay ...)) (if local-child-overlay (let ... ... ...)) (if local-root-overlay (let ... ... ...)) (if (and ... ...) (setq root-overlay nil)) (forward-line 1)))))))
  mu4e-headers-overlay-set-visibility(t "003")
  (let ((id (overlay-get root-overlay (quote thread-id))) (folded (overlay-get root-overlay (quote folded)))) (mu4e-headers-overlay-set-visibility (not folded) id) (setq keep-searching nil))
  (progn (let ((id (overlay-get root-overlay (quote thread-id))) (folded (overlay-get root-overlay (quote folded)))) (mu4e-headers-overlay-set-visibility (not folded) id) (setq keep-searching nil)))
  (if root-overlay (progn (let ((id (overlay-get root-overlay (quote thread-id))) (folded (overlay-get root-overlay (quote folded)))) (mu4e-headers-overlay-set-visibility (not folded) id) (setq keep-searching nil))))
  (let ((child-overlay (mu4e-headers-get-overlay (quote thread-child))) (root-overlay (mu4e-headers-get-overlay (quote thread-root)))) (if root-overlay (progn (let ((id (overlay-get root-overlay (quote thread-id))) (folded (overlay-get root-overlay (quote folded)))) (mu4e-headers-overlay-set-visibility (not folded) id) (setq keep-searching nil)))) (if (and (not child-overlay) (not root-overlay)) (setq keep-searching nil)) (forward-line -1))
  (while keep-searching (if (bobp) (setq keep-searching nil)) (let ((child-overlay (mu4e-headers-get-overlay (quote thread-child))) (root-overlay (mu4e-headers-get-overlay (quote thread-root)))) (if root-overlay (progn (let ((id (overlay-get root-overlay ...)) (folded (overlay-get root-overlay ...))) (mu4e-headers-overlay-set-visibility (not folded) id) (setq keep-searching nil)))) (if (and (not child-overlay) (not root-overlay)) (setq keep-searching nil)) (forward-line -1)))
  (let ((keep-searching t)) (while keep-searching (if (bobp) (setq keep-searching nil)) (let ((child-overlay (mu4e-headers-get-overlay (quote thread-child))) (root-overlay (mu4e-headers-get-overlay (quote thread-root)))) (if root-overlay (progn (let ((id ...) (folded ...)) (mu4e-headers-overlay-set-visibility (not folded) id) (setq keep-searching nil)))) (if (and (not child-overlay) (not root-overlay)) (setq keep-searching nil)) (forward-line -1))))
  (save-excursion (let ((keep-searching t)) (while keep-searching (if (bobp) (setq keep-searching nil)) (let ((child-overlay (mu4e-headers-get-overlay (quote thread-child))) (root-overlay (mu4e-headers-get-overlay (quote thread-root)))) (if root-overlay (progn (let (... ...) (mu4e-headers-overlay-set-visibility ... id) (setq keep-searching nil)))) (if (and (not child-overlay) (not root-overlay)) (setq keep-searching nil)) (forward-line -1)))))
  (save-current-buffer (set-buffer "*mu4e-headers*") (save-excursion (let ((keep-searching t)) (while keep-searching (if (bobp) (setq keep-searching nil)) (let ((child-overlay (mu4e-headers-get-overlay ...)) (root-overlay (mu4e-headers-get-overlay ...))) (if root-overlay (progn (let ... ... ...))) (if (and (not child-overlay) (not root-overlay)) (setq keep-searching nil)) (forward-line -1))))))
  (if (get-buffer "*mu4e-headers*") (save-current-buffer (set-buffer "*mu4e-headers*") (save-excursion (let ((keep-searching t)) (while keep-searching (if (bobp) (setq keep-searching nil)) (let ((child-overlay ...) (root-overlay ...)) (if root-overlay (progn ...)) (if (and ... ...) (setq keep-searching nil)) (forward-line -1)))))))
  mu4e-headers-toggle-at-point()
  funcall-interactively(mu4e-headers-toggle-at-point)
  call-interactively(mu4e-headers-toggle-at-point nil nil)
  command-execute(mu4e-headers-toggle-at-point)

If I am reading this correctly (I am very new to elisp), it seems like on line 296 the variable root-prefix-overlay is nil. That variable is set on line 291:

(root-prefix-overlay (mu4e-headers-get-overlay 'display root-prefix-beg))

FYI - fairly new to emacs so not sure where to go from here in debugging. I am using spacemacs if that matters.

rougier commented 3 years ago

I think my last commit broke things, I'll try to fix it.

rougier commented 3 years ago

Can you try with latest (github) version ?

jsilve24 commented 3 years ago

Fixed! Thank you!

(Or at least, the overlayp, nil error is fixed, the general branch still needs te nano colors commented out)

jeslie0 commented 3 years ago

I've made a pull request which removes the nano-color requirement and just uses color.

20