Lê um caractere de uma coordenada x-y na tela

2

Existe uma maneira no bash de ler um caractere de uma coordenada x-y na tela? Este comando seria algo semelhante a

cget 12 30

que retornaria o personagem na 12ª linha e na 30ª coluna.

    
por Darth Egregious 26.01.2015 / 16:14

1 resposta

4

Se você estiver usando o console ttys ( /dev/tty1 a /dev/tty7 ) no modo de texto, poderá ler o buffer de tela diretamente do dispositivo /dev/vcsN correspondente.

Como você não deve assumir que existem 80 caracteres por linha, é necessário pedir ao terminal para exibir seus caracteres por linha. Em seguida, as matemáticas simples converterão uma coordenada (x, y) em deslocamento (y * c + x) para obter o caractere desejado:

#!/bin/bash
#
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

Isso pressupõe acesso root aos dispositivos / dev / vcsN, é claro.

    
por 26.01.2015 / 16:41