RandomThoughts

RandomThoughts

htmnix

Contents:
  1. レポジトリ
  2. 使い方
  3. アイデア
  4. 使った印象
  5. 汎用にする事は出来ないか?
    1. もう少し必要なものを考えてみた

html片を書いてUnix的GUIツールを作る為のツール。 htmlnixは先人が居たのでhtmnixで。

レポジトリ

karino2/htmnix

使い方

htmnix/test at main · karino2/htmnixのファイルに対して、

$ cat test/test.html | htmnix

とする。あとはtest.htmlの中を見て、以下の説明を見ればだいたい分かると思う。

アイデア

htmnixコマンドの標準入力にhtml片を渡すと、それが表示される。 hn-で始まる特殊なクラスをつけると、特別な振る舞いをする。 html片はbulmaでスタイル付け出来る。

jsは書かない。htmlとcssだけ。

例えば以下のようなcssクラスをつけると、それっぽく振る舞うjsのハンドラが勝手にぶら下がる。

  • hn-submit submitボタン
  • hn-cancel キャンセルボタン
  • hn-mul-sel マルチセレクション、このクラスたついたものは複数選択されて、結果はhn-value attributeに書いてある値が出力される(1行1hn-valueで)

まずはこれだけ。てきすとでっきの古くなったメモをアーカイブ用テキストファイルに移すGUIツールを作るのに使う機能から始める。

pythonとかgolangでhtml片を生成する部分とこのhtmnixでGUIを表示する部分に分ければいろんなUnix的GUIツールがスクリプトで書けるようになるんじゃないか。

FSharpbulmaphotinoあたりで作る。

あっさり出来た。なかなか簡単につくれたので筋の良さを感じる。

使った印象

なかなか良いが、これは汎用にすべきなのかブロック選択専用にすべきかは良く分からないな。 ブロック選択専用とすれば現状は非常に完成度が高いが、名前もそういう名前にすべきだよな。

まぁ他に用途が出てきた後に考えよう。出てこなかったら名前は失敗だったという事で。

htmlの生成を外に押し出したのは機能の分割の仕方として優れている気がする。作りやすい。

汎用にする事は出来ないか?

現状のhtmnixは、 hn-mul-selなどのクラスを含んだhtmlを生成するのはユーザーになる。 一方でhn-mul-selなどが何を意味するのかはhtmnixが決めている。

これを外に出せないものか?

この振る舞いに依存するのは以下の2行だけだ。

この2行を外で指定するようになれば、htmnixは汎用な解決策となる。

この2行は何かと言えば、

  1. 画面ロード時に呼ばれるセットアップで、マウスなどに対してどう振る舞って欲しいのかを指定する
  2. Submitボタンが押された時に、ユーザーがGUIで行った操作からデータを取り出す

である。

もちろんこれらをjsで外で書くようにすれば書けるのだが…

jsでは無くいい感じに安全で簡潔に必要な事を指定する方法は無いものか。

そんなにたくさんの種類は必要無いだろうから当初予定通りにcssのクラスを幾つか定義すればいいのかもしれないが、 これを外に出す事が出来ればhtmnixはいじる必要がなくなるので完成する。 なんか機能を外に出して(減らして)完成するって本質的に正しい気がするんだよなぁ。

もう少し必要なものを考えてみた

JSは汎用過ぎるので、もうちょっと制約された何かが良いとは思う。

必要な事はユーザーのアクションに対し、何らかのロジックでcssのクラスを変更する処理と、 終了時にxpathのようなクエリ式とそのグループ参照で組み立てる出力文の生成の2つに思う。

例えばフィルタのような物を作るなら、テキストボックスのonKeyDownで対応するリストのクラスを部分一致が偽なら追加するような記述になりそう。 よそのクラスを参照出来るようにすべきかは微妙だが、 なんにせよ少しダイナミックなスタイル指定でやりたい事はだいたい出来そう。

こういうのは実際に使うケースが無い状態で作ってもろくな物にはならないので、 しばらくいろいろな目的用にカスタムのcssを加えていった後で考えてみたい。