{"id":19516028,"url":"https://github.com/fidgetingbits/talon-python-command-server","last_synced_at":"2026-06-13T08:32:41.367Z","repository":{"id":187589331,"uuid":"531323041","full_name":"fidgetingbits/talon-python-command-server","owner":"fidgetingbits","description":null,"archived":false,"fork":false,"pushed_at":"2022-09-02T03:01:56.000Z","size":7,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-12-26T16:36:50.217Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"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/fidgetingbits.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2022-09-01T01:43:44.000Z","updated_at":"2022-10-05T17:33:16.000Z","dependencies_parsed_at":"2023-09-04T09:01:27.678Z","dependency_job_id":null,"html_url":"https://github.com/fidgetingbits/talon-python-command-server","commit_stats":null,"previous_names":["fidgetingbits/talon-python-command-server"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/fidgetingbits/talon-python-command-server","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fidgetingbits%2Ftalon-python-command-server","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fidgetingbits%2Ftalon-python-command-server/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fidgetingbits%2Ftalon-python-command-server/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fidgetingbits%2Ftalon-python-command-server/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/fidgetingbits","download_url":"https://codeload.github.com/fidgetingbits/talon-python-command-server/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fidgetingbits%2Ftalon-python-command-server/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34278153,"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-06-13T02:00:06.617Z","response_time":62,"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":[],"created_at":"2024-11-10T23:44:00.874Z","updated_at":"2026-06-13T08:32:41.350Z","avatar_url":"https://github.com/fidgetingbits.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"This is a python implementation of the file-based RPC command server for use\nwith [Talon](https://talonvoice.com/) clients. This is mostly just a port of\nthe original Typescript implementation by Pokey\n[here](https://github.com/pokey/command-server). \n\nThe implementation is fairly generic, the ideas that any application plugin\nwritten in python could import this class, and relatively seamlessly talk with\na command client on the talon side. The command client on the talon side is\ncurrently a working process\n[here](https://github.com/knausj85/knausj_talon/pull/956), but this server has\nbeen tested with it to make sure it works fine.\n\n# Usage\n\nA simple example of how a python plugin can use the server:\n\n```python\nfrom .talon_command_server import TalonCommandServer\n\nclass ExampleCommandServer:\n    COMMUNICATION_DIRECTORY = \"/tmp/example-talon\"\n\n    def __init__(self, command_handler):\n        self.command_handler = command_handler\n\n    def start_server(self):\n        server = TalonCommandServer(self.COMMUNICATION_DIRECTORY)\n        if not server.init_ok:\n            print(\"ERROR: Unable to initialize command server. Exiting early.\")\n            return\n        server.command_loop(self.command_handler)\n\ndef command_handler(command, *args):\n    \"\"\"Main handler of all commands coming from Talon\"\"\"\n    print(f\"example command handler: {command} {args}\")\n    return \"example command response\"\n\n# Plugin entry point\ndef main():\n    server = command_server.ExampleCommandServer(command_handler)\n    t = threading.Thread(target=server.start_server)\n    t.daemon = True\n    t.start()\n\nif __name__ == \"__main__\":\n    main()\n```\n\n# Installation\n\nAt the moment talon_command_server.py is just meant to be copied to the plugin\nsource directory that you're developing from, but in the future maybe we can\nstandardize on something like $HOME/.talon/lib/python/ for installing helper\nstuff like this.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffidgetingbits%2Ftalon-python-command-server","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffidgetingbits%2Ftalon-python-command-server","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffidgetingbits%2Ftalon-python-command-server/lists"}