LINUX.ORG.RU

FTXUI 4.1.1 - библиотека в функциональном стиле для создания консольных приложений

 , , , ,

FTXUI 4.1.1 - библиотека в функциональном стиле для создания консольных приложений

9

3

После более трёх месяцев разработки состоялся выпуск 4.1.1 кроссплатформенной библиотеки для C++ (стандарт C++17) FTXUI (Functional Terminal (X) User Interface), предназначенной для создания приложений с текстовым интерфейсом и распространяемой по лицензии MIT.

Возможности:

  • функциональный стиль, наподобие React JS;
  • простой и элегантный стиль (по мнению автора библиотеки);
  • обработка событий клавиатуры и «мыши»;
  • поддержка UTF8 и Unicode;
  • поддержка True Color;
  • поддержка изменения стиля курсора;
  • поддержка анимаций;
  • поддержка рисования;
  • не зависит от библиотек ncurses, termbox или подобных;
  • кроссплатформенность (Linux/MacOS, WebAssembly, Windows).

Список изменений:

  • поддержка клавиш со стрелками в режиме приложения;
  • удален ненужный перевод строки при использовании альтернативного буфера экрана эмулятора терминала;
  • добавлен пунктирный стиль для границ и разделителей;
  • добавлена поддержка цветных границ;
  • добавлен линейный градиент для использования в свойствах color и bgColor;
  • функция Color::Interpolate() использует гамма-коррекцию;
  • добавлена проверка области при отрисовке компонента Graph;
  • использование глобальной переменной CMAKE_CXX_STANDARD, если она задана;
  • добавлен файл pkg-config;
  • проверка совместимости версий при использовании в CMake find_package().

На скриншоте — утилита rgb-tui от автора библиотеки.

>>> Подробности

★★★★★

Проверено: hobbit ()
Последнее исправление: hobbit (всего исправлений: 2)

простой и элегантный стиль (по мнению автора библиотеки)

По-моему обосновано )

erfea ★★★★★
()

Астрологи объявили неделю tui? Ждем новости про ncurses.

Werenter ★★☆
()

Лично для меня немаловажным фактором оценки TUI-тулкитов является поддержка мыши под иксами. Было бы неплохо указывать эту информацию в описаниях таких тулкитов в новостях.

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

обработка событий клавиатуры и «мыши»;

Так вот же! Или это что-то другое?

Хотя перевод я бы сказал что кривой, на гитхабе это выглядит как

Keyboard & mouse navigation.

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

Я не знаю, какие есть варианты, подозреваю, что их больше одного. Хочется, чтобы как в mc, кликнул по элементу и он сработал.

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

в голой консоли

Что это? Есть ядерная консоль (TTY), а есть эмулятор консоли (терминальный эмулятор).

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

Ну по мне так можно что-то вроде возможность управления с помощью мыши и клавиатуры. Просто «обработка событий» немного вводит в заблуждение, может это про то что коде можно такие события обрабатывать.

А вообще, интереснее было бы наоборот узнать, может ли оно в управление мышью без иксов, из ядерной консоли. А с иксами это довольно тривиально.

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

Раньше ты просто набрасывал максимально тупо и незатейливо, теперь ты это делаешь, ещё и не читая.

кроссплатформенность (Linux/MacOS, WebAssembly, Windows).

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

управление мышью без иксов, из ядерной консоли.

Раньше таким занимался gpm. Это была отдельная от ncurses сущность, не знаю, есть ли в ncurses отдельная поддержка для gpm и нужна ли она вообще.

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

Разудаляй!

А я ничего и не удалял. :P

Ну и если б ты сразу вместо «нинужны» поставил ссылку — одним клоун-смайликом в теме было бы меньше.

P.S. Клоуна убрал.

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

Список пакетов у которых в генте можно поддержку gpm включить

app-editors/emacs-28.2-r8:28
app-editors/vim-9.0.1403:0
app-emulation/dosemu-1.4.1_pre20130107-r5:0
app-emulation/fuse-1.6.0:0
app-i18n/fbterm-1.7_p20190503:0
app-misc/mc-4.8.29:0
dev-libs/newt-0.52.23-r1:0
sys-libs/ncurses-6.4_p20230401:0/6
sys-libs/ncurses-compat-6.2:5/5
www-client/links-2.29:2
www-client/w3m-0.5.3_p20230121:0

В ncurses получается поддержка есть, а вот в сабже её похоже нет. По крайне мере поиск слова gpm по issues и по репозиторию, ничего не дал.

и нужна ли она вообще

Ну если писать приложение на этом тулките, то почему бы и не иметь такой возможности?

Loki13 ★★★★★
()

Нужно. Одобряю.

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

