{ "info": { "author": "David Lowry-Duda", "author_email": "davidlowryduda@davidlowryduda.com", "bugtrack_url": null, "classifiers": [ "Environment :: Console", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7" ], "description": "# tld.py\n\n[![Build Status](https://travis-ci.com/davidlowryduda/tld.svg?branch=master)](https://travis-ci.com/davidlowryduda/tld)\n\n`tld` is a tool for people who want to do things, but who might also want a\nbit of flexibility.\n\n`tld` (pronounced \"told\", based off of Steve Losh's [t.py][] but with a LD\ntwist) is a simple command line tool that works like a (somewhat) minimal list\nmanager. Calling\n\n[t.py]: https://github.com/sjl/t\n\n```bash\n$ python tld.py This is a message.\n```\n\nwill create a file called `tasks` in the current directory and put \"This is a\nmessage.\" (and some identifier) in that file. Calling it again will print\nthe contents of the file.\n\n```bash\n$ python tld.py\n3 - This is a message.\n```\n\nThe `3` at the start of the output is an identifier, and can be referenced.\nCalling\n\n```bash\n$ python tld.py -f 3\n```\n\nwill mark this message as \"done\" and move it to a file `.tasks.done` in the\ncurrent directory.\n\nFor more options, call\n\n```bash\n$ python tld.py -h\n```\n\nor see the options description on the github page\nhttps://github.com/davidlowryduda/tld.\n\n\n## Why use tld?\n\nSteve Losh designed t.py to do the *simplest thing that could possibly work*:\nyou can add, edit, remove, and finish elements from a list. It's simple, messy,\nand has almost no features to distract you from getting in the way of doing\nthings. It's easy to say \"I'll just organize my list a bit\" and spend 15\nminutes tagging, coloring, setting priorities, and so forth.\n\nAnd if that works for you, great! Then t.py is enough.\n\n`tld` does everything t.py does, except with a few more features (and a bit less\npurity). In particular, `tld` supports simple date annotations, simple tagging,\nand philosophically isn't against complete organization.\n\nWhere t.py encourages you to use different aliases to different tasklists for\ndifferent one level of organization, `tld` allows one to use tags in fewer\nlists.\n\n\n### It's Flexible\n\nDo you want to edit a bunch of items at once? Open the list in a text editor,\nand `tld` will handle the rest.\n\nDo you want to view the list on a computer that doesn't have `tld` installed?\nOpen the list in a text editor.\n\nDo you want to synchronize your list across multiple computers? Keep your lists\nin a [Dropbox][] folder or a [github][] repository.\n\n[Dropbox]: https://www.getdropbox.com/\n[github]: htt[s://github.com/\n\n\n### It Plays Nice with Version Control\n\n`tld` follows the lead of other systems which keep lists in a plain text file.\nThis is a great idea.\n\n`tld` also follows `t.py`'s use of random IDs to order the items in the list.\nWhen list managers append new items to the end of the list and multiple users\nedit a list, then merge conflicts will occur and require manual handling.\n\nIf order really matters, then this makes sense. But if order really matters,\nthen you shouldn't be using `tld`.\n\n`tld` uses random IDs (actually SHA1 hashes) to order the list. Once a list has\na couple of items in it, adding more is far less likely to cause merge\nconflicts.\n\n\n## Installing tld\n\n`tld` requires [Python][] 3.6+ and a bash-like shell. It works on Linux, OS X,\nand Windows ([with the linux subsystem][subsystem]).\n\n[Python]: http://python.org/\n[subsystem]: https://docs.microsoft.com/en-us/windows/wsl/install-win10\n\nInstalling and setting up `tld` will take about one minute.\n\nFirst, [download][] the newest version or clone the github repository\n(`git clone https://github.com/davidlowryduda/tld`).\n\n[download]: https://github.com/davidlowryduda/tld/archive/master.zip\n\nYou can also use pip through a command like\n\n```bash\npython3 -m pip install --user --upgrade tld-task\n```\n\n> If you use pip, then you can replace 'python3 ~/path/to/tld.py` with `tld`\n> in the examples below.\n\nNext, decide where you want to keep your lists. I put mine in `~/notes/tasks`\n(I keep notes created from other note utilities in `~/notes/` too). Create that\ndirectory (or whatever directory you plan on using).\n\n```bash\nmkdir -p ~/notes/tasks\n```\n\nSet up an alias to run `tld`. Put something like this in your\n`~/.bashrc` file:\n\n```bash\nalias tld='python3 ~/path/to/tld.py --task-dir ~/notes/tasks --list tasks'\n```\n\nMake sure you run `source ~/.bashrc` or restart your terminal window to make\nthe alias take effect. Now `tld` is ready to use.\n\n\n## Using tld\n\n`tld` is quick and easy to use, especially when used in combination with other\ntools. Commandline usage is available through `tld -h` or `tld --help`, and is\na good reference once you grok the workflow.\n\n\n### Add an Item\n\nTo add an item, use `tld [item description]`:\n\n```bash\n$ tld Tell my wife I love her.\n$ tld Prove the Riemann Hypothesis.\n$ tld \"Read Steve Losh's .vimrc.\"\n```\n\n\n### List Your Items\n\nListing your items is even easier -- just use `tld`:\n\n```bash\n$ tld\n1 - Read Steve Losh's .vimrc.\na - Tell my wife I love her.\nb - Prove the Riemann Hypothesis.\n```\n\n`tld` will list all of your unfinished items and their IDs. Do you not want to\nsee the IDs? Use the \"quiet\" option by using `tld -q` or `tld --quiet`.\n\n\n### Finish an Item\n\nAfter you're done with something, use `tld -f ID` to finish it:\n\n```bash\n$ tld -f b\n$ tld\n1 - Read Steve Losh's .vimrc.\na - Tell my wife I love her.\n```\n\nYou can use `tld -r ID` to \"remove\" an item (which won't mark it as \"finished\".\nItems marked \"finished\" can be listed. Items that are \"removed\" are just gone).\n\n\n### Edit an Item\n\nSometimes you might want to change the wording of an item. You can use\n`tld -e ID [new description]` to do that:\n\n```bash\n$ tld -e 1 Clean my .vimrc.\n$ tld\n5 - Update my .vimrc.\na - Tell my wife I love her.\n```\n\nYes, you can use sed-style substitution strings `s/old/repl`.\n\n```bash\n$ tld -e 5 s/Update/Clean/\n$ tld\na - Tell my wife I love her.\ne - Clean my .vimrc.\n```\n\n### List \"Finished\" Items\n\nHave you marked lots of items as \"finished\" and you want to review them?\nYou can view these items with `tld --done`.\n\n```bash\n$ tld --done\nb - Prove the Riemann Hypothesis.\n```\n\n\n### Annotate Items with Dates\n\nDo you want to be able to remember when you added an item to the list? Use\n`tld --date [description]` when you add the item to the list.\n\n```bash\n$ tld --date Write README.\n$ tld\n1 - Write Readme.\n5 - Update my .vimrc.\na - Tell my wife I love her.\n```\n\n`tld` doesn't show these dates by default --- too much clutter. To see dates,\nuse `tld --showdates`.\n\n```bash\n$ tld --showdates\n2018-06-01 | 1 - Write README.\n | 5 - Update my .vimrc\n | a - Tell my wife I love her.\n```\n\nYou can use `--date` in your `tld` alias, and this information will only affect\nthe output when used with `--showdates`.\n\n\n### Annotate Items with Tags\n\nUse `tld --tag [TAG] [description]` when you add an item to the list to add a\ntag.\n\n```bash\n$ tld --tag shopping Buy milk.\n$ tld\n1 - Write README.\n5 - Update my .vimrc\n9 - Buy milk.\na - Tell my wife I love her.\n```\n\nTo see the tags, use `--showtags`.\n\n```bash\n$ tld --showtags\n1 - Write README.\n5 - Update my .vimrc\n9 - Buy milk. | tags: shopping\na - Tell my wife I love her.\n```\n\n\n### Delete the List if it's Empty\n\nWhy keep an empty list around? You can have the list delete itself automatically\nif empty. You can use the `--delete-if-empty` option in your alias:\n\n```bash\nalias tld='python3 ~/path/to/tld.py --task-dir ~/notes/tasks --list tasks --delete_if-empty'\n```\n\n\n## Tips and Tricks\n\n`tld` might be simple, but it can do a lot of interesting things.\n\n\n### Count Your Items\n\nCounting your item is simple using the `wc` program:\n\n```bash\n$ tld | wc -l\n4\n```\n\n### Tags, Grep, Awk, and Sed\n\nIf I have too many aliases, I forget them. I use tags and grep as a primary\nlevel of organization. To remember what tags exist, just print them with\n`tld --showtags` or `tld --showtags | grep tags`. Then print out the relevant\nitems through grep with `tld --showtags | grep shopping`.\n\n```bash\n$ tld --showtags | grep shopping\n9 - Buy milk. | tags: shopping\n```\n\nTo make it look pretty, you can cut out the tag by showing evertying before '|'\nwith something like awk.\n\n```bash\n$ tld --showtags | grep shopping | awk -F'|' '{print $1}'\n9 - Buy milk. \n```\n\nIf you have too many tags and too many items, then perhaps having multiple lists\nis a good idea for you. But you can list all the unique collections of tags\nrelatively easily with classic tools and sed.\n\n```bash\n$ tld --tag shopping Buy chocolate syrup.\n$ tld --tag music Buy Phoenix album.\n$ tld --showtags | grep tags | sed -e's/.*tags: //' | sort | uniq\nmusic\nshopping\n```\n\n### Multiple Lists\n\n\nYou can follow the `t.py` philosophy of organizing tasks into different lists by\nadding additional aliases. For example\n\n```bash\nalias g='python ~/path/to/tld.py --task-dir ~/notes/tasks --list groceries'\nalias m='python ~/path/to/tld.py --task-dir ~/notes/tasks --list music-to-buy'\nalias w='python ~/path/to/tld.py --task-dir ~/notes/tasks --list wines-to-try'\n```\n\n### Distributed Bugtracking\n\nLike the idea of distributed bug trackers like [BugsEverywhere][], but don't\nwant to use such a heavyweight system? You can use `tld` instead.\n\nAdd another alias to your `~/.bashrc` file:\n\n alias b='python ~/path/to/tld.py --task-dir . --list bugs'\n\nNow when you're in your project directory you can use `b` to manage the list of\nbugs/tasks for that project. Add the `bugs` file to version control and you're\nall set.\n\nEven people without `tld` installed can view the bug list, because it's plain\ntext.\n\n\n## On Compatability with t.py\n\n`tld` can read and operate on lists made with `t.py`, but `t.py` does not handle\nthe date and tag annotations from `tld`. If you never use those, then they're\ninteroperable (and you're essentially using `t.py` anyway).\n\nIn the future, additional metadata may be implemented in `tld`, which may\nfurther widen this gap.\n\n\n## Why Make tld?\n\nI used Steve Losh's `t.py` for a long time before deciding to make a few\nchanges. When I read through his code, I thought it was pretty elegant. So I\nthought it would be a good learning experience to rebuild it in roughly the same\norder, but with a few changes in mind.\n\nSo really, this project is an exercise in programming that I did over about a\nweek to fit my whims and desires.\n\nThose who find themselves here should really check out `t.py`. By adding new\nfeatures, I satisfy my whims --- but more features ruin the simple purity of the\noriginal `t.py`.\n\n\n## Bugs and Contributions\n\nIf you happen to use it and find a bug, let me know.\n\nFor more featureful list managers, you might checko out `todo.txt` and\n`TaskWarrior`. They have lots of features and lots of knobs that one can tweak\nand prettify.\n\nIf you want to contribute code to `tld`, that's great! Fork the\n[repo](https://github.com/davidlowryduda/tld) and send me a pull request.\nBut I've been doing this as a learning experience, and know that I might\nexperiment with contributed code too.\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/davidlowryduda/tld", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "tld-task", "package_url": "https://pypi.org/project/tld-task/", "platform": "", "project_url": "https://pypi.org/project/tld-task/", "project_urls": { "Homepage": "https://github.com/davidlowryduda/tld" }, "release_url": "https://pypi.org/project/tld-task/1.0.0/", "requires_dist": null, "requires_python": "", "summary": "tld is a tool for people who want to do things, but who want a bit of flexibility.", "version": "1.0.0" }, "last_serial": 4038846, "releases": { "1.0.0": [ { "comment_text": "", "digests": { "md5": "5b228daca6dd6df7ce4d8ef69c82b5df", "sha256": "d5eb6a5c0fa88f535fc6cd09361eae59e47fe202d39293a49643140262efac10" }, "downloads": -1, "filename": "tld_task-1.0.0-py3-none-any.whl", "has_sig": false, "md5_digest": "5b228daca6dd6df7ce4d8ef69c82b5df", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 11352, "upload_time": "2018-07-07T11:20:13", "url": "https://files.pythonhosted.org/packages/5a/55/0a19caa70fb4852ea3f271316add8f536f939c15c248cb2008bae39c98b0/tld_task-1.0.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c523b66544a90e55bd7f22c3fb85ce22", "sha256": "9bcba7c4bd1febb075190044ee246f26e8df01c42d5ff077de46da35f3b44ab6" }, "downloads": -1, "filename": "tld-task-1.0.0.tar.gz", "has_sig": false, "md5_digest": "c523b66544a90e55bd7f22c3fb85ce22", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17883, "upload_time": "2018-07-07T11:20:15", "url": "https://files.pythonhosted.org/packages/33/81/65ccd7fce7946707f3d4b528f0621be27a9716e574bab0dbf7c84a022f92/tld-task-1.0.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "5b228daca6dd6df7ce4d8ef69c82b5df", "sha256": "d5eb6a5c0fa88f535fc6cd09361eae59e47fe202d39293a49643140262efac10" }, "downloads": -1, "filename": "tld_task-1.0.0-py3-none-any.whl", "has_sig": false, "md5_digest": "5b228daca6dd6df7ce4d8ef69c82b5df", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 11352, "upload_time": "2018-07-07T11:20:13", "url": "https://files.pythonhosted.org/packages/5a/55/0a19caa70fb4852ea3f271316add8f536f939c15c248cb2008bae39c98b0/tld_task-1.0.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c523b66544a90e55bd7f22c3fb85ce22", "sha256": "9bcba7c4bd1febb075190044ee246f26e8df01c42d5ff077de46da35f3b44ab6" }, "downloads": -1, "filename": "tld-task-1.0.0.tar.gz", "has_sig": false, "md5_digest": "c523b66544a90e55bd7f22c3fb85ce22", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17883, "upload_time": "2018-07-07T11:20:15", "url": "https://files.pythonhosted.org/packages/33/81/65ccd7fce7946707f3d4b528f0621be27a9716e574bab0dbf7c84a022f92/tld-task-1.0.0.tar.gz" } ] }