デフォルトの挙動
Discord のチャットでは、Enter でメッセージ送信、Shift Enter が改行となっています。これ、IME を使っていると、確定させるつもりの入力で送信されてしまい、大変都合が悪いです。これをなんとかしたいというのが今回のテーマになります。
動作を検証した IME は、MS IME、ATOK、Google 日本語入力になります。
なお、Gemini や ChatGPT でも同じ問題があるのですが、こちらはブラウザでの入力なので拡張機能が使えます。
私は定番の ChatGPT Ctrl+Enter Sender を愛用しています。大変助かっています。ありがとうございます。
ブラウザ版ではなくアプリ版となると、こういった技が使えません。なので、AutoHotkey を利用することになります。
設定の手順
設定の手順は、2段階に分けることができます。AutoHotkey での設定と、IME 側の設定です。
MS IME の場合には、AutoHotkey だけでいけると思います。IME 設定が必要なのは、ATOK と Google 日本語入力です
AutoHotkey の設定
AutoHotkey についての基本的な知識がある前提で話を進めます。
IME の状態を把握するため、IMEv2.ahk を利用します(IMEv2.ahk のごく一部の機能しか使わないので、利用は必須ではありません)
IME が入力を扱っている場合には Enter を Enter として扱い、それ以外の場合で Discord.exe がアクティブの場合には Enter を Shift Enter にします。
また、Ctrl Enter を Enter にして、Ctrl Enter での送信を可能にしています。これは外してもいいし、別のキーにしてもいいです。IME のキー設定をカスタマイズしている場合には、Ctrl Enter だと都合が悪いケースもあるかもしれません。
#Requires AutoHotkey v2.0
; 同じフォルダに配置した IMEv2.ahk を読み込む
#Include IMEv2.ahk
; Discord のウィンドウがアクティブな時のみ動作させる
#HotIf WinActive("ahk_exe Discord.exe")
; Ctrl + Enter で送信 (Discord標準の Enter を送信)
$^Enter::Send("{Enter}")
; Enter の挙動を IME の変換状態によって分岐
$Enter:: {
; IME_GetConverting() が 1以上 (変換中・候補表示中) の場合は確定の Enter
if (IME_GetConverting()) {
Send("{Enter}")
} else {
; 変換中でない場合は改行のために Shift + Enter を送信
Send("+{Enter}")
}
}
#HotIf
AutoHotkey のスクリプトへのショートカットをスタートアップ(Explorer のアドレスバーに shell:startup と入力すればいける)に置けば、自動起動できるはずです。
IME 側の設定
この AutoHotkey のスクリプトは、ATOK や Google 日本語入力について、変換ウィンドウが表示されている状態を認識して判断しています。しかし、変換中であっても、変換ウィンドウが表示されていない状態も存在します。インライン変換と呼ばれるやつです。この状態に対応するため、IME 側で、Shift Enter で確定するように設定を変更します。
ATOK では "変換中" において Shit Enter で全文確定を設定します。
Google 日本語入力でも "変換中" に Shift Enter で確定を設定します。
これにより、AutoHotkey が IME 起動中ではないと判断するインライン変換(つまり、AutoHotkey が Enter を Shift Enter に置換している状態)において、Shift Enter で確定することが可能になります。
補足
今回は Discord の話でしたが、同じようなツールで同じような解決が可能です。
個人的には、Slack のようにアプリ内で設定させてほしいところです。
あと、Discord は Webhook を利用して、自分用チャンネル経由でスマートフォンに通知を送るといったことができます。友達ゼロでも便利です。私は、登録したウェブページに変更があった場合に Discord 経由で通知が行くようにしています。Google Cloud 使わなくても、Windows PC のタスクスケジューラで動かせます。(タスクスケジューラは、タスクスケジューラーにしなかったんだね)

