display images inline in xterm (while using mutt)

Globe Trotter itsme_410 at yahoo.com
Sat Dec 5 15:59:33 UTC 2020


Thanks very much! I know copr, I am not sure that that site is supported though, not having been updated since Fedora 28 (so for over two years). I will see if I can contact the packager.

Thanks again!



On Saturday, December 5, 2020, 7:48:17 AM CST, David Champion <dgc at c13.us> wrote: 





I don't use Fedora or w3m, and can't speak to what problem you're encountering with it or whether you'd have the same issue with my script and w3m. If you get it to work, I'd be interested in seeing how.

img2sixel is available on fedora, but I'm not sure from which package and I don't understand fedora's packaging options. It's not part of w3m for sure. You could check here though: https://github.com/saitoha/libsixel#using-package-managers. There's something there about a "dnf copr" command. 

On Fri, Dec 4, 2020, 21:15 Globe Trotter via Mutt-users <mutt-users at mutt.org> wrote:
> Thank you for this, and my apologies for top-posting. I have w3m installed but it does not have img2sixel in it (I use Fedora). Could I use w3m (on something else) instead in the code that you have provided?
> 
> Thanks!
> 
> 
> 
> 
> 
> 
> 
> On Friday, December 4, 2020, 3:51:03 PM CST, David Champion <dgc at c13.us> wrote: 
> 
> 
> 
> 
> 
> * On 03 Dec 2020, Globe Trotter via Mutt-users wrote: 
>> Hi,
>> 
>> If I use w3m -o ext_image_viewer=0 test.png, I can get the file test.png inside xterm.
>> 
>> I wanted to do the same on my mutt window (inside xterm). How do I do this?
>> 
>> I tried putting:
>> 
>> image/*;w3m -o ext_imageviewer=0 %s; copious output
>> 
>> However this does not work and gives me the options of w3m in the mutt window. How can I use this?
>> 
>> TIA!
> 
> This is not an answer to your exact question, but here's how I view
> images in mutt. Note that by default it prompts me for inline or
> external viewing, but I can insert -i or -e in the mailcap entry to
> always use one or the other.  The part that's most related to your
> question is that I use img2sixel for the rendering. img2sixel comes with
> libsixel.  IIRC w3m uses libsixel internally, so img2sixel is a quicker
> path to success using the same underlying tooling if your input is
> definitely an image.
> 
> Sixel is a technique developed by DEC to embed color bitmapped image
> data in a VT320/VT400 device control string (DCS) stream of six-bit
> character data. It's probably the most widely supported technique today
> for inline images in terminal emulators, although some terminals such as
> iTerm support their own bitmap streaming formats as well.
> 
> Unfortunately I haven't found any such technique that works well over
> tmux or screen.  There's a thread about this topic on the tmux github
> issues page, concluding that it's not worth the developers' time to
> support.
> 
> 
> .mailcap:
> image/*; mutt-view-image %s
> 
> 
> .muttrc:
> macro index,pager \Cv '<view-attachments><search>image/<enter><view-attach><exit>' 'View image attachment'
> 
> 
> mutt-view-image:
> #!/bin/sh
> 
> case "$1" in
>     -i) mode=inline; shift;;
>     -e) mode=external; shift;;
>     *)  : ;;
> esac
> 
> if [ "$mode" = "" ]; then
>     normal=$(stty -g)
>     printf "Do you want to view (i)nline or (e)xternal? "
>     trap "stty $normal" 1 2 3 15
>     stty raw -echo
> 
>     c=$(dd if=/dev/stdin bs=1 count=1 2>/dev/null)
>     stty $normal
>     echo
> 
>     pause=false
>     case "$c" in
>         i*) mode=inline;;
>         e*) mode=external;;
>     esac
> fi
> 
> if [ "$mode" = "inline" ]; then
>     view="img2sixel %s 2>/dev/null"
>     pause=true
> 
> elif [ "$mode" = "external" ]; then
>     view="xopen %s; sleep 10"
> fi
> 
> xopen () {
>     set -x
>     # External open
>     d=$(dirname "$1")
>     f=$(basename "$1")
>     fn="$d/async_$f"
>     ln "$1" "$fn"
>     at now + 5 minutes <<EOF
> rm "$fn" >/dev/null 2>&1
> EOF
>     # This opens on Linux or MacOS
>     (xdg-open "$fn" || open "$fn") 2>/dev/null
> }
> 
> cmd=$(printf "$view" "$1")
> eval $cmd
> if $pause; then
>     restore=$(stty -g)
>     trap "stty $restore" 1 2 3 15
>     echo
>     echo "Press any key to continue..."
>     stty raw -echo
>     dd if=/dev/stdin bs=1 count=1 of=/dev/null
>     stty $restore
> 
> fi
> 
> 
> exit
> 
> -- 
> David Champion • dgc at c13.us
> 


More information about the Mutt-users mailing list