Chienomi

迂闊に送信するチャットをちょっとだけ快適にするtalkbuffer

開発::noddy

  • TOP
  • Articles
  • 開発
  • 迂闊に送信するチャットをちょっとだけ快適にするtalkbuffer

talkbufferはLinux向けの小さなユーティリティスクリプトだ。

基本的にはyadによるテキスト入力ダイアログをだし、OKするとその内容をクリップボードにコピーし、また新たなダイアログを出すというループで動作する。

なんのため?

Enterで送信するチャットは誤爆の宝庫。 特に、「途中送信」の概念を理解しないAIとの会話では結構めんどくさい。

また、一部日本語入力中のEnterをトリガーして送信してしまったりする変なプログラムもいる。 ReactコンポーネントがIMEの入力をうまく扱えないとかいうことがあったりするので、結構あるあるな問題である。

そこで、そういうチャットで誤送信問題を軽減しようとすると「テキストエディタで書いてコピペ」になるのだがめんどくさいので、補助ツールを作ったわけだ。

やけに複雑

割と簡単そうな機能なのに意外と複雑なコードになっているのは、ほぼ気配り要素。

セッション分け、ログ保存、各種設定に対応している。

Zenity併用

基本Yadを使っているのにもかかわらずなんで一部だけZenityなのかというと、こういう事情

  • Yadはモード指定なしでok-cancelが出る
  • しかし、cancelがデフォルトフォーカスでEnter to OKにできない
  • Zenity (--question, --warning), Kdialog (--yesno) はEnter to OK
  • しかしテキスト入力はZenity (--text-info), Kdialog (--textinputbox) ともにCtrl+Enterでは送信できない (Alt+Oなら可能)
  • YadならCtrl+EnterでOKできる

というわけでZenity/Yad併用になっているわけだ。

ウィンドウ位置

Yadはウィンドウ位置自体は指定可能1だけど、前回位置を記憶するみたいなのは普通にはできない。

マウス位置に出現させる--mouseはせめてもの配慮って感じ。 本当は位置を維持してほしい気持ちがあるけど、それをするにはボタンをコールバックにしてウィンドウ位置を保存してから閉じるとかいうテクいことが必要になる。


  1. 実はZenityはできない。↩︎