mirror of
https://github.com/ArthurSonzogni/FTXUI.git
synced 2025-09-28 16:29:34 +08:00
59 lines
2.2 KiB
Markdown
59 lines
2.2 KiB
Markdown
# POSIX Piped Input in FTXUI
|
|
|
|
> [!WARNING]
|
|
> This feature works only on Linux and macOS. It is not supported on
|
|
> Windows and WebAssembly.
|
|
|
|
## What is a POSIX Pipe?
|
|
|
|
A POSIX pipe is a way for two separate programs to communicate. One program sends its output directly as input to another program. Think of it like a one-way tube for data.
|
|
|
|
**Example:**
|
|
|
|
Imagine you want to list files and then filter them interactively.
|
|
|
|
- `ls`: Lists files.
|
|
- `interactive_grep`: An FTXUI application that filters text and lets you type.
|
|
|
|
You can connect them with a pipe (`|`):
|
|
|
|
```bash
|
|
ls -l | interactive_grep
|
|
```
|
|
|
|
Here's what happens:
|
|
1. `ls -l` lists files with details.
|
|
2. The `|` sends this list directly to `interactive_grep`.
|
|
3. `interactive_grep` receives the list and displays it. Because it's an FTXUI app, you can then type to filter the list, even though it received initial data from `ls`.
|
|
|
|
## How FTXUI Handles Piped Input
|
|
|
|
Now that you understand what a POSIX pipe is, let's look at how FTXUI uses them.
|
|
|
|
FTXUI lets your application read data from other programs (like from a pipe) while still allowing you to use your keyboard for interaction. This is useful for interactive command-line tools that process data.
|
|
|
|
Normally, FTXUI applications receive all input from `stdin`. However, when FTXUI detects that `stdin` is connected to the output of a pipe (meaning data is being piped into your application), it automatically switches to reading interactive keyboard input from `/dev/tty`. This ensures that your application can still receive user input even while processing piped data.
|
|
|
|
This feature is **turned on by default**.
|
|
|
|
If your FTXUI application needs to read piped data and also respond to keyboard input, you typically don't need to do anything special:
|
|
|
|
```cpp
|
|
auto screen = ScreenInteractive::Fullscreen();
|
|
// screen.HandlePipedInput(true); // This is enabled by default
|
|
screen.Loop(component);
|
|
```
|
|
|
|
|
|
## Turning Off Piped Input
|
|
|
|
If you don't need this feature, or if it conflicts with your custom input handling, you can turn it off.
|
|
|
|
To disable it, call `HandlePipedInput(false)` before starting your application's main loop:
|
|
|
|
```cpp
|
|
auto screen = ScreenInteractive::Fullscreen();
|
|
screen.HandlePipedInput(false); // Turn off piped input handling
|
|
screen.Loop(component);
|
|
```
|