--- /dev/null
+#!/bin/bash
+
+# This is a modified version of the 'imgls' from iTerm2 located at
+# https://iterm2.com/utilities/imgls, modified to emit images with the
+# Jexer image protocol.
+
+# tmux requires unrecognized OSC sequences to be wrapped with DCS tmux;
+# <sequence> ST, and for all ESCs in <sequence> to be replaced with ESC ESC. It
+# only accepts ESC backslash for ST.
+function print_osc() {
+ if [ x"$TERM" = "xscreen" ] ; then
+ printf "\033Ptmux;\033\033]"
+ else
+ printf "\033]"
+ fi
+}
+
+function check_dependency() {
+ if ! (builtin command -V "$1" > /dev/null 2>& 1); then
+ echo "imgcat: missing dependency: can't find $1" 1>& 2
+ exit 1
+ fi
+}
+
+# More of the tmux workaround described above.
+function print_st() {
+ if [ x"$TERM" = "xscreen" ] ; then
+ printf "\a\033\\"
+ else
+ printf "\a"
+ fi
+}
+
+function list_file() {
+ fn=$1
+ test -f "$fn" || return 0
+
+ if [ "${fn: -4}" == ".png" ]; then
+ print_osc
+ printf '444;1;1;'
+ base64 < "$fn"
+ print_st
+ elif [ "${fn: -4}" == ".jpg" ]; then
+ print_osc
+ printf '444;2;1;'
+ base64 < "$fn"
+ print_st
+ fi
+}
+
+check_dependency base64
+
+if [ $# -eq 0 ]; then
+ for fn in *
+ do
+ list_file "$fn"
+ done < <(ls -ls)
+else
+ for fn in "$@"
+ do
+ list_file "$fn"
+ done
+fi
+