magcupの日記

何でも引き付けるカップ、magcup

Windows10, Win11のカラー・エスケープシーケンスとechoの改行抑止

qiita.com
まず、コマンドプロンプトでのエスケープ記号入力は、CTRL+[
(昔のWindowsでは、ESCの後に、Rを押していた)
例えば、 A> ^[[33mABC^[[0mDEF 
などと入力してエンターを押すと、ABC が黄色、DEF が白色で表示される。
この点、colorコマンドとは全く異なる働き。
 

その他、数字の部分が、1=太字(濃い字)、2=薄い字、3=イタリック、4=下線(underscore)、5=ブリンク(点滅)、6=高速点滅*1、7=反転、8=非表示(画面が見えなくなるので注意)、9=取消し
点滅と高速点滅(点滅と同じ)アトリビュート使用の注意として、これらが、薄い字と濃い字の点滅であるため、薄い字のアトリビュートが設定されていると、点滅しない。
 
また、いくつかのアトリビュートを併用したい場合は、複数の数字をセミコロンで区切って入れられる。^[[33;4m で、下線付きの黄色い字となる。
これ以外にもカーソル移動、画面スクロールなど、昔のANSIや、VT-100、PC-98、MZ-6500時代(笑)の「強力な」エスケープシーケンスが行儀よく実装されている。



ただ、一つ、Win7で使えていた、「半角枠組み記号」は全く使えなくなった。まあ、文字のアトリビュートが使えた方がずっと便利だから良い。

Windows7で使えていた枠組みグラフィックキャラクターはWin10以降は使えない

どうしても枠組みを使いたい場合は全角文字の罫線素辺を使うのかな。



次に二つ目のトピックス、「改行無しエコー」である。
これは、echo|set /p="ABC:"など。ちなみに、ダブルクォーテーションの中でも、環境変数は展開してくれるし、エスケープシーケンスも有効。
エスケープコードは、秀丸の制御コード入力で、直接、バイト文字chr($1B)を入れる。


もう一つの代案として、set /p x=test <NUL と言うのもあった。文字列testが改行無しで出力される。
tooljp.com

自分は、これまで、改行無しのechoコマンド的なもの"necho"をDelphiで作っていた。単にコマンドラインの引数を順番にwriteコマンドで描画するだけであるが、最後に改行しないので大変便利なことが多々あった。
つまり、バッチファイル中で、
necho Temperature=
measureTemp(sensor1);
などとしておけば、Temperature=25℃ などと表示できるのだ。

ただ、これだと、Delphiのwriteコマンド中で、エスケープシーケンスが無効化されて、おかしなグラフィック文字になってしまう。
バイスconをオープンしてもダメで、ちょっと途方に暮れていたのでちょっと朗報。

*1:実装されていない。5のブリンクと同じ