Commit Graph

407 Commits

Author SHA1 Message Date
Ingo Karkat
25e6d7ae24 FIX: Adapt deduplicate sed command for OS X.
The sed command of BSD / OS X doesn't like { command } blocks in a single expression. So move the (dynamic) deduplicate sed command(s) to the end, and use a label to access them. This also makes the entire sed script somewhat easier to understand.
archive/deduplicate-and-report
2012-01-23 11:05:12 +01:00
Ingo Karkat
880d829e8e Create dedicated test file for report tests. 2012-01-21 14:35:04 +01:00
Ingo Karkat
7e525ee743 ENH: Only add new data to report.
When the last reported values are identical to the current values, do not append the same information (just with a new timestamp) to the report. Instead, just print the last report line.

With this, the report action can be scheduled periodically (e.g. via cron) without artificially inflating the report file.
2012-01-21 14:30:21 +01:00
Ingo Karkat
d46adadb1d Align report order with other actions.
Like "add" or "do", first the object, then (in verbose mode) the status message is printed.
2012-01-21 14:29:11 +01:00
Ingo Karkat
d0205b48a6 Use ISO 8601 timestamp format.
IMO 2012-01-14T14:49 looks better than the messy -*-*-*- of 2012-01-14-14:49, and is more aligned with standards.
2012-01-21 14:27:19 +01:00
Ingo Karkat
7a4d11812d Simplify writing of report line. 2012-01-21 14:27:19 +01:00
Ingo Karkat
ba66f66e86 Only print the added report line, not entire report.
I think this makes much more sense, especially once the report gets very long. (One can always use "cat" to view the entire report.)
2012-01-21 14:27:18 +01:00
Ingo Karkat
88ac3d87e6 Remove inactive broken report header.
This was meant to write a report header on the initial report run, but as it mistakenly used TODO_FILE instead of REPORT_FILE, it was inactive, and also missing in the tests. Let's just remove it; the format is simple, anyway.
2012-01-21 14:16:17 +01:00
Ingo Karkat
1a2af45b4d Pull archive() in-line and delegate via recursive call, also for report.
The report action should delegate to archive; it previously (half) did this via duplicated code (and forgot to defragment empty lines, so the tally could be off, and kept silent about the archiving).

