Git Product home page Git Product logo

topydo's Introduction

topydo - a powerful todo.txt application

Build Status codecov.io Codacy Badge PyPI version

topydo is a powerful todo list application using the todo.txt format.

It has three user interfaces:

  • Command Line Interface (CLI) - originally inspired by the todo.txt CLI by Gina Trapani.
  • Prompt mode - a convenience mode for the CLI. Launch with topydo prompt.
  • Column mode - a text based user interface (TUI) with customizable columns and vim-like bindings. Launch with topydo columns.

png

Features

Feature-wise, the todo.txt format is quite limited, but can be extended using tags. topydo natively supports some of these tags to implement:

  • Due and start dates;
  • Maintain dependencies between todo items;
  • recurring todo items;

topydo also offers:

  • Fine-grained control on sorting and grouping items;
  • Customizable output;
  • Some conveniences when adding new items (e.g. adding creation date and use relative dates);
  • Additional output formats to iCalendar, JSON and Graphviz Dot;
  • Aliases for frequently used commands.
  • Text based todo identifiers, which are more stable and convenient than line-based todo identifiers.

Yet, topydo is fully todo.txt compliant. The text file can be processed by other todo.txt tools (but they may not interpret the tags properly).

The documentation on the TiddlyWiki provides more information about the features and how to use topydo.

Installation

Simply install with:

pip3 install topydo

If you wish to use column mode: install additional dependencies with:

pip3 install topydo[columns]

Similarly, for prompt mode you can install additional dependencies with:

pip3 install topydo[prompt]

Demo

CLI mode:

gif

topydo's People

Contributors

aetherknight avatar biobox avatar bram85 avatar colinsullivan avatar davesteele avatar kidpixo avatar minchinweb avatar mruwek avatar navytux avatar niconfus avatar rameshg87 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

topydo's Issues

Crash when using `do` with `-a` option

Running topydo -a do <something> yields the following result (on topydo installed from pip):

Traceback (most recent call last):
  File "/usr/local/bin/topydo", line 11, in <module>
    sys.exit(main())
  File "/usr/local/lib/python3.5/site-packages/topydo/cli/UILoader.py", line 49, in main
    CLIApplication().run()
  File "/usr/local/lib/python3.5/site-packages/topydo/cli/CLI.py", line 61, in run
    self._post_execute()
  File "/usr/local/lib/python3.5/site-packages/topydo/cli/CLIApplicationBase.py", line 233, in _post_execute
    self.backup.save(self.todolist)
  File "/usr/local/lib/python3.5/site-packages/topydo/lib/ChangeSet.py", line 102, in save
    list_archive = (self.archive.print_todos()+'\n').splitlines(True)
AttributeError: 'NoneType' object has no attribute 'print_todos'

I get the same error if I set archive_filename to be empty in the configuration file.

^C ends prompt mode

In other "prompt-y" environments (like the Python REPL or the shell), ^C just discards the current command, and ^D ends. That would feel more natural to me.

Filter on complete date?

First thank you for the project! I only started using it not too long ago and it has become something I can't live without now.

Just wondering if there's a ls command that allows me to filter on complete date? Similar to the due:tomorrow filter, is there a way to acommopish something similar to topydo ls complete:yesterday?

Support for topydo.ini

On Windows systems, files with the .ini extension are by default editable with notepad.exe. At present is is possible to specify the file with a -c flag, but it would be pleasant to have it automatically recognized as one of the available configuration file paths.

Suggested implementation:
On reading configurations, look for topydo.ini in current working directory after looking for topydo.conf. (So it would be the last in row to read)

No error checking on prompt commands

The prompt accepts erroneous commands without complaining:

topydo> ad yoink
topydo> 

If I wasn't paying attention, I may believe that I just added "yoink" to my to do list, and then be surprised if that didn't actually happen. I think I would like it better if I got yelled at.

ls -N should give indication of truncated output

