You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
55 lines
1.5 KiB
55 lines
1.5 KiB
2 years ago
|
#!/usr/bin/env sh
|
||
|
|
||
|
# This spell reveals the x and y coordinates of the cursor in the terminal window.
|
||
|
|
||
|
# Define the function to calculate the position of the cursor
|
||
|
fathom_cursor() {
|
||
|
local position
|
||
|
local x=false
|
||
|
local y=false
|
||
|
local verbose=false
|
||
|
while getopts 'vxy' flag; do
|
||
|
case "${flag}" in
|
||
|
--verbose|v) verbose=true ;;
|
||
|
x) x=true ;;
|
||
|
y) y=true ;;
|
||
|
esac
|
||
|
done
|
||
|
|
||
|
# Get the position of the cursor
|
||
|
position=$(IFS=';' read -sdR -p $'\E[6n' ROW COL; printf "%s;%s" "${ROW#*[}" "$COL")
|
||
|
|
||
|
if [ $x = true ] && [ $y = true ]; then
|
||
|
if [ $verbose = true ]; then
|
||
|
printf "X: %s\n" "${position##*;}"
|
||
|
printf "Y: %s\n" "${position%%;*}"
|
||
|
else
|
||
|
printf "%s\n" "${position##*;}"
|
||
|
printf "%s\n" "${position%%;*}"
|
||
|
fi
|
||
|
else
|
||
|
if [ $x = true ]; then
|
||
|
if [ $verbose = true ]; then
|
||
|
printf "X: "
|
||
|
fi
|
||
|
printf "%s\n" "${position##*;}"
|
||
|
elif [ $y = true ]; then
|
||
|
if [ $verbose = true ]; then
|
||
|
printf "Y: "
|
||
|
fi
|
||
|
printf "%s\n" "${position%%;*}"
|
||
|
else
|
||
|
if [ $verbose = true ]; then
|
||
|
printf "Position: "
|
||
|
fi
|
||
|
printf "%s\n" "$position"
|
||
|
fi
|
||
|
fi
|
||
|
}
|
||
|
|
||
|
# Check if the script is being called from another script
|
||
|
if [ "${BASH_SOURCE[0]}" = "$0" ]; then
|
||
|
# If not, call the function
|
||
|
fathom_cursor "$@"
|
||
|
fi
|