多機能なターミナルブラウザChawanが登場!
引用元:https://news.ycombinator.com/item?id=44293260
Nim製のターミナルベースのWebブラウザChawanについて詳しい紹介だよ。[1]許容範囲(個人差あり)のCSSレンダリングや一部のJSサポート、インライン画像(sixel/kitty)に対応してるんだ。http(s)以外にも(s)ftpやgopher、geminiなんかのプロトコルも使えるよ…。Chawanはもともとw3mのクローンとして始まったからUIは似てるんだけど、アーキテクチャは結構違ってて、ページ読み込みは別プロセスだし、プロトコルやファイルタイプの扱いは外部バイナリに分離されてるんだ。その面白い結果として、カスタムのインライン画像フォーマットのデコーダまで登録できるんだけど、実用的なケースはかなり少ないかもね。いくつかのWebサイトがChawanでどう表示されるかが見られるギャラリーはこちらだよ: https://chawan.net/gallery/index.html
[1]: https://nim-lang.org
ありがとう、ちょっと調べ物したい時に別のblinkエンジンを使わずに済む方法があるのはホント助かるよ!学校終わったら試してみるね ; )
まだ出てないみたいだけど、特にsixel使えない人にとってマジですごいハックなのが、Chromiumのターミナル移植版Carbonylだよ: https://github.com/fathyb/carbonyl。…でも元の作者さんが更新する時間がないみたいなんだ。だからすごく必要最低限で、キーボードショートカットとかファイル保存とかたくさんの機能が足りないんだけど、でも明らかに完全なWeb互換性があるし、とにかくめちゃくちゃクールなんだ。Rustのスキルがある誰かにまた引き継いでもらいたいなあって願ってるよ、最後に見た時(数ヶ月前)はどのフォークも全然勢いがなかったから。
余談だけどCarbonylのGitHub投稿見てるとさ、みんな作者さんの健康について、パレスチナ人だから無事かどうかって尋ね続けてるんだよね。
作者さんが無事だといいな。彼の仕事はホントに素晴らしかったと思うよ、マジで。戦争なんてクソ食らえだ。
@shiomiru
TTY関連のこういう概念について学ぶのに、あなたの意見で一番いいリソース(有料・無料問わず)は何?例えばhttps://www.linusakesson.net/programming/tty/index.phpは知ってるけど、termcapやterminfo、cursesには触れてないんだ。
コメントの一つにhttp://www.amazon.com/termcap-terminfo-OReilly-Nutshell-Lind…っていうO’Reillyの本や、
オンラインだとhttps://www.scribd.com/document/831486848/Termcap-and-Termin…)が紹介されてたけどね。
Chawanは独自のターミナルモジュールを使ってるから、標準のX/Open cursesについての知識はそんなに詳しくないんだ。
とは言え、実際のエスケープシーケンスに関しては、XTermのctlseqs.ms[1]がホントに貴重なリソースだよ。あとnick blackのnotcurses[2]からもたくさんのアイデアをもらったし、特に彼の「sprixels」についてのノート[3]はホントおすすめ。
[1]: https://invisible-island.net/xterm/ctlseqs/ctlseqs.html
[2]: https://nick-black.com/dankwiki/index.php/Notcurses
[3]: https://nick-black.com/dankwiki/index.php/Theory_and_Practic…
これマジで美しく出来てるね。日常業務の一部でこれを使ってみて、どこまでいけるか見てみるよ。HNとかめちゃくちゃ綺麗に表示されるね。ありがとう!
いいね!見つけたバグは忘れずに報告してね。
これマジ印象的だね!これから追加予定とか、計画してる機能のロードマップってある?
一番近いものだと、これかな:
https://codeberg.org/bptato/chawan/raw/branch/master/todo、でもちょっと古いし、優先順位もあんまりつけてないんだけどね…。
これマジで超クールじゃん!すごいね。Nimで書かれてるのもいいね。
だけどさ、cha example.com
ってやっても、hjklみたいなコマンドが全然使えないんだよね。唯一反応するのは数字を入力すると左下に出るとこだけ。あれで何ができるのかも分かんないや。
これって俺が見落としてるだけ?それともバグかな?
Mac OS Sequoia 15.5のApple SiliconでNim 2.24を使ってソースからビルドしたよ。ページはちゃんと表示されるんだけど、コマンドが動かないんだ。頼む!
Ghostty、iTerm2、Terminal.appで試してみたけど、全部同じ動きだったよ。
バグだよ、報告サンキューね。チケット作ったよ:
https://todo.sr.ht/~bptato/chawan/63
https://git.sr.ht/~bptato/chawanからmacos-inputブランチをプルして、サイトを開いてコマンドをいくつか入力した後に作られるa
ファイルの中身を教えてくれる?
(カレントディレクトリにできるはずだよ。)
aファイルの中身はこれだよ。他に打ってほしいコマンドがあったら教えてね。<br>handleCommandInput 1, buffer ”” c ’j’<br>handleCommandInput 2, buffer ”” c ’j’<br>after handleCommandInput, buffer 0x104c5b780”j” c ’j’<br>handleCommandInput 1, buffer ”” c ’k’<br>handleCommandInput 2, buffer ”” c ’k’<br>after handleCommandInput, buffer 0x104ca8b70”k” c ’k’<br>handleCommandInput 1, buffer ”” c ’l’<br>handleCommandInput 2, buffer ”” c ’l’<br>after handleCommandInput, buffer 0x104c5bab0”l” c ’l’<br>handleCommandInput 1, buffer ”” c ’k’<br>handleCommandInput 2, buffer ”” c ’k’<br>after handleCommandInput, buffer 0x104ca8d20”k” c ’k’<br>handleCommandInput 1, buffer ”” c ’j’<br>handleCommandInput 2, buffer ”” c ’j’<br>after handleCommandInput, buffer 0x104c5b480”j” c ’j’<br>handleCommandInput 1, buffer ”” c ’h’<br>handleCommandInput 2, buffer ”” c ’h’<br>after handleCommandInput, buffer 0x104ca89c0”h” c ’h’<br>handleCommandInput 1, buffer ”” c ’g’<br>handleCommandInput 2, buffer ”” c ’g’<br>after handleCommandInput, buffer 0x104cae780”g” c ’g’<br>handleCommandInput 1, buffer ”” c ’1’<br>after handleCommandInput, buffer ”” c ’1’<br>handleCommandInput 1, buffer ”” c ’2’<br>after handleCommandInput, buffer ”” c ’2’<br>handleCommandInput 1, buffer ”” c ’3’<br>after handleCommandInput, buffer ”” c ’3’<br>handleCommandInput 1, buffer ”” c ’1’<br>after handleCommandInput, buffer ”” c ’1’<br>handleCommandInput 1, buffer ”” c ’2’<br>after handleCommandInput, buffer ”” c ’2’<br>handleCommandInput 1, buffer ”” c ’2’<br>after handleCommandInput, buffer ”” c ’2’<br>handleCommandInput 1, buffer ”” c ’3’<br>after handleCommandInput, buffer ”” c ’3’<br>handleCommandInput 1, buffer ”” c ’\3’<br>handleCommandInput 2, buffer ”” c ’\3’<br>after handleCommandInput, buffer 0x104cae690”\3” c ’\3’<br>handleCommandInput 1, buffer ”” c ’\3’<br>handleCommandInput 2, buffer ”” c ’\3’<br>after handleCommandInput, buffer 0x104adaed0”\3” c ’\3’<br>handleCommandInput 1, buffer ”” c ’\3’<br>handleCommandInput 2, buffer ”” c ’\3’<br>after handleCommandInput, buffer 0x104ca8720”\3” c ’\3’<br>handleCommandInput 1, buffer ”” c ’\4’<br>handleCommandInput 2, buffer ”” c ’\4’<br>after handleCommandInput, buffer 0x104bf8d80”\4” c ’\4’<br>handleCommandInput 1, buffer ”” c ’\3’<br>handleCommandInput 2, buffer ”” c ’\3’<br>after handleCommandInput, buffer 0x104caaa80”\3” c ’\3’<br>handleCommandInput 1, buffer ”” c ’\4’<br>handleCommandInput 2, buffer ”” c ’\4’<br>after handleCommandInput, buffer 0x104ca8e40”\4” c ’\4’<br>
変だね、入力は見てるのにコマンドを評価してないみたい…OK、別のこと試してみよう。
masterブランチで、cha -o’page.p=”pager.alert(config.page.j)”’ -V
って起動してp
を押すと、ステータスラインに何か表示される?
俺もMac OSだけど、同じ問題に遭遇してる。cha -o’page.p=”pager.alert(config.page.j)”’ -V
で開いてp
を押してみたけど…何も起こらないね。
俺も何も起きないよ。
masterで直したよ。(clangのコンパイルエラーが原因だったんだ。かなり面白かったよ、詳細は上記のチケットを見てね。)
https://todo.sr.ht/~bptato/chawan/63
これすごくいいね!Lenovo M8 4th genにTermuxを入れて、ソースからコンパイルしたよ。Nimを入れるだけでよかった。root権限がなくてもちゃんとインストールできたのもいいね。
Linksでサイトを綺麗に見せるようにしてたんだけど、ChawanはCSSに対応してるからちょっと大変になったなー。Linksはマージンとかパディング無視してたから、リストとかの配置が簡単だったんだよね。
本来は’ただ動く’はずなんだけどね…時々そうじゃないのは分かってる、それはバグだと思っていいよ。でも、グリッド表示でCSSをカスタマイズしたいなら、Chawanは標準の’grid’メディア機能に対応してるよ→ https://developer.mozilla.org/en-US/docs/Web/CSS/@media/grid
@media: gridのアドバイスに従って変更したら、全部綺麗になったよ!ここから確認できるよ→ https://brutalinks.tech (これ、HNみたいなリンクアグリゲーターなんだ)
こんなCSS APIがあったなんて知らなかったよ。CSSに追加してみる、ありがとう!Linksで見た目がまともになるように頑張ったサイトに、CSSをほとんどなくした’シンプル’なスタイルもあるんだけど、代替スタイルシートのサポートについてイシュートラッカーで確認してみるね。
長いことw3mを使ってる者だけど、試してみて気に入ったよ。すごくいいね。’Open URL’(アドレスバー)の機能がないのは設計上の選択なのかな?
アドレスバーはC-l(control+L)を押せば開くはずだよ。
素晴らしいね!ありがとう!もうtermcapとかncursesは使ってないんだね。端末の処理は自分で直接やってるの?またありがとう!
Chawanはncursesは使ってなくてtermcapだけだったんだ。(ncursesはtermcapも実装してるけどね。)
w3mでtermcapに慣れてたからそれから始めたんだ。でもtermcapは古いし、モダンな端末の唯一有用な機能(true color)に対応できない。’80年代のハードウェア端末で偶然動くかも’って利点だけじゃ、余計な失敗モードを増やす価値はない。
だからterminfoに移行する代わりに、terminal queriesの方に完全に切り替えたんだ。(別の理由でも必要だったしね。)
XTermの互換性がある既知のTERM値を検出するために、組み込みの端末データベースはまだあるよ。でも、queriesにちゃんと応答する端末なら、TERM値が分からなくてもそのまま動くよ。
w3mでtermcapに慣れてたからそれから始めた。でもtermcapは古いし、モダンな端末の唯一有用な機能(true color)に対応できない。’80年代のハードウェア端末で偶然動くかも’って利点だけじゃ…
優先順位、だね。俺が端末を使ってる限りは、true colorより80年代のハードウェア端末サポートの方がいいな。でも、俺の唯一のハードウェア端末はVT-420だから、多分ベースのXTerm(モノクロ)をサポートしてるものなら大体動くと思うよ。
TermuxからHNが一発で開けた時、マジでびっくりしたぜ!すっげえ仕事だね!
ありがとう:)興味あるならHNのユーザースタイルをここに貼っといたぜ。
https://lists.sr.ht/~bptato/chawan-devel/%3CD9S40OS2QWHL.PXQ…
主に投票矢印を直すためで、今はbackground-imageがplaceholdersでしか表示されねえんだ。
ついにターミナルでHNを見るいいツールが出たな!ありがとう!キーボードショートカットはどこで見つけられるんだ?vimキーバインドで動けるけど、戻り方が分からねえんだよな。
もっとコメントを表示(1)
cha-config(5)かabout:chawanを見てくれよ。前者にはオンライン版もあるぜ。
https://chawan.net/doc/cha/config.html#pager-actions
ナビゲーションは特に、大文字Dで今のbufferを捨てて前のpageに戻れる。カンマ(,)でback、ピリオド(.)でforwardもあって、stackを壊さずに移動できるぜ。(まあ、実際はtreeだけどUIはstack扱いかな)
Nimで書かれてるの見るの、いつも嬉しいわ。俺の初心者目線だと、C/C++とPythonの間にある一番面白いlanguageなんだよな。人気が出なかったのが残念だぜ。userbaseの規模に比べてuserのproductivityが高いのは、このtopicに詳しくなくても「やっぱそうだよな」って思わせてくれるんだ。
Nim(rod)はGolangよりちょっと前に出て、featureがかぶってたのが普及が進まなかった理由だろうな。
macOSで ’make’ 一発で簡単にbuildできたぜ。クールだな。
新しいelinksのalternativeが出たのもいい感じだ。
terminalでMarkdown browser作るのってマジで筋が通ってるし、すげえうまくいくと思うんだ。よく考えたら、Netscapeっぽくpageのeditingもできるようにできるんじゃね?それはヤバいだろ。
Nimは最高なlanguageだし、これで使われてるの見るのは嬉しいぜ。
glowがそれに近いぜ: https://github.com/charmbracelet/glow
ありがとう、これ良いの見つけたね
これめっちゃ動くじゃん、s-search経由で触ってるんだけどw3mより全然良いね =)
コード読んでみるのおすすめだよ。Nimで書かれてるから読みやすいし(高性能)。HTML DOMとかWeb仕様の実装とか、やっかいな部分もあるけど、基本的な設定はすぐわかるよ。
すごい! しかもNimなんだ!
あの画像、テキストUIでどうやって表示してんの?
あー、わかったよ。SixelsかKitty protocolで表示してるんだって。対応してる画像形式はPNG, JPEG, BMP, GIF (stb_image), WebP (jebp), SVG (nanosvg)だよ。
設定ファイルで有効にできるみたい。
sixel使ってインライン表示。スクショ見てみ。悪くないよ。
うん、スクショ良いよね。だから聞いたんだよ。
そういえばさ、TTYで画像とか動画をレンダリングするのって結構普通なんだよね。
fbida: https://www.kraxel.org/blog/linux/fbida/
mpv: https://mpv.io/
fbidaはscreenとかtmux使う時、たまに-dオプションで/dev/drm/何かしらを指定する必要あるかな。MPVはTTYで長いこと-vo=drm必要だったけど、ここ数ヶ月でいつも動くようになったね。良い改善 :)
ディスプレイサーバーいらないよ。
今日初めて見たよ。ありがとう!
このbrowser大好き!作ってくれてありがとう!
GPMに対応してる?
まだGPMには対応してないけど、XTermのmouse protocolは認識するよ。
マジで信じられないくらいすごい。gopherにも対応してるんだ。
Dockerfile: https://paste.rs/egbGg
docker build -t chawan:0.2.0 .
docker run -it –rm chawan:0.2.0 https://news.ycombinator.com/
いい仕事してるね、本当にナイスな出来だよ、おめでとう。
tiny webのファンとしては、こういうprojectが見られるのはすごく嬉しいよ、(拍手)。
記事であった指摘(ホビーPJだって?とか、外部バイナリ、sixel/kitty、Mac対応どうなの?)について、開発者が理由を説明したり、賛同したり、Mac対応は協力をお願いしたりしてるよ。
詳しくはリンク見てね! https://todo.sr.ht/~bptato/chawan/63
Chawanも良いけど、これも結構近いよ
https://www.brow.sh/
もっと近いのはこれかな
https://github.com/chase/awrit
対応してるターミナルエミュレーターが必要だけどね。
これぞShow HNだよ! ハッカーによるハッカーのためのもの! なんでもかんでも真面目で野心的でつまらなくある必要はないんだよね。
君のフラストレーション、すごくわかるな〜。ほら、代わりに僕の半端なプロジェクトも批判してよ! → https://akkartik.name/freewheeling-apps
一般論としては全くその通りだよ。
まあ確かにね、全部が洗練されてたり製品レベルじゃなくていいのはわかるよ。
君の作品は目的を絞ってて、トレードオフにも正直で分かりやすい。それは珍しいことだね。
僕は趣味のツールとか実験的なのは大賛成だよ、ただ未完成な時には正直になろうぜって思ってるんだ。こっそり基準が下がるのは避けたいだけなんだよね。
未完成なものがあるなら正直になろうぜ
未完成なものはShow HNではちゃんとしたトピックだよ。趣味のツール、ちょっとした思いつきで作ったもの、学習目的のプロジェクト、全部トピックとしてあり。
一般的な不満を言うのは面白くないし、スレッドの質を下げるだけ。
でも、それがなんで問題なの? 楽しむためだけにプロジェクトに取り組むのは全く正当じゃん。
ここはまさか「Hacker News」じゃないの?
ちなみに、これがStallmanによるハッカーの定義だよ→「プログラマーであることがハッカーであることとは違う。それは遊び心のある賢さを評価することだ。遊び心のある賢さなしにプログラマーにはなれるし、プログラミング以外の分野でも遊び心のある賢さは発揮できる。」
もっとコメントを表示(2)
楽しむために作るの、全然オッケーだよ。誰もそうじゃないなんて言ってない。
僕がちょっと異論を唱えたのは、それらを実際以上のものとして扱っちゃう時だけ。
僕は壊れたオモチャをたくさん作ったけど、それを過大に宣伝しないようにしてるんだ。
ブラウザのデモって呼ぶ? クールだね。
ターミナルの代替って呼ぶ? そしたら、まあ入力とかレンダリングとかJavaScriptのこと聞いちゃうよね。
それが面倒なら、もしかしたら僕がスレッドを間違えたのかもね。別に強いこだわりはないんだけど。