I copy-pasted an ls alias from, um, somewhere, and that contained a -N. I was quite surprised to figure out that the output I was seeing was truncated. I figure that's a usability issue that's easy to avoid--just output a ... somewhere (e.g. end of the last line of outptu?) if the output is actually truncated.

Disable auto-archive

Disable auto-archive and manually archive

The default for topydo is, to automatically archive completed tasks to the archive file.

Rationale:
To be able to undo a completion (for example), it should be possible to configure the application to not have this behaviour.

The historical todotxt shell scripts supported this by a -a flag and most GUI
applications support this feature, too.

This could be implemented in topydo like this:

  • Add command line options -a (short) and --no-archive (long) to prevent
    auto archiving
  • Add item archive to section [topydo] in configuration file
    • Supports values 0 and 1, default = 1
  • On execution of do command:
    • If auto-archive is off then do not move completed item to archive file
  • Add archive command to explicitly move completed items to archive file

(Bonus feature could be a command to 'undo' an item)

Wheel installation issues (dependencies)

I believe this issue is caused by bbdfb2a.

When installing from wheels, no code is executed (at install time). Thus, code that conditionally determines which dependencies are required will be run when the wheel is generated, rather than when the wheel is installed.

By way of example, I am installing topydo 0.7.0 on my local machine (Win 10, Python 3.5) from PyPI. I would expect that six, arrow, and colorama would be installed. Instead, I got ushlex, six, python-dateutil, arrow, and backports.shutil-get-terminal-size.

(env2) C:\temp>pip install topydo
Collecting topydo
  Downloading topydo-0.7-py2.py3-none-any.whl (89kB)
    100% |################################| 90kB 649kB/s
Collecting ushlex (from topydo)
  Downloading ushlex-0.99.tar.gz
Collecting six>=1.9.0 (from topydo)
  Using cached six-1.10.0-py2.py3-none-any.whl
Collecting arrow>=0.7.0 (from topydo)
Collecting backports.shutil-get-terminal-size>=1.0.0 (from topydo)
  Downloading backports.shutil_get_terminal_size-1.0.0-py2.py3-none-any.whl
Collecting python-dateutil (from arrow>=0.7.0->topydo)
  Using cached python_dateutil-2.4.2-py2.py3-none-any.whl
Installing collected packages: ushlex, six, python-dateutil, arrow, backports.shutil-get-terminal-size, topydo
  Running setup.py install for ushlex
Successfully installed arrow-0.7.0 backports.shutil-get-terminal-size-1.0.0 python-dateutil-2.4.2 six-1.10.0 topydo-0.7 ushlex-0.99

(env2) C:\temp>python --version
Python 3.5.0

Possible solutions include not providing wheels, or at least not universal wheels, or using extra_requires (available since wheel 0.24, see here and here)

Using "keep_sorted" gives "RuntimeError: maximum recursion depth exceeded"

Turning off the setting for sorting the file restored functionality, so
I believe the problem is the 'keep_sorted' setting.

Inputted command:

[ vixsomnis: Code/notestxt ]
    > % topydo add "(B) Figure out efficient note abstraction and parsing"
        2> stderr.log > stdout.log

stdout:

|  2| (B) 2015-06-06 Figure out efficient note abstraction and parsing

stderr:

Traceback (most recent call last):
File "/usr/bin/topydo", line 9, in <module>
    load_entry_point('topydo==0.4', 'console_scripts', 'topydo')()
File "/usr/lib/python2.7/site-packages/topydo/cli/UILoader.py", line 42, in main
    CLIApplication().run()
File "/usr/lib/python2.7/site-packages/topydo/cli/CLI.py", line 56, in run
    if self._execute(subcommand, args) == False:
File "/usr/lib/python2.7/site-packages/topydo/cli/CLIApplicationBase.py", line 197, in _execute
    self._post_execute()
