![]() Some editors, such as vim, rename (move) a file to a backup location, then write the new contents to a new location when the user saves their changes. notify stops watching the renamed file, and does not automatically start watching the new file created. Additionally, slint-viewer attempts to reload before the editor has written the new file, which causes an error. The file is then never reloaded because the watcher was lost. This patch solves the problem by attempting to watch the file again, if the previous watch failed due to a Generic or PathNotFound error. Generic is required because this is error type we get on macOS for "No such file or directory.". We delay the retry by a small timeout to give the editor a chance to write the new file. Note that this still results in an error being printed about the missing file. Tested manually by editing both root .slint file, and .slint files imported from sub-directories. Closes: #3641 |
||
---|---|---|
.. | ||
LICENSES | ||
Cargo.toml | ||
main.rs | ||
README.md |
Viewer for Slint
This program is a viewer for .slint
files from the Slint Project.
Installation
The viewer can be installed from crates.io:
cargo install slint-viewer
Alternatively, you can download one of our pre-built binaries for Linux or Windows:
- Open https://github.com/slint-ui/slint/releases
- Click on the latest release
- From "Assets" download either
slint-viewer-linux.tar.gz
for a Linux x86-64 binary orslint-viewer-windows.zip
for a Windows x86-64 binary. - Uncompress the downloaded archive and run
slint-viewer
/slint-viewer.exe
.
Usage
You can open .slint files by just passing it as an argument:
slint-viewer path/to/myfile.slint
Command line arguments
--auto-reload
: Automatically watch the file system, and reload when it changes--save-data <file>
: When exiting, write the value of public properties to a json file. Only property whose types can be serialized to json will be written. This option is incompatible with--auto-reload
--load-data <file>
: Load the values of public properties from a json file.-I <path>
: Add an include path to look for imported .slint files or images.-L <library=path>
: Add a library path to look for@library
imports.--style <style>
: Set the style. Defaults tonative
if the Qt backend is compiled, otherwisefluent
--backend <backend>
: Override the Slint rendering backend--on <callback> <handler>
: Set a callback handler, see callback handler
Instead of a path to a file, one can use -
for the standard input or the standard output.
Callback handler
It is possible to tell the viewer to execute some shell commands when a callback is received.
You can use the --on
command line argument, followed by the callback name, followed by the command.
Within the command arguments, $1
, $2
, ... will be replaced by the first, second, ... argument of the
callback. These will be shell escaped.
Example: Imagine we have a myfile.slint looking like this:
export component MyApp inherits Window {
callback open-url(string);
//...
}
It is possible to make the open-url
callback to execute a command by doing
slint-viewer --on open-url 'xdg-open $1' myfile.slint
Be carefull to use single quote or to escape the $
so that the shell don't expand the $1
Dialogs
If the root element of the .slint file is a Dialog
, the different StandardButton might close
the dialog if no callback was set on the button.
ok
,yes
, orclose
buttons accepts the dialogcancel
,no
buttons reject the dialog
Result code
The program returns with the following error code:
- If the command line argument parsing fails, the exit code will be 1
- If the .slint compilation fails, the compilation error will be printed to stderr and the exit code will be -1
- If a Window is closed, the exit code will be 0
- If a Dialog is closed with the "Ok" or "Closed" or "Yes" button, the exit code will be 0
- If a Dialog is closed with the "Cancel" or "No" button, or using the close button in the window title bar, the exit code will be 1
Examples
slint-viewer
can be used to display an GUI from a shell script. For examples check out the
examples/bash folder in our repository.