pub struct Runtime<A: App> { /* private fields */ }Expand description
Configures and runs an application in the terminal.
Implementations§
Source§impl<A: App> Runtime<A>
impl<A: App> Runtime<A>
Sourcepub fn theme_source(
self,
file: impl Into<String>,
text: impl Into<String>,
) -> Self
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.
Sourcepub fn icon_source(
self,
file: impl Into<String>,
text: impl Into<String>,
) -> Self
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.
Sourcepub fn locale_dir(self, dir: impl Into<PathBuf>) -> Self
pub fn locale_dir(self, dir: impl Into<PathBuf>) -> Self
Loads locale files from dir.
Sourcepub fn locale_source(
self,
file: impl Into<String>,
text: impl Into<String>,
) -> Self
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()Sourcepub fn keymap_file(self, file: impl Into<PathBuf>) -> Self
pub fn keymap_file(self, file: impl Into<PathBuf>) -> Self
Layers keymap file over the built-in keymap.
Sourcepub fn keymap_source(
self,
file: impl Into<String>,
text: impl Into<String>,
) -> Self
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()Sourcepub fn settings(self, settings: &Settings) -> Self
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.
Sourcepub fn preferences(self, preferences: &Preferences) -> Self
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()Sourcepub fn run(self) -> Result<()>
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> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
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