您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Multi-click a code snippet to select everything in the code block.
// This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see <https://www.gnu.org/licenses/>. // // ==UserScript== // @namespace https://gitlab.com/kekumu // @name Multi-click to select code // @description Multi-click a code snippet to select everything in the code block. // @version 1.0.0 // ==OpenUserJS== // @author kekumu; https://gitlab.com/kekumu // ==/OpenUserJS== // @copyright 2020, kekumu (https://gitlab.com/kekumu) // @license GPL-3.0-or-later; https://www.gnu.org/licenses/gpl-3.0.html // @homepage https://github.com/kekumu/userscripts/lib/click2select.js // @supportURL https://github.com/kekumu/userscripts/labels/click2select.js // ==/UserLibrary== // @include * // @grant GM.getValue // @grant GM.setValue // ==/UserScript== (async () => { "use strict"; const DEFAULT_SETTINGS = {4: 'code', 5: 'pre'}; let user_settings = await GM.getValue('settings'); /* * Some extensions (e.g. Tampermonkey) hide the storage/values menu if * there's no data saved there. This will make it appear so that you can * edit the settings. */ if (!user_settings) { GM.setValue('settings', {}); user_settings = {}; } const settings = Object.assign(DEFAULT_SETTINGS, user_settings); function clickHandler(num, selector) { return event => { if (event.detail === num) { let el = event.target.closest(selector); if (el) { window.getSelection().selectAllChildren(event.target.closest(selector)); event.preventDefault(); } } } } for (const prop in settings) { document.addEventListener('mousedown', clickHandler(Number(prop), settings[prop])); } })();