答え1
コミュニティの答えは正しい方向に向かっています。
tmux
目的のジオメトリ(特定の行数を想定している列の幅)に分割されたセッションを作成できます。
tmux new-session -d -s task-session -x WIDTH -y HEIGHT
その後、コマンドを実行します。
tmux send-keys 'task' ENTER
コマンド出力をファイルにパイプしないでください。
ウィンドウをtmux
ファイルにダンプします。
tmux capture-pane -b temp-buffer -S -
tmux save-buffer -b temp-buffer output.txt
tmux delete-buffer -b temp-buffer
答え2
実際、POSIX標準では、環境変数の値がCOLUMNS
端末サイズを取得する他の方法よりも優先されます。標準では、変数の用途の1つを「端末やウィンドウよりランダムに小さい領域にデータを表示する」と説明しています。
これらの他の方法は標準化されていませんが、通常、エンドデバイスのファイル記述子を開きますioctl()
。あなたのプログラムは標準出力を確認せずに端末デバイスとTIOCGWINSZ
見なしますが、これを行います。isatty()
残念ながら、一部のプログラムはCOLUMNS
環境変数を尊重せず、あなたのプログラムもその一つです。代わりに、独自の特別な非標準メカニズム、つまりdetection
設定ファイルの設定を提供します。defaultwidth
さらに悲しいことは、これらの操作が環境変数とは反対であるということですCOLUMNS
。それらは代替品ではなく代替品です。detection
プログラムの使用を中止しTIOCGWINSZ
てデフォルト状態に戻るには、プログラムを閉じる必要があります。その後、defaultwidth
検出を強制的にオフにするには値を設定する必要があります。設定されていない場合は80、0の場合は65536です。
さらに残念なことは、detection
POSIX標準COLUMNS
とLINES
変数が互いに独立して動作するのとは異なり、幅と高さの両方に閉じが適用されることです。したがって、defaultheight
強制終了を検出するには、設定されていない場合は24、0の場合は65536のaも確認する必要があります。
あなたできる、または検出を終了し、疑似端末にプログラムをだます。
tmux
すべてのキーパディングと中間ファイルが必要な複雑な方法です。 Bernsteinptybandage
とstty columns
(内部擬似端末の場合)の使用は1行でより簡単で、プログラムの実行中にリアルタイムで標準出力に出力されます。
ptybandage sh -c 'stty列40';
追加読書
- バーンスタイン、ダニエル(1996)。
ptybandage
。DJBウェア。 - ジョナサンデボインポラード(2014)。
ptybandage
。スナックガイド。ソフトウェア。
答え3
以下はまだ機能していませんが、いくつかの修正で動作させることができるようです。次のコマンドは、taskwarriorを実行する前に新しいtmuxセッションを作成し、ウィンドウサイズを変更します。
tmux new -d -s s1
tmux split -v
tmux resize-pane -t s1 -y 5
tmux send-keys "task > output.txt" ENTER
sleep 1
tmux kill-session -t s1
cat output.txt