Re: notmuch-emacs inline image display broken in emacs-29
Hello Alex and David, I also came across this issue: inline image are not displayed only when `notmuch-show-indent-content` is non-nil. However, even when `notmuch-show-indent-content` is `nil` they are displayed but cannot be hidden. As Alex Murray pointed out, the reason is that the function `mm-insert-image` is being changed in Emacs 29 to use `insert-image` instead of `put-image`. `insert-image` inserts images using the `display` property of a whitespace character. The effect is that when `indent-rigidly` is called in `notmuch-show-insert-msg`, whitespace is removed and hence the image is removed. I've filed a bug#62637 on bug-gnu-emacs to discuss this. An easy fix in `mm-insert-image` is use non-whitespace character (the second argument of `insert-image`) so that it is not deleted by `indent-rigidly`. This change actually makes indenting images work in the new version. The other issue is that hiding an overlay created around such an image does not seem to work (see bug#62637 for a discussion). A way to resolve this is to add some whitespace (like a newline) inside the overlay before the image, which seems to fix things. -- Al ___ notmuch mailing list -- notmuch@notmuchmail.org To unsubscribe send an email to notmuch-le...@notmuchmail.org
Re: notmuch-emacs inline image display broken in emacs-29
On Sat, 2023-02-25 at 09:48:08 -0400, David Bremner wrote: > David Bremner writes: > >> Alex Murray writes: >> >> I tried replacing indent-rigidly with a simplified version the and that >> leaves the image inserted, but unfortunately doesn't indent it >> properly. If you want to play with it, my half working patch is >> attached. >> > > Actually, the current implementation using indent-rigidly doesn't indent > inlined images properly either, so maybe that is a way forward. I > remember from last time I considered globally replacing our use of > indent-rigidly [1] there were a few issues to be dealt with, but maybe > this is a reasonable approach. > Thanks for the patch David - I tried the one attached to the previous email it but it doesn't seem to fix the issue for me. I also tried the one in [1] and that did seem to help - images in replies (and hence emails that by default are displayed with an indent) show up now, but not for emails that are the first ones in a thread (and hence have no indent by default). (although I notice in a recent conversation in #notmuch that it did appear to work for one user - but not sure which patch they were using). Any ideas where I should start trying to debug this on my side? I am using a pretty recent build of emacs from master with a the latest notmuch-emacs bits from MELPA - https://melpa.org/#/notmuch (and the notmuch binary 0.37 - as packaged in Ubuntu 23.04 with version 0.37-1ubuntu3 FWIW). > [1]: > https://nmbug.notmuchmail.org/nmweb/show/20211214121726.2631714-1-da...@tethera.net > ___ > notmuch mailing list -- notmuch@notmuchmail.org > To unsubscribe send an email to notmuch-le...@notmuchmail.org ___ notmuch mailing list -- notmuch@notmuchmail.org To unsubscribe send an email to notmuch-le...@notmuchmail.org
Re: notmuch-emacs inline image display broken in emacs-29
David Bremner writes: > Alex Murray writes: > > I tried replacing indent-rigidly with a simplified version the and that > leaves the image inserted, but unfortunately doesn't indent it > properly. If you want to play with it, my half working patch is > attached. > Actually, the current implementation using indent-rigidly doesn't indent inlined images properly either, so maybe that is a way forward. I remember from last time I considered globally replacing our use of indent-rigidly [1] there were a few issues to be dealt with, but maybe this is a reasonable approach. [1]: https://nmbug.notmuchmail.org/nmweb/show/20211214121726.2631714-1-da...@tethera.net ___ notmuch mailing list -- notmuch@notmuchmail.org To unsubscribe send an email to notmuch-le...@notmuchmail.org
Re: notmuch-emacs inline image display broken in emacs-29
Alex Murray writes: > Hi folks, > > I have noticed that inline image display doesn't work anymore in > emacs-29 / git master and have tracked it down to a change to the way > mm-inline-image inserts an image into the buffer. > > In > https://git.savannah.gnu.org/cgit/emacs.git/commit/?id=d2186160a9e978960c0f96bc3b4fc65b5affc170 > mm-inline-image was changed to use insert-image instead of > put-image. This inserts the image into the buffer using a single space > as the string contents with a display property set as the image contents > so that the single space is not shown itself but instead the image is > shown in its place. > > I had thought the culprit then was the use of > notmuch-wash-elide-blank-lines within the default value of > notmuch-show-insert-text/plain-hook - assuming that since the line > containing the image is now just a single space, it then gets deleted > from the buffer and the image is never shown. However, even after > setting notmuch-show-insert-text/plain-hook to nil, images are still not > shown inline by notmuch. > > However, if I locally redefine mm-inline-image to use say a period "." > as the string argument to insert-image then the image appears as > expected. > > Any thoughts on what may be happening here and how best to resolve this? > The problem seems to be the call to indent-rigidly in notmuch-show-lazy-part. The image is actually inserted OK, but then apparently deleted by indent-rigidly (probably because it looks like whitespace). I tried replacing indent-rigidly with a simplified version the and that leaves the image inserted, but unfortunately doesn't indent it properly. If you want to play with it, my half working patch is attached. >From 484f78e11d7f520b76b30b7d92aec15ff71f215f Mon Sep 17 00:00:00 2001 From: David Bremner Date: Sat, 25 Feb 2023 09:12:57 -0400 Subject: [PATCH] WIP: replace use of indent-rigidly in notmuch-show-lazy --- emacs/notmuch-show.el | 21 - 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/emacs/notmuch-show.el b/emacs/notmuch-show.el index 36cce619..522ba1fd 100644 --- a/emacs/notmuch-show.el +++ b/emacs/notmuch-show.el @@ -324,6 +324,25 @@ position of the message in the thread." ;;; Utilities +;; force all indentation to be spaces at BOL +;; Based on apply-on-rectangle, from rect.el +(defun notmuch--indent-rigidly (start end count) + (cond + ((zerop count) t) + ((< count 0) (indent-rigidly start end count)) + (t +(save-excursion + (let ((startpt (progn (goto-char start) (line-beginning-position))) + (endpt (progn (goto-char end) (line-end-position))) + (spaces (spaces-string count))) + (goto-char startpt) + (while + (progn + (insert spaces) + (cl-incf endpt count) + (and (zerop (forward-line 1)) (bolp) + (<= (point) endpt) + (defmacro with-current-notmuch-show-message ( body) "Evaluate body with current buffer set to the text of current message." `(save-excursion @@ -1024,7 +1043,7 @@ will return nil if the CID is unknown or cannot be retrieved." (narrow-to-region part-beg part-end) (delete-region part-beg part-end) (apply #'notmuch-show-insert-bodypart-internal part-args) - (indent-rigidly part-beg + (notmuch--indent-rigidly part-beg part-end (* notmuch-show-indent-messages-width depth))) (goto-char part-end) -- 2.39.1 ___ notmuch mailing list -- notmuch@notmuchmail.org To unsubscribe send an email to notmuch-le...@notmuchmail.org
notmuch-emacs inline image display broken in emacs-29
Hi folks, I have noticed that inline image display doesn't work anymore in emacs-29 / git master and have tracked it down to a change to the way mm-inline-image inserts an image into the buffer. In https://git.savannah.gnu.org/cgit/emacs.git/commit/?id=d2186160a9e978960c0f96bc3b4fc65b5affc170 mm-inline-image was changed to use insert-image instead of put-image. This inserts the image into the buffer using a single space as the string contents with a display property set as the image contents so that the single space is not shown itself but instead the image is shown in its place. I had thought the culprit then was the use of notmuch-wash-elide-blank-lines within the default value of notmuch-show-insert-text/plain-hook - assuming that since the line containing the image is now just a single space, it then gets deleted from the buffer and the image is never shown. However, even after setting notmuch-show-insert-text/plain-hook to nil, images are still not shown inline by notmuch. However, if I locally redefine mm-inline-image to use say a period "." as the string argument to insert-image then the image appears as expected. Any thoughts on what may be happening here and how best to resolve this? Thanks, Alex ___ notmuch mailing list -- notmuch@notmuchmail.org To unsubscribe send an email to notmuch-le...@notmuchmail.org