Текстовый пользовательский интерфейс (TUI) для сценарного языка OneScript

14.11.25

Разработка - Инструментарий разработчика

Представляю кроссплатформенную библиотеку для разработки приложений с текстовым пользовательским интерфейсом (TUI) для сценарного языка OneScript. Она использует модель программирования, похожую на классические Desktop GUI (например, WinForms или WPF), но целиком работает в текстовом режиме. Возможно это ностальгия по DOS временам, но в наше время это так же и повышенная скорость отрисовки интерфейса, и легкость в написании скрипта. Создавайте интуитивно понятные окна, кнопки, поля ввода и выпадающие списки. Благодаря OneScript инструмент будет доступен даже новичкам без долгого обучения.

А кто из вас ещё помнит Norton Commander, Turbo Pascal IDE, DOS-программы? Да, да, это устаревшая технология. Стоит ли применять её сейчас? Но ведь многие администраторы предпочитают использовать CLI (Command Line Interface) - интерфейс командной строки. И время от времени кто нибудь да посетует - "Вот бы интерактива добавить, выбрать файл, выбрать значение из списка". Есть, конечно, для этого GUI (Graphical User Interface) - графический пользовательский интерфейс, но он "тяжеловесен". 

TUI - это "золотая середина" между суровым CLI и тяжёлым GUI. Он даёт удобство взаимодействия там, где графика невозможна или нецелесообразна, сохраняя скорость, портативность и низкую нагрузку на систему. Попробуйте ещё один инструмент для OneScript, вот эту разработку. При создании его так же имелся в виду и образовательный аспект. Обучение "от простого к сложному" опирается на когнитивные механизмы усвоения знаний. OneScript для этого по моему подходит идеально.

 

Для кого это решение может пригодиться?

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

 

Ключевые преимущества

1. Кросс-платформенность.

2. Богатый набор элементов управления.  Вот некоторые из основных классов: 

  • ВыборЦвета (ColorPicker)    Выбор цвета из палитры;
  • Дерево (TreeView)    Древовидный элемент с ветвями;
  • Диалог (Dialog)    Окно, которое расположено по центру и содержит несколько кнопок;
  • ДиалогОткрытия (OpenDialog)    Окно для выбора файлов или каталогов;
  • ДиалогСохранения (SaveDialog)    Окно для сохранения файлов;
  • Индикатор (ProgressBar)    Индикатор выполнения;
  • Кнопка (Button)    Элемент, который вызывает действие;
  • КонтекстноеМеню (ContextMenu)    Всплывающее меню;
  • Математика (Math)    Предоставляет константы и статические методы математических функций;
  • Надпись (Label)    Отображает строку в заданной позиции;
  • Окно (Window)    Элемент с границами и названием сверху;
  • ОкноСообщений (MessageBox)    Модальное сообщение с вариантами действий;
  • ПанельВкладок (TabView)    Элемент с вкладками;
  • ПанельМеню (MenuBar)    Панель меню с каскадными меню;
  • Переключатель (RadioGroup)    Группа меток с индикатором выбора;
  • ПолеВвода (TextField)    Однострочное поле для ввода текста;
  • ПолеВремени (TimeField)    Элемент редактирования времени;
  • ПолеВыбора (ComboBox)    Раскрывающийся список элементов;
  • ПолеДаты (DateField)    Элемент редактирования даты;
  • Прокручиваемый (ScrollView)    Элемент управления с полосами прокрутки;
  • РамкаГруппы (FrameView)    Контейнерная рамка вокруг содержимого;
  • СписокЭлементов (ListView)    Прокручиваемый список данных;
  • СтрокаСостояния (StatusBar)    Элемент, который привязан к нижней части элемента верхнего уровня;
  • Таблица (TableView)    Просмотр табличных данных;
  • Таймер (Timer)    Возможность создания повторяющихся событий;
  • Текстовый (TextView)    Многострочное текстовое поле для редактирования;
  • Уведомление (Balloons)    Аналог окна сообщений, но с интервалом для автоматического закрытия;
  • Флажок (CheckBox)    Переключатель.

