Skip to main content

Runtime

Struct Runtime 

Source
pub struct Runtime<A: App> { /* private fields */ }
Expand description

Configures and runs an application in the terminal.

Implementations§

Source§

impl<A: App> Runtime<A>

Source

pub fn new(app: A) -> Self

A runtime for app with built-in files only.

Source

pub fn theme_dir(self, dir: impl Into<PathBuf>) -> Self

Loads theme files from dir.

Source

pub fn theme_source( self, file: impl Into<String>, text: impl Into<String>, ) -> Self

Loads a theme file given as text, such as one compiled in with include_str!, so an installed program needs no files beside it. file names it in diagnostics and its stem is the theme id, the way a directory names its files. Text given this way wins over Runtime::theme_dir.

Source

pub fn icon_dir(self, dir: impl Into<PathBuf>) -> Self

Loads icon set files from dir.

Source

pub fn icon_source( self, file: impl Into<String>, text: impl Into<String>, ) -> Self

Loads an icon set given as text, such as one compiled in with include_str!, so an installed program needs no files beside it. file names it in diagnostics and its stem is the icon set id, the way a directory names its files. Text given this way wins over Runtime::icon_dir.

This is also how an application gives its own icons: keys the built-in set lacks, such as category.internet, are drawn by every widget that takes an icon key, in whatever set the theme chooses and in the glyph mode in use. A key the built-in set has, such as check, restyles the framework’s icon only while a theme names this set; see IconSetRegistry.

Source

pub fn locale_dir(self, dir: impl Into<PathBuf>) -> Self

Loads locale files from dir.

Source

pub fn locale_source( self, file: impl Into<String>, text: impl Into<String>, ) -> Self

Loads a locale file given as text, such as one compiled in with include_str!, so an installed program needs no files beside it. file names it in diagnostics. Text given this way wins over Runtime::locale_dir.

let english = "[meta]\nname = \"English\"\ncode = \"en\"\n[app]\ngreeting = \"Hello\"\n";
Runtime::new(Hello).locale_source("en.toml", english).run()
Source

pub fn keymap_file(self, file: impl Into<PathBuf>) -> Self

Layers keymap file over the built-in keymap.

Source

pub fn keymap_source( self, file: impl Into<String>, text: impl Into<String>, ) -> Self

Layers a keymap given as text over the built-in keymap, such as one compiled in with include_str!, so an installed program needs no files beside it. file names it in diagnostics. Text given this way wins over Runtime::keymap_file.

let keys = "[app]\nsave = \"ctrl+s\"\n";
Runtime::new(Hello).keymap_source("keymap.toml", keys).run()
Source

pub fn theme(self, id: impl Into<String>) -> Self

Starts with theme id instead of the default.

Source

pub fn settings(self, settings: &Settings) -> Self

Starts with the theme, language, icon mode and reduced motion saved in settings, so the first frame already looks the way the user left it. Saved values win over Runtime::theme.

Source

pub fn preferences(self, preferences: &Preferences) -> Self

Starts with the language, theme and icons of the family’s shared Preferences, as Family::preferences resolved them for this application. They win over Runtime::theme and over the same keys in Runtime::settings, which keeps the rest: reduced motion, pillar and slide.

let family = Family::QUVYTA;
let settings = Settings::load_member(&family, "hello");
let prefs = family.preferences("hello", &I18n::builtin());
Runtime::new(Hello).settings(&settings).preferences(&prefs).run()
Source

pub fn run(self) -> Result<()>

Takes over the terminal and runs until the application quits. The terminal is restored on return and on panic.

§Signals

On Unix the run catches SIGTERM, SIGINT and SIGHUP and ends gracefully instead of dying on the spot: the application hears the cause through App::terminating, may save, and quits; see Termination for what each signal does and the grace it leaves. The loop is woken the moment a signal arrives, even while it waits for a key or a deadline.

Every way out ends in bounded time: after the grace the run quits without the application, a second SIGTERM or SIGINT quits at once, and when the loop itself is stuck the process is ended a second later all the same, by the signal, after the terminal is restored. The terminal is left in application mode in no case while it exists; after a hangup nothing more is written to it.

During a Handoff, and a DetachedHandoff until the program’s first line, the program owns the terminal’s foreground. A signal the application catches meanwhile is passed on to the program, which ends the way it would have as a job of the shell; the application then takes the terminal back and hears the signal itself. A hangup reaches the program from the system anyway.

Once run returns the signals have their usual effect again.

§Errors

Returns I/O errors from loading asset directories or from the terminal.

Auto Trait Implementations§

§

impl<A> !RefUnwindSafe for Runtime<A>

§

impl<A> !UnwindSafe for Runtime<A>

§

impl<A> Freeze for Runtime<A>
where A: Freeze,

§

impl<A> Send for Runtime<A>
where A: Send,

§

impl<A> Sync for Runtime<A>
where A: Sync,

§

impl<A> Unpin for Runtime<A>
where A: Unpin,

§

impl<A> UnsafeUnpin for Runtime<A>
where A: UnsafeUnpin,

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.