Skip to main content

examples/basic_terminal.livemd

# Basic Terminal

```elixir
Mix.install([
  {:kino_termite, "~> 0.1.1"}
])
```

## Start A Terminal

```elixir
terminal = Termite.Terminal.start(adapter: KinoTermite.Adapter, rows: 12)
KinoTermite.output(terminal)
```

## Write To The Terminal

```elixir
Termite.Screen.write(terminal, "KinoTermite demo\n")
Termite.Screen.write(terminal, "Type in the terminal. Press q to stop the reader.\n\n")
```

## Read Input

```elixir
reader =
  Task.async(fn ->
    Stream.repeatedly(fn -> Termite.Terminal.poll(terminal, 100) end)
    |> Enum.reduce_while(:ok, fn
      {:data, "q"}, _ ->
        Termite.Screen.write(terminal, "\nfinished\n")
        {:halt, :ok}

      {:data, data}, _ ->
        Termite.Screen.write(terminal, data)
        {:cont, :ok}

      :timeout, _ ->
        {:cont, :ok}

      _, _ ->
        {:cont, :ok}
    end)
  end)

reader
```