尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證Paste anything, get clean Markdown, rich text, WhatsApp or plain text. Live at pasteinto.com
翻譯準備中
取自儲存庫 README
正在載入完整 README。 以下為已儲存的摘錄。
Paste anything. Pick where it's going. The result is copied automatically.
Live at pasteinto.com. (The old paste-to.md redirects here.)
Every app puts its own clutter on the clipboard: Google Docs' span soup, Notion's wrapping divs, Word's Mso styles, Claude's raw Markdown asterisks, a PDF's line break at the end of every line. This page reads any of them and writes one of five outputs:檢視完整 README ↗Paste anything. Pick where it's going. The result is copied automatically.
Live at pasteinto.com. (The old paste-to.md redirects here.)
Every app puts its own clutter on the clipboard: Google Docs' span soup, Notion's wrapping divs, Word's Mso styles, Claude's raw Markdown asterisks, a PDF's line break at the end of every line. This page reads any of them and writes one of five outputs:
| Output | For |
|---|---|
| Markdown | Claude, ChatGPT, GitHub, Obsidian, Notion |
| Email & Slack | Gmail, Outlook, Slack, Teams. Headings become bold lines, since these apps have no headings |
| Docs | Google Docs, Word, Notion, Airtable. Like Email & Slack, but keeps headings at their original level. Checklists become real to-dos in Notion and Airtable, and square bullets in Google Docs |
WhatsApp, Signal. Formatting becomes *bold*, _italic_ and ~strike~ | |
| Plain text | LinkedIn, X, text messages, forms |
<b style="font-weight:normal"> wrapper, formatting stored in inline styles, flattened nested lists, google.com/url?q= redirect links and "space after paragraph" spacing.Install it from the Chrome Web Store.
The same files are also a Chrome extension: manifest.json opens index.html as the toolbar popup. Click the Paste Into icon (or press Alt+Shift+V, which you can change at chrome://extensions/shortcuts), paste, and the result is copied.
To try it, open chrome://extensions, turn on Developer mode, choose Load unpacked and pick this folder.
To release a new version:
manifest.json.version in manifest.json.npm run pack:extension. It writes the Chrome Web Store upload to dist/.Versions are MAJOR.MINOR.PATCH, following Semantic Versioning. Paste Into has no API, so each part is judged by what someone using it notices:
| Bump | When | Example |
|---|---|---|
| Patch, 1.1.0 → 1.1.1 | Something that should already have worked now works, or a small change people won't notice | Formatting kept when pasting from a Slack draft; a store description fix |
| Minor, 1.1.1 → 1.2.0 | Something new to do or see | A new output, input type (PDF reading), button or setting |
| Major, 1.2.0 → 2.0.0 | Something people rely on is removed or works differently, or the extension asks for a new permission | Dropping an output; a redesign; a permission that makes Chrome ask users again |
When unsure between patch and minor, choose patch. Each part is a counter, not a decimal: it goes up by one and never skips, so 1.1.1 → 1.1.2, and 1.1.9 → 1.1.10. A bump resets the parts to its right to 0 (1.1.3 → 1.2.0).
Chrome's own rules (manifest version): one to four whole numbers from 0 to 65535, no leading zeros, compared part by part as numbers, so 1.0.11 is higher than 1.0.4. The store rejects an upload whose version isn't higher than the live one, so a number can never be reused.
100% client-side. Nothing you paste leaves your browser.
On pasteinto.com and in the Chrome extension, js/analytics.js sends anonymous usage counts to Umami Cloud with no cookies: pageviews, plus events naming the detected source app, the output format and how you pasted (keyboard, tap or long-press). The Chrome extension sends the same counts, reported as the page /extension. It never sends pasted content.
git clone https://github.com/dewierwan/pasteinto
open pasteinto/index.html
Every paste goes through the same three steps (js/convert.js):
js/from-pdf.js rebuilds paragraphs and lists from PDF text. js/from-slack.js reads text copied from Slack's message box, which puts no HTML on the clipboard, only Slack's own formatting data. js/sources.js lists the apps a paste can come from, how to recognise each, and rewrites each app's quirks (Word's list paragraphs, Quill's flat lists) into plain HTML.js/clean-html.js reduces the HTML to a small, predictable subset. It knows nothing about any particular app.js/to-markdown.js writes Markdown, js/to-text.js writes WhatsApp and plain text, and the cleaned HTML itself is the Email & Slack and Docs output.js/app.js wires up the page. Adding an input or an output means writing one function, not one per pair, and a fix for one app's quirk goes in one place.
Ideas for later, roughly in order.
Today every use is a round trip: copy, switch to Paste Into, paste, switch to the destination, paste. Instead, an extension shortcut (Alt+Shift+V) would convert whatever is on the clipboard for the site you're on, show a small "Ready for Gmail" note, and leave you to press ⌘V as usual. The site picks the output, the way the source is already detected:
| Site | Output |
|---|---|
| Gmail, Outlook, Slack, Teams | Email & Slack |
| Google Docs, Notion, Airtable | Docs |
| Claude, ChatGPT, GitHub | Markdown |
| WhatsApp Web | |
| LinkedIn, X | Plain text |
| Anything else | The last output used |
Notes: a Manifest V3 service worker can't use the clipboard, so this needs an offscreen document, plus the clipboardRead and clipboardWrite permissions and activeTab for the site's address. clipboardRead adds an install warning ("Read data you copy and paste") and a fresh store review. It would replace the parked "Clean Paste for Gmail" extension.
The page title lists features, but people search for the problem, especially pasting a ChatGPT or Claude answer into Docs or Gmail and getting stray asterisks. Add a few pages that are the same tool with From and To preset and one plain heading, for example "ChatGPT to Google Docs", "Claude to Gmail", "Markdown to Slack", "Google Docs to Markdown" and "Fix line breaks in text copied from a PDF". Check search volumes first to pick the pages, write the Chrome Web Store listing around the same problem, and use the analytics to see which pages bring people in. Keep each page as minimal as the home page.
Real-world fixtures are the most useful contribution. Copy something in the app, run npm run capture -- <folder>/<name>, then run npm run test:update and check the expected outputs it writes. tests/fixtures/README.md has the details. For PDFs, add the copied text to tests/fixtures/pdf/ (and the clipboard HTML, if the viewer wrote any) with a test in tests/pdf.test.js.
npm install
npm test
npm run lint:spell
npm run lint:html