{"id":51322682,"url":"https://github.com/maxi07/paste-stuff","last_synced_at":"2026-07-01T15:02:15.742Z","repository":{"id":367112642,"uuid":"1279185529","full_name":"maxi07/paste-stuff","owner":"maxi07","description":"Adds preconfigured paste options to a task bar application","archived":false,"fork":false,"pushed_at":"2026-06-24T16:02:46.000Z","size":4192,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-24T17:07:18.417Z","etag":null,"topics":["paste","python","taskbar"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/maxi07.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-06-24T13:01:07.000Z","updated_at":"2026-06-24T16:01:58.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/maxi07/paste-stuff","commit_stats":null,"previous_names":["maxi07/paste-stuff"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/maxi07/paste-stuff","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maxi07%2Fpaste-stuff","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maxi07%2Fpaste-stuff/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maxi07%2Fpaste-stuff/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maxi07%2Fpaste-stuff/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/maxi07","download_url":"https://codeload.github.com/maxi07/paste-stuff/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maxi07%2Fpaste-stuff/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35011257,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-01T02:00:05.325Z","response_time":130,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["paste","python","taskbar"],"created_at":"2026-07-01T15:02:13.421Z","updated_at":"2026-07-01T15:02:15.734Z","avatar_url":"https://github.com/maxi07.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Paste Stuff\n\n\u003cimg src=\"docs/icon.png\" alt=\"Paste Stuff icon\" width=\"96\" /\u003e\n\nA tiny Windows background app that pastes configured text snippets into **any**\napplication — either via a global keyboard shortcut or from a right-click menu on\nits taskbar icon.\n\nThere is **no window UI**. The app lives only as a taskbar icon.\n\n\n## Demo\n\n![Demo](docs/demo.gif)\n\n\n## Features\n\n⌨️ **Global keyboard shortcuts** — press e.g. `Ctrl+Shift+1` in any app to paste a\nsnippet.\n\n🖱️ **Taskbar menu (Jump List)** — right-click the taskbar icon to pick a snippet,\nor to access app actions (Edit config / Reload config / Run at startup / Quit).\n\n📝 **JSON configuration** — define your shortcuts and snippet text in\n`config.json`. No code changes needed.\n\n🎯 **Smart pasting** — pastes directly into classic Windows edit fields\n(`WM_PASTE`, no keystroke); everything else (browsers, Electron, Office, UWP)\ngets a reliable focus restore + `Ctrl+V`.\n\n🚀 **Run at startup** — optional auto-start with Windows.\n\n🪵 **Console logging** — every action is logged when started from a console.\n\n🔒 **Single instance** — a second launch detects the running app and exits.\n\n\n\n## Download \u0026 install\n\nGrab the latest **`PasteStuff.zip`** from the\n[**Releases** page](https://github.com/maxi07/paste-stuff/releases/latest),\nextract the whole folder anywhere, and run **`PasteStuff.exe`** from inside it.\nThere's no installer and no need to have Python installed.\n\n\u003e [!NOTE]\n\u003e **The first launch can take up to ~10 seconds** while Windows unpacks the app.\n\u003e The app has no window — look for its icon in the taskbar / system tray.\n\nKeep all extracted files together in the same folder; `PasteStuff.exe` needs the\nbundled files next to it to run.\n\n\n## Editing snippets from the taskbar icon\n\nYou don't need to edit any files by hand. **Right-click the Paste Stuff taskbar\nicon** to:\n\n- **Paste a snippet** — pick any configured snippet straight from the menu.\n- **Edit config** — opens `config.json` in your default editor.\n- **Reload config** — applies your changes immediately (no restart needed).\n- **Run at startup** — toggle auto-start with Windows.\n\nAfter editing the config, choose **Reload config** so your new shortcuts take\neffect right away. See [Configuration](#configuration) below for the file format.\n\n\n## Configuration\n\nEdit **`config.json`**. Each entry maps a hotkey to the text that should be\npasted:\n\n```json\n{\n  \"shortcuts\": {\n    \"ctrl+shift+1\": \"Hello from my paste tool!\",\n    \"ctrl+shift+2\": \"Best regards,\\nMax\",\n    \"ctrl+shift+3\": \"my.email@example.com\"\n  }\n}\n```\n\n- **Keys** are hotkey combinations using the\n  [`keyboard`](https://github.com/boppreh/keyboard) library syntax, e.g.\n  `ctrl+shift+1`, `ctrl+alt+e`, `ctrl+shift+f12`.\n- **Values** are the text to paste. Use `\\n` for line breaks; Unicode and emoji\n  are supported.\n\nAfter editing, choose **Reload config** from the taskbar menu (no restart\nneeded). You can also open the file via **Edit config** in the same menu.\n\n## For developers\n\nWant to modify the app or run it from source instead of the packaged `.exe`?\n\n### Requirements\n\n- Windows 10/11\n- Python 3.x (the project was set up with Python 3.14 via the `py` launcher)\n\nPython dependencies (installed into the local `.venv`):\n\n```\nkeyboard\npyperclip\npywin32\n```\n\n### Setup\n\nFrom the project folder (`paste stuff`):\n\n```powershell\n# 1. Create the virtual environment\npy -3 -m venv .venv\n\n# 2. Install dependencies\n.\\.venv\\Scripts\\python.exe -m pip install -r requirements.txt\n```\n\n### Running from source\n\n**In the background (recommended).** Double-click **`run.bat`**, or run:\n\n```powershell\n.\\.venv\\Scripts\\pythonw.exe main.py\n```\n\n`pythonw.exe` runs without a console window. The app appears as an icon in the\ntaskbar.\n\n**With a console (to see logs):**\n\n```powershell\n.\\.venv\\Scripts\\python.exe main.py\n```\n\nEvery action (startup, registered hotkeys, pastes, reloads, quit) is printed to\nthis console. In background mode there is no console, so logs are simply not\nshown.\n\n### Building the executable\n\nReleases are built automatically by GitHub Actions\n([`.github/workflows/release.yml`](.github/workflows/release.yml)) using\nPyInstaller in `--onedir` mode and published as `PasteStuff.zip`.\n\n## How it works\n\n```\n┌─────────────────────────────┐        ┌──────────────────────────────┐\n│  Global keyboard shortcut   │        │  Taskbar icon (Jump List)    │\n│  (Ctrl+Shift+1, ...)        │        │  right-click → menu          │\n└──────────────┬──────────────┘        └───────────────┬──────────────┘\n               │ keyboard lib                            │ launches helper\n               │ triggers in-process                     │ process\n               ▼                                         ▼\n        paste into the                          main.py --action paste --key K\n        already-focused app                              │\n        (Ctrl+V)                                          │ localhost socket\n                                                          ▼\n                                            Running app receives the command,\n                                            restores focus to the previously\n                                            active window, and pastes there.\n```\n\n- **Resident process** (`main.py` with no arguments): registers the global\n  hotkeys, draws the taskbar icon, builds the Jump List, tracks which window you\n  were last working in, and listens on a local loopback socket\n  (`127.0.0.1:50573`).\n- **Taskbar Jump List entries** are static Windows shortcuts that re-launch\n  `main.py` with an `--action`. That short-lived helper process forwards the\n  command to the running app over the socket, then exits. This is why the menu\n  items can talk to the already-running app.\n- **Pasting from the menu**: because the app is in the foreground while the menu\n  is open, it first hands focus back to the window you were last using, then\n  inserts the text (direct `WM_PASTE` for classic edit controls, otherwise\n  `Ctrl+V`).\n\n### Command-line actions\n\nThese are normally invoked by the Jump List, but you can run them manually too:\n\n| Command                                   | Effect                          |\n| ----------------------------------------- | ------------------------------- |\n| `main.py`                                 | Start the resident app          |\n| `main.py --action paste --key \"ctrl+shift+1\"` | Paste that snippet          |\n| `main.py --action reload`                 | Reload `config.json`            |\n| `main.py --action autostart`              | Toggle run-at-startup           |\n| `main.py --action edit`                   | Open `config.json`              |\n| `main.py --action quit`                   | Quit the running app            |\n\n---\n\n## Run at startup\n\nToggle **Run at startup** in the taskbar menu. It adds/removes a `Paste Stuff`\nvalue under:\n\n```\nHKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Run\n```\n\npointing at `pythonw.exe main.py`, so the app starts automatically (without a\nconsole) when you log in.\n\n\n## Files\n\n| File               | Purpose                                            |\n| ------------------ | -------------------------------------------------- |\n| `main.py`          | The application                                    |\n| `config.json`      | Your shortcuts and snippet text                    |\n| `requirements.txt` | Python dependencies                                |\n| `run.bat`          | Starts the app in the background (no console)      |\n| `icon.ico`         | Taskbar/menu icon                                  |\n| `docs/`            | README media (icon image, demo GIF and video)      |\n| `.venv/`           | Local virtual environment                          |\n\n\n## Troubleshooting\n\n- **A shortcut does nothing in some apps** — apps running as administrator only\n  receive global keystrokes if Paste Stuff also runs as administrator.\n- **The taskbar menu pastes into the wrong place** — the app pastes into the last\n  window you used before opening the menu. Click into your target app first, then\n  open the menu.\n- **Hotkey not registered** — check the console log for `Invalid hotkey`; verify\n  the combination spelling in `config.json`.\n- **App won't start / \"already running\"** — another instance owns the socket\n  port. Quit it from the taskbar, or end the `python`/`pythonw` process.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmaxi07%2Fpaste-stuff","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmaxi07%2Fpaste-stuff","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmaxi07%2Fpaste-stuff/lists"}