Module userland.scripts.main
Main menu script
Functions
async def main(cx: SSHContext) ‑> None-
Expand source code
async def main(cx: SSHContext) -> None: result: str | None = None while True: cx.console.set_window_title("main menu") result = await MenuApp( cx, result, art_path=path.join("userland", "artwork", "main.ans"), art_encoding="amiga", alt="79 Columns // Main menu", ).run_async() if not result: result = "goto_logoff" if result.startswith("goto_"): break await cx.gosub(result) cx.console.clear() cx.goto(result[5:])
Classes
class MenuApp (context: SSHContext,
last: str | None = None,
**kwargs)-
Expand source code
class MenuApp(BannerApp[str]): """Main menu""" _last: str | None = None BANNER_PADDING = 9 BINDINGS = [("escape", "quit", "Log off")] CSS_PATH = path.join(path.dirname(__file__), "main.tcss") def __init__(self, context: SSHContext, last: str | None = None, **kwargs): "" # empty docstring super(MenuApp, self).__init__(context, **kwargs) self._last = last def compose(self) -> ComposeResult: # disable alternate buffer for main menu self.context.proc.stdout.write(b"\x1b[?1049l") for widget in super(MenuApp, self).compose(): yield widget with VerticalScroll(): with Center(): with Center(id="buttons"): yield Button("Messages", id="messages") yield Button("Node chat", id="chat") yield Button("Oneliners", id="oneliners") yield Button("Lock example", id="lock_example") yield Button("Log off", id="goto_logoff", variant="error") async def on_button_pressed(self, event: Button.Pressed) -> None: assert event.button.id return self.exit(result=event.button.id) async def action_quit(self) -> None: "" # empty docstring self.context.console.clear() self.context.goto("logoff") async def on_ready(self) -> None: if self._last: btn = self.get_widget_by_id(self._last) btn.focus()Main menu
Ancestors
- BannerApp
- XthuluApp
- textual.app.App
- typing.Generic
- textual.dom.DOMNode
- textual.message_pump.MessagePump
Class variables
var BINDINGSvar CSS_PATH
Methods
async def action_quit(self) ‑> None-
Expand source code
async def action_quit(self) -> None: "" # empty docstring self.context.console.clear() self.context.goto("logoff") def compose(self) ‑> Iterable[textual.widget.Widget]-
Expand source code
def compose(self) -> ComposeResult: # disable alternate buffer for main menu self.context.proc.stdout.write(b"\x1b[?1049l") for widget in super(MenuApp, self).compose(): yield widget with VerticalScroll(): with Center(): with Center(id="buttons"): yield Button("Messages", id="messages") yield Button("Node chat", id="chat") yield Button("Oneliners", id="oneliners") yield Button("Lock example", id="lock_example") yield Button("Log off", id="goto_logoff", variant="error") -
Expand source code
async def on_button_pressed(self, event: Button.Pressed) -> None: assert event.button.id return self.exit(result=event.button.id) async def on_ready(self) ‑> None-
Expand source code
async def on_ready(self) -> None: if self._last: btn = self.get_widget_by_id(self._last) btn.focus()
Inherited members