3. Гибкая система компоновки. Поддерживается:

  • абсолютное и относительное позиционирование;
  • процентные размеры;
  • автоматическое заполнение пространства;
  • центрирование.

4. Поддержка ввода.  Обрабатывает:

  • клавиатурные события (включая сочетания клавиш);
  • события мыши (в поддерживающих эмуляторах);
  • перетаскивание (ограниченная поддержка).

5. Цвета. Система цветовых схем позволяет настраивать внешний вид интерфейса под нужды проекта.
6. Событийная модель. Четкая и привычная модель событий для реакции на действия пользователя.

 

Технические детали

Библиотека применима к OneScript 1.x. Исходный код доступен на github (OneScriptTerminalGui). Там же найдете ссылку на документацию (Справка). Документация содержит подробные примеры. 
Проверка выполнялась на OneScript v1.8.4.5 в среде Windows 10 и Linux Mint 20.3 (терминал - "mate-terminal").

 

Пример кода

Условно можно обозначить два варианта использования библиотеки.

Первый - это работа внутри приложения. Вы пишите код сценария на языке OneScript, запускаете сценарий на исполнение в окне терминала и при этом вся информация для пользователя может быть показана только средствами элементов интерфейса. Командная строка не видна, она закрыта приложением. При закрытии приложения закроется и окно терминала.

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

Вот как можно реализовать этот второй вариант в коде. Содержимое основного сценария ПримерGUI.os

Перем ТекПуть;

Процедура ОткрытьДиалог(параметр1) Экспорт
	Контекст = Новый Структура();
	Контекст.Вставить("МояСтруктура", параметр1);
	ЗагрузитьСценарий(ОбъединитьПути(ТекПуть,"ДиалогОткрытия.os"), Контекст);
КонецПроцедуры

ТекПуть = Новый Файл(ТекущийСценарий().Источник).Путь;
МояСтруктура = Новый Структура("Результат", "Файл не выбран");
МассивПараметров = Новый Массив(1);
МассивПараметров[0] = МояСтруктура;
Задание = ФоновыеЗадания.Выполнить(ЭтотОбъект, "ОткрытьДиалог", МассивПараметров);
Задание.ОжидатьЗавершения();
Сообщить("Результат = " + МояСтруктура.Результат);
Приостановить(2000);
Задание = ФоновыеЗадания.Выполнить(ЭтотОбъект, "ОткрытьДиалог", МассивПараметров);
Задание.ОжидатьЗавершения();
Сообщить("Результат = " + МояСтруктура.Результат);

Пока Истина Цикл
	Приостановить(1000);
КонецЦикла;

Содержимое сценария для интерактивного выбора файла ДиалогОткрытия.os (должен лежать рядом с основным сценарием)

Перем ТФ;

Процедура ДиалогЗакрыт() Экспорт
	Если ТФ.АргументыСобытия.Файлы.Количество() > 0 Тогда
		МояСтруктура.Результат = ТФ.АргументыСобытия.Файлы.Получить(0);
	КонецЕсли;
	ТФ.Завершить();
КонецПроцедуры

ПодключитьВнешнююКомпоненту("OneScriptTerminalGui.dll");
ТФ = Новый ТерминалФормыДляОдноСкрипта();

ДиалогОткрытия1 = ТФ.Верхний.Добавить(ТФ.ДиалогОткрытия("Диалог открытия", "Сообщение"));
ДиалогОткрытия1.ДиалогЗакрыт = ТФ.Действие(ЭтотОбъект, "ДиалогЗакрыт");
ДиалогОткрытия1.ПутьКаталога = "C:\";
ДиалогОткрытия1.ПоказатьДиалог();

ТФ.Запуск();

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

 

Заключение

Я портной. Шью одежды для OneScript. Сшил два пиджака (OneScriptForms и OneScriptDeclarativeForms). И вот этот спортивный костюмчик OneScriptTerminalGui
Если пуговицу не туда пришил, Вы мне скажите.
У меня в мастерской есть ещё материал, нитки, иголки для пошивки нового фрака. Как сошью, обязательно напишу.

