package types import "github.com/charmbracelet/bubbles/key" // PackageApplication структура описывающая настраиваемое приложение type PackageApplication struct { Name string `yaml:"name"` //Имя приложения Version string `yaml:"version"` //Версия приложения Description string `yaml:"description"` //Описание приложения Icon string `yaml:"icon"` //Иконка приложения Type string `yaml:"type"` //Тип приложения ConfFiles []ConfFile `yaml:"conf-files"` //Файлы конфигурации Variables []Variable `yaml:"variables"` //Переменные настройки Sections []Section `yaml:"sections"` //Секции настройки Changed bool `yaml:"-"` //Вносились ли изменения } // ConfFile структура описывающая используемый приложением конфигурационный файл type ConfFile struct { File string `yaml:"file"` //Путь файла Type string `yaml:"type"` //Тип файла Name string `yaml:"name"` //Имя файла } // Variable структура описывающая переменную для настройки приложения type Variable struct { Name string `yaml:"name"` //Имя переменной Type string `yaml:"type"` //Тип значения переменной Default string `yaml:"default"` //Значение по умолчанию Value interface{} `yaml:"-"` //Используемое значение } // Section структура описывающая секцию настройки приложения type Section struct { Name string `yaml:"name"` //Имя секции Type string `yaml:"type"` //Тип секции Description string `yaml:"description"` //Описание секции Fields []SectionField `yaml:"fields"` //Поля секции Paragraphs []string `yaml:"paragraphs"` //Параграфы для описания приложения Parent []string `yaml:"parent"` //Переменные от которых зависит секция Condition string `yaml:"condition"` //Условие отображения секции Actions []SectionAction `yaml:"actions"` //Действия выполняемые после перехода с секции } // SectionField структура описывающая поле секции type SectionField struct { Name string `yaml:"name"` //Имя поля VariableName string `yaml:"variable-name"` //Имя переменной, хранящей значение поля FieldType string `yaml:"field-type"` //Тип поля FileFieldExtensions []string `yaml:"file-field-extensions"` //Расширения файла для поля выбора файла Description string `yaml:"description"` //Описание поля Condition string `yaml:"condition"` //Условие отображения поля Options []interface{} `yaml:"options"` //Список опций SpecialValue string `yaml:"special-value"` //Специального значения Compute string `yaml:"compute"` //Строка вычислений значения Validate []FieldValidate `yaml:"validate"` //Правила проверки значения Parent []string `yaml:"parent"` //Переменные от которых зависит поле Variable *Variable `yaml:"-"` //Указатель на переменную Active bool `yaml:"-"` //Активно ли поле для получения значения } // FieldValidate структура описывающая правила проверки значения поля type FieldValidate struct { Rule string `yaml:"rule"` //Правило проверки Message string `yaml:"message"` //Сообщение ошибки } // SectionAction структура описывающая действия к выполнению type SectionAction struct { Name string `yaml:"name"` //Имя действия Type string `yaml:"type"` //Тип действия Command string `yaml:"command"` //Команда для выполнения FileTarget string `yaml:"file-target"` //Целевой файл редактирования FileSource string `yaml:"file-source"` //Файл источник Condition string `yaml:"condition"` //Условие для выполнения RunAs string `yaml:"run-as"` //Пользователь для запуска RequirePackages []string `yaml:"require-packages"` //Требуемые пакеты Error string `yaml:"error"` //Ошибка выполнения AssignTo string `yaml:"assign-to"` //Переменная, которой надо присвоить значение } // BoolValidateFunc функция, которая возвращает ошибку, если данные checkbox неверны type BoolValidateFunc func(bool) error // MainKeyMap структура главных клавиш type MainKeyMap struct { Up key.Binding //Вверх, прошлый элемент Down key.Binding //Вниз, следующий элемент Left key.Binding //Влево Right key.Binding //Вправо Top key.Binding //На самый верх Bottom key.Binding //В самый низ Confirm key.Binding //Клавиша подтверждения Help key.Binding //Отображение помощи Log key.Binding //Отображение лого Close key.Binding //Закрыть Exit key.Binding //Выйти } // MainKeys используемые клавиши var MainKeys = MainKeyMap{ Up: key.NewBinding(key.WithKeys("up", "shift+tab"), key.WithHelp("up", "move up")), Down: key.NewBinding(key.WithKeys("down", "tab"), key.WithHelp("down", "move down")), Left: key.NewBinding(key.WithKeys("left"), key.WithHelp("left", "move left")), Right: key.NewBinding(key.WithKeys("right"), key.WithHelp("right", "move right")), Top: key.NewBinding(key.WithKeys("home"), key.WithHelp("top", "move top")), Bottom: key.NewBinding(key.WithKeys("end"), key.WithHelp("bottom", "move bottom")), Confirm: key.NewBinding(key.WithKeys("enter"), key.WithHelp("enter", "confirm")), Help: key.NewBinding(key.WithKeys("?", "ctrl+h"), key.WithHelp("?/ctrl+h", "help")), Log: key.NewBinding(key.WithKeys("ctrl+l"), key.WithHelp("ctrl+l", "show/hide log window")), Close: key.NewBinding(key.WithKeys("esc"), key.WithHelp("esc", "close")), Exit: key.NewBinding(key.WithKeys("ctrl+c"), key.WithHelp("ctrl+c", "quit")), }