File "/usr/lib/python2.7/site-packages/topydo/cli/CLIApplicationBase.py", line 207, in _post_execute
    self._execute(SortCommand, [])
File "/usr/lib/python2.7/site-packages/topydo/cli/CLIApplicationBase.py", line 197, in _execute
    self._post_execute()
File "/usr/lib/python2.7/site-packages/topydo/cli/CLIApplicationBase.py", line 207, in _post_execute

{{ ........... ~1995 times }}

File "/usr/lib/python2.7/site-packages/topydo/cli/CLIApplicationBase.py", line 197, in _execute
    self._post_execute()
File "/usr/lib/python2.7/site-packages/topydo/cli/CLIApplicationBase.py", line 204, in _post_execute
    self._archive()
File "/usr/lib/python2.7/site-packages/topydo/cli/CLIApplicationBase.py", line 163, in _archive
    archive = TodoListBase.TodoListBase(archive_file.read())
File "/usr/lib/python2.7/site-packages/topydo/lib/TodoFile.py", line 36, in read
    todofile = codecs.open(self.path, 'r', encoding="utf-8")
File "/usr/lib/python2.7/codecs.py", line 888, in open
    srw = StreamReaderWriter(file, info.streamreader, info.streamwriter, errors)
File "/usr/lib/python2.7/codecs.py", line 668, in __init__
    self.reader = Reader(stream, errors)
RuntimeError: maximum recursion depth exceeded while calling a Python object

topydo.conf diff with default

0a1,2
> ; See https://github.com/bram85/topydo/wiki/Configuration for more info
>
3,4c5,6
< filename                    = TODO
< archive_filename            = DONE

---
> ; filename                  = todo.txt
> ; archive_filename          = done.txt
20c22
< keep_sorted                 = 1

---
> keep_sorted                 = 0

Add strict option for do command to configuration

Enhancement:
Add a strict option for the do command to the Configuration.
Also make sure that the command line can overwrite any strict setting from the configuration file.

Rationale:
I prefer my recurring items being based on the actual due date, not the completion date.

Suggested implementation:

  • Add section [do] to config
  • Add item strict to section with possible values of 0 or 1 and default 0
  • Add support for --loose flag to do command. For backwards compatibility this is the default (if neither loose or strict is specified on the command line). Flags are mutually exclusive
  • When executing do command:
    • If configuration is set, apply flag (or default if none specified)
    • If --strict flag is provided from the command line, overwrite configuration of strict = 0
    • If --loose flag is provided from the command line, overwrite configuration of strict = 1

"Separate upcoming" operation for recurring items

Sometimes I have a recurring event for which I would like to edit the next upcoming version but leave the remainder of the series the same. In those instances, it would be useful if I could ask for the upcoming version to be made freestanding (non-recurring) and the recurirng event dates be bumped forward.

partof: directives don't always work with the add subcommand

The dependency helper tags (partof:, before, etc.) don't work in the rare condition that the 467'th item is added to a todo list, while using text-based identifiers. With 466 items, the identifiers are 3 characters long, but by adding the 467th item, topydo switches to 4 character ID's. But the helper tag was originally typed by the user with the 3-char version, therefore the dependency is not recorded.

Apostrophes in prompt mode cause crashes

topydo> add read matt's draft
Traceback (most recent call last):
  File "/home/andreas/pool/bin/topydo", line 11, in <module>
    sys.exit(main())
  File "/home/andreas/pool/local/lib/python2.7/site-packages/topydo/cli/UILoader.py", line 45, in main
    PromptApplication().run()
  File "/home/andreas/pool/local/lib/python2.7/site-packages/topydo/cli/Prompt.py", line 103, in run
    user_input = shlex.split(user_input)
  File "/home/andreas/pool/local/lib/python2.7/site-packages/ushlex.py", line 298, in split
    else:       return list(lex)
  File "/home/andreas/pool/local/lib/python2.7/site-packages/ushlex.py", line 283, in next
    token = self.get_token()
  File "/home/andreas/pool/local/lib/python2.7/site-packages/ushlex.py", line 99, in get_token
    raw = self.read_token()
  File "/home/andreas/pool/local/lib/python2.7/site-packages/ushlex.py", line 185, in read_token
    raise ValueError, "No closing quotation"
