I expect, at the minimum:
- a rust port
- an emacs port
:-)
- a rust port
- an emacs port
:-)
;;; artist.el --- draw ascii graphics with your mouse -*- lexical-binding: t -*-
;; Copyright (C) 2000-2023 Free Software Foundation, Inc.
It is not as nice and colorful, but it has a spray tool (yay!). Also, it is actually useful once in a while [0].[0] https://mbork.pl/2023-07-15_Drawing_ASCII_art_charts_in_Emac...
r() { read -n1 -r c; [ "$c" = "$1" ]; }; b=2; stty -echo -icanon; printf '\033[H\033[0m\033[J\033[?1003h'; while true; do r $'\033' || { printf '%s\n' "$c" | grep -qE '[0-7]' && b=$c; continue; }; r \[ || continue; r "M" || continue; r "@" && d=y || d=; read z x y z < <(head -c 2 | hexdump -C); [ $d ] || continue; printf '\033[%d;%dH\033[1;4%dm \033[0m\033[D' $((0x${y}-32)) $((0x${x}-32)) $b; done
(you can change colour with digits 1..7 btw!)
- no external grep anymore
- smaller (303 instead of 400 bytes)
- cleanup of mouse mode on exit
p(){ for i;do printf "\e[$i";done;};r(){ read -rn1 c;[[ $c = $1 ]];};stty -echo cbreak;p H m J ?1003h;trap 'p ?1003l' 0;while d=;do r $'\e'||{ [[ $c =~ [0-7] ]]&&b=$c;continue;};r \[||continue;r M||continue;r @&&d=y;read _ x y _< <(head -c2|od -tu1);[ $d ]&&p "$((y-32));$((x-32))H" "4${b-2}m " m D;done