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, icons and reduced motion of the ecosystem’s shared
Preferences, as Ecosystem::preferences resolved
them for this application. They win over Runtime::theme and over the same keys in
Runtime::settings, which keeps the rest: pillar and slide.
let ecosystem = Ecosystem::QUVYTA;
let settings = Settings::load_member(&ecosystem, "hello");
let prefs = ecosystem.preferences("hello", &I18n::builtin());
Runtime::new(Hello).settings(&settings).preferences(&prefs).run()Sourcepub fn member(self, ecosystem: Ecosystem, app: &str) -> Self
pub fn member(self, ecosystem: Ecosystem, app: &str) -> Self
Runs the application as member app of ecosystem, in one call: its own settings are
loaded with Settings::load_member, the shared preferences resolved with
Ecosystem::preferences in the language files this runtime loads, and both applied
before the first frame, as Runtime::settings and Runtime::preferences apply them.
While the application runs, the ecosystem’s folder is watched. When the shared file or the
application’s own file changes, say because another application switched the theme for
the whole ecosystem, the preferences are resolved again without writing anything and what
changed is applied at once: language, theme, icons and reduced motion, and the pillar
when the application’s own file changed it. A value the application chose for itself
stays, since resolving gives it first. App::preferences hears
the start and every change, so a settings screen can show the new values.
The watch uses the system’s own events and a thread that sleeps until the folder changes; it costs nothing while nothing changes. Where the folder cannot be watched (no home folder, a platform without a folder watch, the system’s limit on watches reached), the application runs with what it started with, as before. The watch ends with the run.
Settings or preferences also given with Runtime::settings or Runtime::preferences
are used as given and not read a second time, so an application moving over can keep
its own reading for now.
Runtime::new(Hello).member(Ecosystem::QUVYTA, "hello").run()Sourcepub fn member_in(
self,
ecosystem: Ecosystem,
config_dir: impl Into<PathBuf>,
app: &str,
) -> Self
pub fn member_in( self, ecosystem: Ecosystem, config_dir: impl Into<PathBuf>, app: &str, ) -> Self
member with config_dir as the ecosystem’s folder instead of this
platform’s, for an application that keeps its settings where it chooses, and for a demo.
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