-
Notifications
You must be signed in to change notification settings - Fork 35
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Update ratatui to 0.28.0 and all other dependencies #69
Merged
Conversation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Hello. I have a weird result related to this change. I have a Cargo.toml like this: ...
description = "<Not related>"
authors = ["<Not related>"]
build = "build.rs"repository = "https://github.com/<not-related>"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
... As you see there is a syntax error in this line: build = "build.rs"repository = "https://github.com/<not-related>" I didn't investigate the reason nor try to solve it but this might work: {% if repository != "" %}
repository = "{{repository}}"
{% endif %} But if it works, it would be weird as well. |
Thanks for the report. This is fixed in #75 |
RandyMcMillan
added a commit
to gnostr-org/gnostr-templates
that referenced
this pull request
Jan 5, 2025
new file mode 100644 index 0000000..3b5cf10 --- /dev/null +++ b/logger-template/README.md @@ -0,0 +1,17 @@ +# Ratatui Simple template + +The simple template will create the following project structure: + +```text +src/ +├── app.rs -> holds the state and application logic +├── main.rs -> entry-point +``` + +## Design choices + +We have a small `App` struct that has a main loop that calls methods to handle events and draw the +ui. The app can be quit by pressing any of Q/Esc/Ctrl+C. + +We use [color-eyre](https://docs.rs/color-eyre/latest/color_eyre/) for simplifying any errors that +need to be reported to the console. diff --git a/logger-template/template/.github/workflows/build_examples.yml b/logger-template/template/.github/workflows/build_examples.yml new file mode 100644 index 0000000..4cb1a8d --- /dev/null +++ b/logger-template/template/.github/workflows/build_examples.yml @@ -0,0 +1,21 @@ +name: Build examples + +on: + push: + branches: [master] + pull_request: + branches: [master] + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v4 + - name: Check rust version + run: rustup show + - name: Build examples with ratatui and termion + run: cargo build --examples --features termion + - name: Build example with ratatui and crossterm + run: cargo build --examples --features crossterm diff --git a/logger-template/template/.github/workflows/build_examples_latest.yml b/logger-template/template/.github/workflows/build_examples_latest.yml new file mode 100644 index 0000000..c0aff04 --- /dev/null +++ b/logger-template/template/.github/workflows/build_examples_latest.yml @@ -0,0 +1,23 @@ +name: Build examples with latest rust version + +on: + push: + branches: [master] + pull_request: + branches: [master] + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v4 + - name: Check rust version + run: rustup show + - name: Update rust + run: rustup update + - name: Build examples with ratatui and termion + run: cargo build --examples --features termion + - name: Build example with ratatui and crossterm + run: cargo build --examples --features crossterm diff --git a/logger-template/template/.github/workflows/docs.yml b/logger-template/template/.github/workflows/docs.yml new file mode 100644 index 0000000..11b0a37 --- /dev/null +++ b/logger-template/template/.github/workflows/docs.yml @@ -0,0 +1,20 @@ +name: Documentation + +on: + push: + branches: [master] + pull_request: + branches: [master] + +jobs: + check-docs: + name: Check + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Install cargo-rdme + uses: taiki-e/install-action@v2 + with: + tool: cargo-rdme + - name: Check README.md is up-to-date + run: cargo rdme --check diff --git a/logger-template/template/.github/workflows/semver_checks.yml b/logger-template/template/.github/workflows/semver_checks.yml new file mode 100644 index 0000000..b0db256 --- /dev/null +++ b/logger-template/template/.github/workflows/semver_checks.yml @@ -0,0 +1,16 @@ +name: Semver Checks + +on: + push: + branches: [master] + pull_request: + branches: [master] + +jobs: + semver-checks: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + - name: Check semver + uses: obi1kenobi/cargo-semver-checks-action@v2 diff --git a/logger-template/template/.gitignore b/logger-template/template/.gitignore new file mode 100644 index 0000000..6936990 --- /dev/null +++ b/logger-template/template/.gitignore @@ -0,0 +1,3 @@ +/target +**/*.rs.bk +Cargo.lock diff --git a/logger-template/template/CHANGELOG.md b/logger-template/template/CHANGELOG.md new file mode 100644 index 0000000..bd120e9 --- /dev/null +++ b/logger-template/template/CHANGELOG.md @@ -0,0 +1,139 @@ +0.14.1: +- re-export log::LevelFilter + +0.14.0: +- Update version of ratatui + +0.13.2: +- fix tracing support + +0.13.1: +- fix missing `move_events()` on half full buffer in case hot buffer capacity was odd + +0.13.0: +- `move_events()` is not published anymore, but called by a cyclic internal task. + This task is called by timeout (10ms) unless the hot buffer is half full. +- `init_logger()` returns now `Result<(), TuiLoggerError>` + +0.12.1: +- fix for issue #69: avoid unwrap panic by using default level +- add `set_buffer_depth()` to modify circular buffer size + +0.12.0: +- update ratatui to 0.28 + +0.11.2: +- update ratatui to 0.27 + +0.11.1: +- one line error report for demo example, if feature flag crossterm or termion not given +- use cargo readme and test in github build +- Fix of issue #60: panic on too small widget size + +0.11.0: +- BREAKING CHANGE: TuiWidgetEvent::transition() method now takes a TuiWidgetEvent by value instead of by reference. +- update ratatui to 0.25 + +0.10.1: +- update ratatui to ^0.25.0 + +0.10.0: +- Remove support for tui legacy crate +- Use `Cell::set_symbol()` as performance optimization from ratatui +- Require chrono >= 0.4.20 for avoid security vulnerability (https://rustsec.org/advisories/RUSTSEC-2020-0159.html) + +0.9.6: +- update ratatui to 0.23.0 + +0.9.5: +- rework examples/demo to not use termion + +0.9.4: +- fix breaking change in 0.9.3 as reported by issue #43 + +0.9.3: +- update to ratatui 0.22 and fix clippy warnings + +0.9.2: +- update to ratatui 0.21 + +0.9.1: +- Implement Eq for TuiWidgetEvent +- suppport `border_type()` for TuiLoggerSmartWidget +- Disable default features of chrono to avoid import of `time` v0.1.x + +0.9.0: +- support for tracing-subscriber +- add optional ratatui support as proposed by (#32) +- slog is NOT a default feature anymore. Enable with `slog-support` + +0.8.3: +- Make `TuiWidgetState.set_default_display_level()` work for TuiLoggerWidget (#30) + +0.8.2: +- Allow TuiLoggerWidget to be controlled with TuiWidgetState by calling state() builder function (#30) +- Extend demo for an example for this TuiLoggerWidget control + +0.8.1: +- Update to tui-rs 0.19 and slog to 2.7.0 + +0.8.0: +- Update to tui-rs 0.18 + +0.7.1: +- Update to tui-rs 0.17 + +0.7.0: +- Update rust edition in Cargo.toml to 2021 +- Fix all warnings from cargo clippy +- new function for TuiWidgetState to set the default display level - not impacting the recording + ```rust + set_default_display_level(self, levelfilter: LevelFilter) -> TuiWidgetState +- changed signature for TuiWidgetState function from + ```rust + set_level_for_target(&self, target: &str, levelfilter: LevelFilter) -> &TuiWidgetState + ``` + to + ```rust + set_level_for_target(self, target: &str, levelfilter: LevelFilter) -> TuiWidgetState + ``` + + +0.6.6: +- Add functions to format output of log data as discussed in [issue #19](https://github.com/gin66/tui-logger/issues/19) + The functions are with their default values: + ``` + output_separator(':') + output_timestamp(Some("%H:%M:%S".to_string())) + output_level(Some(TuiLoggerLevelOutput::Long)) + output_target(true) + output_file(true) + output_line(true) + ``` + +0.6.5: +- Use thread safe counterparts for Rc/RefCell + +0.6.4: +- Bump version up for update to tui 0.16 + +0.6.3: +- Removed verbose timestamp info log (issue #16) + +0.6.2: +- Fix by Wuelle to avoid panic on line wrapping inside a utf8 character + +0.6.1: +- Changes in README + +0.6.0: +- Support Scrollback in log history with TuiWidgetEvent::PrevPageKey, NextPageKey and EscapeKey +- log and target panes' title can be set via .title_log(String) and .title_target(String) + +0.5.1: +- TuiWidgetEvent is now Debug, Clone, PartialEq, Hash + +0.5.0: +- Remove dispatcher completely +- Get rid of dependency to termion and crossterm +- KeyCommands to be translated by the application into KeyEvents for TuiWidgetState::transition() diff --git a/logger-template/template/Cargo.toml b/logger-template/template/Cargo.toml new file mode 100644 index 0000000..c2fa40b --- /dev/null +++ b/logger-template/template/Cargo.toml @@ -0,0 +1,55 @@ +[package] +name = "tui-logger" +version = "0.14.1" +authors = ["Jochen Kiemes <[email protected]>"] +edition = "2021" +license = "MIT" +description = "Logger with smart widget for the `ratatui` crate" +documentation = "https://docs.rs/tui-logger/latest/tui_logger/" +repository = "https://github.com/gin66/tui-logger" +readme = "README.md" +keywords = ["tui", "log", "logger", "widget", "dispatcher"] + +[dependencies] +log = "0.4" +chrono = { version = "^0.4.38", default-features = false, features = ["clock"] } +ratatui = { version = "0.29", default-features = false} +tracing = {version = "0.1.40", optional = true} +tracing-subscriber = {version = "0.3", optional = true} +lazy_static = "1.5" +fxhash = "0.2" +parking_lot = "0.12" +slog = { version = "2.7.0", optional = true } + +[dev-dependencies] +# the crate is compatible with ratatui >=0.25.0, but the demo uses features from 0.27.0 +ratatui = { version = "0.29", default-features = false} +anyhow = "1.0.91" +env_logger = "0.11.5" +termion = {version = "4.0.3" } +crossterm = {version = "0.28"} + +[features] +slog-support = ["slog"] +tracing-support = ["tracing", "tracing-subscriber"] + +# only necessary for the demo, the crate does has no dependencies on these +# +# feature_crossterm_or_termion_must_be_selected to generate one line error message +# instead of many compile error messages, if neither crossterm nor termion are selected. +feature_crossterm_or_termion_must_be_selected = [] +crossterm = ["ratatui/crossterm", "feature_crossterm_or_termion_must_be_selected"] +termion = ["ratatui/termion", "feature_crossterm_or_termion_must_be_selected"] + +# Docs.rs-specific configuration required to enable documentation of +# code requiring optional features. +[package.metadata.docs.rs] +# Document all features +all-features = true +# Defines the configuration attribute `docsrs` +rustdoc-args = ["--cfg", "docsrs"] + +[[example]] +name="demo" +required-features=["feature_crossterm_or_termion_must_be_selected"] + diff --git a/logger-template/template/LICENSE b/logger-template/template/LICENSE new file mode 100644 index 0000000..a6efc1d --- /dev/null +++ b/logger-template/template/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024 Jochen Kiemes + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/logger-template/template/README.md b/logger-template/template/README.md new file mode 100644 index 0000000..915da11 --- /dev/null +++ b/logger-template/template/README.md @@ -0,0 +1,213 @@ +# tui-logger + +## Logger with smart widget for the `tui` and `ratatui` crate + +[![dependency status](https://deps.rs/repo/github/gin66/tui-logger/status.svg?service=github&nocache=0_9_1)](https://deps.rs/repo/github/gin66/tui-logger) +![Build examples](https://github.com/gin66/tui-logger/workflows/Build%20examples/badge.svg?service=github) + + +### Demo of the widget + +![Demo](https://github.com/gin66/tui-logger/blob/master/doc/demo_v0.6.6.gif?raw=true) + +### Documentation + +[Documentation](https://docs.rs/tui-logger/latest/tui_logger/) + +### Important note for `tui` + +The `tui` crate has been archived and `ratatui` has taken over. +In order to avoid supporting compatibility for an inactive crate, +the v0.9.x releases are the last to support `tui`. In case future bug fixes +are needed, the branch `tui_legacy` has been created to track changes to 0.9.x releases. + +Starting with v0.10 `tui-logger` is `ratatui` only. + +### Features + +- [X] Logger implementation for the `log` crate +- [X] Logger enable/disable detection via hash table (avoid string compare) +- [X] Hot logger code only copies enabled log messages with timestamp into a circular buffer +- [X] Widgets/move_message() retrieve captured log messages from hot circular buffer +- [X] Lost message detection due to circular buffer +- [X] Log filtering performed on log record target +- [X] Simple Widgets to view logs and configure debuglevel per target +- [X] Logging of enabled logs to file +- [X] Scrollback in log history +- [x] Title of target and log pane can be configured +- [X] `slog` support, providing a Drain to integrate into your `slog` infrastructure +- [X] `tracing` support +- [ ] Allow configuration of target dependent loglevel specifically for file logging +- [ ] Avoid duplicating of target, module and filename in every log record +- [ ] Simultaneous modification of all targets' display/hot logging loglevel by key command + +### Smart Widget + +Smart widget consists of two widgets. Left is the target selector widget and +on the right side the logging messages view scrolling up. The target selector widget +can be hidden/shown during runtime via key command. +The key command to be provided to the TuiLoggerWidget via transition() function. + +The target selector widget looks like this: + +![widget](https://github.com/gin66/tui-logger/blob/master/doc/example.png?raw=true) + +It controls: + +- Capturing of log messages by the logger +- Selection of levels for display in the logging message view + +The two columns have the following meaning: + +- Code EWIDT: E stands for Error, W for Warn, Info, Debug and Trace. + + Inverted characters (EWIDT) are enabled log levels in the view + + Normal characters show enabled capturing of a log level per target + + If any of EWIDT are not shown, then the respective log level is not captured +- Target of the log events can be defined in the log e.g. `warn!(target: "demo", "Log message");` + +### Smart Widget Key Commands +```rust +| KEY | ACTION +|----------|-----------------------------------------------------------| +| h | Toggles target selector widget hidden/visible +| f | Toggle focus on the selected target only +| UP | Select previous target in target selector widget +| DOWN | Select next target in target selector widget +| LEFT | Reduce SHOWN (!) log messages by one level +| RIGHT | Increase SHOWN (!) log messages by one level +| - | Reduce CAPTURED (!) log messages by one level +| + | Increase CAPTURED (!) log messages by one level +| PAGEUP | Enter Page Mode and scroll approx. half page up in log history. +| PAGEDOWN | Only in page mode: scroll 10 events down in log history. +| ESCAPE | Exit page mode and go back to scrolling mode +| SPACE | Toggles hiding of targets, which have logfilter set to off +``` + +The mapping of key to action has to be done in the application. The respective TuiWidgetEvent +has to be provided to TuiWidgetState::transition(). + +Remark to the page mode: The timestamp of the event at event history's bottom line is used as +reference. This means, changing the filters in the EWIDT/focus from the target selector window +should work as expected without jumps in the history. The page next/forward advances as +per visibility of the events. + +### Basic usage to initialize logger-system: +```rust +#[macro_use] +extern crate log; +//use tui_logger; + +fn main() { + // Early initialization of the logger + + // Set max_log_level to Trace + tui_logger::init_logger(log::LevelFilter::Trace).unwrap(); + + // Set default level for unknown targets to Trace + tui_logger::set_default_level(log::LevelFilter::Trace); + + // code.... +} +``` + +For use of the widget please check examples/demo.rs + +### Demo + +Run demo using termion: + +```rust +cargo run --example demo --features termion +``` + +Run demo with crossterm: + +```rust +cargo run --example demo --features crossterm +``` + +### `slog` support + +`tui-logger` provides a [`TuiSlogDrain`] which implements `slog::Drain` and will route all records +it receives to the `tui-logger` widget. + +Enabled by feature "slog-support" + +### `tracing-subscriber` support + +`tui-logger` provides a [`TuiTracingSubscriberLayer`] which implements +`tracing_subscriber::Layer` and will collect all events +it receives to the `tui-logger` widget + +Enabled by feature "tracing-support" + +### Custom filtering +```rust +#[macro_use] +extern crate log; +//use tui_logger; +use env_logger; + +fn main() { + // Early initialization of the logger + let drain = tui_logger::Drain::new(); + // instead of tui_logger::init_logger, we use `env_logger` + env_logger::Builder::default() + .format(move |buf, record| + // patch the env-logger entry through our drain to the tui-logger + Ok(drain.log(record)) + ).init(); // make this the global logger + // code.... +} +``` + +### Internals + +For logging there are two circular buffers in use: +* "hot" buffer, which is written to during any logging macro invocation +* main buffer, which holds events to be displayed by the widgets. + +The size of the "hot" buffer is 1000 and can be modified by `set_hot_buffer_depth()`. +The size of the main buffer is 10000 and can be modified by `set_buffer_depth()`. + +Reason for this scheme: The main buffer is locked for a while during widget updates. +In order to avoid blocking the log-macros, this scheme is in use. + +The copy from "hot" buffer to main buffer is performed by a call to `move_events()`, +which is done in a cyclic task, which repeats every 10 ms, or when the hot buffer is half full. + +In versions <0.13 log messages may have been lost, if the widget wasn't drawn. + +### THANKS TO + +* [Florian Dehau](https://github.com/fdehau) for his great crate [tui-rs](https://github.com/fdehau/tui-rs) +* [Antoine Büsch](https://github.com/abusch) for providing the patches to tui-rs v0.3.0 and v0.6.0 +* [Adam Sypniewski](https://github.com/ajsyp) for providing the patches to tui-rs v0.6.2 +* [James aka jklong](https://github.com/jklong) for providing the patch to tui-rs v0.7 +* [icy-ux](https://github.com/icy-ux) for adding slog support and example +* [alvinhochun](https://github.com/alvinhochun) for updating to tui 0.10 and crossterm support +* [brooksmtownsend](https://github.com/brooksmtownsend) Patch to remove verbose timestamp info +* [Kibouo](https://github.com/Kibouo) Patch to change Rc/Refcell to thread-safe counterparts +* [Afonso Bordado](https://github.com/afonso360) for providing the patch to tui-rs v0.17 +* [Benjamin Kampmann](https://github.com/gnunicorn) for providing patch to tui-rs v0.18 +* [Paul Sanders](https://github.com/pms1969) for providing patch in [issue #30](https://github.com/gin66/tui-logger/issues/30) +* [Ákos Hadnagy](https://github.com/ahadnagy) for providing patch in [#31](https://github.com/gin66/tui-logger/issues/31) for tracing-subscriber support +* [Orhun Parmaksız](https://github.com/orhun) for providing patches in [#33](https://github.com/gin66/tui-logger/issues/33), [#34](https://github.com/gin66/tui-logger/issues/34), [#37](https://github.com/gin66/tui-logger/issues/37) and [#46](https://github.com/gin66/tui-logger/issues/46) +* [purephantom](https://github.com/purephantom) for providing patch in [#42](https://github.com/gin66/tui-logger/issues/42) for ratatui update +* [Badr Bouslikhin](https://github.com/badrbouslikhin) for providing patch in [#47](https://github.com/gin66/tui-logger/issues/47) for ratatui update +* [ganthern](https://github.com/ganthern) for providing patch in [#49](https://github.com/gin66/tui-logger/issues/49) for tui support removal +* [Linda_pp](https://github.com/rhysd) for providing patch in [#51](https://github.com/gin66/tui-logger/issues/51) for Cell:set_symbol +* [Josh McKinney](https://github.com/joshka) for providing patch in +[#56](https://github.com/gin66/tui-logger/issues/56) for Copy on TuiWidgetEvent and +TuiLoggerWidget +* [nick42d](https://github.com/nick42d) for providing patch in +[#63](https://github.com/gin66/tui-logger/issues/63) for semver checks and [#74](https://github.com/gin66/tui-logger/pull/74) +* [Tom Groenwoldt](https://github.com/tomgroenwoldt) for providing patch in [#65](https://github.com/gin66/tui-logger/issues/65) for ratatui update +* [Kevin](https://github.com/doesnotcompete) for providing patch in [#71](https://github.com/issues/71) +* [urizennnn](https://github.com/urizennnn) for providing patch in [#72](https://github.com/issues/72) + +### Star History + +[![Star History Chart](https://api.star-history.com/svg?repos=gin66/tui-logger&type=Date)](https://star-history.com/#gin66/tui-logger&Date) + +License: MIT diff --git a/logger-template/template/bacon.toml b/logger-template/template/bacon.toml new file mode 100644 index 0000000..7caa3f2 --- /dev/null +++ b/logger-template/template/bacon.toml @@ -0,0 +1,58 @@ +# This is a configuration file for the bacon tool +# +# Bacon repository: https://github.com/Canop/bacon +# Complete help on configuration: https://dystroy.org/bacon/config/ +# You can also check bacon's own bacon.toml file +# as an example: https://github.com/Canop/bacon/blob/main/bacon.toml + +default_job = "check" + +[jobs.check] +command = ["cargo", "check", "--color", "always"] +need_stdout = false + +# This is a helpful job to check that the demo compiles with the crossterm +# feature enabled. This and the termion feature are mutually exclusive. +[jobs.check-crossterm] +command = ["cargo", "check", "--all-targets", "--features", "crossterm", "--color", "always"] +need_stdout = false + +# This is a helpful job to check that the demo compiles with the termion +# feature enabled. This and the crossterm feature are mutually exclusive. +[jobs.check-termion] +command = ["cargo", "check", "--all-targets", "--features", "termion", "--color", "always"] +need_stdout = false + +[jobs.clippy] +command = [ + "cargo", "clippy", + "--color", "always", +] +need_stdout = false + +[jobs.test] +command = [ + "cargo", "test", "--libs", "--color", "always", + "--", "--color", "always", # see https://github.com/Canop/bacon/issues/124 +] +need_stdout = true + +[jobs.doc] +command = ["cargo", "doc", "--color", "always", "--no-deps"] +need_stdout = false + +# If the doc compiles, then it opens in your browser and bacon switches +# to the previous job +[jobs.doc-open] +command = ["cargo", "doc", "--color", "always", "--no-deps", "--open"] +need_stdout = false +on_success = "back" # so that we don't open the browser at each change + +# You may define here keybindings that would be specific to +# a project, for example a shortcut to launch a specific job. +# Shortcuts to internal functions (scrolling, toggling, etc.) +# should go in your personal global prefs.toml file instead. +[keybindings] +# alt-m = "job:my-job" +1 = "job:check-crossterm" +2 = "job:check-termion" diff --git a/logger-template/template/cargo-generate.toml b/logger-template/template/cargo-generate.toml new file mode 100644 index 0000000..2589766 --- /dev/null +++ b/logger-template/template/cargo-generate.toml @@ -0,0 +1,2 @@ +[template] +cargo_generate_version = ">=0.10.0" diff --git a/logger-template/template/demo.tape b/logger-template/template/demo.tape new file mode 100644 index 0000000..e754c9c --- /dev/null +++ b/logger-template/template/demo.tape @@ -0,0 +1,105 @@ +# VHS documentation +# +# Output: +# Output <path>.gif Create a GIF output at the given <path> +# Output <path>.mp4 Create an MP4 output at the given <path> +# Output <path>.webm Create a WebM output at the given <path> +# +# Require: +# Require <string> Ensure a program is on the $PATH to proceed +# +# Settings: +# Set FontSize <number> Set the font size of the terminal +# Set FontFamily <string> Set the font family of the terminal +# Set Height <number> Set the height of the terminal +# Set Width <number> Set the width of the terminal +# Set LetterSpacing <float> Set the font letter spacing (tracking) +# Set LineHeight <float> Set the font line height +# Set LoopOffset <float>% Set the starting frame offset for the GIF loop +# Set Theme <json|string> Set the theme of the terminal +# Set Padding <number> Set the padding of the terminal +# Set Framerate <number> Set the framerate of the recording +# Set PlaybackSpeed <float> Set the playback speed of the recording +# Set MarginFill <file|#000000> Set the file or color the margin will be filled with. +# Set Margin <number> Set the size of the margin. Has no effect if MarginFill isn't set. +# Set BorderRadius <number> Set terminal border radius, in pixels. +# Set WindowBar <string> Set window bar type. (one of: Rings, RingsRight, Colorful, ColorfulRight) +# Set WindowBarSize <number> Set window bar size, in pixels. Default is 40. +# Set TypingSpeed <time> Set the typing speed of the terminal. Default is 50ms. +# +# Sleep: +# Sleep <time> Sleep for a set amount of <time> in seconds +# +# Type: +# Type[@<time>] "<characters>" Type <characters> into the terminal with a +# <time> delay between each character +# +# Keys: +# Escape[@<time>] [number] Press the Escape key +# Backspace[@<time>] [number] Press the Backspace key +# Delete[@<time>] [number] Press the Delete key +# Insert[@<time>] [number] Press the Insert key +# Down[@<time>] [number] Press the Down key +# Enter[@<time>] [number] Press the Enter key +# Space[@<time>] [number] Press the Space key +# Tab[@<time>] [number] Press the Tab key +# Left[@<time>] [number] Press the Left Arrow key +# Right[@<time>] [number] Press the Right Arrow key +# Up[@<time>] [number] Press the Up Arrow key +# Down[@<time>] [number] Press the Down Arrow key +# PageUp[@<time>] [number] Press the Page Up key +# PageDown[@<time>] [number] Press the Page Down key +# Ctrl+<key> Press the Control key + <key> (e.g. Ctrl+C) +# +# Display: +# Hide Hide the subsequent commands from the output +# Show Show the subsequent commands in the output + +Output target/demo.gif +Set Theme "Aardvark Blue" +Set Width 1600 +Set Height 1200 +Set Framerate 50 + +Hide +Type "cargo run --example=demo --features=crossterm" Enter + +Sleep 2s # allows time for build +Show +Right 2 # set App to tracing +Down 2 # select the crossterm target +Right 2 # set crossterm to tracing +Sleep 1s + +# a screenshot for using in a more static context (e.g. ratatui.rs showcase) +Screenshot target/demo.png +Sleep 1s + +# The following commented out commands are for a more full demo similar to the existing demo +# However they produce a much larger gif and are not necessary for the showcase + +# Type "f" Sleep 2s # focus on the crossterm target +# Up +# Up +# Type "f" Sleep 2s # unfocus + +# # unselect everything except error +# Left 4 Down +# Left 2 Down +# Left 4 Down +# Left 2 Down +# Left 2 Sleep 2s + +# # Hide / show the selector +# Type "h" Sleep 2s +# Type "h" Sleep 2s + +# # turn off tracing capture +# Type "-" Up +# Type "-" Up +# Type "-" Up +# Type "-" Up +# Type "-" Sleep 2s + +Hide +Type "q" diff --git a/logger-template/template/doc/demo_v0.6.6.gif b/logger-template/template/doc/demo_v0.6.6.gif new file mode 100644 index 0000000..1f2b8fc Binary files /dev/null and b/logger-template/template/doc/demo_v0.6.6.gif differ diff --git a/logger-template/template/doc/example.png b/logger-template/template/doc/example.png new file mode 100644 index 0000000..536d196 Binary files /dev/null and b/logger-template/template/doc/example.png differ diff --git a/logger-template/template/doc/example.svg b/logger-template/template/doc/example.svg new file mode 100644 index 0000000..077ca1f --- /dev/null +++ b/logger-template/template/doc/example.svg @@ -0,0 +1,198 @@ +<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="terminal" baseProfile="full" viewBox="0 0 1016 716" width="1016" version="1.1"> + <defs> + <termtosvg:template_settings xmlns:termtosvg="https://github.com/nbedos/termtosvg"> + <termtosvg:screen_geometry columns="127" rows="42"/> + <termtosvg:animation type="css"/> + </termtosvg:template_settings> + <style type="text/css" id="generated-style"><![CDATA[#screen { + font-family: 'DejaVu Sans Mono', monospace; + font-style: normal; + font-size: 14px; + } + + text { + dominant-baseline: text-before-edge; + white-space: pre; + } + + :root { + --animation-duration: 32277ms; + } + + @keyframes roll { + 0.000%{transform:translateY(0px)} +0.090%{transform:translateY(-748px)} +0.096%{transform:translateY(-1496px)} +1.047%{transform:translateY(-2244px)} +2.119%{transform:translateY(-2992px)} +5.233%{transform:translateY(-3740px)} +5.239%{transform:translateY(-4488px)} +5.242%{transform:translateY(-5236px)} +5.753%{transform:translateY(-5984px)} +7.541%{transform:translateY(-6732px)} +10.106%{transform:translateY(-7480px)} +10.112%{transform:translateY(-8228px)} +10.116%{transform:translateY(-8976px)} +10.119%{transform:translateY(-9724px)} +13.273%{transform:translateY(-10472px)} +13.276%{transform:translateY(-11220px)} +13.285%{transform:translateY(-11968px)} +13.297%{transform:translateY(-12716px)} +13.316%{transform:translateY(-13464px)} +13.335%{transform:translateY(-14212px)} +13.362%{transform:translateY(-14960px)} +13.403%{transform:translateY(-15708px)} +13.449%{transform:translateY(-16456px)} +16.073%{transform:translateY(-17204px)} +16.129%{transform:translateY(-17952px)} +16.185%{transform:translateY(-18700px)} +16.340%{transform:translateY(-19448px)} +16.396%{transform:translateY(-20196px)} +16.616%{transform:translateY(-20944px)} +16.671%{transform:translateY(-21692px)} +17.238%{transform:translateY(-22440px)} +18.366%{transform:translateY(-23188px)} +19.237%{transform:translateY(-23936px)} +19.466%{transform:translateY(-24684px)} +19.528%{transform:translateY(-25432px)} +21.724%{transform:translateY(-26180px)} +21.783%{transform:translateY(-26928px)} +22.499%{transform:translateY(-27676px)} +22.592%{transform:translateY(-28424px)} +22.645%{transform:translateY(-29172px)} +24.324%{transform:translateY(-29920px)} +24.383%{transform:translateY(-30668px)} +25.647%{transform:translateY(-31416px)} +25.703%{transform:translateY(-32164px)} +26.142%{transform:translateY(-32912px)} +26.276%{transform:translateY(-33660px)} +27.109%{transform:translateY(-34408px)} +27.230%{transform:translateY(-35156px)} +28.757%{transform:translateY(-35904px)} +28.810%{transform:translateY(-36652px)} +29.550%{transform:translateY(-37400px)} +29.696%{transform:translateY(-38148px)} +31.902%{transform:translateY(-38896px)} +31.961%{transform:translateY(-39644px)} +32.543%{transform:translateY(-40392px)} +32.683%{transform:translateY(-41140px)} +33.538%{transform:translateY(-41888px)} +33.671%{transform:translateY(-42636px)} +35.000%{transform:translateY(-43384px)} +35.059%{transform:translateY(-44132px)} +38.055%{transform:translateY(-44880px)} +38.108%{transform:translateY(-45628px)} +40.753%{transform:translateY(-46376px)} +40.800%{transform:translateY(-47124px)} +41.150%{transform:translateY(-47872px)} +41.237%{transform:translateY(-48620px)} +41.348%{transform:translateY(-49368px)} +41.398%{transform:translateY(-50116px)} +42.736%{transform:translateY(-50864px)} +42.789%{transform:translateY(-51612px)} +44.307%{transform:translateY(-52360px)} +45.565%{transform:translateY(-53108px)} +45.618%{transform:translateY(-53856px)} +47.353%{transform:translateY(-54604px)} +48.604%{transform:translateY(-55352px)} +50.500%{transform:translateY(-56100px)} +51.309%{transform:translateY(-56848px)} +53.549%{transform:translateY(-57596px)} +54.686%{transform:translateY(-58344px)} +54.832%{transform:translateY(-59092px)} +56.644%{transform:translateY(-59840px)} +58.735%{transform:translateY(-60588px)} +58.794%{transform:translateY(-61336px)} +58.844%{transform:translateY(-62084px)} +59.820%{transform:translateY(-62832px)} +59.944%{transform:translateY(-63580px)} +61.564%{transform:translateY(-64328px)} +61.675%{transform:translateY(-65076px)} +61.747%{transform:translateY(-65824px)} +62.053%{transform:translateY(-66572px)} +62.128%{transform:translateY(-67320px)} +62.698%{transform:translateY(-68068px)} +62.853%{transform:translateY(-68816px)} +62.918%{transform:translateY(-69564px)} +63.249%{transform:translateY(-70312px)} +63.336%{transform:translateY(-71060px)} +64.455%{transform:translateY(-71808px)} +66.007%{transform:translateY(-72556px)} +66.069%{transform:translateY(-73304px)} +66.165%{transform:translateY(-74052px)} +66.214%{transform:translateY(-74800px)} +66.955%{transform:translateY(-75548px)} +67.076%{transform:translateY(-76296px)} +68.984%{transform:translateY(-77044px)} +69.037%{transform:translateY(-77792px)} +69.086%{transform:translateY(-78540px)} +69.529%{transform:translateY(-79288px)} +70.041%{transform:translateY(-80036px)} +70.595%{transform:translateY(-80784px)} +71.066%{transform:translateY(-81532px)} +72.147%{transform:translateY(-82280px)} +72.209%{transform:translateY(-83028px)} +73.476%{transform:translateY(-83776px)} +73.600%{transform:translateY(-84524px)} +75.298%{transform:translateY(-85272px)} +75.363%{transform:translateY(-86020px)} +75.515%{transform:translateY(-86768px)} +75.568%{transform:translateY(-87516px)} +76.798%{transform:translateY(-88264px)} +76.860%{transform:translateY(-89012px)} +76.925%{transform:translateY(-89760px)} +78.344%{transform:translateY(-90508px)} +81.448%{transform:translateY(-91256px)} +83.688%{transform:translateY(-92004px)} +83.741%{transform:translateY(-92752px)} +83.797%{transform:translateY(-93500px)} +84.596%{transform:translateY(-94248px)} +84.723%{transform:translateY(-94996px)} +86.771%{transform:translateY(-95744px)} +86.842%{transform:translateY(-96492px)} +86.916%{transform:translateY(-97240px)} +87.710%{transform:translateY(-97988px)} +87.771%{transform:translateY(-98736px)} +90.823%{transform:translateY(-99484px)} +91.403%{transform:translateY(-100232px)} +91.495%{transform:translateY(-100980px)} +91.536%{transform:translateY(-101728px)} +96.902%{transform:translateY(-102476px)} +100.000%{transform:translateY(-102476px)} + } + + #screen_view { + animation-duration: 32277ms; + animation-iteration-count:infinite; + animation-name:roll; + animation-timing-function: steps(1,end); + animation-fill-mode: forwards; + } + ]]></style> + <style type="text/css" id="user-style"> + /* The colors defined below are the default 16 colors used for rendering text of the terminal. Adjust + them as needed. + PowerShell colors based on https://en.wikipedia.org/wiki/ANSI_escape_code#Colors */ + .foreground {fill: #cccccc;} + .background {fill: #0c0c0c;} + .color0 {fill: #0c0c0c;} + .color1 {fill: #c50f1f;} + .color2 {fill: #13a10e;} + .color3 {fill: #c19c00;} + .color4 {fill: #0037da;} + .color5 {fill: #881798;} + .color6 {fill: #3a96dd;} + .color7 {fill: #cccccc;} + .color8 {fill: #767676;} + .color9 {fill: #e74856;} + .color10 {fill: #16c60c;} + .color11 {fill: #f9f1a5;} + .color12 {fill: #3b78ff;} + .color13 {fill: #b4009e;} + .color14 {fill: #61d6d6;} + .color15 {fill: #f2f2f2;} + </style> + </defs> + <svg id="screen" width="1016" height="714" viewBox="0 0 1016 714" preserveAspectRatio="xMidYMin slice"> + <rect class="background" height="100%" width="100%" x="0" y="0"/><defs><g id="g1"><text x="0" textLength="8" class="background"> </text><text x="8" textLength="1008" class="foreground"> </text></g><g id="g2"><text x="0" textLength="200" font-weight="bold" class="foreground">nuc1~/src/rust/tui-logger</text><text x="200" textLength="8" class="foreground">[</text><text x="208" textLength="48" font-weight="bold" class="color13">master</text><text x="256" textLength="24" class="foreground"> L|</text><text x="280" textLength="16" class="color6">…1</text><text x="296" textLength="40" class="foreground">] % </text><text x="336" textLength="8" class="background"> </text><text x="344" textLength="672" class="foreground"> </text></g><g id="g3"><text x="0" textLength="200" font-weight="bold" class="foreground">nuc1~/src/rust/tui-logger</text><text x="200" textLength="8" class="foreground">[</text><text x="208" textLength="48" font-weight="bold" class="color13">master</text><text x="256" textLength="24" class="foreground"> L|</text><text x="280" textLength="16" class="color6">…1</text><text x="296" textLength="208" class="foreground">] % termtosvg example.svg</text><text x="504" textLength="8" class="background"> </text><text x="512" textLength="504" class="foreground"> </text></g><g id="g4"><text x="0" textLength="200" font-weight="bold" class="foreground">nuc1~/src/rust/tui-logger</text><text x="200" textLength="8" class="foreground">[</text><text x="208" textLength="48" font-weight="bold" class="color13">master</text><text x="256" textLength="24" class="foreground"> L|</text><text x="280" textLength="16" class="color6">…1</text><text x="296" textLength="232" class="foreground">] % cargo run --example demo</text><text x="528" textLength="8" class="background"> </text><text x="536" textLength="480" class="foreground"> </text></g><g id="g5"><text x="0" textLength="200" font-weight="bold" class="foreground">nuc1~/src/rust/tui-logger</text><text x="200" textLength="8" class="foreground">[</text><text x="208" textLength="48" font-weight="bold" class="color13">master</text><text x="256" textLength="24" class="foreground"> L|</text><text x="280" textLength="16" class="color6">…1</text><text x="296" textLength="40" class="foreground">] % </text><text x="336" textLength="40" class="color2">cargo</text><text x="376" textLength="40" class="foreground"> run </text><text x="416" textLength="72" class="color6">--example</text><text x="488" textLength="40" class="foreground"> demo</text><text x="528" textLength="8" class="background"> </text><text x="536" textLength="480" class="foreground"> </text></g><g id="g6"><text x="0" textLength="200" font-weight="bold" class="foreground">nuc1~/src/rust/tui-logger</text><text x="200" textLength="8" class="foreground">[</text><text x="208" textLength="48" font-weight="bold" class="color13">master</text><text x="256" textLength="24" class="foreground"> L|</text><text x="280" textLength="16" class="color6">…1</text><text x="296" textLength="40" class="foreground">] % </text><text x="336" textLength="40" class="color2">cargo</text><text x="376" textLength="40" class="foreground"> run </text><text x="416" textLength="72" class="color6">--example</text><text x="488" textLength="528" class="foreground"> demo </text></g><g id="g7"><text x="0" textLength="8" class="background"> </text></g><g id="g8"><text x="0" textLength="96" font-weight="bold" class="color10"> Compiling</text><text x="96" textLength="432" class="foreground"> tui-logger v0.4.13 (/home/jochen/src/rust/tui-logger)</text></g><g id="g9"><text x="0" textLength="8" class="background"> </text><text x="8" textLength="88" font-weight="bold" class="color14"> Building</text><text x="96" textLength="904" class="foreground"> [========================> ] 40/42: tui-logger </text></g><g id="g10"><text x="0" textLength="8" class="background"> </text><text x="8" textLength="88" font-weight="bold" class="color14"> Building</text><text x="96" textLength="904" class="foreground"> [=========================> ] 41/42: demo(example) </text></g><g id="g11"><text x="0" textLength="96" font-weight="bold" class="color10"> Finished</text><text x="96" textLength="920" class="foreground"> dev [unoptimized + debuginfo] target(s) in 1.42s </text></g><g id="g12"><text x="0" textLength="96" font-weight="bold" class="color10"> Running</text><text x="96" textLength="232" class="foreground"> `target/debug/examples/demo`</text></g><g id="g13"><text x="0" textLength="528" class="foreground"> </text></g><g id="g14"><text x="0" textLength="1016" class="foreground"> </text></g><g id="g15"><text x="0" textLength="328" class="foreground"> </text></g><g id="g16"><text x="0" textLength="1016" class="foreground">┌─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐</text></g><g id="g17"><text x="0" textLength="1016" class="foreground">│┌───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐│</text></g><g id="g18"><text x="0" textLength="24" class="foreground">││ </text><text x="24" textLength="16" class="background">V1</text><text x="40" textLength="976" class="foreground"> │ V2 │ V3 │ V4 ││</text></g><g id="g19"><text x="0" textLength="384" class="foreground">│└──────────────────────────────────────────────</text></g><g id="g20"><text x="0" textLength="1016" class="foreground">│└───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘│</text></g><g id="g21"><text x="0" textLength="40" class="foreground">│┌Tui</text><text x="48" textLength="48" class="foreground">Target</text><text x="104" textLength="176" class="foreground">Selector─────────┐┌Tui</text><text x="288" textLength="24" class="foreground">Log</text><text x="328" textLength="688" class="foreground">[log=13.0/s]────────────────────────────────────────────────────────────────────────┐│</text></g><g id="g22"><text x="0" textLength="16" class="foreground">││</text><text x="16" textLength="40" class="background">EWIDT</text><text x="56" textLength="40" class="foreground">:DEMO</text><text x="240" textLength="16" class="foreground">││</text><text x="256" textLength="240" class="color6">20:29:31:INFO :DEMO:Start demo</text><text x="1000" textLength="16" class="foreground">││</text></g><g id="g23"><text x="0" textLength="16" class="foreground">││</text><text x="16" textLength="40" class="background">EWIDT</text><text x="56" textLength="32" class="foreground">:New</text><text x="96" textLength="40" class="foreground">event</text><text x="240" textLength="16" class="foreground">││</text><text x="256" textLength="680" class="color5">20:29:31:TRACE:tui_logger::dispatcher:src/dispatcher.rs:29:New dispatcher is created.</text><text x="1000" textLength="16" class="foreground">││</text></g><g id="g24"><text x="0" textLength="16" class="foreground">││</text><text x="16" textLength="40" class="background">EWIDT</text><text x="56" textLength="48" class="foreground">:debug</text><text x="240" textLength="16" class="foreground">││</text><text x="256" textLength="448" class="color5">20:29:31:TRACE:DEMO:examples/demo.rs:59:Sleep one second</text><text x="1000" textLength="16" class="foreground">││</text></g><g id="g25"><text x="0" textLength="16" class="foreground">││</text><text x="16" textLength="40" class="background">EWIDT</text><text x="56" textLength="48" class="foreground">:error</text><text x="240" textLength="16" class="foreground">││</text><text x="256" textLength="56" class="color5">20:29:3</text></g><g id="g26"><text x="0" textLength="16" class="foreground">││</text><text x="16" textLength="40" class="background">EWIDT</text><text x="56" textLength="48" class="foreground">:error</text><text x="240" textLength="16" class="foreground">││</text><text x="256" textLength="560" class="color5">20:29:32:TRACE:DEMO:examples/demo.rs:61:Issue log entry for each level</text><text x="1000" textLength="16" class="foreground">││</text></g><g id="g27"><text x="0" textLength="16" class="foreground">││</text><text x="16" textLength="40" class="background">EWIDT</text><text x="56" textLength="40" class="foreground">:info</text><text x="240" textLength="16" class="foreground">││</text><text x="256" textLength="392" class="color1">20:29:32:ERROR:error:examples/demo.rs:62:an error</text><text x="1000" textLength="16" class="foreground">││</text></g><g id="g28"><text x="0" textLength="16" class="foreground">││</text><text x="16" textLength="40" class="background">EWIDT</text><text x="56" textLength="48" class="foreground">:trace</text><text x="240" textLength="16" class="foreground">││</text><text x="256" textLength="392" class="color3">20:29:32:WARN :warn:examples/demo.rs:63:a warning</text><text x="1000" textLength="16" class="foreground">││</text></g><g id="g29"><text x="0" textLength="16" class="foreground">││</text><text x="16" textLength="40" class="background">EWIDT</text><text x="56" textLength="200" class="foreground">:tui_logger::dispatcher││</text><text x="256" textLength="384" class="color5">20:29:32:TRACE:trace:examples/demo.rs:64:a trace</text><text x="1000" textLength="16" class="foreground">││</text></g><g id="g30"><text x="0" textLength="16" class="foreground">││</text><text x="16" textLength="40" class="background">EWIDT</text><text x="56" textLength="40" class="foreground">:warn</text><text x="240" textLength="16" class="foreground">││</text><text x="256" textLength="384" class="color2">20:29:32:DEBUG:debug:examples/demo.rs:65:a debug</text><text x="1000" textLength="16" class="foreground">││</text></g><g id="g31"><text x="0" textLength="16" class="foreground">││</text><text x="240" textLength="16" class="foreground">││</text><text x="256" textLength="216" class="color6">20:29:32:INFO :info:an info</text><text x="1000" textLength="16" class="foreground">││</text></g><g id="g32"><text x="0" textLength="16" class="foreground">││</text><text x="240" textLength="16" class="foreground">││</text><text x="256" textLength="448" class="color5">20:29:32:TRACE:DEMO:examples/demo.rs:59:Sleep one second</text><text x="1000" textLength="16" class="foreground">││</text></g><g id="g33"><text x="0" textLength="16" class="foreground">││</text><text x="240" textLength="16" class="foreground">││</text><text x="256" textLength="496" class="color5">20:29:32:TRACE:New event:examples/demo.rs:134:LoopCnt(Some(1))</text><text x="1000" textLength="16" class="foreground">││</text></g><g id="g34"><text x="0" textLength="16" class="foreground">││</text><text x="240" textLength="16" class="foreground">││</text><text x="256" textLength="664" class="color5">20:29:32:TRACE:tui_logger::dispatcher:src/dispatcher.rs:64:Dispatcher clear called.</text></g><g id="g35"><text x="0" textLength="16" class="foreground">││</text><text x="240" textLength="16" class="foreground">││</text><text x="256" textLength="664" class="color5">20:29:32:TRACE:tui_logger::dispatcher:src/dispatcher.rs:64:Dispatcher clear called.</text><text x="1000" textLength="16" class="foreground">││</text></g><g id="g36"><text x="0" textLength="16" class="foreground">││</text><text x="240" textLength="16" class="foreground">││</text><text x="256" textLength="728" class="color5">20:29:32:TRACE:tui_logger::dispatcher:src/dispatcher.rs:35:Add listener to this dispatcher.</text><text x="1000" textLength="16" class="foreground">││</text></g><g id="g37"><text x="0" textLength="16" class="foreground">││</text><text x="240" textLength="16" class="foreground">││</text><text x="1000" textLength="16" class="foreground">││</text></g><g id="g38"><text x="0" textLength="880" class="foreground">│└────────────────────────────┘└──────────────────────────────────────────────────────────────────────────────</text></g><g id="g39"><text x="0" textLength="1016" class="foreground">│└────────────────────────────┘└─────────────────────────────────────────────────────────────────────────────────────────────┘│</text></g><g id="g40"><text x="0" textLength="8" class="foreground">│</text><text x="8" textLength="1000" class="color15">┌Independent Tui Logger View────────────────────────────────────────────────────────────────────────────────────────────────┐</text><text x="1008" textLength="8" class="foreground">│</text></g><g id="g41"><text x="0" textLength="8" class="foreground">│</text><text x="8" textLength="1000" class="color15">│20:29:32:ERROR:error:examples/demo.rs:62:an error │</text><text x="1008" textLength="8" class="foreground">│</text></g><g id="g42"><text x="0" textLength="8" class="foreground">│</text><text x="8" textLength="1000" class="color15">│20:29:32:WARN :warn:examples/demo.rs:63:a warning │</text><text x="1008" textLength="8" class="foreground">│</text></g><g id="g43"><text x="0" textLength="8" class="foreground">│</text><text x="8" textLength="1000" class="color15">│20:29:32:TRACE:trace:examples/demo.rs:64:a trace │</text><text x="1008" textLength="8" class="foreground">│</text></g><g id="g44"><text x="0" textLength="8" class="foreground">│</text><text x="8" textLength="528" class="color15">│20:29:32:DEBUG:debug:examples/demo.rs:65:a debug </text></g><g id="g45"><text x="0" textLength="8" class="foreground">│</text><text x="8" textLength="1000" class="color15">│20:29:32:DEBUG:debug:examples/demo.rs:65:a debug │</text><text x="1008" textLength="8" class="foreground">│</text></g><g id="g46"><text x="0" textLength="8" class="foreground">│</text><text x="8" textLength="1000" class="color15">│20:29:32:INFO :info:an info │</text><text x="1008" textLength="8" class="foreground">│</text></g><g id="g47"><text x="0" textLength="8" class="foreground">│</text><text x="8" textLength="1000" class="color15">│20:29:32:TRACE:DEMO:examples/demo.rs:59:Sleep one second │</text><text x="1008" textLength="8" class="foreground">│</text></g><g id="g48"><text x="0" textLength="8" class="foreground">│</text><text x="8" textLength="1000" class="color15">│20:29:32:TRACE:New event:examples/demo.rs:134:LoopCnt(Some(1)) │</text><text x="1008" textLength="8" class="foreground">│</text></g><g id="g49"><text x="0" textLength="8" class="foreground">│</text><text x="8" textLength="1000" class="color15">│20:29:32:TRACE:tui_logger::dispatcher:src/dispatcher.rs:64:Dispatcher clear called. │</text><text x="1008" textLength="8" class="foreground">│</text></g><g id="g50"><text x="0" textLength="8" class="foreground">│</text><text x="8" textLength="1000" class="color15">│20:29:32:TRACE:tui_logger::dispatcher:src/dispatcher.rs:35:Add listener to this dispatcher. │</text><text x="1008" textLength="8" class="foreground">│</text></g><g id="g51"><text x="0" textLength="8" class="foreground">│</text><text x="8" textLength="512" class="color15">│20:29:32:TRACE:tui_logger::dispatcher:src/dispatcher.rs:35:Add </text></g><g id="g52"><text x="0" textLength="8" class="foreground">│</text><text x="8" textLength="1000" class="color15">└───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘</text><text x="1008" textLength="8" class="foreground">│</text></g><g id="g53"><text x="0" textLength="528" class="foreground">│┌Progress────────────────────────────────────────────────────────</text></g><g id="g54"><text x="0" textLength="1016" class="foreground">│┌Progress───────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐│</text></g><g id="g55"><text x="0" textLength="16" class="foreground">││</text><text x="16" textLength="8" font-style="italic" class="color15"> </text><text x="24" textLength="976" font-style="italic" class="color0"> 1% </text><text x="1000" textLength="16" class="foreground">││</text></g><g id="g56"><text x="0" textLength="656" class="foreground">└─────────────────────────────────────────────────────────────────────────────────</text></g><g id="g57"><text x="0" textLength="1016" class="foreground">└─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘</text></g><g id="g58"><text x="0" textLength="40" class="foreground">│┌Tui</text><text x="48" textLength="48" class="foreground">Target</text><text x="104" textLength="176" class="foreground">Selector─────────┐┌Tui</text><text x="288" textLength="24" class="foreground">Log</text><text x="328" textLength="688" class="foreground">[log=11.5/s]────────────────────────────────────────────────────────────────────────┐│</text></g><g id="g59"><text x="0" textLength="16" class="foreground">││</text><text x="16" textLength="40" class="background">EWIDT</text><text x="56" textLength="8" class="foreground">:</text><text x="64" textLength="32" class="background">DEMO</text><text x="240" textLength="16" class="foreground">││</text><text x="256" textLength="728" class="color5">20:29:32:TRACE:tui_logger::dispatcher:src/dispatcher.rs:35:Add listener to this dispatcher.</text><text x="1000" textLength="16" class="foreground">││</text></g><g id="g60"><text x="0" textLength="16" class="foreground">││</text><text x="16" textLength="40" class="background">EWIDT</text><text x="56" textLength="32" cl…
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
No description provided.