basyura's blog

あしたになったらほんきだす。

ChatGPT : Ctrl+Enter で送信する

ChatGPT で Enter を押したら意図せず送信されたりされなかったりで挙動が一致しないのと、Enter で改行、Ctrl+Enter で送信とした方が分かりやすいのでやってみた。

※ Shift+Enter で改行のようだが、端末(win10 と win11 のOS 違い?)によっては Enter で改行になるのでよく分からない。その場合は tab を二回押して (送信ボタンにフォーカスを移動して) Enter が必要でめんどくさい (よくファイルダイアログが開く)。ime の設定周りが影響している?

  • tampermonkey でスクリプトを組み込む
  • Shift+Enter で改行になる場合 keyhac で Enter を Shift+Enter に置き換える。
  • Shift+Enter は google ime の設定で確定にしておく

で実装 & 設定変更

// ==UserScript==
// @name         ChatGPT
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  try to take over the world!
// @author       You
// @match        https://chat.openai.com/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=openai.com
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    document.body.addEventListener('keydown', function(e) {
        if (!(e.ctrlKey && e.key === 'Enter') || e.isComposing) {
            return;
        }

        if (e.srcElement.id != "prompt-textarea") {
            return;
        }

        let ele = document.querySelector("button[data-testid='send-button']")
        ele.click();
      
        setTimeout(()=> {
            let ele = document.querySelector("button.cursor-pointer");
            console.log(ele);
            if (ele != null) {
                ele.click();
            }
        }, 3000);
    });
})();

keyhac

    gpt = keymap.defineWindowKeymap(
        exe_name="vivaldi.exe", 
        class_name="Chrome_WidgetWin_1", 
        window_text="ChatGPT"
    )
    gpt["Enter"] = "Shift-Enter"

Google IME の設定

と、思ったら既に Chrome 拡張があった。

chrome.google.com

実装を見るに tampermonkey でやろうとしてたことと大差がないのだが・・・うまくいかなかったのなんでだろ。