화면의 xy 좌표에서 문자 읽기

화면의 xy 좌표에서 문자 읽기

bash에서 화면의 xy 좌표에서 문자를 읽는 방법이 있습니까? 이 명령은 다음과 유사합니다.

cget 12 30

그러면 12행, 30열의 문자가 반환됩니다.

답변1

텍스트 모드에서 콘솔 tty를 사용하는 경우( /dev/tty1경유 /dev/tty7) 해당 장치에서 직접 화면 버퍼를 읽을 수 있습니다 /dev/vcsN.

실제로 한 줄에 80자가 있다고 가정하면 안 되므로 터미널에 각 줄의 문자를 표시하도록 요청해야 합니다. 그런 다음 (x,y) 좌표를 오프셋(y*c + x)으로 변환하는 간단한 수학을 통해 원하는 문자를 얻을 수 있습니다.

#!/bin/bash
#
my_tty=$(tty)
vcs_nr="${my_tty/*tty/}"

# Read Y, X from first two characters of /dev/vcsaN (we only use X)
xwidth=$(
    dd if="/dev/vcsa$vcs_nr" bs=1c count=2 2>/dev/null |
    od -t u1 -A d |
    awk '{print $3; exit}'
)

# Calculate byte offset into the screen
offset=$(( ($2 -1) * xwidth + ($1 -1) ))

# Read the data
dd count=1 skip="$offset" bs=1 if="/dev/vcs$vcs_nr" 2>/dev/null

물론 이는 /dev/vcsN 장치에 대한 루트 액세스를 가정합니다.

관련 정보