{"id":17280175,"url":"https://github.com/akuli/porcupine","last_synced_at":"2025-04-12T22:25:13.124Z","repository":{"id":17321287,"uuid":"81675927","full_name":"Akuli/porcupine","owner":"Akuli","description":"A decent editor written in tkinter","archived":false,"fork":false,"pushed_at":"2024-10-18T19:07:29.000Z","size":15056,"stargazers_count":165,"open_issues_count":221,"forks_count":49,"subscribers_count":6,"default_branch":"main","last_synced_at":"2025-04-04T01:32:19.564Z","etag":null,"topics":["editor","python","text-editor","tkinter"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Akuli.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","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}},"created_at":"2017-02-11T19:17:09.000Z","updated_at":"2025-03-05T17:36:17.000Z","dependencies_parsed_at":"2023-10-14T20:16:15.092Z","dependency_job_id":"36adc34d-792d-4b40-9843-f6093f9ea488","html_url":"https://github.com/Akuli/porcupine","commit_stats":null,"previous_names":[],"tags_count":220,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Akuli%2Fporcupine","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Akuli%2Fporcupine/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Akuli%2Fporcupine/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Akuli%2Fporcupine/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Akuli","download_url":"https://codeload.github.com/Akuli/porcupine/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248638878,"owners_count":21137721,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["editor","python","text-editor","tkinter"],"created_at":"2024-10-15T09:19:38.568Z","updated_at":"2025-04-12T22:25:13.095Z","avatar_url":"https://github.com/Akuli.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Porcupine\n\nPorcupine is an editor written with the notorious Tkinter library. It supports\nmost things you would expect from an editor, such as autocompletions and syntax\nhighlighting.\n\n![Screenshot.](screenshot.png)\n\nMost important features:\n- Syntax highlighting (supports many programming languages\n  and color themes, extensible)\n- Autocompletions when pressing tab\n- Jump to definition with Ctrl+click\n- [Langserver] support\n- [Editorconfig][] support\n- Git support\n- Compiling files inside the editor window\n- Running files in a separate terminal or command prompt window\n- Automatic indenting and trailing whitespace stripping when Enter is pressed\n- Indent/dedent block with Tab and Shift+Tab\n- Commenting/uncommenting multiple lines by selecting them and typing a #\n- Highlighting matching parentheses\n- Line numbers\n- Line length marker\n- Find/replace\n- Code folding\n- Multiple files can be opened at the same time like tabs in a web browser\n- The tabs can be dragged out of the window to open a new Porcupine window conveniently\n\n[Pygments]: https://pygments.org/\n[Langserver]: https://langserver.org/\n[Editorconfig]: https://editorconfig.org/\n\n[Porcupine's design](dev-doc/architecture-and-design.md) makes it very easy to customize.\nAlmost everything is implemented as a plugin that can be disabled easily,\nbut if you know how to use Python and tkinter, you can also make your own plugins.\nPorcupine plugins are so powerful that if you run Porcupine without any plugins, it looks like this:\n\n![Screenshot of porcupine without plugins 1](dev-doc/images/no-plugins-1.png)\n\n![Screenshot of porcupine without plugins 2](dev-doc/images/no-plugins-2.png)\n\n\n## Installing Porcupine\n\n\u003cdetails\u003e\n\u003csummary\u003eDevelopment Install\u003c/summary\u003e\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md) for development instructions.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eDebian-based Linux distributions (e.g. Ubuntu, Mint)\u003c/summary\u003e\n\nOpen a terminal and run these commands:\n\n    sudo apt install python3-tk python3-pip python3-venv\n    sudo apt install --no-install-recommends tkdnd    # for drop_to_open plugin\n    python3 -m venv porcupine-venv\n    source porcupine-venv/bin/activate\n    pip install wheel\n    pip install https://github.com/Akuli/porcupine/archive/v2024.03.31.zip\n    porcu\n\nTo easily run porcupine again later,\ngo to *Settings* --\u003e *Porcupine Settings*\nand check \"Show Porcupine in the desktop menu system\".\nThis makes Porcupine show up in the menu just like any other application.\n\nYou can uninstall Porcupine by unchecking \"Show Porcupine in the desktop menu system\" in the settings\nand then deleting `porcupine-venv`.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eOther Linux distributions\u003c/summary\u003e\n\nInstall Python 3.9 or newer with pip and tkinter somehow.\nIf you want drag and drop support, also install tkdnd for the Tcl interpreter that tkinter uses.\nThen run these commands:\n\n    python3 -m venv porcupine-venv\n    source porcupine-venv/bin/activate\n    pip install wheel\n    pip install https://github.com/Akuli/porcupine/archive/v2024.03.31.zip\n    porcu\n\nTo easily run porcupine again later,\ngo to *Settings* --\u003e *Porcupine Settings*\nand check \"Show Porcupine in the desktop menu system\".\nThis makes Porcupine show up in the menu just like any other application.\n\nYou can uninstall Porcupine by unchecking \"Show Porcupine in the desktop menu system\" in the settings\nand then deleting `porcupine-venv`.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eMacOS\u003c/summary\u003e\n\nI don't have a Mac. If you have a Mac, you can help me a lot by installing\nPorcupine and letting me know how well it works.\n\nI think you can download Python with tkinter from\n[python.org](https://www.python.org/) and then run the commands for\n\"other Linux distributions\" above.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eWindows\u003c/summary\u003e\n\nDownload a Porcupine installer from [the releases page](https://github.com/Akuli/porcupine/releases) and run it.\nBecause I haven't asked Microsoft to trust Porcupine installers,\nyou will likely get a warning similar to this one:\n\n![Windows thinks it protected your PC](windows-defender.png)\n\nYou should still be able to run the installer by clicking \"More info\".\nWhen installed, you will find Porcupine from the start menu.\n\n\u003c/details\u003e\n\n\n## Documentation\n\nIf you have just installed Porcupine, have a look at [user-doc/getting-started.md](user-doc/getting-started.md).\nIf you want to develop Porcupine, see [CONTRIBUTING.md](CONTRIBUTING.md) or [dev-doc/architecture-and-design.md](dev-doc/architecture-and-design.md).\n\nMost of Porcupine's documentation is markdown files in two folders:\n- [The `dev-doc` folder](./dev-doc/) contains the documentation for developing Porcupine.\n- [The `user-doc` folder](./user-doc/) contains the documentation for using Porcupine.\n\n\n## FAQ\n\n### What's new in the latest Porcupine release?\n\nSee [CHANGELOG.md](CHANGELOG.md).\n\n### Does Porcupine support programming language X?\nYou will likely get syntax highlighting without any configuring,\nand autocompletions with a few lines of configuration file editing.\nSee [this documentation](user-doc/new-programming-language.md).\n\n### Help! Porcupine doesn't work.\nPlease install the latest version.\nIf it still doesn't work, [let me know by creating an issue on\nGitHub](https://github.com/Akuli/porcupine/issues/new).\n\n### Is Porcupine written in Porcupine?\n\nYes. I wrote the very first version in `nano`, but Porcupine has changed a lot since.\n\n### Why is it named Porcupine?\n\nI think because I didn't find other projects named porcupine, but I don't remember exactly.\nOriginally, Porcupine was named \"Akuli's Editor\".\n\n### I want an editor that does X, but X is not in the feature list above. Does Porcupine do X?\nYou can run Porcupine and find out,\nor [create an issue on GitHub](https://github.com/Akuli/porcupine/issues/new) and ask.\nIf you manage to make me excited about X, I might implement it.\n\n### Why did you create a new editor?\nBecause I can.\n\n### Why did you create a new editor in tkinter?\nBecause I can.\n\n### How does feature X work?\nSee [porcupine/](porcupine/)X.py or [porcupine/plugins/](porcupine/plugins/)X.py.\n\n### Why not use editor X?\nBecause Porcupine is better.\n\n### Is Porcupine based on IDLE?\nOf course not. IDLE is an awful mess that you should stay far away from.\n\n### Is Porcupine a toy project or is it meant to be a serious editor?\nPorcupine is meant to be a serious editor, in fact you might regret even touching it.\nhttps://www.youtube.com/watch?v=Y3iUoFkDKjU\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fakuli%2Fporcupine","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fakuli%2Fporcupine","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fakuli%2Fporcupine/lists"}