読者です 読者をやめる 読者になる 読者になる

JCTerm Eclipse Pluginにコントリビュートしたいと言ってみた。

Eclipse Plugin開発

SSH2のコンソールをEclipse上で実現するものにJCTerm Plug-in for Eclipseというプラグインがあります。これはEclipseの中でも使われているJCtermのコンソールViewに表示できるようにしたプラグインです。お、と言うことはターミナルのコードがガシガシ書かれているのでは?と思ったら、ビンゴでした。
と言っても、標準のままだとまともに動いてくれません。ターミナルのビューにはAWT/SWING/SWTと各種ウィジェットを使ったものが用意されています。このどれもがまともに動いてくれないのです。自分になじみのあるSWTを使って手を加えていきました。コンソールに表示するときのイメージのバッファリングはやっていないので、にょろにょろ表示されていくんですが、自分としては描画速度は問題ではなかったので、このコードを元にTelnetを実装してみようと思ってここ1,2ヶ月チャレンジしてみました。

ターミナルの描画にはDisplayからImageオブジェクトを作って、それにorg.eclipse.swt.Graphicsとかorg.eclipse.swt.GCとか、普段Widgetばかり使っている自分にとっては使いなれていないクラスをカリカリ使って書かれています。ターミナルって言うのはこうやって作られているのかと思って勉強になりました。自分で後で分からなくなると困るので、はまりポイントをまとめておきます。

はまりポイントその1:よく分からない制御文字

SSHにしろ、Telnetにしろ、VT100という汎用機マシンの機能をエミュレートしています。(よく分かってませんが。)以前出てきたよく分からない制御文字はVT100と同等の機能を実現するための制御文字のようです。JCTermの表示部分のcom.jcraft.jcterm.EmulatorVT100と言うクラスに様々な制御文字が書かれています。それを使えばターミナルの各文字に色づけすることなんかもやれちゃいました。Backspaceなんかも^Hではなく、普通に文字を削除してくれるようになってくれました。

はまりポイントその2:Telnetの改行はLFのみ?

SSH2は改行文字にLF+CRを返してくれていたようですが、TelnetはLFのみを返していました。なので、改行があると、カーソルが下に行くだけで、Carrige Returnはしてくれなくて困った。今のところTelnetでLFが来たときは無理やりCRもくっつけるコードを埋め込んでます。

とまぁ、一応Telnetターミナルが表示できるEclipseビューを作れたので、できたらコントリビュートしたいんだと今作者にメールを投げてみたところ。これができるとやりたいことにかなり近づきます。どーなることやら、です。
http://www.jcraft.com/eclipse-jcterm/