basyura's blog

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

ChatGpt : Enter で送信したくない - 2024.09.12

Ctrl + Enter で送信、 Enter で改行する Tampermonkey のスクリプト。結構な頻度で動かなくなってめんどくさい。

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

(function() {
    'use strict';

    setTimeout(() => {
        document.body.addEventListener('keydown', function(e) {
            // Enter キー以外は何もしない
            // ] は Mac の vivaldi でのアドレスバー等での予測変換の考慮を karabiner-elements を設定しているため。
            if (e.key != 'Enter' && e.key != ']') {
                return;
            }
            // Shift + Enter
            if (e.shiftKey) {
                return;
            }
            // 変換中
            if (e.isComposing) {
                return;
            }
            // Enter は改行 (Shift + Enter) に変える
            if (!e.ctrlKey) {
                // 通常の Enter 動作をキャンセル
                event.preventDefault();
                let newEvent = new KeyboardEvent('keydown', {
                    key: 'Enter',
                    shiftKey: true,
                    bubbles: true,
                    cancelable: true
                });
                event.target.dispatchEvent(newEvent);
                return;
            }
            // 送信ボタンをクリック
            let ele = document.querySelector("button[data-testid='send-button']")
            ele.click();

        }, { capture: true });
    }, 3000);
})();