fsharp-lessonでは以前ちらっと見かけて触ったら普通に動いているように見えたradlineというのを使ってreplを作ってもらった所、 日本語を入力していくとどんどん下にカーソルがずれていって変な事になる、と言われた。 確かに変だ。

で、いろいろ探したけれど結局良いのが見つけられなかった、という話なのだけれど、以下にその過程を書いておく。

調べた事

うーむ、こんな日本人なら必要になるようなものやってる人ひとりもいないという事は無かろう、と思って少しググってみた所、以下のStackoverflowを見かける。

c# - Is there a .Net library similar to GNU readline? - Stack Overflow

これを試していった。

getline.cs

getline.csというのが最初に紹介されていて、このファイルを持っていって自前でビルドして動かしてみた。

mono/getline.cs at main · mono/mono

cscではMacでは生成されたファイルが実行できず、良くわからんのでプロジェクト作ってコピペしてネームスペースがなんかぶつかったとか言われたのでネームスペース変えてifdefの所だけ中に入れて実行してみた所、日本語はエコーバックが表示されない。だめそう。

deveelrl

SOからのリンクは切れていたが、githubにうつっていてNuGetもあった。

deveel/deveelrl: A .NET/Mono ReadLine implementation

日本語はエコーバックされるがバックスペースすると文字が半分しか消えない。

ただコードは一番いじりやすそうだった。直すならこれかなぁ。

tonerdo/readline

これがたぶん一番使われている定番っぽい。

tonerdo/readline: A Pure C# GNU-Readline like library for .NET/.NET Core

ただ挙動はdeveelrlと同じ。 しかもコードがかなり幅を決め打ちにしている感じになっているので、直すならdeveelrlの方が楽そうに見えた。

radline

これは最初に試したものだが。 spectreconsole/radline: A .NET library to read and display keyboard input.

確定をすると改行されてしまう。 カーソルの位置が本来の位置の半分の所の次の行に表示されている。 バックスペースする都度毎回次の行に表示される。

試さなかったもの

mono readlinesというのはバイナリが置いてあるだけで2004年だったので試さなかった。Macで動か無さそうだし。

知っている人いたら教えて下さい

dotnetのreadlineっぽいライブラリで日本語扱えるの、なにか無いんですかね? 無いって事は無いと思うんだが…

追記: 自分で作った ReCJKLine

結局無さそうだし大して大変でも無いので、作ってみました。

.NET用の日本語の扱えるreadlineっぽいライブラリ、ReCJKLineを作りました