14 KiB
Мастер настроек GoSetup терминальная версия
Перенос GoSetup+Fyne в терминал с использованием библиотек сообщества charm.
Структура файла yaml
В файле yaml есть следующие корневые поля:
- name - имя приложения для настройки
- version - версия приложения
- description - краткое описание приложения
- type - тип приложения
- variables - массив переменных, в которых будет храниться нужная информация
- sections - массив секций, форм для разделения этапов настройки
Переменные
Переменные хранят значение для настройки, в них записываются значения полей, используются в условиях и для выполнений действий Переменная имеет 3 поля:
- name - имя переменной, по имени идет связь со всем. Имя должно быть уникальным
- type - тип значения
- default - значение по умолчанию, если boolean, то указывайте без кавычек
Секции
Каждая секция это отдельна форма. Секция имеет следующие поля:
- name - имя секции
- type - тип секции, по умолчанию тип не указывается, в таком случае секция содержит поля ввода. Если type About, то мы выводим подробное описание приложения. Если type Final, то выводим таблицу переменных со всеми значениями. About ставьте первой секцией, а Final последней.
- description - описание секции, что в ней прописывается. Пишите коротко
- condition - условие при котором эта секция отображается
- parent - массив имен переменных от которых зависит условие
- paragraphs - массив строк, используется если type About. Используются следующие правила:
- '#' Заголовок первого уровня
- '##' Заголовок второго уровня
- '###' Заголовок третье уровня
- '-' элемент списка
- простой текст
- fields - массив полей для вывода
- actions - массив действий, которые должны выполнится после перехода с этой секции
Поле
Это свойство описывает поле для вывода на форму. Имеет следующие свойства:
- name - имя поля, выводится слева от самого поля
- variable-name - переменная которой будет присваиваться значение из пол
- field-type - тип поля, предусмотрены следующие типы
- select - поле выпадающее списка, среди которых выбирается вариант из списка. Для указания значений заполняется также поле "options" куда вводится массив значений
- check - поле чекбокс, для булевых значений.
- file - поле выбора файла. Это двух составное поле, в обычном состоянии в него вводится текст, но если нажать enter, то открывается список, где перечислены файлы и директории которые соответствуют пути. Также используется поле file-field-extensions, представляющее массив строк с расширением файлов
- directory - поле выбора директории. Это двух составное поле, как и 'file', но предназначен только для работы с папками. У него нет дополнительного поля.
- compute - поле для вывода расчетных значений. Когда значение требуется получить путем не ввода или выбора, а через функции, например регулярные выражения.
- default - поле для простого ввода текста. Его не нужно прописывать отдельно, если field-type не равен значениям выше, то будет применяться простое поле ввода.
- description - описание поля. Выводится под полем ввода.
- condition - условие при котором это поле отображается
- options - массив объектов для поля типа select
- special-value - когда значение поля должны быть рассчитаны
- compute - строка по которой надо произвести вычисление
- validate - массив правил валидации поля, если поле не соответствует правилу, то вместо описания поля отображается сообщение ошибки валидации
- parent - массив имен переменных от которых зависит условие
Валидация
Поля поддержаны валидации через специальное поле Validate содержащее массив правил валидации. Правило валидации содержит 2 свойства:
- rule - правила которому нужно проверять значение
- message - сообщение, которое выводится при нарушении правила.
Действие
Действие это то, что необходимо выполнить после завершение ввода текущей секции. После нажатия клавиши следующая секция, запускается поток выполняющий все действия по порядку их указания. Во время выполнения открывается модальное окно загрузки. Если все действия секции выполнены, то окно загрузки закрывается и появляется следующая секции с учетом условий секций. Если действие завершилось ошибкой, появляется окно предупреждение. После его закрытияя принудительно показывается окно логирования.
Действие имеет следующие свойства:
- name - имя выполняемого действия
- type - тип действия. Может быть command или file_template, в ином случае будет ошибка непредвиденного типа действия
- command - команда которая должна быть выполнена, помещаются простые команды оболочки bash. Используется если тип 'command'
- file-source - файл, который выступает основой. В нем по шаблону прописываются параметры куда надо подставить значения переменных
- file-target - файл, который должен создаться на основе файла источника с подставленными значениям
- require-packages - список необходимых для выполнения действия пакетов. Если пакет не установлен, то установка выполнится автоматически. Из-за возникновения блокировок apt когда внутри одного действия apt вызывается иное действие apt. Лучше прописывать require-packages внутри control файла.
- error - описание ошибки выполнения действия
- assign-to - имя переменной которой нужно присвоенное значение выполнения команды. В случаях, когда для выполнения действия требуется знать результат другого действия, можно воспользоваться присвоением значения в переменную и после использовать.
Условия
Условия это динамическая возможность работать только с теми полями и секциями, которые нуждаются при текущих параметрах. Проверка условий выполняются благодаря библиотеке expr. Правила условий:
- обязательный возврат результата в формате boolean значения
- указывается имя переменной, а не имя поля
- имя переменной указывается напрямую, без дополнительных знаков, шаблонов и прочего
- имя переменной должно совпадать по регистру
- для указания дополнительных условий, используются логические операторы "and" или "&&" для операции "И" и операторы "or" и "||" для операции "ИЛИ"
- при сравнении переменной со строкой, требуется указывать кавычки
- нельзя сравнивать разные типы данных, например строку с числом
Для корректной работы требуется указывать "родителей" условия, переменные которые участвуют в нем. Это позволяет при проверке изменений данных указывать, что необходимо обновить форму, ведь от значения изменяемого поля зависит другие поля или секции.
Шаблоны
Шаблоны это правила подстановки в строки значений переменных, благодаря этому получается сформировать строку с динамическими данными или целый файл. Для этого используется библиотека html/template. Правила шаблонов:
- переменная которая должна быть подставлена указывается следующим образом '{{.variable_name}}'
- имя переменной должно совпадать по регистру
В шаблонах также может быть добавлены условия. Выглядит это следующим образом
used_protocol={{if .is_secure}}https:\\{{else}}http:\\{{end}}
В этом примере написано следующее, значение used_protocol равно https:// если переменная is_secure равна true иначе равно http://.
Окна
В приложении прописаны несколько типов окон, также приложение максимально адаптировано под малый размер окна терминала. Минимальный размер окна терминала рассчитан на 60*20, при значениях меньше контент обрезается. Добавлен функционал переноса строк и прокручивание контента.
Окно листа
Лист это первое окно, которое появляется при запуске. Лист нужен для выбора, какое приложение нужно будет настроить. Окно делится на 2 части, список приложений слева и короткое описание приложения справа. Переключаться между пунктами можно на стрелки вниз и вверх. При переключении автоматически меняется описание в блоке справа.
Если приложений в списке слишком много, то они автоматически переносятся на следующую страницу, с отображением текущей страницы. Для быстрого переключения между страницами можно использовать стрелки влево и вправо.
Для выбора приложения, используется клавиша enter, при её нажатии. Появляется модальное окно, где нужно подтвердить выбор приложения для настройки
