您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Press Alt+C to copy title and url as markdown style link `> ${SELECTION} [${TITLE}]( ${URL} )`
当前为
// ==UserScript== // @name Copy Markdown Quote Alt+C // @name:zh Alt+C 复制Markdown格式标题和地址快速分享 // @name:en Alt+C Copy Title and Link as Markdown Style // @description Press Alt+C to copy title and url as markdown style link `> ${SELECTION} [${TITLE}]( ${URL} )` // @description:zh 按 Alt+C 复制 Markdown 格式的链接 `> ${SELECTION} [${TITLE}]( ${URL} )` // @namespace https://userscript.snomiao.com/ // @version 0.8.4 // @author [email protected] // @match *://*/* // @grant none // ==/UserScript== /* eslint-disable */ // hotkey-mapper var { keys } = Object; function mapObject(fn, obj) { if (arguments.length === 1) { return (_obj) => mapObject(fn, _obj); } let index = 0; const objKeys = keys(obj); const len = objKeys.length; const willReturn = {}; while (index < len) { const key = objKeys[index]; willReturn[key] = fn(obj[key], key, obj); index++; } return willReturn; } var mapObjIndexed = mapObject; function hotkeyMapper(mapping, options) { const handler = (event) => { const key = event.key.toLowerCase(); const code = event.code.toLowerCase(); const simp = code.replace(/^(?:Key|Digit|Numpad)/, ""); const map = new Proxy(event, { get: (target, p) => Boolean( { [`${key}Key`]: true, [`${code}Key`]: true, [`${simp}Key`]: true, }[p] ?? target[p] ), }); const mods = "meta+alt+shift+ctrl"; mapObjIndexed((fn, hotkey) => { const conds = `${mods}+${hotkey.toLowerCase()}` .replace(/win|command|search/, "meta") .replace(/control/, "ctrl") .split("+") .map((k, i) => [k, i >= 4 === map[`${k}Key`]]); if (!Object.entries(Object.fromEntries(conds)).every(([, ok]) => ok)) return; event.stopPropagation(), event.preventDefault(); return fn(event); }, mapping); }; window.addEventListener(options?.on ?? "keydown", handler, options); return function unload() { window.removeEventListener(options?.on ?? "keydown", handler, options); }; } // clipboardy/browser var clipboard = {}; clipboard.write = async (text) => { await navigator.clipboard.writeText(text); }; clipboard.read = async () => navigator.clipboard.readText(); clipboard.readSync = () => { throw new Error("`.readSync()` is not supported in browsers!"); }; clipboard.writeSync = () => { throw new Error("`.writeSync()` is not supported in browsers!"); }; var browser_default = clipboard; // CopyMarkdownQuote { main(); } function main() { globalThis.cmqa ||= {}; globalThis.cmqa.unload?.(); globalThis.cmqa.unload = hotkeyMapper({ "alt+c": async () => { const selected = window?.getSelection()?.toString().trim() || ""; const quoted = selected && selected.replace(/.*/, (s) => `> ${s}`); const href = location.href; const content = `${quoted} [${longestTitleGet()}]( ${href} )`.trim(); await browser_default.write(content); alert(`copied: ${content}`); }, }); } function longestTitleGet() { const LongestTitle = [ document.title, document.querySelector("h1")?.innerText || "", ] .map((str) => str.replace(/\r?\n.*/g, "")) .sort((a, b) => a.length - b.length) .pop(); return LongestTitle; }