import json from pathlib import Path from typing import TypedDict from talon import app SPOKEN_FORMS_OUTPUT_PATH = Path.home() / ".cursorless" / "state.json" STATE_JSON_VERSION_NUMBER = 0 class SpokenFormOutputEntry(TypedDict): type: str id: str spokenForms: list[str] class SpokenFormsOutput: """ Writes spoken forms to a json file for use by the Cursorless vscode extension """ def init(self): try: SPOKEN_FORMS_OUTPUT_PATH.parent.mkdir(parents=True, exist_ok=True) except Exception: error_message = ( f"Error creating spoken form dir {SPOKEN_FORMS_OUTPUT_PATH.parent}" ) print(error_message) app.notify(error_message) def write(self, spoken_forms: list[SpokenFormOutputEntry]): with open(SPOKEN_FORMS_OUTPUT_PATH, "w", encoding="UTF-8") as out: try: out.write( json.dumps( { "version": STATE_JSON_VERSION_NUMBER, "spokenForms": spoken_forms, } ) ) except Exception: error_message = ( f"Error writing spoken form json {SPOKEN_FORMS_OUTPUT_PATH}" ) print(error_message) app.notify(error_message)