您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Enable autocomplete, set Vim mode, and apply Gruvbox theme the CodeHS editor + Keybindings for submit and check code.
当前为
// ==UserScript== // @name Better CodeHS // @namespace http://tampermonkey.net/ // @version 1.1 // @license MIT // @description Enable autocomplete, set Vim mode, and apply Gruvbox theme the CodeHS editor + Keybindings for submit and check code. // @author Qyoh // @icon https://static1.codehs.com/img/logo.png // @match https://codehs.com/* // @grant none // ==/UserScript== (function() { 'use strict'; // Function to simulate a button click using the class or ID function clickButton(buttonSelector) { const button = document.querySelector(buttonSelector); if (button) { button.click(); } else { console.error(`Button with selector "${buttonSelector}" not found.`); } } function switchToTestCasesTab() { const testCasesTab = document.querySelector('.r.c'); // Replace with actual selector if (testCasesTab) { testCasesTab.click(); } else { console.error('Test Cases tab not found.'); } } // Add event listener for keydown events document.addEventListener('keydown', (event) => { // Custom keybind for "Submit and Continue" (e.g., Ctrl + Enter) if (event.ctrlKey && event.key === 'Enter') { event.preventDefault(); // Target the "Submit and Continue" button by class (adjust if necessary) clickButton('.StyledButtonKind-sc-1vhfpnt-0.fSozsy.sc-bkbkJK.eraKfR'); console.log('"Submit and Continue" triggered.'); } // Custom keybind for "Check Code" (e.g., Alt + C) if (event.altKey && event.key === 'c') { event.preventDefault(); // Target the "Check Code" button by ID and class switchToTestCasesTab(); clickButton('#grading-unit-test-run.btn.btn-main.spinner'); console.log('"Check Code" triggered.'); } }); console.log('CodeHS keybinds loaded.'); // Wait for the Ace Editor to be available function waitForAceEditor() { const editorElement = document.getElementById("ace-editor"); // Change ID if necessary if (editorElement) { initializeAceEditor(); } else { setTimeout(waitForAceEditor, 500); // Retry after 500ms } } // Initialize Ace Editor with custom settings function initializeAceEditor() { const editor = ace.edit("ace-editor"); ace.config.set("basePath", "https://cdnjs.cloudflare.com/ajax/libs/ace/1.9.6/"); // Load language tools for autocomplete ace.config.loadModule("ace/ext/language_tools", function(languageTools) { editor.setOptions({ enableBasicAutocompletion: true, enableLiveAutocompletion: true, enableSnippets: true }); }); // Set Vim keyboard mode editor.setKeyboardHandler("ace/keyboard/vim"); // Set theme to Gruvbox editor.setTheme("ace/theme/gruvbox"); console.log("Vim mode, Gruvbox theme, and autocomplete enabled."); } // Start the script waitForAceEditor(); })();