Вступайте в нашу телеграмм-группу Инфостарт

См. также

Инструментарий разработчика Чистка данных Свертка базы Инструменты администратора БД Системный администратор Программист Руководитель проекта 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Россия Платные (руб)

Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP, УНФ, КА и т.д.). Поддерживаются серверные и файловые базы, управляемые и обычные формы. Может выполнять свертку одновременно в несколько потоков. А так же автоматически, без непосредственного участия пользователя. Решение в Реестре отечественного ПО

24900 руб.

20.08.2024    51346    286    145    

263

Инструментарий разработчика Роли и права Запросы СКД Программист Руководитель проекта 1С:Предприятие 8 Платные (руб)

Инструменты для разработчиков 1С 8.3: Infostart Toolkit. Автоматизация и ускорение разработки на управляемых формах. Легкость работы с 1С.

15500 руб.

02.09.2020    229302    1249    415    

1086

Инструментарий разработчика Нейросети Платные (руб)

Первые попытки разработки на 1С с использованием больших языковых моделей (LLM) могут разочаровать. LLMки сильно галлюцинируют, потому что не знают устройства конфигураций 1С, не знают нюансов синтаксиса. Но если дать им подсказки с помощью MCP, то результат получается кардинально лучше. Далее в публикации: MCP для поиска по метаданым 1С, справке синтакс-помошника и проверки синтаксиса.

9900 руб.

25.08.2025    26011    63    10    

71

Пакетная печать Печатные формы Инструментарий разработчика Программист 1С:Предприятие 8 1С:Зарплата и кадры бюджетного учреждения 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Библиотека стандартных подсистем Платные (руб)

Расширение для создания и редактирования печатных форм в системе 1С:Предприятие 8.3. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и прозрачность разработки, а также навести порядок в многообразии корпоративных печатных форм.

22200 руб.

06.10.2023    30450    79    30    

105

Инструменты администратора БД Инструментарий разработчика Роли и права Программист 1С:Предприятие 8 1C:Бухгалтерия Россия Платные (руб)

Расширение позволяет без изменения кода конфигурации выполнять проверки при вводе данных, скрывать от пользователя недоступные ему данные, выполнять код в обработчиках. Не изменяет данные конфигурации, легко устанавливается практически на любую конфигурацию на управляемых формах.

16000 руб.

10.11.2023    21222    85    42    

95

Работа с интерфейсом Анализ учета Мониторинг 1С:Предприятие 8 1С 8.3 1C:Бухгалтерия 1С:Бухгалтерия 3.0 1С:Библиотека стандартных подсистем 1С:ERP Управление предприятием 2 1С:Управление холдингом 1С:Зарплата и Управление Персоналом 3.x 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Управление торговлей 11 Платные (руб)

Создайте свой функциональный интерфейс в любой конфигурации 1С с помощью расширения Infostart Dashboard. Настраивайте панели виджетов с метриками, индикаторами и показателями на начальном экране. Узнайте возможность внедрения подсистемы у себя в конфигурации с помощью бесплатной обработки "Анализ внедрения подсистемы 1С Infostart Dashboard"!

28800 руб.

27.03.2025    56747    31    25    

45

Инструментарий разработчика Программист 1С:Предприятие 8 Платные (руб)

Инструмент для написания и отладки кода в режиме «1С:Предприятие». Представляет собой консоль кода с возможностью пошаговой отладки, просмотра значений переменных любых типов, использования процедур и функций, просмотра стека вызовов, вычисления произвольных выражений на встроенном языке в контексте точки останова, синтаксического контроля и остановки по ошибке. В консоли используется удобный редактор кода с подсветкой, контекстной подсказкой, возможностью вызова конструкторов запроса и форматной строки.

9500 руб.

17.05.2024    43872    156    63    

