WindowsTerminal ペイン分割コマンドと、分割後のペインに文字を送るPowershellと、色を付けるエスケープシーケンス

# 1章　ペイン分割コマンド

## ステップ①上下分割

```Powershell
wt -w 0 sp -H
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/157498/461ba303-90c7-7bf3-631f-895f0ec8506b.png)



## ステップ②上下分割　→　左右分割

```Powershell
wt -w 0 sp -H `; sp -V
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/157498/9854fab0-9b59-bfad-ec3c-a76f7f4745cb.png)


## ステップ③上下分割　→　左右分割　→　フォーカスを左に移動させる

```Powershell
wt -w 0 sp -H `; sp -V `;mf left
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/157498/37cd3341-7cb2-3807-095b-759385913268.png)


## ステップ④上下分割　→　分割先に文字を送る

```Powershell
wt -w 0 sp -H Powershell.exe -noexit echo "移動"

```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/157498/42e50b5e-b9b4-8505-3b53-894bc1a5c0e9.png)

# 2章　分割後のペインに、元ペインから文字を送りたい(Powershell)
　ペイン分割と同時ならば、ステップ④のように他のペインに文字を書き込むことができるが、その一回だけだ。分割済みのペインに、改めて新しい文字を書き込むにはとうしたら良いのだろう。

## お手本のLinuxの「端末」では、どうやっている？
　Linuxは、コンピュータに接続した周辺機器（例えばプリンター）をファイルシステム上の「ファイル」のように扱う「デバイスファイル」が存在する。（UNIXにも）デバイスファイルは、ファイルの読み書きと同じ手順で、データの入出力や制御をできる。
　またLinuxには「WindowsTerminal」の見本となった「端末=ターミナル」が存在するが、この「端末」にも「デバイスファイル」も存在する。Linuxで「端末」の「デバイスファイル」名を出力するコマンドは、「ps」となる。
```bash
ps
```
「ps」と入力した場合の出力結果は以下となる。
```shell
/dev/pts/0
```
そして端末が2つある時、もう一つの端末名は以下と出力される。
```
/dev/pts/1
```
結論から言えば、片方の端末から、もう一つの端末に表示するコマンドは以下となる。この方法はWindowsTerminalでは出来ない。
```bash
echo aho > /dev/pts/1
```
以下はイメージです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/157498/798a95f8-556b-4726-c0b1-9a311a4a0182.png)

## Windowsではどうするのか？
　Windowsにも、Linuxと同じようなデバイスファイルの仕組みはある。しかしデバイスファイルを利用した、コマンドによるペインから別のペイン（端末）へのリアルタイム出力が出来ない。もしかして、存在するかもしれないが、私には見つけられなかった。


## WindowsTerminalでの手段
　思いついたのは以下の手段だ。

(1) 空の「テキストファイル.txt」を作成する。
(2)「入力用ペイン」から「出力用ペイン」を作成する。
(3)「出力用ペイン」には<b>"「テキストファイル.txt」を「監視」し、変更あれば「抽出」して表示する"</b>設定にする。
(4)「入力用ペイン」から「テキストファイル.txt」に「書込」する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/157498/dc7ae2b0-c05f-0503-af9e-796e716dd4ae.png)
## いざ、やってみよう。
### 環境
- Windows10
- テキストファイルにはutf-8で出力する。（標準はShift-JIS）
- WindowsTerminalを利用する。
- Powershell 7.2を利用する。

(1)空の「テキストファイル.txt」を作成する。
```powershell
New-Item テキストファイル.txt -type file 
```
(2)「入力用ペイン」から「出力用ペイン」を作成する。
(3)「出力用ペイン」には<b>"「テキストファイル.txt」を「監視」し、変更あれば「抽出」して表示する"</b>設定にする。
は以下の一行にまとめられる。
```powershell
wt -w 0 sp -H powershell.exe -noexit get-content ./テキストファイル.txt -wait -Encoding utf8
```
(4)「入力用ペイン」から「テキストファイル.txt」に「書込」する。
```powershell
echo 日本チャチャチャ >>  ./テキストファイル.txt 
```

## 結果
できました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/157498/e32ed11a-73d6-2bb6-edf2-3539925124ed.png)

## 3章　分割後のペインに色🟥🟨🟦を付けたい。
Powershell 7.2では、単純に以下と入力すればよい
```powershell
 echo 1:`e[31m赤`e[0m2:`e[32m緑`e[0m >　テキストファイル.txt
```
## 出力結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/157498/62037f4c-21dc-4671-dceb-41df9ef29ec1.png)

しかし、Powershell 5.1(=Windows PowerShell)では、単純にはいかない。
PowerShell 5.1 ではエスケープシーケンスの「`e」がまだ使えない為だ。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/157498/4b8e8ebc-b0fe-d302-cba5-d0cbcc867390.png)
　ではどうするか？　単純な話で「エスケープ＝脱出」しないで、正々堂々「27番目の制御文字ESC」を入力すればよい。ここで<b>注意</b>なのは以下の　"^["　は　"^"　と　"["　ではなく、「27番目の制御文字ESC」です。入力方法は、少し長くなるので他のサイトを検索して下さい。（エスケープ説明）
※ちなみに私は「27番目の制御文字ESC」を秀丸で入れました。ほかにサクラエディタや、NotePad++で入力する方法があるようです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/157498/bd2d27a8-f926-4e63-22e7-2d2e627c34c6.png)
## 考察
　2022年4月時点でのWindows10や、最新のWindows11では、Powershell 5.1(=Windows PowerShell)が標準実装であり、Powershell 7.2は入ってない。その為、エスケープシーケンスは、会社のパソコンで使う為には少々使い辛い。
　（私、機械系エンジニアだし。黒い画面出してているだけで変な人扱いだし）
　どうしたものか思案中。

# 参考リンク
[Windows ターミナルに対するコマンド ライン引数を使用する](https://docs.microsoft.com/ja-jp/windows/terminal/command-line-arguments?tabs=powershell)
[Windows Terminalをコマンドで実行し、更に、その中でコマンド実行。](https://qiita.com/SFITB/items/3044145e62457e896983)
[Windows Terminal 上でwebpack-dev-serverとdocker-composeを同時に起動し別のペインに表示](https://qiita.com/SFITB/items/a3168b5cf0e16282c8e3)

# 参考リンク：制御文字
[サクラエディタで制御文字を入力する方法](http://nanoappli.com/blog/archives/6793)