LINUX.ORG.RU
ФорумAdmin

как осуществить привязку к количеству строк и точек по горизонтали в скриптах


1

2

Есть разные эскейп последовательности - можно выводить в определённое место на экране. Как привязать этот вывод к количеству точек по горизонтали и строкам по вертикали? Мне надо вывести в определённое место на экране, на разном железе - разные видео карты, разные мониторы - соответственно разное количество строк и точек по горизонтали. Возможно ли вообще осуществить такой вывод?????

★★

эскейп последовательности

Значит в консоли.

Как привязать этот вывод к количеству точек по горизонтали и строкам по вертикали?

Никак, консоль — текстовый интерфейс. Можно привязать к кол-ву строк/столбцов — $COLUMNS $LINES.

Возможно ли вообще осуществить такой вывод?????

Ну лол.

anonymous ()
Ответ на: комментарий от anonymous

у меня фреймбуферовская консол, т. е. консоль не 25 строк и 80 символов

v4567 ★★ ()
Ответ на: комментарий от v4567

не 25 строк и 80 символов

И что?

фреймбуферовская консол

Значит ещё можешь писать битмапы в /dev/fb*.

anonymous ()
Ответ на: комментарий от anonymous

Значит ещё можешь писать битмапы в /dev/fb*.

и что это мне даст????

v4567 ★★ ()
Ответ на: комментарий от v4567

Обои с понями в консоли, например,

anonymous ()
Ответ на: комментарий от anonymous

Обои с понями в консоли, например,

обои у меня есть, мне нужно выводить в определённое место независимо от железа.

v4567 ★★ ()
Ответ на: комментарий от anonymous

в том то и проблема что не знаю как это сделать...........

v4567 ★★ ()
Ответ на: комментарий от v4567

man console_codes

Например:

for i in $(seq 20);do echo -ne "z\e[${i};${i}H";done;unset i

anonymous ()
Ответ на: комментарий от anonymous

выводит букву «z» лесенкой - и всё, что и соответствует написанному.

v4567 ★★ ()
Ответ на: комментарий от v4567

Это и должен делать — позиционировать курсор. Вот ещё пример:

echo -ne '\e[32m'

while true;do
  for _ in $(seq 30);do sleep 0.04;echo -ne '\e[2K\e[1CX';done
  for _ in $(seq 30);do sleep 0.04;echo -ne '\e[2K\e[3DX';done
done

echo -ne '\e[0m'

anonymous ()
Ответ на: комментарий от anonymous

это не то что мне нужно. Мне надо выводить в одно и то же место экрана при разном железе - то есть линукс грузится на разном железе, разные видео карты, разные мониторы, а у меня выводится в одно и то же место на мониторах. Спасибо что помогаете, но это не то что нужно!

v4567 ★★ ()
Ответ на: комментарий от v4567

Так что значит «в одно и то же место экрана»? Тебе в консоли или на рабочем столе? Как можно быть таким косноязычным?

anonymous ()
Ответ на: комментарий от anonymous

консоль на весь экран вот в консоли или соответственно на экране в одно и то же место.

v4567 ★★ ()
Ответ на: комментарий от v4567

Ну так вот мой пример это и делает, не?

anonymous ()
#!/bin/bash
echo "Current console size: $LINES x $COLUMNS"
blexey ★★★★★ ()
Ответ на: комментарий от anonymous

разное железо подразумевает и разное разрешение экрана, так вот на разных разрешениях у тебя первая строка for выводит X в разных местах.

v4567 ★★ ()
Ответ на: комментарий от v4567

echo «Current console size: $LINES x $COLUMNS»

если взять эти параметры то при разных разрешениях вывод будет в разные места экрана.

v4567 ★★ ()
Ответ на: комментарий от v4567

Зато в одном и том же месте терминала.

anonymous ()

Возможно ли вообще осуществить такой вывод?????

Нет, вывод эскейп-последовательностей будет всегда привязан к сетке символов. В общем случае строку или символ на разных мониторах в одно и то же место с точностью до пикселя ты _не_выведешь_. Ты можешь воспользоваться фреймбуфером, если тебе нужна именно консоль, или иксами, если нужен рабочий стол. В любом случае, через скрипт просто так ты этого не сделаешь, придётся либо искать утилиту специализированную, либо писать самому.

E ★★★ ()
Ответ на: комментарий от v4567

Простая пропорция же, ну!.. Если нужно вывести в середину экрана, используем координаты (0.5*COLUMNS, 0.5*ROWS). Для других точек - преобразование аналогично и очевидно (x*COLUMNS, y*ROWS).

kvap ()
Ответ на: комментарий от MiniRoboDancer

Это местный хелп-вампир, играющий в дурачка.

anonymous ()
Ответ на: комментарий от anonymous

хелп-вампир

Это такой новый вид унылых троллей? Ну оно хотя бы тоньше, чем большинство местной нечисти. Прогресс налицо, видимо, на ЛОРе сейчас просто дурное поколение.

MiniRoboDancer ★☆ ()
Ответ на: комментарий от anonymous

Всё разобрался, спасибо blexey и kvap за подсказку:

Простая пропорция же, ну!.. Если нужно вывести в середину экрана, используем координаты (0.5*COLUMNS, 0.5*ROWS). Для других точек - преобразование аналогично и очевидно (x*COLUMNS, y*ROWS).

Да действительно, как я раньше не догадался. Нужно определить относительно место вывода, например если нужно вывести в центре экрана, то независимый от количества символов в строке, вывод в центре получится такой командой:

qwe=`expr $COLUMNS / 2` ; echo -e "\e["$qwe"CX"

v4567 ★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.