ChatGPT の送信キーの変更

ChatGPTのChatページ

ChatGPT のチャット画面の不満点

もうすっかり市民権を得て、なかった頃には戻れないくらい便利な ChatGPT。みなさんも毎日お使いのことと思います。
私も、これなしには生活できないものとなっています。

使い方の解説やプロンプトの作り方など、最初の頃こそいろいろエンジニアリング的な要素が必要ということでしたが、今となってはそんなこともなく、もっともっと賢くなって相棒としてとても頼れる存在ではないかと思います。

そんな中で、唯一の不満は、チャットに文字を入力している時に、予期せず改行キーが入ってしまって、書きかけの質問を送信してしまうということではないでしょうか?

私も何度も経験あります。不用意な改行を入れないように、質問欄に入力する時はキータッチを気にしてしまい、なんとなく質問するのがちょっとだけ気を使うというか、ご送信が無いように注意してキーを押していました。Grok とか、Microsoft Teams のチャットなんかもそうですよね。改行キーを押してしまって、書きかけを送ってしまうのがプチストレスでした。

そこで途中で送ってしまわないようにするには、改行キーで送信する機能を取ってしまえばいいのでは...ということで、いつも使っている Chrome で何かできないものか...

Tampermonkey と JavaScript

ChatGPT といろいろ相談しながら、Chrome の拡張機能である Tampermonkey をインストールして、その中に JavaScript を設定してできるようになりました。

ChatGPT の質問欄の入力時に、改行キーは単なる改行にして、送信する時は Ctrl+改行キー(もしくは送信ボタン)という形に変更することができました。

これで文字入力する時に、少し緊張を強いられることがなくなり、いままで以上に ChatGPT との会話に集中できるようになりました。Grok とか、Teams(Web 版)でもできると思いますので、参考としてスクリプトを載せておきます。

方法1(ChatGPT用)

Chrome に拡張機能として、Tampermonkey をインストールしてください。

その上で、Tampermonkey の Dashboard を開き、タブのところにある + 記号で新しいスクリプト入力になりますので、「エディター」のタブのデフォルト表示された内容はすべて削除して、以下のスクリプトをコピペしてください。

// ==UserScript==
// @name         ChatGPT Ctrl+Enter Submission (Using composer-submit-button)
// @namespace    http://tampermonkey.net/
// @version      1.4
// @description  Use Ctrl+Enter to submit, Enter to insert newline in ChatGPT
// @match        https://chatgpt.com/*
// @match        https://chat.openai.com/*
// @grant        none
// ==/UserScript==

(function () {
    'use strict';

    document.addEventListener('keydown', function (e) {
        const active = document.activeElement;
        const isEditable = active && (active.tagName === 'TEXTAREA' || active.isContentEditable);

        if (!isEditable || e.key !== 'Enter') return;

        e.preventDefault();
        e.stopPropagation();
        e.stopImmediatePropagation();

        if (e.ctrlKey) {
            // Ctrl+Enter → 明示的に送信ボタンをクリック
            const sendButton = document.querySelector('#composer-submit-button');
            if (sendButton && !sendButton.disabled) {
                sendButton.click();
            } else {
                console.warn('[Tampermonkey] 送信ボタンが見つからないか、無効になっています。');
            }
        } else {
            // Enter → 改行を挿入
            if (active.isContentEditable) {
                const selection = window.getSelection();
                const range = selection.getRangeAt(0);
                const br = document.createElement("br");
                range.deleteContents();
                range.insertNode(br);
                range.setStartAfter(br);
                range.setEndAfter(br);
                selection.removeAllRanges();
                selection.addRange(range);
            } else {
                const start = active.selectionStart;
                const end = active.selectionEnd;
                const value = active.value;
                active.value = value.substring(0, start) + '\n' + value.substring(end);
                active.selectionStart = active.selectionEnd = start + 1;
            }
        }
    }, true); // キャプチャフェーズ
})();

その後、「ファイル」→「保存」して Dashboard に戻り、「有効」にしてください。

これで、ChatGPT の質問途中で改行キーを押してしまっても、単なる改行にしかならないので、誤送信される恐れがなくプロンプト作成に集中できます。

ChatGPT への回答の「どうもありがとう」みたいなお礼を送ったりするだけで、結構なサーバ負荷や電力消費になるということから、書きかけの質問を送ることもなくなり、地球にとってもやさしいものになると思います。

OpenAI さんには、ぜひ送信キーを何にするのかの設定ができるようしていただきたいと思ます。
ぜひお試しください。

ただ、動作しないなどのサポートはできませんので、あくまで自己責任でお願いいたします。

方法2(Grok用)

おまけとして、Grok の場合のスクリプトも貼り付けておきます。上記と同じように別ファイルとして保存してお使いください。

// ==UserScript==
// @name Grok Ctrl+Enter Submission
// @namespace http://tampermonkey.net/
// @version 1.1
// @description Prevent Enter from sending in Grok; only allow Ctrl+Enter for submission
// @match https://grok.com/*
// @grant none
// ==/UserScript==

(function () {
'use strict';

document.addEventListener('keydown', function (e) {
const active = document.activeElement;
const isTextarea = active && active.tagName === 'TEXTAREA';

if (!isTextarea || e.key !== 'Enter') return;

// 常に Enter の動作をブロック
e.preventDefault();
e.stopPropagation();
e.stopImmediatePropagation();

if (e.ctrlKey) {
// Ctrl+Enter のとき → 送信ボタンをクリック
const sendButton = document.querySelector('button[type="submit"][aria-label="送信"]:not([disabled])');
if (sendButton) {
sendButton.click();
} else {
console.warn('[Tampermonkey] 送信ボタンが見つからないか、無効です。');
}
} else {
// Enter 単体 → 改行を挿入
const start = active.selectionStart;
const end = active.selectionEnd;
const value = active.value;
active.value = value.substring(0, start) + '\n' + value.substring(end);
active.selectionStart = active.selectionEnd = start + 1;
}
}, true); // キャプチャフェーズ
})();