-- SPDX-FileCopyrightText: © 2026 Vladimir Zorin -- SPDX-License-Identifier: LicenseRef-OWL-1.0-or-later -- Licensed under OWL v1.0+. See LICENSE. local theme_mod = require("theme") local ensure_tss = theme_mod.subscribe("shell") local buffer = require("string.buffer") local style_text = function(ctx, ...) return ctx:apply(...).text end local get = function(self) local tss = ensure_tss() local prompt = buffer.new() prompt:put(style_text(tss, "prompt.wiki.sep", "(")) if self.__state.db_name then prompt:put(style_text(tss, "prompt.wiki.logo")) prompt:put(style_text(tss, "prompt.wiki.db_name", self.__state.db_name)) else prompt:put(style_text(tss, "prompt.wiki.logo")) end prompt:put(style_text(tss, "prompt.wiki.sep", ")")) if self.__state.lines and self.__state.lines > 1 then prompt:put(style_text(tss, "prompt.wiki.sep", "[")) prompt:put(style_text(tss, "prompt.wiki.sep", tostring(self.__state.line))) prompt:put(style_text(tss, "prompt.wiki.sep", "]")) end prompt:put(" ") return prompt:get() end local set = function(self, options) for key, value in pairs(options or {}) do self.__state[key] = value end end local new = function(config) local prompt = { cfg = config or {}, __state = { db_name = nil, lines = 1, line = 1, }, get = get, set = set, } return prompt end return { new = new, }