Skip to content

チャットの誤送信を撲滅するツール ​

アプリ開発Web開発

はじめに ​

表題のものを作ったので、主にロジック部分の実装について書き残しておきます。ソースコードはこの記事には貼らないので、適宜GitHubリポジトリを参照してください。成果物(exeファイルの入ったzipファイル)はReleaseページからダウンロードできます。

asumo-1xts/GoE github.com The God of Enter - Enterで確定/改行、Ctrl+Enterで送信.

作った動機 ​

人間あるいはAI相手にチャットを入力しているとき、不意にEnterキーを押してしまって文の途中で誤送信すること、ありますよね(小林製薬)。

我々が等しく思い描いている挙動は、おそらくこうです。

操作理想現実
変換を確定EnterEnter
改行EnterShift + Enter
送信Ctrl + EnterEnter

Teams v2には理想の挙動がオプションとして用意されたにも関わらず、同じくMicrosoft製のM365 Copilotには何故か用意されていません。他にはDiscordやCopilot等も軒並み「現実」なので、デスクトップ/Web問わず全部まとめて理想の挙動になるべきです。

同じ目的を持ったプロジェクトはいくつか試しましたが、満足に動作するものに出会えなかったので自力で何とかすることにしました。

環境 ​

OS ​

入力メソッド ​

  • Microsoft IME
    • ❌ Google日本語入力
    • ❓ ATOK

方針 ​

単純にキーバインドを次のように置き換えても、我々が日本語を使う限りはうまくいきません。

  • Enter → Ctrl + Enter
  • Shift + Enter → Enter
  1. この状態でIMEをONにして日本語をタイプする
  2. 皆さんもご存知の通り、タイプされた文字には下線が引かれて未確定な状態になる
  3. Shift + Enterでは未確定な文字を確定できないので、Enterキーが実質的に無効化される
  4. 仕方がないので、本来のEnterを求めて送信用のCtrl + Enterを恐る恐る押して確定する

これでは今までと何も変わりません。つまりは、「変換を確定」するときだけはEnterキーはそのままEnterとして機能する必要があります。これを含めて所望の機能を実現するためには、以下の2点を常に監視できればよいです。

  • IMEがONかOFFか
  • 未確定な文字の有無

検索すると以下の記事が割とすぐヒットします。上記2点を達成するためのスニペットが記載されているのですが、残念ながらそのままではうまく動作しなかったので改良していきます。

Autohotkey v2.0のIME制御用 関数群 IMEv2.ahk - Qiita qiita.com 1 はじめに Autohotkey v2.0 に、キーボード配列エミュレーションソフトウエア紅皿を移植する上で、先ずはIME制御用 関数群 IME.ahk を v2.0 に移植しました。 2 IME.ahk IMEの制御ライブラりIME.ahkは、eamatさんが..." name="description

実装 ​

IMEがONかOFFかを取得する ​

これは先の記事のIME_GET()を使えばよいのですが、WebView2で描画されているデスクトップアプリ(Teams v2、M365 Copilot、…)に対応していません。そこで、そのような場合にはUIAutomation(UIA)ライブラリを用いることにしました[2]。統合後の関数をIsIme()と名付けて、リポジトリのsrc/IME.ahk内に記述しました。

Descolada/UIA-v2 github.com UIAutomation library for AHK v2, based on thqby's UIA library

未確定な文字の有無を取得する ​

同じく先の記事のIME_GetConverting()を使えれば良かったのですが、これは少なくとも私の環境では上手く動作しませんでした。そこで少し考えてみて、未確定な文字の有無 == IS_IME() && 直前に文字が打たれたかどうかであることに気付きました。

条件分岐を捏ねて捏ねて、一連の処理をEnterController.ahk内に記述しました。

おわりに ​

ソースコードを示さず長々と解説しても何のこっちゃという感じですが、こういうものを書き残しておくとたまに未来の自分が救われたりするので良しとします。

贔屓目を抜きにしても結構よくできたツールだと思うので、良かったら使ってみてください。



  1. 私には社用Macが支給されなかったので、macOSには対応しません! ↩︎

  2. しれっとUIAライブラリが落ちているAutoHotKey、すごい ↩︎

CC-BY-SA-4.0