ChatGPT Custom Shortcuts

Add/replace some keyboard shortcuts for ChatGPT.

Aby zainstalować ten skrypt, wymagana jest instalacje jednego z następujących rozszerzeń: Tampermonkey, Greasemonkey lub Violentmonkey.

You will need to install an extension such as Tampermonkey to install this script.

Aby zainstalować ten skrypt, wymagana jest instalacje jednego z następujących rozszerzeń: Tampermonkey, Violentmonkey.

Aby zainstalować ten skrypt, wymagana będzie instalacja rozszerzenia Tampermonkey lub Userscripts.

You will need to install an extension such as Tampermonkey to install this script.

Aby zainstalować ten skrypt, musisz zainstalować rozszerzenie menedżera skryptów użytkownika.

(Mam już menedżera skryptów użytkownika, pozwól mi to zainstalować!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

Będziesz musiał zainstalować rozszerzenie menedżera stylów użytkownika, aby zainstalować ten styl.

Będziesz musiał zainstalować rozszerzenie menedżera stylów użytkownika, aby zainstalować ten styl.

Musisz zainstalować rozszerzenie menedżera stylów użytkownika, aby zainstalować ten styl.

(Mam już menedżera stylów użytkownika, pozwól mi to zainstalować!)

// ==UserScript==
// @name         ChatGPT Custom Shortcuts
// @namespace    http://tampermonkey.net/
// @version      2024-05-14
// @description  Add/replace some keyboard shortcuts for ChatGPT.
// @author       David
// @match        https://chat.openai.com/*
// @match        https://chatgpt.com/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=openai.com
// @grant        none
// @license MIT 
// ==/UserScript==

(function() {
  'use strict';

  document.addEventListener('keydown', function(event) {
    // Focus on textarea when pressing Ctrl + /
    if (event.ctrlKey && event.key === '/') {
      // Prevent default action and stop propagation
      event.preventDefault();
      event.stopPropagation();

      document.getElementById('prompt-textarea').focus();
      return;
    }

    // Check if the focused element is the textarea
    if (document.activeElement.id === 'prompt-textarea') {
      const textarea = document.getElementById('prompt-textarea');

      // create newline (Sending Shift + Enter) when pressing Enter alone
      if (event.key === 'Enter' && !event.ctrlKey && !event.shiftKey) {
        // Prevent default action and stop propagation
        event.preventDefault();
        event.stopPropagation();

        const value = textarea.value;
        const start = textarea.selectionStart;
        const end = textarea.selectionEnd;

        textarea.value = value.substring(0, start) + '\n' + value.substring(end);
        textarea.selectionStart = textarea.selectionEnd = start + 1;
        return;
      }

      // Click the send button when pressing Ctrl + Enter or Shift + Enter
      if ((event.ctrlKey || event.shiftKey) && event.key === 'Enter') {
        // Prevent default action and stop propagation
        event.preventDefault();
        event.stopPropagation();

        // Copy all text in the textarea to clipboard
        textarea.select();
        document.execCommand('copy');

        // click send button
        // document.querySelector('[data-testid="send-button"]').click();
        const sendButton = document.querySelector('button.mb-1.mr-1.flex.h-8.w-8.items-center.justify-center.rounded-full.bg-black.text-white');
        sendButton.click();
      }
    }

    // Prevent the default action of Ctrl + R
    if (event.ctrlKey && event.key === 'r') {
      // Prevent default action and stop propagation
      event.preventDefault();
      event.stopPropagation();
    }

  }, true); // Using capturing phase

})();