{"id":17113371,"url":"https://github.com/kenjitakahashi/td","last_synced_at":"2025-04-13T02:32:33.132Z","repository":{"id":5951810,"uuid":"7172767","full_name":"KenjiTakahashi/td","owner":"KenjiTakahashi","description":"a non-offensive, per project ToDo manager.","archived":false,"fork":false,"pushed_at":"2017-02-26T00:42:15.000Z","size":111,"stargazers_count":47,"open_issues_count":1,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-11T12:14:31.626Z","etag":null,"topics":["cli","python","todo","todolist"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/KenjiTakahashi.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2012-12-14T22:13:23.000Z","updated_at":"2025-03-30T16:42:54.000Z","dependencies_parsed_at":"2022-09-26T17:40:57.755Z","dependency_job_id":null,"html_url":"https://github.com/KenjiTakahashi/td","commit_stats":null,"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KenjiTakahashi%2Ftd","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KenjiTakahashi%2Ftd/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KenjiTakahashi%2Ftd/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KenjiTakahashi%2Ftd/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/KenjiTakahashi","download_url":"https://codeload.github.com/KenjiTakahashi/td/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248657820,"owners_count":21140842,"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":["cli","python","todo","todolist"],"created_at":"2024-10-14T17:07:23.642Z","updated_at":"2025-04-13T02:32:32.904Z","avatar_url":"https://github.com/KenjiTakahashi.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![Build Status](https://travis-ci.org/KenjiTakahashi/td.png?branch=master)](https://travis-ci.org/KenjiTakahashi/td) [![Coverage](https://coveralls.io/repos/KenjiTakahashi/td/badge.png?branch=master)](https://coveralls.io/r/KenjiTakahashi/td)\n\n**td** is a non-offensive, per project ToDo manager.\n\nHeavily inspired by [devtodo][devtodo], but with some nasty features, like:\n\n* Shorter commands for most used actions.\n* Sorting/Filtering specific levels only.\n* Persistent sort/filter/view options.\n* Written in pure Python (it even has docstrings).\n* Tests.\n\nOh, and it will automagically pick up your existing [devtodo][devtodo] lists!\n\n## screenshot\n![screenshot](https://img.kenji.sx/td.png)\n\n## requirements\n* python3\n* distribute (for setup)\n* nosetests (for test-suite)\n\n## installation\n\nThrough [PyPI][pypi]\n```sh\n$ pip install td\n```\nor from sources\n```sh\n$ python setup.py install\n```\n\n## usage\n\n#### show\nTo show your complete ToDo list, just run **td** without any parameters.\n```sh\n$ td\n```\n\n#### add\nTyping\n```sh\n$ td a(dd) [\u003cparent index\u003e]\n```\nwill start an interactive item adding session.\n\nOptional *parent_index* parameter specifies item, under which the new one will be nested.\n\nInstead of using interactive session, one can also specify them in command line, like below.\n```sh\n$ td a(dd) [\u003cparent index\u003e] --\u003cfield name\u003e \u003cfield value\u003e\n$ td a(dd) [\u003cparent index\u003e] -\u003cfirst letter of the field name\u003e \u003cfield value\u003e\n```\n\n#### edit\nTyping\n```sh\n$ td e(dit) \u003cindex\u003e\n```\nwhere *index* is an item's index, will start an interactive item editing session.\n\nSimilarly to **a(dd)**, one can also specify new values in command line.\n```sh\n$ td e(dit) \u003cindex\u003e --\u003cfield name\u003e \u003cfield value\u003e\n$ td e(dit) \u003cindex\u003e -\u003cfirst letter of the field name\u003e \u003cfield value\u003e\n```\nOne special cause here is reparenting, done like below.\n```sh\n$ td e(dit) \u003cindex\u003e --parent \u003cparent index\u003e\n```\n\n#### remove\nTyping\n```sh\n$ td r(emove) \u003cindex\u003e\n```\nwill remove item under *index*.\n\n#### done/undone\nTyping\n```sh\n$ td d(one) \u003cindex\u003e\n```\nwill mark item under *index* as done, while typing\n```sh\n$ td D \u003cindex\u003e\n$ td undone \u003cindex\u003e\n```\nwill mark it as not done.\n\n#### modify\nPerforms a one time modification of the list and saves it to disk.\n\n**sort**\n\nUsed to sort items on the list.\n\nGeneral syntax is\n```sh\n$ td (v|m|o) -s [+|-]{,}[[\u003clevel\u003e]{:}[\u003cfield_name\u003e](+|-)]\n$ td (v|m|o) --sort [+|-]{,}[[\u003clevel\u003e]{:}[\u003cfield_name\u003e](+|-)]\n```\nbut it looks cryptic, so lets split it into some more specific use cases.\n\nTo sort everything ascending by name, type\n```sh\n$ td (v|m|o) -s\n$ td (v|m|o) -s +\n```\nTo sort everything descending by name, type\n```sh\n$ td (v|m|o) -s -\n```\nTo sort specific level by name, type (as before, + goes for ascending and - for descending)\n```sh\n$ td (v|m|o) -s \u003clevel\u003e(+|-)\n```\nTo sort everything by a field other than name, type\n```sh\n$ td (v|m|o) -s \u003cfield name\u003e(+|-)\n```\nTo sort specific level by a field other than name, type\n```sh\n$ td (v|m|o) -s \u003clevel\u003e:\u003cfield name\u003e(+|-)\n```\nAnd to specify muliple rules, use a comma (`,`). For example this\n```sh\n$ td (v|m|o) -s +,1-,2:priority+\n```\nwill sort items at the second level ascending by priority, item at the first level descending by name, and all other levels ascending by name.\n\nNote that to sort by multiple conditions, just supply them one by one and they'll be applied in order of appearance.\n\n**purge**\n\nTyping\n```sh\n$ td (v|m|o) -p\n$ td (v|m|o) --purge\n```\nwill remove all completed items.\n\n**done/undone**\n\nUsed to batch mark items as done or not.\n\nGeneral syntax is\n```sh\n$ td (v|m|o) -d [[\u003clevel\u003e]{:}[[\u003cfield name\u003e=]\u003cregexp\u003e]]\n$ td (v|m|o) --done [[\u003clevel\u003e]{:}[[\u003cfield name\u003e=]\u003cregexp\u003e]]\n```\n```sh\n$ td (v|m|o) -D [[\u003clevel\u003e]{:}[[\u003cfield name\u003e=]\u003cregexp\u003e]]\n$ td (v|m|o) --undone [[\u003clevel\u003e]{:}[[\u003cfield name\u003e=]\u003cregexp\u003e]]\n```\nAs with **sort**, we'll split it into use cases.\n\nTo mark all items, type\n```sh\n$ td (v|m|o) -(d|D)\n```\nTo mark all items at specific level, type\n```sh\n$ td (v|m|o) -(d|D) \u003clevel\u003e\n```\nTo mark items matching regexp at *any* field and level, type\n```sh\n$ td (v|m|o) -(d|D) \u003cregexp\u003e\n```\nTo mark items matching regexp at *specific* field and *any* level, type\n```sh\n$ td (v|m|o) -(d|D) \u003cfield name\u003e=\u003cregexp\u003e\n```\nTo mark items matching regexp at *any* field and *specific* level, type\n```sh\n$ td (v|m|o) -(d|D) \u003clevel\u003e:\u003cregexp\u003e\n```\nTo mark items matching regexp at *specific* field and level, type\n```sh\n$ td (v|m|o) -(d|D) \u003clevel\u003e:\u003cfield name\u003e=\u003cregexp\u003e\n```\nOf course, these rules can also be chained using comma (`,`).\n\n#### view\nAffects how the list is displayed on the screen. It does not modify the list physically and only takes effect for one run, all settings are then gone.\n\nShares the interface of `modify` command, with following additions.\n\n**nocolor**\n\nDisables any possible color codes, i.e. prints pure textual data. Might be useful for storing and/or reusing the output.\n\n```sh\n$ td v --no-color\n```\n\n#### options\nDescribes persistent options, which will be applied every next time **td** is run.\n\nShares the interface of `modify` command, with following additions.\n\n**global**\nStores options globally (in `~/.tdrc`), which means that they will be applied to all lists.\n\n**Note:** Local options take precedence over global ones.\n\n```sh\n$ td o -g \u003cother options\u003e\n$ td o --global \u003cother options\u003e\n```\n\n[devtodo]: http://swapoff.org/devtodo1.html\n[pypi]: https://pypi.python.org/pypi/td\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkenjitakahashi%2Ftd","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkenjitakahashi%2Ftd","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkenjitakahashi%2Ftd/lists"}