Commit | Line | Data |
---|---|---|
977b473d KL |
1 | #!/bin/bash |
2 | ||
3 | # This is a modified version of the 'imgls' from iTerm2 located at | |
4 | # https://iterm2.com/utilities/imgls, modified to emit images with the | |
5 | # Jexer image protocol. | |
6 | ||
7 | # tmux requires unrecognized OSC sequences to be wrapped with DCS tmux; | |
8 | # <sequence> ST, and for all ESCs in <sequence> to be replaced with ESC ESC. It | |
9 | # only accepts ESC backslash for ST. | |
10 | function print_osc() { | |
11 | if [ x"$TERM" = "xscreen" ] ; then | |
12 | printf "\033Ptmux;\033\033]" | |
13 | else | |
14 | printf "\033]" | |
15 | fi | |
16 | } | |
17 | ||
18 | function check_dependency() { | |
19 | if ! (builtin command -V "$1" > /dev/null 2>& 1); then | |
20 | echo "imgcat: missing dependency: can't find $1" 1>& 2 | |
21 | exit 1 | |
22 | fi | |
23 | } | |
24 | ||
25 | # More of the tmux workaround described above. | |
26 | function print_st() { | |
27 | if [ x"$TERM" = "xscreen" ] ; then | |
28 | printf "\a\033\\" | |
29 | else | |
30 | printf "\a" | |
31 | fi | |
32 | } | |
33 | ||
34 | function list_file() { | |
35 | fn=$1 | |
36 | test -f "$fn" || return 0 | |
37 | ||
38 | if [ "${fn: -4}" == ".png" ]; then | |
39 | print_osc | |
40 | printf '444;1;1;' | |
41 | base64 < "$fn" | |
42 | print_st | |
43 | elif [ "${fn: -4}" == ".jpg" ]; then | |
44 | print_osc | |
45 | printf '444;2;1;' | |
46 | base64 < "$fn" | |
47 | print_st | |
48 | fi | |
49 | } | |
50 | ||
51 | check_dependency base64 | |
52 | ||
53 | if [ $# -eq 0 ]; then | |
54 | for fn in * | |
55 | do | |
56 | list_file "$fn" | |
57 | done < <(ls -ls) | |
58 | else | |
59 | for fn in "$@" | |
60 | do | |
61 | list_file "$fn" | |
62 | done | |
63 | fi | |
64 |