Wtyczki w Pythonie¶
Modular Text Editor ładuje wtyczki w Pythonie obok natywnych wtyczek C++ przez
tę samą powierzchnię zarządzania wtyczkami. Wtyczka w Pythonie to folder
zawierający jeden plugin.json i co najmniej jeden plik .py z funkcją
najwyższego poziomu register(ctx).
Edytor uruchamia mały podproces workera na każdą wtyczkę, wykonuje w nim
register(ctx) i przekazuje polecenia / menu / zdarzenia przez kanał RPC.
Twoja wtyczka nigdy nie dotyka Qt ani Scintilli — obiekt ctx to zwykły
pythonowy lokator usług.
Co działa dziś (fazy 1–5: komplet funkcji)
Faza 1: polecenia, pozycje menu, subskrypcje zdarzeń (otwarcie / zamknięcie / zapis / zmiana aktywnego dokumentu / zmiana zaznaczenia / zamknięcie aplikacji), log, pasek stanu.
Faza 2: bufor edytora / zaznaczenie / karetka /
wyszukiwanie / wcięcia / operacje na plikach przez ctx.editor.*,
trwałe ustawienia przez ctx.settings.* i ustawienia aplikacji tylko
do odczytu przez ctx.app_settings.*, providery uzupełniania (z małym
limitem czasu na naciśnięcie klawisza) przez
@ctx.completions.provider(...), oraz ctx.data_dir() dla zapisywalnego
katalogu per wtyczka.
Faza 3: deklaratywne panele dokowane przez ctx.docks.add_panel(...),
strony Preferencji przez ctx.settings_page.register(...), oba
budowane z kreatorów formularzy mte.ui, oraz dostęp do
kontrolek w czasie działania przez ctx.ui.get / ctx.ui.set.
Faza 4: instalator pakietów .mteplugin — spakuj folder wtyczki do
zipa i zainstaluj z Preferencje → Wtyczki
(zobacz Pakowanie).
Faza 5: wirtualne środowiska per wtyczka — zadeklaruj zależności pip w
pyRequires, a edytor przy pierwszym uruchomieniu przygotuje venv dla
Twojej wtyczki (zobacz
Zależności); deklaracja
permissions pokazywana na stronie Wtyczki; oraz substrat RPC
strumieniowania/anulowania (na razie bez API dla wtyczek — stanowi
podbudowę przyszłych usług AI).
Minimalna wtyczka¶
Utwórz <dowolny-folder>/hello/ z tymi dwoma plikami.
{
"id": "org.example.hello",
"name": "Hello (Python)",
"version": "1.0.0",
"apiVersion": 1,
"entry": "python",
"module": "main",
"menus": [
{ "title": "Plugins", "barPriority": 570, "itemPriority": 100 }
]
}
import mte # noqa: F401
def register(ctx):
@ctx.commands.command(id="hello.sayHi",
title="Say Hi",
shortcut="Ctrl+Alt+H")
def _say_hi():
ctx.status.show("Hello from Python!", timeout_ms=3000)
ctx.log.info("hello: Say Hi invoked")
ctx.menus.add_item("Plugins/Hello/Say Hi", "hello.sayHi")
Spakuj folder do zipa jako hello.mteplugin i zainstaluj przez
Preferencje → Wtyczki → Zainstaluj… — albo wrzuć folder ręcznie do swojego
katalogu wtyczek per użytkownik (zobacz Pakowanie).
Uruchom edytor ponownie, a na pasku menu pojawi się
Wtyczki → Hello → Say Hi.
Czego potrzebujesz na maszynie¶
- Interpretera Pythona 3.9+ osiągalnego na jeden z dwóch sposobów:
- Na
PATH(py.exe,python.exelubpython3.exena Windows;python3na macOS/Linux), lub - Wskazanego zmienną środowiskową
MTE_PYTHON(albo bezwzględna ścieżka dopython.exe, albo goła nazwa do wyszukania naPATH).
- Na
- Żadnych pakietów pip: biblioteka kliencka fazy 1
mtejest dostarczana z edytorem i dodawana dosys.pathza Ciebie.
Edytor loguje przy starcie, który interpreter wybrał:
PluginHost: MTE_PYTHON is not set; falling back to PATH.
PluginHost: located Python on PATH: py.exe -> C:/Windows/py.exe
PluginHost: Python plugin backend enabled; interpreter=..., worker=.../mte_python_host.py
Jeśli widzisz Python plugins disabled, przejdź do
Rozwiązywania problemów.
Co może robić Twoja wtyczka¶
Każda pozycja poniżej prowadzi do swojej sekcji API:
| Możliwość | Sekcja |
|---|---|
| Rejestrowanie poleceń (z opcjonalnym skrótem klawiszowym) | ctx.commands |
| Dodawanie pozycji menu i separatorów | ctx.menus |
| Subskrypcja zdarzeń edytora (dokumenty, zaznaczenie, zamknięcie aplikacji) | ctx.events oraz Dokumentacja zdarzeń |
| Logowanie do strumienia diagnostycznego edytora | ctx.log |
| Wysyłanie tymczasowych komunikatów na pasek stanu | ctx.status |
| Odczyt/modyfikacja aktywnego bufora, zaznaczenia, karetki, wcięć | ctx.editor |
| Utrwalanie konfiguracji per wtyczka, odczyt ustawień globalnych aplikacji | ctx.settings / ctx.app_settings |
| Rejestracja providera uzupełniania (z limitem czasu na naciśnięcie klawisza) | ctx.completions |
| Zlokalizowanie zapisywalnego katalogu per wtyczka | ctx.data_dir() |
| Dodanie deklaratywnego panelu dokowanego | ctx.docks oraz mte.ui |
| Dodanie strony w Preferencjach | ctx.settings_page |
| Odczyt / zapis kontrolek panelu w czasie działania | ctx.ui |
| Przełączanie trwałego znacznika zaznaczenia na pozycji menu | ctx.menus.set_item_checked |
Co dalej¶
- Dokumentacja
plugin.json— każde pole i jego działanie. - Dokumentacja API
ctx— opis metoda po metodzie pięciu usług fazy 1. - Dokumentacja zdarzeń — tabela temat ↔ dataclass.
- Pakowanie — gdzie na dysku należą foldery wtyczek.
- Rozwiązywanie problemów — odczytywanie linii logu hosta.
- Tworzenie z Claude — zwięzły przewodnik, który możesz przekazać asystentowi AI, aby wyprodukował wtyczkę za Ciebie.