from [2023-03-13]
Windowsのターミナルがどのように構成しているのかいまいちよくわかっていない
文字化け問題などがよく起きる印象があるが、どのアプリケーションが悪いのか追求する時に、構成を知っておいたほうが対処しやすい

- https://forest.watch.impress.co.jp/docs/news/1449110.html
  - >  従来のWindowsでコマンドライン(CUI)アプリを起動すると、「Windows コンソールホスト」(conhost.exe)が「コマンド プロンプト」や「PowerShell」を開き、その上でアプリが実行されていた。
  - conhost.exe ってのがいたのか!
- コマンドプロンプト
  - conhost.exe -> cmd.exe
- PowerShell
  - conhost.exe -> PowerShell.exe
- WSL
  - conhost.exe -> WSL
## conhost.exe
- ANSI/VTシーケンスに対応しUNIX系コマンドはそのまま利用できる
- コマンドヒストリをこのレイヤーで実装している
  - UINIX系コマンドはインタラクティブシェルが個々に実装している
- ここではこういうのを[ターミナルエミュレータ]と呼ぼう
## [ターミナルエミュレータ]
- [ConEmu]
- [Hyper]
- [GitBash](git-bash.exe)
  - おそらくこれもターミナルからbash.exeを起動している
- [Windows Terminal]
  - これでGit Bashを指定する時は、実はgit-bash.exeではなくbash.exeを指定している
- [mintty]
## [インタラクティブシェル]
- 要はCUIで、キーボードを介して人間とコミュニケーションできるタイプのプログラム全般のこと
- よく使われるもの
  - cmd.exe
  - PowerShell.exe
  - bash.exe
- インタラクティブシェルの中から更に呼び出すことが一般的なシェルっぽいもの
  - Lightweight Languageの[REPL]
    - Pythonとか
- ターミナルマルチプレクサ
  - (ある意味Windows TerminalもGUI版のターミナルマルチプレクサではあるが・・)
  - screen
  - tmux
  - emacs, vimのシェルモードもこれに近い
##  例
### WindowsのコマンドプロンプトからWindows用のvimを起動
>> mermaid
graph TD
subgraph conhost.exe
  subgraph cmd.exe
    vim.exe
  end
end
<<
### GitBashからWindows用のvimを起動
本当か? conhost.exeは居ないか?
>> mermaid
graph TD
subgraph git-bash.exe
  subgraph bash.exe
    vim.exe
  end
end
<<
### Windows TerminalからコマンドプロンプトとGit Bashを起動し、それぞれでvimを起動
>> mermaid
graph TD
subgraph Windows Terminal
  subgraph cmd.exe
    vim.exe1
  end
  subgraph bash.exe
    vim.exe2
  end
end
<<
### Windows TerminalからコマンドプロンプトとGit Bashを起動
- コマンドプロンプトではvimを起動
- Git BashではScreenを起動し、vimとemacsを起動
>> mermaid
graph TD
subgraph Windows Terminal
  subgraph cmd.exe
    vim.exe1
  end
  subgraph bash.exe
    subgraph screen
      subgraph bash.exe1
        vim1
      end
      subgraph bash.exe2
        vim2
      end
    end
  end
end
<<

##わかりやすかった解説
- https://news.mynavi.jp/techplus/article/techp3911/
- https://forest.watch.impress.co.jp/docs/news/1449110.html