hack のためのネタ帳, etc,,,

未解決案件

状況

Cygwin で bash 起動待ちのタイミングで mintty のウインドウでマウス左ボタンをプレスすると、そこで mintty への出力が保留されるのだが、マウス左ボタンをリリースしたタイミングでベルが鳴り、mintty への出力が再開され、コマンド入力待ちのプロンプトが表示されるのだが、コマンドラインに ";1R" が勝手に入力されてしまう。
そしてどういうわけか、chcp.com の結果が
$ chcp.com
現在のコード ページ: 932
ではなく
$ chcp.com
Active code page: 65001
になってしまう。

環境は以下
$ uname -srvmo
CYGWIN_NT-10.0-19044 3.3.5-341.x86_64 2022-05-13 12:27 UTC x86_64 Cygwin

原因

bash の startup script に片っ端から
echo "#phase 1"; sleep 1
みたいなウェイトを入れて、phase 毎に左プレスすることで問題の箇所が特定出来た。

Windows の system web proxy から proxy 関連の環境変数を自動解決するために .bashrc で
function proxy_set () # proxy
{
  [ -z "$1" ] && { proxy_unset; return; }
  declare -gx {ftp,http,https}_proxy="$1"
  declare -gx no_proxy="localhost,127.0.0.1,localnet"
}
function proxy_unset ()
{
  unset {ftp,http,https,no}_proxy
}
proxy_set "$(powershell.exe -C '&{[System.Net.WebRequest]::GetSystemWebProxy().GetProxy($Args[0]).AbsoluteUri|sls -not $Args[0]|Write-Host -n}' "https://google.com/")"
みたいなコードを走らせてたのだが、マウス左ボタンをプレスした状態でこのコードが実行されると、この現象が発生する。

どうも powershell.exe が子プロセスとして走ってるタイミングで mintty がマウスプレスかかえこんでるとこうなるみたいなのだが、どうして?

以下 POC
echo "Press mouse left button within 1 sec, then wait 3 sec and release it."; sleep 1; powershell.exe -C echo hello

また、このコードを .bashrc で実行するとこの現象が発生するのだが、コマンドラインから直接実行してもこの現象は発生しない。
どうして?

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Wiki内検索

フリーエリア

管理人/副管理人のみ編集できます