FTXUI 6.1.9
C++ functional terminal UI.
Loading...
Searching...
No Matches
FTXUIにおけるPOSIXパイプ入力

Warning
この機能はLinuxおよびmacOSでのみ動作します。WindowsおよびWebAssemblyではサポートされていません。

POSIXパイプとは?

POSIXパイプは、2つの異なるプログラムが通信する方法です。一方のプログラムは、その出力を別のプログラムへの入力として直接送信します。データを運ぶ一方通行のチューブのようなものと考えてください。

例:

ファイルを一覧表示し、対話的にフィルタリングしたいと想像してください。

  • ls: ファイルを一覧表示します。
  • interactive_grep: テキストをフィルタリングし、入力できるFTXUIアプリケーションです。

それらをパイプ (|) で接続できます。

ls -l | interactive_grep

何が起こるかというと:

  1. ls -l は詳細とともにファイルを一覧表示します。
  2. | はこのリストを interactive_grep に直接送信します。
  3. interactive_grep はリストを受け取り、表示します。FTXUIアプリケーションであるため、ls から初期データを受け取ったにもかかわらず、入力してリストをフィルタリングできます。

FTXUIがパイプ入力を処理する方法

POSIXパイプとは何かを理解したところで、FTXUIがそれらをどのように使用するかを見てみましょう。

FTXUIは、アプリケーションが他のプログラム(パイプからのデータなど)からデータを読み取りながら、キーボードでの対話も可能にします。これは、データを処理する対話型コマンドラインツールに役立ちます。

通常、FTXUIアプリケーションはすべての入力を stdin から受け取ります。ただし、FTXUIが stdin がパイプの出力に接続されていることを検出すると(つまり、データがアプリケーションにパイプされていることを意味します)、自動的に /dev/tty から対話型キーボード入力を読み取るように切り替わります。これにより、アプリケーションはパイプされたデータを処理している間でもユーザー入力を受け取ることができます。

この機能は**デフォルトでオン**になっています。

FTXUIアプリケーションがパイプされたデータを読み取り、キーボード入力にも応答する必要がある場合、通常は特別なことをする必要はありません。

auto screen = ScreenInteractive::Fullscreen();
// screen.HandlePipedInput(true); // これはデフォルトで有効です
screen.Loop(component);

パイプ入力をオフにする

この機能が必要ない場合、またはカスタム入力処理と競合する場合は、オフにすることができます。

無効にするには、アプリケーションのメインループを開始する前に HandlePipedInput(false) を呼び出します。

auto screen = ScreenInteractive::Fullscreen();
screen.HandlePipedInput(false); // パイプ入力処理をオフにします
screen.Loop(component);