195
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. SerVer1C 993 14.11.25 15:16 Сейчас в теме
Вспомнил времена Turbo Pascal
2. Alxby 1143 14.11.25 16:30 Сейчас в теме
Ассоциации скорее не с Turbo Pascal, а с Turbo Vision ))
5. starik-2005 3201 17.11.25 11:46 Сейчас в теме
(2) Интерфейс турбопаскаля на турбовижене и пилился. Но там был хороший такой ООП, в итоге собирались объекты примерно как в дарте.
6. Alxby 1143 17.11.25 14:45 Сейчас в теме
(5) Ну да. Только Turbo Vision использовался еще и в Turbo C / Borland C, не только в Turbo Pascal
7. starik-2005 3201 17.11.25 18:49 Сейчас в теме
(6) Большинство студиоусов писали на паскале, некоторые видели TV, а некоторые даже писали на нем. Мне было неудобно - я свой нарисовал на асме. Не вспомню уже деталей, но у меня в окно, созданное как экземпляр класса, можно было просто добавлять нужные элементы в нужную позицию и в eventloop события просто отправлялись по стеку окон, то в TV с этим нужно было как-то морочиться, формируя каскадные вызовы. Как-то слишком мне казалось.
8. Alxby 1143 17.11.25 19:27 Сейчас в теме
(7) Зато для многих TV был пропуском в мир ООП. А также само понятие рабочего стола, окон, перекрытие элементов по z-координате и прочие фишки узнавались именно оттуда.
9. Alxby 1143 17.11.25 19:33 Сейчас в теме
(7) А графику на асме было здорово писать - напрямую в видеопамять для текстового режима 03h или в видеопамять + latch-регистры для графического 12h режима VGA.
10. starik-2005 3201 18.11.25 10:46 Сейчас в теме
(9) Я на асме прямо в видеопамять текстового режима писал - $B800:0, если помнишь этот адрес. Ну и для EGA (есть кто еще помнит - это такой режим 640х480х4 - 16 цветов), а потом уже и в VESA-режимы (800х600х16 - 65к цвтов), но там адреса были уже с $A000:0. При том последний не попадал в сегмент целиком, поэтому приходилось переключать страницы. И если переключать их не каждый раз, а только при надобности, что сильно увеличивало скорость работы. Был еще адрес прямого вызова (точки входа) для VESA вместо INT 10h. В общем там много всего интересного было, а я молодым был, энергии дофига, все книжки сметал про это за полдня (да, интернетов тогда еще не было, не говоря уже об ИИ). Так что был у меня интерфейс для текстового режима, графического для 16 и 65к цветов, даже вьювер делал для картинок в виде COM-файла (если кто помнит - это такие исполняемые файлы без заголовков) на 250 байт всего. Хорошее было время )))
ЗЫ: Так низко до регистров карты не дошел, но мне это было и не нужно. Я в универе когда работал, то полдня играл в дагерфалл (то, что было до морровинда и обливиона), потом полдня писал софт для научно-исследовательской лаборатории.
11. Alxby 1143 19.11.25 06:49 Сейчас в теме
(10) INT 10h (предоставляемый BIOS) для работы с графикой - не наш метод). Он слишком высокоуровневый - там для вывода точки на экран напрямую указываешь координаты и цвет. Это неинтересно. Нет, только хардкор, только прямая запись в битовые плоскости, адресуемые в памяти (конечно, физически этой памяти может и нет, она за пределами 640K, но ведь любому понятно, что шина адреса в данном случае прекрасно мультплексируется, сами так много раз делали в своих проектах). И переключение этих плоскостей через прямую запись в порт видеоадаптера. А для художников есть замечательный режим 13h, в котором аж 256 одновременно отображаемых цветов!
12. starik-2005 3201 19.11.25 10:32 Сейчас в теме
(11)
в котором аж 256
Ага, и разрешение 320х200 если память не изменяет. Поэтому дум и был такой быстрый даже на первопнях.
3. Perfolenta 207 15.11.25 03:31 Сейчас в теме
Интересная штука! Вполне может пригодиться...
Хотя трудно представить, что кто-то станет писать большое приложение, но в небольшие скрипты иногда действительно хочется добавить интерактивные возможности...
4. Somebody1 69 15.11.25 15:29 Сейчас в теме
Аж олдскулы свело...
Для отправки сообщения требуется регистрация/авторизация