LINUX.ORG.RU

Таблица в консоли

 ,


1

5

Привет. Какая-то либа, которая позволит без гемора выводить в консоль таблицы заполнив некоторый двухмерный массив. С автопереносом линий в колонке, если не вмещается целиком. Что это?

★★

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

Думал есть что попроще. ncurces слишком много умеет при взгляде со стороны. На крайняк буду разбираться с ней.

pavlick ★★
() автор топика

мне кажется с termbox это будет легче сделать чем с ncurses

anonymous
()

Тебе нужно именно выводить, без редактирования? Тогда нкурсесы не нужны. Нужен инструмент, который твои таблицы переформатирует под заданные ширины столбцов. А вывод после этого можно делать обычным printf().

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

Да, просто вкинуть в некий черный ящик текст полей, и напечатать автоматом отформатированную таблицу в консоль.

pavlick ★★
() автор топика
cat <<EOF | column -t
test test test
1 2 3
EOF
beastie ★★★★★
()

Ребят, спасибо за варианты. FTXUI должна подойти идеально, думаю. Пока еще не разбирался плотно, скоро начну.

pavlick ★★
() автор топика

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

peregrine ★★★★★
()
Последнее исправление: peregrine (всего исправлений: 1)
Ответ на: комментарий от peregrine

Всё с этим нормально. Много лет не видел разъезжающихся столбцов в терминале.

Конечно, у меня не на всех алфавитах мира встречаются названия файлов. Но для большинства случаев всё работает.

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

Как разраб говорю что не нормально. То что ты не встречал, не значит что этого нет. Ты просто не пишешь на традиционных языках индии.

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

Я тебя разочарую, но некоторые символы не влезают в wchar и кодируются несколькими wchar’ами. wchar вообще жертва аборта.

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

Ты просто не пишешь на традиционных языках индии.

Хм, а их вообще реально засунуть в терминал? Какое там направление письма?

Кстати, накрайняк сложные случаи письменностей можно рендерить на стороне приложения и выводить в терминал с использованием SIXTEL. Так хотя бы можно точно знать, сколько места они занимают по ширине.

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

У мелкомягких? Это их проблемы, мне как-то все равно, должно влезать.

Вот на линуксе: https://gcc.godbolt.org/z/8MxfT8

А теперь подумай, почему флаг это один видимый «символ», а gcc говорит, что это 4 символа в строке…

fsb4000 ★★★★★
()
Последнее исправление: fsb4000 (всего исправлений: 1)
Ответ на: комментарий от peregrine

Пример будет?

Вроде в Unicode это всё стандартизировано, и терминалы должны следовать этому же стандарту…

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

〄 ну например, это один символ, не 2, но по ширине должны быть как 2, правда мне лениво другой символ искать, взял первый из гугла, ещё надо убедиться, что й и й адекватно обрабатываются твоей библиотекой и строка из йййййййййй и йййййййййй это 10 букв, а не 10 и 20. Кстати гнутые утилиты (из coreutils) в это не умеют, они даже в кириллицу не умеют, тот же column обрабатывает unicode как ASCII

peregrine ★★★★★
()
Последнее исправление: peregrine (всего исправлений: 2)
Ответ на: комментарий от fsb4000

Что-ты меня конкретно озадачил … Как это так получилось, что для кодировки 150К символов не хватает 4 байт.

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

Конечно нет. Добро пожаловать в мир графемных кластеров.

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

Как это так получилось, что для кодировки 150К символов не хватает 4 байт.

А там ещё свободных полно, но чтобы их меньше расходовалось, придумали модификаторы.

вот пара примеров: https://imgur.com/a/E9YSsnK

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

А там ещё свободных полно, но чтобы их меньше расходовалось, придумали модификаторы.

А чтобы больше расходовалось, придумали цветных человечков и всякий LGBT.

wandrien ★★
()

Ребят извиняюсь, гуглить сейчас особо времени нет. Чисто с практической стороны - можно ли надежно определить, что в строке нет всего этого непотребства (комбинированные символы)? Т.е. перегнать строку в вчар, пробежаться по ней в поисках символа-объединителя, в случае наличия - бросить исключение. Рабочая схема?

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

Просто используй wcswidth(), чтобы определить, сколько колонок терминала надо строке текста.

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

Рабочая схема?

  • Не слушать peregrine. Это очередной воин пафоса с ранением в юникод.
  • Не пытаться надувать щёки, рассуждать про быдлокод и пытаться следовать принципу «написано один раз - работает всегда»(это фэйл 100%).
  • Реализовать обработку существующих кейсов и угомониться уже.