The do action directly invoked archive(); if the user had extended / modified the archive action via an eponymous custom action, it would not run. Therefore, always invoke archive through another call of todo.sh, so that a possible custom action is considered.
2012-01-21 14:12:25 +01:00
Ingo Karkat
6424c4c1a0 Support "preserve line numbers" in deduplicate. 2012-01-21 14:12:25 +01:00
Ingo Karkat
fe5cdcb13a Fix deduplicate for non-printable (and non-ASCII) characters. 2012-01-21 14:12:25 +01:00
Ingo Karkat
bf2ca0ed6a Rework fixed archive deduplication into new deduplicate action.
As per discussion on the mailing list (http://tech.groups.yahoo.com/group/todotxt/message/3775), the automatic deduplication during archiving is unexpected and difficult to enforce in other implementations. Rather, make this a separate (optional) action.
2012-01-21 14:12:25 +01:00
Paul Roub
62d78a0034 explained the sed duplicate-removal pattern 2012-01-21 14:12:25 +01:00
Paul Roub
e33603939b Fix typo in duplicate removal on archive, per discussion at http://tech.groups.yahoo.com/group/todotxt/message/3775 2012-01-21 14:12:24 +01:00
Jean Jordaan
c99543506a Various helptext fixes
* 'Quotes optional.' doesn't make sense for 'addm', because without quotes, 'addm' is 'add'.
* There are no projects that don't start with a +.
* Don't tell people to type uppercase when the software takes care of it.
* Mention actions, mention filtering *out* terms.
* Fix link to wiki in the README
Closes #60
2012-01-20 11:46:30 -08:00
Ingo Karkat
b4aaba8387 Strip trailing whitespace when completing tasks. 2012-01-20 11:23:56 -08:00
Ingo Karkat
493e975199 Remove task date(s) when completing prioritized and done tasks.
Replace the primitive substitutions inside the completion function with a call to sed (instead of calling head), and supply more powerful substitutions there.
2012-01-20 11:23:56 -08:00
Ingo Karkat
fda31ea260 Avoid external TR when replacing , with space.
No need for an external tool, Bash can do a global literal substitution itself.
2012-01-20 11:17:37 -08:00
Ingo Karkat
8744167827 Add HIDE_CUSTOM_SUBSTITUTION for customization and add-ons.
Add-ons or users may want to hide parts of the task text from the output.
Though this can already be solved through TODOTXT_FINAL_FILTER, augmenting the configured value is not trivial, and it introduces another SED command into the already long _list() pipeline. Putting an additional HIDE_CUSTOM_SUBSTITUTION into the existing pipeline has hardly any performance implications, and makes the realization of this use case trivial.
2012-01-20 11:10:30 -08:00
Ingo Karkat
73e28b7225 BUG: SED error when HIDE_..._SUBSTITUTION contains whitespace.
This error only occurs when add-ons override either HIDE_PROJECTS_SUBSTITUTION or HIDE_CONTEXTS_SUBSTITUTION with a pattern that contains whitespace, not with the values used within todo.sh. But correcting the sloppy quoting doesn't hurt, neither.
2012-01-20 11:10:30 -08:00
Ingo Karkat
43bd1b645b Add hint for OR'ing TERMs to help text for ls/list.
The regexp syntax and quoting rules aren't known to many who are not well versed in the Bash shell, and difficult to get right even for people in the know. This question came up just recently on the mailing list, too.
2012-01-20 11:09:10 -08:00
Ingo Karkat
4db4494f03 Cosmetics: Correct double-spacing in help text. 2012-01-20 11:09:10 -08:00
Ingo Karkat
799840b664 Cosmetics: Consistently use "TERM(s)" in help text.
Two places only used "TERM" although multiple are supported. This can be misleading: do one or all have to match?
2012-01-20 11:09:10 -08:00
Ingo Karkat
54f15a7854 ENH: listall doesn't simply use concatenated task lists.
The simplistic "listall" action implementation just uses _list() on the concatenation of active and done task lists. This has the following shortcomings:

- Task numbers shown for archived tasks from done.txt are invalid.
- As the number of done tasks likely greatly outnumbers the number of active tasks, the task number padding is often larger than expected (e.g. 0005 instead of 05).
- Verbose output lists all tasks as originating from TODO, whereas it should differentiate between TODO: and DONE: sources.

The main challenge is to keep processing all tasks through a single pass of _list(), so that there is a single, unified sorting applied to all tasks. A custom AWK script sets all (originally invalid) task numbers from done.txt to "0", meaning "archived task".
The verbose message from _list() is replaced with a custom message that shows the tasks from todo.txt, done.txt, and totals.

Oh, and added tests for the previously untested "listall" action.
2012-01-20 11:07:28 -08:00
Ingo Karkat
17658c852d Reformatting: Lay out _list() file numbering in multi-line.
...like the following complex formatting and filtering steps.
2011-12-23 22:51:13 +01:00
Gina Trapani
f8a6e5f8d6 Merge pull request #59 from inkarkat/bug-pri-no-existence-check
BUG: pri doesn't issue an error when the task does not exist.
2011-12-18 21:50:18 -08:00
Ingo Karkat
388ae745af Refactoring: Extract getPrefix() for more consistent move error.
I think that the error on the "move dest src" action should be given like "SRC: No task 42" instead of "TODO: No task 42 in /path/to/src.txt", to be consistent with the addto and listfile actions. Extracted and exposed getPrefix(), again to remove a bit of duplication, and because this can be useful in custom add-ons, too.
archive/bug-pri-no-existence-check
2011-12-18 21:44:47 +01:00
Ingo Karkat
cb908bd454 Refactoring: Extract getTodo() and getNewtodo() functions.
The retrieval of a task text for $item and associated error handling so far was scattered around the individual actions. This is now consolidated in two new utility functions, which directly set $todo or $newtodo, respectively. (Inconsistent variable names like $NEWTODO have been adapted.) This ensures that all actions perform the same error checking, reduces a bit of duplication, and allows custom add-ons to benefit from these exported functions. Ah, and the error messages for the "move" action is now more in line with the other errors; unfortunately, this isn't yet covered by a test.

Note that the check whether $item is numeric must not use the +([0-9]) extglob any more, as such functions cannot be exported; a new Bash doesn't have the "shopt -s extglob" and complains with a syntax error. Fortunately, it is possible to perform the same check via standard Bash mechanisms.
2011-12-17 23:26:25 +01:00
Ingo Karkat
55679d136f BUG: pri doesn't issue error when task does not exist. 2011-12-17 21:29:18 +01:00
Gina Trapani
c0847b0b25 Merge pull request #58 from inkarkat/bug-quoting-negative-term
FIX: Correct quoting for negative -TERM filtering.
2011-12-07 09:31:28 -08:00
Gina Trapani
76fb1cb3ee Merge pull request #57 from inkarkat/filename-completion
Add file completion for addto, listfile, and move.
2011-12-07 09:21:17 -08:00
Gina Trapani
ac090fa30b Merge pull request #56 from inkarkat/todo_completion
Incorporate Bash completion from the Wiki page into the distribution.
2011-12-07 09:20:07 -08:00
Ingo Karkat
ea0e7c7b25 FIX: Correct quoting for negative -TERM filtering.
This oversight was recently introduced with the new filtercommand() in a0f39480bf.
I've enhanced the test to cover -TERM filtering, too.
archive/bug-quoting-negative-term
2011-12-03 16:55:13 +01:00
Ingo Karkat
cd7d2f2fda ENH: Add file completion for move. archive/filename-completion 2011-11-20 17:07:59 +01:00
Ingo Karkat
395465b5f2 ENH: Add file completion for addto and listfile.
This enhancement to todo_completion requires a small enhancement to the listfile action: When no SRC is specified, the list of text files in the todo.txt directory is printed. This is probably also useful on its own, and better than the original behavior of printing "TODO: File  does not exist."

Note: I intentionally omitted bullet-proof error handling ($TODO_DIR non-existing or no text files contained), to avoid over-complicating this.
2011-11-20 16:30:31 +01:00
Ingo Karkat
d2e0f6e38d FIX: Support $HOME and $TODOTXT_ACTIONS_DIR containing spaces.
And document a minor discrepancy in action completion to todo.sh.
archive/todo_completion
2011-11-20 15:17:50 +01:00
Ingo Karkat
b1d894f65d Add recently added "shorthelp" built-in command. 2011-11-20 15:17:50 +01:00
Ingo Karkat
f5270be463 ENH: Append task text as shell comment when completing task number.
This is useful for the paranoid before a destructive todo.txt operation. Appending the text as a shell comment doesn't affect the todo.txt command itself, but shows that the task number corresponds to the task you had in mind.
2011-11-20 15:17:45 +01:00
Ingo Karkat
8cba7533b9 Avoid leaking internal variables into the shell + robustness against add-ons.
Use "local" to avoid that the internal completion variables are accessible from the user's shell.
Use "todo.sh command" for the context/project lookups to avoid interference with custom add-ons of the same name, and reset TODOTXT_VERBOSE to avoid adding any message output (currently there is none).
2011-11-20 14:53:18 +01:00
Ingo Karkat
285d5039f2 Add shebang line and check for Bash.
The shebang is ignored when sourcing the script (but still helps many text editors auto-detect the file type), and will cause an error when the script is mistakenly executed.
The Bash check allows to have this called from a generic place (e.g. .profile), and do no harm when under a different shell.
2011-11-20 14:26:52 +01:00
Ingo Karkat
9b67a76833 Do not automatically complete for guessed aliases.
Don't infringe against the principle of least astonishment (they user may have completely unrelated aliases). Rather, if the user sets up his own alias, make him apply the same to todo_completion.
2011-11-20 14:22:48 +01:00
Ingo Karkat
2b0921f4ec Add todo_completion to todo.txt distribution. 2011-11-20 14:20:25 +01:00
Ingo Karkat
202f892e85 Include todo Bash completion from the todo.txt Wiki.
This is f32aba2 of https://github.com/ginatrapani/todo.txt-cli/wiki/Tips-and-Tricks, last edited 30-Oct-2011.
2011-11-20 14:17:22 +01:00
Ingo Karkat
417e86ae7a FIX: Handle special shell characters when filtering TERM.
The double quotes used in the filter_command erroneously expand $VARIABLE, and due to missing quoting in the eval() of filter_command, multiple spaces are condensed into a single space.
Introduce a new function shellquote() to correctly quote each filter TERM.
2011-11-10 14:21:47 -08:00
Ingo Karkat
cb982391de Implement listproj with factored out filtercommand() function.
_list() is way too large and monolithic for many (re-)use cases. As a first step, factor out the building of the filter_command and reuse that for the listproj filtering.
Enhance the listproj test with special cases that show the problems with the previous implementation directly using _list: Option -+, custom final filters, and non-ANSI colors cause it to break.
2011-11-10 14:21:47 -08:00
jmoore
b8244792cc Accept filters for lsprj 2011-11-10 14:21:47 -08:00
Ingo Karkat
a433c5828e shorthelp consistency
- Restore alphabetical order for "addto".
- Keep "depri" shorthand after the long form as all other.
Closes #50

Implement shorthelp listing add-on action one-line usage.
-h and an additional new "shorthelp" action list not just the usage of the built-in actions, but also from add-ons. This assumes that add-ons use the same usage indentation structure as todo.sh. (They should, anyway, for consistency of the full help message.)
Closes #12
2011-11-10 14:16:05 -08:00
Ingo Karkat
7742d3c115 Restructure help text to put built-in and add-on actions together.
I find it annoying that the built-in actions are printed first, and the add-on actions last, although for the user, the distinction is hardly important. Therefore, moving the "options" block first (as it is short and contains the stuff most difficult to memorize), then built-in, then add-on actions.
As environment variables are hardly used in day-to-day operations, only once for customizing the config, they are now omitted by default and only included when -vv is given.
2011-11-10 14:11:31 -08:00
Gina Trapani
7ca2b4c687 Merge pull request #49 from inkarkat/bug-disable-filter-not-propagating
BUG: disable filter not propagating to add-ons
2011-11-10 13:33:46 -08:00
Gina Trapani
239f7234ab Merge pull request #48 from inkarkat/bug-unrestrained-pri-matching
BUG: unrestrained pri "(X)" matching
2011-11-10 13:33:28 -08:00