dotnetで使えるReadLineっぽいライブラリで日本語が使えるのは無いのだろうか?
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
結局無さそうだし大して大変でも無いので、作ってみました。