Профита в конце списка не будет, ибо у властелинов локалхоста его не бывает(а в коммерческом софте на ерунде вида «а вдруг попадётся модификатор, не занимающий знакоместа?» не заморачиваются).

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

Юникод поехал уже тогда, когда в него начали добавлять мертвые языки и всякую подобную хероту: 𓀐𓂺

Дублировать графемы захардкоженными шрифтами просто потому что левая пятка какого-то дизайнера почесалась и он воткнул туда свой любимый шрифт из GTA: San Andreas: 𝖇𝖑𝖆𝖈𝖐 𝖑𝖎𝖛𝖊𝖘 𝖒𝖆𝖙𝖙𝖊𝖗

Оттенки кожи, 256 разных LGBT-полов, BLM emoji и прочие юникотики со смешными какашками лишь окончательно подтверждают что чем больше стандарт распухает, тем большее влияние в нем имеют различные неадекваты.

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

Юникод поехал уже тогда, когда в него начали добавлять мертвые языки и всякую подобную хероту

То есть символ $, существующий ещё с ascii, тебя не смущает?

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

Согласен. Я нашёл тот стандарт, про который я помнил: http://www.unicode.org/reports/tr11/

Но современные функции не очень его поддерживают…

Например, вот ошибка на женщине-учёном: https://gcc.godbolt.org/z/5nz6K5

Показывает 4 символа будет занимать вывод в терминале вместо двух…

Ребят извиняюсь, гуглить сейчас особо времени нет. Чисто с практической стороны - можно ли надежно определить, что в строке нет всего этого непотребства (комбинированные символы)? Т.е. перегнать строку в вчар, пробежаться по ней в поисках символа-объединителя, в случае наличия - бросить исключение. Рабочая схема?

@pavlick

Как посоветовал @wandrien просто используй wcswidth, на всяких комбинированных символах он лажает, но в целом работает норм…

https://gcc.godbolt.org/z/5nz6K5

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

Символы валют важны и нужны ибо их используют. Да и в куче ЯП этот $ имеет довольно большой вес. А зачем такая хрень в юникоде: для всех остается загадкой.

https://ru.wikipedia.org/wiki/Мультиокулярная_О

Какой-то монах однажды решил в своей летописи наглядно «многоглазость» показать рисунком поверх текста. Другой наркоман увидел этот рисунок и побежал добавлять его в Unicode, как новую графему.

Клиника.

EXL ★★★★★
()
Последнее исправление: EXL (всего исправлений: 1)
Ответ на: комментарий от EXL

Символы валют важны и нужны ибо их используют.

𓂺 используется много чаще, чем $ и @.

Какой-то монах однажды решил в своей летописи наглядно «многоглазость» показать рисунком поверх текста. Другой наркоман увидел этот рисунок и побежал добавлять его в Unicode, как новую графему.

Вообще-то, большинство(если не все) буквы именно так и появились(Ж, например). Пчёлы против мёда прям.

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

𓂺 используется много чаще, чем $ и @.

Разве что в твоих влажных снах.

Вообще-то, большинство(если не все) буквы именно так и появились(Ж, например). Пчёлы против мёда прям.

Поэтому следует добавить все картинки мира в Unicode. На всякий случай.

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

Разве что в твоих влажных снах.

Лужа?

Поэтому следует добавить все картинки мира в Unicode. На всякий случай.

Нужно вообще ничего не добавлять. На всякий случай.

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

Ну вот, а говорил не нужно. Оно просто в употребление ещё не вошло. Хотя, вон конь местный довольно активно юзает.

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

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

Владимир

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

Очень круто, спасибо за ссылки. Нужно. Похоже мне нужно учиться рыть на гитхабе. Может плохо старался, одну дрянь находил.

pavlick ★★
() автор топика

Подключение статических, системных либ

Друзья, коль уж тема существует, давайте еще этот вопрос затронем. Вот у меня небольшое недопонимание по этому поводу имеетя. Представим, что в разных системах некая либа libname.a, libname.so может лежать в разных местах (/usr/lib, /usr/local/lib). Мы не хотим подключать все либы к бинарю статически (через флаг -static), а хотим лишь эту (libname.a). Как это сделать? -lname подключит разделяемую версию, autoconf тоже добавит -lname к флагам, прописать абсолютный путь - не вариант. Да, можно заюзать pkgconfig, а без него можно?

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

А то глянул на ncurces, там, блин, запаришься разбираться.

Там нет ничего сложного, просто эта библиотека несколько для другого. Например, для того, чтобы выводить указанные символы или строки по указанным координатам в консоли.

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