Prev / Next

2004-03-03 / バイナリを cat して文字化けした端末を直す

便利なシェルスクリプト見せろ
URL:http://pc.2ch.net/test/read.cgi/unix/996949546/
から.


shell

From: [493] 名無しさん@お腹いっぱい。 <sage>
Date: 04/02/23 07:56

#!/bin/sh
echo -ne "\017"; # SI/SO による半角カタカナを抜ける
echo -ne "\e(B"; # ESC $ B による全角モードを抜ける
echo -ne "\e[0m"; # 文字の色をデフォルトに戻す
exec /usr/bin/reset
_______________________________________________________________________________


perl

From: [355] 名無しさん@お腹いっぱい。 <sage>
Date: 03/05/18 21:04

バイナリをcatして端末がお亡くなりになったときに。
reset コマンドじゃ復帰しないからね。

#!/usr/bin/perl

print "\cO";    # SI/SO による半角カタカナを抜ける
print "\e(B";   # ESC $ B による全角モードを抜ける
print "\e[[0m"; # 文字の色をデフォルトに戻す

EUC-JP なら "\e\$)B\e*I" とかも入れるとよさげ。
_______________________________________________________________________________

From: [356] 355 <sage>
Date: 03/05/18 21:05

間違えた。"\e\$)B\e*I" じゃなくて "\e)\$B\e*I" だ。
_______________________________________________________________________________

From: [372] 355 <sage>
Date: 03/06/07 00:56

>>355
> print "\e[[0m"; # 文字の色をデフォルトに戻す

いまさら気づいたんだけど、[ はひとつだけだね。
どうしても 2 つ書きたかったら "\c[[0m" になる。
_______________________________________________________________________________


prompt に仕込む

From: [375] 名無しさん@お腹いっぱい。 <sage>
Date: 03/06/09 09:21

tcsh のばやい。
set prompt = 'おすきなプロンプト'
set prompt = '%{^O^[[0m^[))$B^[*I%}'"$prompt"
%{...%} の中に仕込む。エスケープシーケンス自体はこれで合ってるのかな?
^O は vi なら CTRL-V CTRL-O、Emacs なら C-qC-o で入力。^[ も同様。
_______________________________________________________________________________

From: [376] 名無しさん@お腹いっぱい。 <sage>
Date: 03/06/09 11:56

bashなら
PS1='\[\017\e(B\e[0m\e))$B\e*I\]'"$PS1"
かな。
_______________________________________________________________________________

From: [377] 355 <sage>
Date: 03/06/09 17:30

>>375 > set prompt = '%{^O^[[0m^[))$B^[*I%}'"$prompt"
>>376 > PS1='\[\017\e(B\e[0m\e))$B\e*I\]'"$PS1"

どちらも )) は ) の間違いだね。
set prompt = '%{^O^[[0m^[)$B^[*I%}'"$prompt"
PS1='\[\017\e(B\e[0m\e)$B\e*I\]'"$PS1"

ついでに、「^[+$D」または「\e+$D」も入れとくといいかもしれない。
補助漢字使う人はあんまりいないと思うけど…
_______________________________________________________________________________

From: [378] 376 <sage>
Date: 03/06/09 21:47

>>377
> どちらも )) は ) の間違いだね。
まんまコピって間違いを拡大再生産してしまった。スマソ。
_______________________________________________________________________________


.bashrc に

PS1='\[\017\e(B\e[0m\e)$B\e*I\]'"$PS1"


を書いてみたら,プロンプトの前に "*I" が入る.

PS1='\[\017\e(B\e[0m\e))$B\e*I\]'"$PS1"


なら問題ない.

TERM=linux だと "I" がプロンプトの前に出る.
jfbterm,screen 上ならプロンプトの前に何も出ない.

端末固有

From: [370] 名無しさん@お腹いっぱい。 <sage>
Date: 03/06/07 00:08

>>369
少なくとも {x, k}term だと
  C-v ESC c [りたーん]
で文字化け直るよ。
_______________________________________________________________________________


mlterm でも可.

From: [371] 355 <sage>
Date: 03/06/07 00:55

>>370
マウスの右ボタンか何かでメニュー出して「Do Full Reset」を選択すれば
同じことになるんじゃなかったっけ?
_______________________________________________________________________________


comments powered by Disqus