ValueError: No closing quotation

Add bash and zsh completions

Filling commands, tags or projects with tab would be great.

P.S.: I'm a todotxt user for a long time but it was sad to see that Gina's tool wasn't getting any attention. When I heard about this project I immediately installed it from the AUR. Keep up the good work! =D

Error Check color configuration values

Color settings are assumed to either a number between 0 and 255 (corresponding to the xterm 256 colors) or a named ANSI color (black, red, green, yellow, blue, magenta, cyan, gray, darkgray, light-red, light-green, light-yellow, light-blue, light-magenta, light-cyan, white).

Right now, the default configuration value for these colors is only used is the entry is left blank in the configuration file. In addition, topydo should test for invalid/bad values, and use the default configuration in this case.

Possibly topydo should warn if the colors selected is not expected to work on the platform topydo is running on (e.g. numbered colors beyond 15 won't typically work on Windows shells).

Potential test code:

test/data/ConfigTest4.conf

[colorscheme]
project_color               = junk
context_color               = junk
metadata_color              = junk
link_color                  = junk

test/test_config.py

    def test_config14(self):
        """ Bad priority color value. """
        self.assertEqual(config("test/data/ConfigTest4.conf").priority_colors(),
                         config().defaults["colorscheme"]["priority_colors"])

    def test_config15(self):
        """ Bad project color value. """
        self.assertEqual(config("test/data/ConfigTest4.conf").project_color(),
                         config().defaults["colorscheme"]["project_color"])

    def test_config16(self):
        """ Bad context color value. """
        self.assertEqual(config("test/data/ConfigTest4.conf").context_color(),
                         config().defaults["colorscheme"]["context_color"])

    def test_config17(self):
        """ Bad metadata color value. """
        self.assertEqual(config("test/data/ConfigTest4.conf").metadata_color(),
                         config().defaults["colorscheme"]["metadata_color"])

    def test_config18(self):
        """ Bad link color value. """
        self.assertEqual(config("test/data/ConfigTest4.conf").link_color(),
                         config().defaults["colorscheme"]["link_color"])

Path relative to ~ not accepted

If you provide a path to a filename starting with ~ (e.g. ~/todo.txt) topydo will not do anything. Only a full path will work (/User/<user>/todo.txt)

(In stable version 0.3.2 using Mac OS X 10.9.5)

I will submit a pull request.

Edit command does not work from columns

Hello!

From columns view, when I press e to enter edit mode, edit the task, then save and quit the text editor, the task shows up at the bottom of the todo.txt unedited.

Also, I'm not sure why the edit feature creates a temporary file, couldn't the text editor just open up the todo.txt file directly (at the appropriate line number)?

Add -s flag to edit command to sort

Like the -s flag for ls, the edit subcommand should also support this flag and present the todos in a sorted fashion.

This is only applicable when editing a subset of the todo file. So when edit is invoked without arguments, the todo.txt file should be opened in an editor as-is.

[wishlist] Segment the output of ls

It'd be great if the output of ls would allow "segmentation" by one or more criteria.

What I'm looking for is something like:

prio:B
-------

due:2016-02-12, prio:A
-----------------------------
....
...

due:2016-02-10, prio:A
-----------------------------
....
...

Just being able to segment by one thing would also be great, but I figure segmenting by multiple things would be a similar amount of effort if taken into account from the start. Simpletask does this, and I find it super helpful.

'became active' items are listed with their old ID

If you have items that depend on another, by default they are not shown, but when the dependency is completed, topydo will display a message that the item has now become available. However, the id shown (if you are using line numbers) is likely to change as the completed items are archived.

Since that was a mess to write, here's an example:

# add the first item
> topydo add first item +test
|484| 2016-08-22 first item +test

# add the second item
> topydo add second item +test
|485| 2016-08-22 second item +test

# make the second item depend on the first
> topydo dep add 484 before 485

# list items; only the first shows
> topydo test
[...]
484   first item +test                                                  (today)

# do the first item
> topydo do 484
Completed: x 2016-08-22 2016-08-22 first item +test p:1
The following todo item(s) became active:
|485| 2016-08-22 second item +test id:1

# above, the second item was shown as being 485. However,
# by the time we can do anything, the item has actually moved
# to being at 484
> topydo test
[...]
484   second item +test                                                 (today)

I would expect that the 'item has become active' text should display the item number where it can be accessed for the next command, so after achieving has been accounted for.

Expression with negation does not work with multicommands

Negation is used with ls to filter out certain todo items. This does not work with other commands that can operate on multiple todo items at the same time, e.g. edit:

topydo edit -x -e -due:

Result:

option -u not recognized
Invalid todo number given: -e.
Invalid todo number given: -due:.

Error Check prioritycolors Configuration Values

#69 will likely need to be implemented before or as part of this.

prioritycolors is a configuration setting that is given in the form [priority]:[color value] with multiple values separated by commas. For example, the default value is:

[colorscheme]
priority_colors = A:cyan,B:yellow,C:blue

Internally, this is then converted and stored as a dict. (i.e. {'A': 'cyan', 'B': 'yellow','C': 'blue'}

However, no error checking is done on this configuration value. As well, the default value is only used if no value is given.

topydo should test that the form of the configuration value specified is valid, confirm that the priorities and color values are valid, and use the default value if any of these are bad.

Proposed test code:

test/data/ConfigTest4.conf

[colorscheme]
priority_colors               = junk

test/test_config.py

    def test_config19(self):
        """ No priority color value. """
        self.assertEqual(str_to_dict(config("test/data/ConfigTest4.conf").priority_colors()),
                         config().defaults["colorscheme"]["priority_colors"])

Colors in scripts

Hi, there is no color support when topydo is run with e.g. watch command, even if watch is run with --color parameter. The same goes to something like topydo > /tmp/todo, the output is just plain text. I know it is mostly desirable behavior, so maybe --forcecolor parameter will be a nice feature.

ls command: ability to group items

Introduce a -g flag in the ls subcommand to group todo items, similar to -s to specify the sorting order.

Example:

# group by due date
topydo ls -g due
Today
  |  1| Foo due:2015-05-16
Tomorrow
  |  2| Bar due:2015-05-17
  |  3| Baz due:2015-05-17

# group by projects
topydo ls -g project

It should support all fields that you can pass to -s, with the addition of project and context. Also, you can only pass one field, whereas -s accepts multiple.

Still unsure what the output should look like exactly.

Regressions in EditCommand introduced with 5562ed7

There are 2 issues introduced with 5562ed7:

  1. topydo edit -d is no longer working
  2. Output of topydo edit -e expression is doubled. At first it prints output of topydo ls expression and later real output of EditCommand.

First issue happens because with current way of dealing with super() inside execute() we are processing flags with ListCommand._process_flags() and -d option doesn't exist there.

Second one is due to the similar cause: EditCommand.execute() runs ListCommand.execute() so we get doubled output.

I have working fix for both problems in my local branch, but I want to write relevant tests before pushing it here.

Customizing colors in columns UI

Hello!

Thank you for all of your work!

Is it possible to configure the colors used in the columns UI?

Specifically the highlight color and text changing to black during highlight?

screen shot 2016-09-29 at 9 21 02 am

screen shot 2016-09-29 at 9 22 47 am

Default coloring for list does not work on Windows 7

When I run a list action, the color coding does not work. Instead of colors, I can see the equivalent characters, for example

←[0m| 30| 2015-05-19 Buy milk ←[31m+Groceries←[0m←[0m←[0m←[31m@errands←[0m ←[31m

Intelligently Guess the length of prompt

This is in relation to the top subcommand. top is designed to print out one 'screen-ful' of to-do items. It does this by assuming the prompt takes up 2 lines, and print [number of terminal rows - 2] todo items. However, this falls apart if the prompt is more than 2 lines.

On Windows the Prompt environmental variable can be read for $_ which indicates a newline. So I propose that top print one less line for every $_. Thoughts?

Is there something equivalent for Linux or MacOS prompts?

Recurring tasks with start dates only

Hey there,

Well, first thanks for writing this CLI, greatly appreciated.

I have a feature request: could recurrence be applied to tasks which only have a start date?

For instance, I have a task with a start date in the future. I don't want it to appear or to bother me, hence the start date. When the start date passes on, the task will appear when I list my tasks.
And when I complete the task, I'd like a new one to be created with a start date only (with new_start = completion_date + recurrence_offset).
I hope this makes sense.

Thank you.

Edit: I gave the code a quick look, and I actually think the behaviour I described is built-in. I can't see why it's not behaving this way.

due date ranges

Hi.

Lovely CLI script.

Is there a way to pull out tasks with due dates in a range ? For exampleL

topydo ls due:-2w
to list any tasks with due dates in the next 2 weeks ?

Pete

Using `tag -a` multiple times

If you try and add values for a tag after the second one, topydo starts doing weird things. It brings us a prompt asking you which one you want to delete. If you pick a number, it adds the new value. If you pick all, it seems to get stuck in a loop.

To reproduce:

> topydo add "my item"
|  1| my item
> topydo tag -a k a
|  1| my item k:a
> topydo tag -a k b
|  1| my item k:a k:b
> topydo tag -a k c
 1. a
 2. b
Which value to remove? Enter number or "all": 1
|  1| my item k:a k:b k:c
> topydo tag -a k d
 1. a
 2. b
 3. c
Which value to remove? Enter number or "all": all
[nothing happens till we break out of the program]

Default Editor on Windows

I've been trying to decide what should be done for the editor on Windows. Using the Environment variables seems an odd way to go on a Windows machine, and the default of vi isn't found by default on Windows systems. There seem to be two default text editors on Windows: notepad, which doesn't recognize the line endings used by topydo, and Powershell ISE, which would work, but is only available on newer versions (Windows 10 and up?) and is more designed for building powershell scripts than file editing.

What I would be inclined to do is add another option (editor) to topydo configuration file, and refer here before looking to the environmental variable or trying vi. Thoughts?

failure on master (commit d9c9fdc)

on a task '(A) 2015-01-13 foobar @home rec:1 year' (number 6):

$ topydo do 6
Traceback (most recent call last):
  File "/home/simon/bin/topydo", line 9, in <module>
    load_entry_point('topydo==0.1.1', 'console_scripts', 'topydo')()
  File "/home/simon/.local/lib/python2.7/site-packages/topydo/cli/Main.py", line 286, in main
    CLIApplication().run()
  File "/home/simon/.local/lib/python2.7/site-packages/topydo/cli/Main.py", line 273, in run
    if self._execute(subcommand, args) == False:
  File "/home/simon/.local/lib/python2.7/site-packages/topydo/cli/Main.py", line 213, in _execute
    return False if command.execute() == False else True
  File "/home/simon/.local/lib/python2.7/site-packages/topydo/lib/DCommand.py", line 145, in execute
    self.execute_specific()
  File "/home/simon/.local/lib/python2.7/site-packages/topydo/lib/DoCommand.py", line 78, in execute_specific
    self._handle_recurrence()
  File "/home/simon/.local/lib/python2.7/site-packages/topydo/lib/DoCommand.py", line 56, in _handle_recurrence
    self.completion_date)
  File "/home/simon/.local/lib/python2.7/site-packages/topydo/lib/Recurrence.py", line 58, in advance_recurring_todo
    return _advance_recurring_todo_helper(p_todo, p_offset)
  File "/home/simon/.local/lib/python2.7/site-packages/topydo/lib/Recurrence.py", line 47, in _advance_recurring_todo_helper
    todo.set_tag(config().tag_due(), new_due.isoformat())
AttributeError: 'NoneType' object has no attribute 'isoformat'

Code refactoring for commands operating on multiple todo IDs

As it was said under #8:

Overall, the function has become a bit long and deeply nested (...)

I thought that it would be nice to have one common class for all commands dealing with multiple todo IDs (do, del, pri, postpone at the moment). I've implemented it here: https://github.com/mruwek/topydo/commits/multi-todos-cmds-refactoring (sorry about long branch name :P).

At this moment MultiCommand class has only two methods, but I believe in future we can put there even more reusable code (like some magic function for selecting all todos with given project or context). I didn't open new pull request yet, because I'm not sure if code is mature enough (naming convention etc.) and if You really perceive it as a step in the right direction. I'm open to any critique,

In near future edit and depri could also benefit from this,

Option to add a completed item

This might sound ridiculous, but I would find it useful to be able to add an item and mark it as complete at the same time. The use-case is to allow for an item that comes up and is immediately handled, but can then be recorded for tracking purposes.

It might be handled via a new flag to the add command, say -d:

topydo add -d "Something I just did, confirmation number 12345678"

Error when HOME environment variable does not exist

The environment on my employer supplied laptop does not set the HOME variable. When I run topydo, an error is raised:

Traceback (most recent call last):
  File "C:\Python27\lib\runpy.py", line 162, in _run_module_as_main
    "__main__", fname, loader, pkg_name)
  File "C:\Python27\lib\runpy.py", line 72, in _run_code
    exec code in run_globals
  File "C:\Python27\Scripts\topydo.exe\__main__.py", line 5, in 
  File "C:\Python27\lib\site-packages\topydo\cli\Main.py", line 89, in 
    config()
  File "C:\Python27\lib\site-packages\topydo\lib\Config.py", line 190, in config
    config.instance = _Config(p_path)
  File "C:\Python27\lib\site-packages\topydo\lib\Config.py", line 73, in __init__
    self._home_config_path(),
  File "C:\Python27\lib\site-packages\topydo\lib\Config.py", line 93, in _home_config_path
    return os.path.join(os.getenv('HOME'), '.topydo')
  File "C:\Python27\lib\ntpath.py", line 64, in join
    result_drive, result_path = splitdrive(path)
  File "C:\Python27\lib\ntpath.py", line 114, in splitdrive
    if len(p) > 1:
TypeError: object of type 'NoneType' has no len()

As a temporary workaround I have set

SET HOME=%HOMESHARE%

and then topydo runs fine.

`topydo help` should print all commands

I didn't find a simple way to list all commands, and it would come very handy for day-to-day use.

Currently, topydo help prints the help message for the default command (ls, I think). I think it should print a list of all commands, and require topydo help ls to get the current behavior isn't too hard.

column view alternative configuration file

I find the columns interface very very useful and intuitive (great piece of work).

I'd like to have an alternative .topydo_columns config file which I could trigger with a command line flag in the same way as the main topydo config file (-x ~/.topydo_columns_dash2)

Had a quick look through the code and couldn't see anything obvious.

Is there code in there already to do this ?

Direct todo.txt editing with $EDITOR doesn't work in prompt-mode

topydo prompt
topydo> ls
topydo> edit

Add, remove or modify some todos in $EDITOR.

topydo> ls

Result: nothing has changed.

I tried adding self.todolist.set_dirty() before calling the editor, but it didn't work. CLI-mode (topydo edit) is not affected by this bug. I believe we need to do some sort of todo.txt reload in this case with prompt-mode.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.