Adds a button to copy the last code block on chat.openai.com without copying the header
< Feedback on Copy Last Code Block on ChatGPT Without Header
Updated so it matches both chat.openai.com and chatgpt.com
// ==UserScript==
// @name Copy Last Code Block on ChatGPT Without Header
// @namespace http://tampermonkey.net/
// @version 1.4
// @description Adds a button to copy the last code block on chat.openai.com without copying the header and supports Alt+Z shortcut for copying
// @author max5555
// @license MIT
// @match https://chat.openai.com/*
// @match https://chatgpt.com/*
// @grant none
// ==/UserScript==
(function() {
'use strict';
// Create the copy button
const copyButton = document.createElement('button');
copyButton.textContent = 'Copy Last Code';
copyButton.style.position = 'fixed';
copyButton.style.bottom = '20px';
copyButton.style.right = '20px';
copyButton.style.zIndex = '1000';
// Add the button to the body
document.body.appendChild(copyButton);
// Function to show notification
function showNotification(message, duration = 3000) {
const notification = document.createElement('div');
notification.textContent = message;
notification.style.position = 'fixed';
notification.style.bottom = '50px';
notification.style.right = '20px';
notification.style.backgroundColor = 'lightgreen';
notification.style.padding = '10px';
notification.style.borderRadius = '5px';
notification.style.boxShadow = '0 0 5px rgba(0, 0, 0, 0.3)';
notification.style.zIndex = '1001';
document.body.appendChild(notification);
setTimeout(() => {
notification.remove();
}, duration);
}
// Function to copy the last code block
function copyLastCodeBlock() {
const codeContainers = document.querySelectorAll('pre code');
if (codeContainers.length > 0) {
const lastCodeContainer = codeContainers[codeContainers.length - 1];
navigator.clipboard.writeText(lastCodeContainer.textContent).then(() => {
showNotification('Code copied to clipboard!');
}).catch(err => {
console.error('Failed to copy text: ', err);
});
} else {
showNotification('No code blocks found!');
}
}
// Attach the click event listener to the copy button
copyButton.addEventListener('click', copyLastCodeBlock);
// Listen for Alt + Z keypress to copy the last code block
document.addEventListener('keydown', function(e) {
if (e.altKey && e.key === 'z') {
e.preventDefault(); // Prevent any default action to ensure smooth functionality
copyLastCodeBlock();
}
});
})();
Thanks for making this!
I've updated the code to also support Alt + Z shortcut for copying the last code block and also show the notification. I have also bumped the version to 1.3