diff --git a/spells/cantrips/fathom-cursor b/spells/cantrips/fathom-cursor index f6f7494..e0cd3c4 100755 --- a/spells/cantrips/fathom-cursor +++ b/spells/cantrips/fathom-cursor @@ -16,12 +16,23 @@ fathom_cursor() { done # Get the position of the cursor - stty -echo - printf "\033[6n" - oldIFS="$IFS"; IFS=';' read -r ROW COL - stty echo - position=$(printf "%s;%s" "${ROW#*[}" "${COL%%R*}") - IFS="$oldIFS" + oldstty=$(stty -g) + stty raw -echo min 0 + printf "\033[6n" > /dev/tty + + result="" + char="" + while IFS= read -r -n 1 char; do + result="$result$char" + if [ "$char" = "R" ]; then + break + fi + done < /dev/tty + stty "$oldstty" + + ROW="${result#*[}" + COL="${result%;R}" + position=$(printf "%s;%s" "$ROW" "$COL") if $x && $y; then if $verbose; then @@ -45,14 +56,4 @@ fathom_cursor() { fi } -test_fathom_cursor() { - assert_equal "$(./fathom-cursor -x)" "$(./fathom-cursor -y)" "fathom_cursor -x and -y outputs differ" - assert_equal "$(./fathom-cursor -x -v)" "X: $(./fathom-cursor -x)" "fathom_cursor -x and -x -v outputs differ" - assert_equal "$(./fathom-cursor -y -v)" "Y: $(./fathom-cursor -y)" "fathom_cursor -y and -y -v outputs differ" - assert_equal "$(./fathom-cursor -x -y -v)" "X: $(./fathom-cursor -x)\nY: $(./fathom-cursor -y)" "fathom_cursor -x -y and -x -y -v outputs differ" - assert_equal "$(./fathom-cursor -v -x -y)" "Position: $(./fathom-cursor -x -y)" "fathom_cursor -v -x -y and -x -y outputs differ" - assert_equal "$(./fathom-cursor -v)" "$(./fathom-cursor -x -y -v)" "fathom_cursor -v and -x -y -v outputs differ" - assert_equal "$(./fathom-cursor)" "$(./fathom-cursor -x -y)" "fathom_cursor and -x -y outputs differ" -} - fathom_cursor "$@" \ No newline at end of file