{"id":19746841,"url":"https://github.com/b-ryan/tasknc-python","last_synced_at":"2025-04-30T08:31:51.361Z","repository":{"id":62583888,"uuid":"118177916","full_name":"b-ryan/tasknc-python","owner":"b-ryan","description":"Taskwarrior ncurses application in Python, inspired by tasknc","archived":false,"fork":false,"pushed_at":"2018-01-29T18:14:12.000Z","size":34,"stargazers_count":4,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2024-10-08T19:52:33.641Z","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":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/b-ryan.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-01-19T21:00:11.000Z","updated_at":"2021-02-05T12:54:47.000Z","dependencies_parsed_at":"2022-11-03T21:37:49.929Z","dependency_job_id":null,"html_url":"https://github.com/b-ryan/tasknc-python","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/b-ryan%2Ftasknc-python","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/b-ryan%2Ftasknc-python/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/b-ryan%2Ftasknc-python/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/b-ryan%2Ftasknc-python/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/b-ryan","download_url":"https://codeload.github.com/b-ryan/tasknc-python/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":223856778,"owners_count":17214939,"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":[],"created_at":"2024-11-12T02:16:02.512Z","updated_at":"2024-11-12T02:16:03.000Z","avatar_url":"https://github.com/b-ryan.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# pytasknc\n\nA Python ncurses application for [Taskwarrior](https://taskwarrior.org/),\noriginally based on [tasknc](https://github.com/lharding/tasknc).\n\n## Background\n\nTaskwarrior is a command-line task \u0026 todo list manager. It's a wonderful tool\nwith a robust ecosystem. In fact you can browse the many\n[tools](https://taskwarrior.org/tools/) available - like a web UI and more.\n\nOne of those available tools is [tasknc](https://github.com/lharding/tasknc).\nIt is a solid little tool, but nearly immediately I wanted to customize it in a\nway not supported by its configuration and I didn't really want to dig into the\nplethora of C code. Python is perfect here with its built-in support for\nncurses.\n\nThere is an existing project called\n[taskhud](https://github.com/usefulthings/taskhud), but for me it had these issues:\n\n- It didn't work\n- There's no pypi package\n\nPlus, I have been wanting an excuse to get experience with ncurses for the sake\nof another project: [polecat](https://www.polecat.io/).\n\n## Dependencies\n\nThis project has one requirement: Python 3. Python 2 is not supported.\n\n## Installation\n\nInstall using pip. Note that since you must use Python 3, you might need to use\nthe `pip3` command, depending on your system:\n\n```\npip install pytasknc\n```\n\n## Usage\n\n```\npytasknc\n```\n\n## Design\n\nI believe this project is fairly unique in its design, at least as far as an\nncurses application goes. I was heavily inspired by the\n[reagent](https://holmsand.github.io/reagent/) Clojure library.\n\nFor one, the application state is immutable. The\n[models](https://github.com/b-ryan/tasknc-python/blob/master/pytasknc/models.py)\nmodule contains the full state necessary to draw the screen and is made up of\n`namedtuple` objects, which are copied and modified whenever some action is\ntaken on the screen.\n\nYou can see the\n[actions](https://github.com/b-ryan/tasknc-python/blob/master/pytasknc/actions.py)\nmodule contains the code to respond to any action the user may take. An action\nfunction is one which takes the current state and returns a new state.\n\nThe\n[draw](https://github.com/b-ryan/tasknc-python/blob/master/pytasknc/draw.py)\nmodule then renders a state into what you see on the screen. In fact, it does a\nbasic diff (sorta like [React](https://reactjs.org/)) in order to update the\nminimal amount of screen necessary. If the code were to always perform a full\ndraw of the screen, the screen often flickers.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fb-ryan%2Ftasknc-python","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fb-ryan%2Ftasknc-python","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fb-ryan%2Ftasknc-python/lists"}