Ну вот, сам дал исчерпывающий ответ на свой вопрос. :)

hobbit ★★★★★
()

Интересно все это великолепие на железном терминале попробовать. Ладно, дойдут руки, — попробую на старом vt240... А так красиво, да.

gns ★★★★★
()

Астрологи объявили месяц TUI на лоре :)

Красивое.

yu-boot ★★★★★
()

Может обойдёмся без анимаций в ленте? Кто вообще технически разрешил анимированные гифки?

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

Windows PowerShell уже не кошерно, кошерно PowerShell Core.

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

Так там же и дана ссылка: https://stackoverflow.com/questions/51680709/colored-text-output-in-powershell-console-using-ansi-vt100-codes/51681675#51681675

Что уж сделать, если ущербные ОС всё заявляют мол научились VT100 и UTF-8, но всё так же требуют напильника, балгарки, молота и сварочный аппарат.

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

Нет, она весит 5 МБ, а в виде видео она бы весила буквально в 10 раз меньше. Так что нужно видео, а gif забыть. Ну или хотя бы WEBP.

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

она весит 5 МБ

Уложиться в лимит у меня получилось примерно с десятой попытки, уменьшив область записи до предела. :)

Так что нужно видео, а gif забыть.

Да. :)

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

Я знаю только одного человека, который мог разрешить.

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

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

Жалоб на мои предыдущие анимации не было. :)

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

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

mydibyje ★★★★
()
Последнее исправление: mydibyje (всего исправлений: 1)

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

Syncro ★★★★★
()

простой и элегантный стиль (по мнению автора библиотеки)

и я с ним согласен.

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

Что то мешает скомпоновать эти костыли в стройные и логичные пачки и повесить на них ярлычки? Просто когда какая нибудь крупная команда пытается сдлать «все оптимизации должен выполнять компилятор, а код программиста должен быть в первую очередь понятен и удобен», то получается какой нибудь андроид, жирный, тормозной, примитивный и абсолютно непригодный к переносимости, запуску в других системах и исправлению принципиальных косяков.

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

Пункт правил:

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

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

скомпоновать эти костыли в стройные и логичные пачки

...
    return vbox({
               window(
                   text(L"[ rgb-tui ]") | center,  //
                   vbox({
                       hbox({
                           vbox(std::move(array)) | flex | reflect(box_color_),
                       }),
                       separator(),
                       hbox({
                           ColorTile(r_, g_, b_),
                           separator(),
                           vbox({
                               color_hue_->Render(),
                               color_saturation_->Render(),
                               color_value_->Render(),
                               separator(),
                               color_red_->Render(),
                               color_green_->Render(),
                               color_blue_->Render(),
                           }) | flex,
                       }),
                   })),
               hbox({
                   window(text(L" Hexa ") | center, HexaElement(r_, g_, b_)),
                   window(text(L" RGB ") | center, text(to_wstring(rgb_txt))),
                   window(text(L" HSV ") | center, text(to_wstring(hsv_txt))),
               }),
           }) |
           size(WIDTH, LESS_THAN, 80);

Как будто на питона наступил, но нет - это кусочек rgb-tui из скриншота.

В общем, я слишком стар для этого вот дела. :)

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

Код в функциональном стиле на реальных задачах всегда превращается в тяжкое нагромождение

Хочется ответить, что просто не надо писать на функциональном языке в императивном стиле, но не буду. 😊

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

В демках сабжа их нет, только в rgb-tui так. Наверное, он забыл обновить код.

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

А вы как, хотели описать содержимое ui ничего не описывая? К тому же, при всём моём незнании языка - кошмара я здесь не вижу. Мои bash-скрипты местами значительно сложнее разбирать, мне же.

kirill_rrr ★★★★★
()
Последнее исправление: kirill_rrr (всего исправлений: 1)

А че,так можно было? В смысле, гифки в галерею заливать?

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

Чтобы был выбор. Кому-то может понравиться лицензия сабжа, например. :)

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

А теперь прочитайте это

Помечено выполненным в 2020 году. Или что именно Вы имели в виду?

Если не работает - откройте его заново или заведите новый баг.

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

UI должен быть описан на dsl.

попытка описать его в процедурном стиле, аля swing:

JPanel p = new JPanel();
p.add(new JButton());

выглядит гораздо менее читабельно.

Я в свое время для java писал либу, которая из html-подобного языка делала панели. в итоге код для примера выше выглядит типа:

<div>
   <button id="button1">
</div>

Код этой либы довольно понятен и читабелен, так что плюсов автору:

  vbox({
    hbox({
      text("left") | border,
      text("middle") | border | flex,
      text("right") | border,
    }),
    gauge(0.5) | border,
  });
Deady
()
Последнее исправление: Deady (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.