GPUI Box GitHub

Components / content

LogStream builder

A virtualized, read-only log presentation.

A builder is RenderOnce. Construct and mount it in one expression.

use gpui_kit::content::LogStream;

Reviewed in log-stream.

Construct
new(ident: impl Into<Ident>, entries: impl IntoIterator<Item = LogEntry>) -> Self
Options

Chain onto the value.

state(state: LogStreamState) -> Self
visible_rows(rows: usize) -> Self
selected(id: impl Into<SharedString>) -> Self
on_select(handler: impl Fn(SharedString, &mut Window, &mut App) + 'static) -> Self
on_copy(handler: impl Fn(SharedString, &mut Window, &mut App) + 'static) -> Self
ansi(ansi: bool) -> Self
Example · log-stream
fn log_stream(_window: &mut Window, cx: &mut App) -> AnyElement {
    let theme = cx.theme().clone();
    let entries = [
        LogEntry::new("boot", "Fixture worker entered the queue")
            .timestamp("09:41:02")
            .level("INFO", Tone::Info)
            .source("scheduler"),
        LogEntry::new("claim", "Fixture worker claimed run demo-42")
            .timestamp("09:41:03")
            .level("INFO", Tone::Info)
            .source("worker")
            .search_hits(std::iter::once(23..26))
            .current_hit(0),
        LogEntry::new("cache", "Fixture cache was not warm")
            .timestamp("09:41:04")
            .level("WARN", Tone::Warning)
            .source("cache"),
        LogEntry::new("ansi", "\u{1b}[31mfailed\u{1b}[0m after retry")
            .timestamp("09:41:04")
            .level("ERR", Tone::Danger)
            .source("worker"),
        LogEntry::new("retry", "Fixture request completed after one retry")
            .timestamp("09:41:05")
            .level("INFO", Tone::Info)
            .source("worker"),
        LogEntry::new("finish", "Fixture run demo-42 completed")
            .timestamp("09:41:06")
            .level("DONE", Tone::Success)
            .source("scheduler")
            .search_hits(std::iter::once(12..19)),
    ];
    stack(&theme)
        .w(px(780.0))
        .child(caption(
            &theme,
            "fixed virtual rows; metadata and search ranges are caller inputs",
        ))
        .child(
            LogStream::new("scene.log", entries)
                .ansi(true)
                .state(LogStreamState::Stale(
                    "The latest refresh did not complete; verified entries remain.".into(),
                ))
                .visible_rows(5)
                .selected("retry")
                .on_select(|_, _, _| {})
                .on_copy(|_, _, _| {}),
        )
        .into_any_element()
}

Source: crates/gpui-kit/src/content/log_stream.rs