Almost comfortable text editor
Find a file
2025-08-13 23:10:08 +02:00
debian Documentation and fixes 2025-08-14 00:09:10 +03:00
example_plugins Readme update with small dir changes 2025-08-08 13:08:47 +03:00
pynote Documentation and fixes 2025-08-14 00:09:10 +03:00
.gitignore Documentation and fixes 2025-08-14 00:09:10 +03:00
LICENSE first commit 2025-07-31 14:54:00 +03:00
pyproject.toml Documentation and fixes 2025-08-14 00:09:10 +03:00
README.md Documentation and fixes 2025-08-14 00:09:10 +03:00
requirements.txt first commit 2025-07-31 14:54:00 +03:00

Pynote

Simple almost comfortable text editor written in Python with PySide6.

Project details

  • Was made for python practice
  • Maybe will be updated and improved

Plans

Main goal: make an extensible and customizable text editor.

  • Plugins support
    • App auto reloading
    • Plugin sanitizier
  • Develop plugins
  • Optimize IO more

Conventions

  • pynote.gui.classes contains only GUI related code
    • all signal/event handling must be passed to pynote.gui.event_handlers
  • pynote.gui.classes have method logic_update() it's used only to update data of underlying widgets
    • PySide6 has own method update() but it's used to redraw widget

Contribuition guide:

  1. Clone this repo
  2. Checkout to branch
    • if you adding new feature name it /dev/feature
    • if you fixing an issue name it /fix/issue
  3. Develop according to conventions
  4. When you finished submit a pull request to main branch

Plugins

Plugins is an executable by Pynote Python code. Plugins are not maintained in Pynote repo.

Warning

Because plugins are executable code written in Python they are very powerfull. You must check the source of plugin or audit the code of it yourself before enabling it!

Pynote contribuitors are not responsible for any damage caused by third-party plugins.


Details

  • All plugins have a reference to current MainWindow class (to accses it use mainWindow variable)
  • MainWindow class contains attachable points for plugins to modify it
  • Plugins are running on same thread as GUI
  • Plugins are capable of creating own windows/methods and inject them directly in mainWindow
  • Plugins state is saved in plugins-metadata.json
    • plugins-metadata.json is used to save state of plugins after restart of Pynote
  • Plugins will not execute if they are disabled in config.toml
  • Pynote is doing small amount of sanitization before loading plugin
    • Currently plugins which include: os modules will not load

Development

Developing plugin for Pynote as easy as writing Python. Pynote is not enforcing on developer any syntax. It can be a simple script or theme for MainWindow. Or something complex with own PySide6 windows and methods.

You can refer to example_plugins/ to see example of plugins.