Compare commits

...

227 Commits

Author SHA1 Message Date
Federico Hernandez
2d99b80672 Release date for 1.9.4 2011-03-04 00:07:56 +01:00
Federico Hernandez
949d71a81b CMake
- a few words on the cmake config variables special to task
2011-03-03 23:35:30 +01:00
Federico Hernandez
df1fc5a6da Release
- bumped version number to 1.9.4
2011-03-03 23:09:48 +01:00
Federico Hernandez
7745733001 Man page
- fixed bug in taskrc.5 that caused 3 variables not to be displayed
  (thanks to Michelle L Crane)
2011-03-01 19:07:43 +01:00
Federico Hernandez
10ef12b008 CMake
- cmake variables for the different installation paths
  (thanks to Pietro Cerutti)
2011-03-01 18:59:40 +01:00
Paul Beckingham
19ef6a672d Unit Tests
- Fixed assumption that "task add ...; sleep 1; task list" will never yield
  results with "2 secs" as a task age.
2011-02-27 12:05:10 -05:00
Federico Hernandez
6c110a641d Bumped version number to 1.9.4.beta1 2011-02-18 00:11:30 +01:00
Paul Beckingham
2ec296088a Documentation
- Minor doc edits.
2011-02-17 12:36:37 -05:00
Federico Hernandez
14cc9c6873 Typo 2011-02-17 00:51:44 +01:00
Federico Hernandez
05c157e449 More deprecated autotools stuff 2011-02-17 00:48:55 +01:00
Federico Hernandez
73fd2cefca Build system
- missing source code files for deprecated autotools
- exclude test cmakefile in packaged source
2011-02-16 23:39:45 +01:00
Federico Hernandez
f2f590e193 Unit test
- disabled unit test that requires faketime
  which is not available on Mac OS X
2011-02-16 23:38:08 +01:00
Federico Hernandez
a840b6505b Unit tests
- bug 605 is postponed
2011-02-14 20:13:15 +01:00
Paul Beckingham
467f0a477e Themes
- Added new dark-gray-256 color theme.
2011-02-14 11:49:17 -05:00
Paul Beckingham
e046b37287 Grammar
- Almost complete grammar, with some 2.x enhancements.
2011-02-14 11:13:24 -05:00
Cory Donnelly
9efe1d45cc Bug #677
- _query incorrectly displayed 'No tasks specified.' message when 'No matches'
message is more appropriate
2011-02-13 21:12:30 -05:00
Cory Donnelly
2ed73c0700 Bug #605
- Added unit test
2011-02-13 18:31:23 -05:00
Cory Donnelly
d845dca3af Feature #608
- Unit test added (will need to be updated when journal text is finalized)
2011-02-13 18:14:15 -05:00
Cory Donnelly
930e695ea4 Bug #628
- Unit test had noncritical spelling mistake (yes, I realize I have problems)
2011-02-13 18:09:05 -05:00
Johannes Schlatow
079bcff893 Unit test
* was using the default data.location
2011-02-13 01:51:51 +01:00
Johannes Schlatow
ea57b560d9 Bug
* fixed bug in merge command where the first match of a uuid in
  pending.data was on the depends attribute
2011-02-13 01:51:34 +01:00
Federico Hernandez
436c152fde Regex
- Removed reference to regex in NEWS file
2011-02-13 00:06:46 +01:00
Paul Beckingham
f93273ef23 Related to bug #649
- You can no longer directly complete or delete parent recurring tasks.
2011-02-12 15:30:05 -05:00
Paul Beckingham
6608cbf287 Code Cleanup
- Removed tabs.
2011-02-12 15:14:00 -05:00
Paul Beckingham
a65fe591b8 Bug #634
- Fixed bug #634, so that 'undo' obeys the 'confirmation' setting (thanks to
  Steve Rader).
2011-02-12 15:08:57 -05:00
Paul Beckingham
afb89f0add Themes
- Added the three new burndown chart colors to all themes, with
  variations.
2011-02-12 14:41:44 -05:00
Paul Beckingham
2ac5c2f897 Bug #628
- Fixed bug #628, where dateformats containing spaces were not properly
  parsed (thanks to Steve Rader).
2011-02-12 14:16:06 -05:00
Paul Beckingham
2e9bc3194b Bug #653
- Fixed bug #653, which caused undo information to be recorded when no changes
  were made by the 'edit' command.
2011-02-12 02:29:22 -05:00
Paul Beckingham
691931adf9 Bug #485
- Fixed bug #485, which caused filters of 'recur' to fail for partial matches
  (thanks to T. Charles Yun).
2011-02-12 01:39:25 -05:00
Paul Beckingham
b2828b9702 Bug #656
- Fixed bug that caused multiple recurring child tasks to be generated
  under certain circumstances.
- Removed text.t.cpp tests that are not in task.
- Added Bryce Harrington to AUTHORS file.
- Corrected tests that were broken by the fix.
2011-02-12 01:00:33 -05:00
Paul Beckingham
776a56fa67 Merge branch '1.9.4' of tasktools.org:task into 1.9.4 2011-02-11 11:13:07 -05:00
Paul Beckingham
bc5cdfecb4 Regex
- Removed references to rc.regex in the man pages.
2011-02-11 11:12:43 -05:00
Cory Donnelly
d80e9aa7c5 Bug #674
- Unit test created based on Peter Lewis's bug report
2011-02-11 09:12:46 -05:00
Paul Beckingham
1e2b551795 AUTHORS
- Added Pete Lewis for finding a big nasty bug.
2011-02-10 08:25:47 -05:00
Paul Beckingham
ea374c05df Bug
- Edit wasn't properly parsing annotation entry dates since a recent
  commit changed the length of the pattern used to find annotations.
2011-02-09 00:17:27 -05:00
Paul Beckingham
3a7e620ce6 Unit Tests
- Inherited improved text.cpp unit tests from taskd.
2011-02-08 23:55:57 -05:00
Paul Beckingham
589c918f79 Documentation
- Clarified the need for quoting substitutions containing spaces (thanks
  to Eric Fluger).
2011-02-08 23:55:07 -05:00
Federico Hernandez
1ea513ad75 AUTHORS file
- Patrick R McDonald submitted a detailed bug report and backtrace
  through Fedora's bugzilla. Worth a mention in the AUTHORS file,
  although the bug is already fixed.
2011-02-05 17:48:10 +01:00
Paul Beckingham
036d77e08f Bug
- Disallowed @ and / from an attribute name or modifier.  This causes
  input like 'user@host:path' to now be parsed as description, and not
  as an unrecognized attribute.
2011-02-04 12:14:52 -05:00
Paul Beckingham
783a326b11 Bug #641
- Fixed bug #641, where certain reports broke when 'dateformat' differed from
  'dateformat.report'.
2011-02-04 11:16:14 -05:00
Paul Beckingham
a650847201 Bug #671
- Fixed bug #671, removing the claim in the 'edit' command claims that
  description text can wrap over multiple lines, because it cannot.
2011-02-04 10:44:40 -05:00
Paul Beckingham
7e1e187d6c Export
- Added the alias 'export.json' that maps to the _query command.
2011-02-04 10:25:43 -05:00
Cory Donnelly
3a623af363 Bug #668
- Inconsequential typo in bug.668.t
2011-01-31 18:37:52 -05:00
Cory Donnelly
6b5253e6a0 Bug #669
- A test for due date < wait date in command.cpp only sometimes added
  an extra context.footnote complaining about the condition and was removed.
2011-01-31 18:31:57 -05:00
Johannes Schlatow
feb19cafdd Unit tests
* Bug #668
2011-01-31 22:09:42 +01:00
Paul Beckingham
c963fd30ba Code Review
- Incorporated (most of the) feedback from John's review of the code.
  Got stuck on replacing 'import commands' with 'import subprocess',
  and all that entails.
2011-01-30 16:16:35 -05:00
Paul Beckingham
eee4d05b77 Feature #41
- Feature #41 (export.xml) is now satisfied by the new export-xml.{pl,py,rb}
  add-ons.
2011-01-29 17:37:56 -05:00
Paul Beckingham
5f8858856b Merge branch '1.9.4' of tasktools.org:task into 1.9.4 2011-01-29 17:20:34 -05:00
Paul Beckingham
8b28b013c4 Export commands deprecated
- Provided examplars of export commands re-implemented using the new
  _query command.
- Implemented export-xml.pl, export-xml.py, export-xml.rb.
- Implemented export-csv.pl.
- Implemented export-yaml.pl.
- Implemented export-ical.pl.
2011-01-29 17:11:06 -05:00
Paul Beckingham
074ae41ee6 Documentation
- Clarified that the 'all' report does not have a filter, and can
  therefore show all tasks, including recurring parent tasks.
2011-01-29 12:01:32 -05:00
Paul Beckingham
06e15b6e25 Regex
- Removed regex support (controlled in main.h by #ifdef FEATURE_REGEX),
  because it has proven buggy.
2011-01-25 23:54:44 -05:00
Paul Beckingham
14f06e98b7 Merge branch '1.9.4' of tasktools.org:task into 1.9.4 2011-01-25 23:18:03 -05:00
Paul Beckingham
18aa5c5b69 JSON
- Tags are now a JSON array:  "tags":["one","two"]
2011-01-25 23:17:28 -05:00
Federico Hernandez
6e872c69dd feature #46
- proper sortable age column
2011-01-25 23:55:03 +01:00
Federico Hernandez
3ba877b078 Added a few example of using H:N:S in dateformats to taskrc.5 2011-01-24 23:47:18 +01:00
Cory Donnelly
4d95dcf1da Bug c001
- Added unit test bug.c001.t to test for an unreported issue in 1.9.4
  commit 2d50d1c that involves the creation of a recurring task not
  incrementing the displayed Task ID.
2011-01-23 17:47:52 -05:00
Cory Donnelly
03d8cf1114 Bug #656
- Unit test bug.656.t added (thanks Bryce Harrington)
2011-01-23 17:34:05 -05:00
Paul Beckingham
2d50d1cbf5 Bug
- The .not modifier was accidentally inverted when rc.regex=on.
2011-01-23 01:31:04 -05:00
Paul Beckingham
ad2614c452 Bug #651
- Fixed bug #651, which broke the edit command when a task description
  contained certain tokens (like 'Due:').
2011-01-23 00:54:54 -05:00
Paul Beckingham
eaf184c833 Bug
- The _query command now generates JSON with the string entities
  properly encoded.
2011-01-23 00:08:47 -05:00
Paul Beckingham
57c1983e07 Code Migration
- Migrated taskd JSON parser into task, to provide encode/decode
  capability to Task::composeJSON.
- Migrated taskd utf8 code, replacing old unused code.
- Added unit tests or JSON.
- Migrated Tree updates from taskd.
2011-01-22 23:33:47 -05:00
Paul Beckingham
2f4e0d9e17 Bug #654
- By misplacing a } I broke the info command for tasks without undo
  history, which subsequently broke 28 unit tests.
2011-01-22 23:20:26 -05:00
Cory Donnelly
43e68f73d3 Documentation
- Made changes to INSTALL reflecting cmake build process
- Added cygwin and Darwin troubleshooting tips
2011-01-22 21:12:24 -05:00
Cory Donnelly
6fd2fb08bb Bug #652
- Removed extra line in edit.cpp introduced by the patch discussed in Bug #618
2011-01-22 19:44:44 -05:00
Cory Donnelly
c5b61a3125 Bugs #628, #634, #635
- Unit tests added for a few issues.
2011-01-22 14:29:58 -05:00
Cory Donnelly
5317703dcc Merge branch '1.9.4' of tasktools.org:task into 1.9.4 2011-01-21 15:16:46 -05:00
Cory Donnelly
f820e7a8be Bug #649
- Unit test bug.649.t added to demonstrate issue with 1.9.4 commit ae4e286
2011-01-21 15:15:32 -05:00
Paul Beckingham
cc0b0b00af Merge branch '1.9.4' of tasktools.org:task into 1.9.4 2011-01-21 12:00:46 -05:00
Paul Beckingham
8ed1cc6006 Bug
- The _query command emitted this:
    [ {}, {}, {} ]
  which is not valid JSON.  It should instead be:
    {}, {}, {}
2011-01-21 11:59:51 -05:00
Paul Beckingham
103bcef6ab Bug
- The edit command included two entries for the tags, parsing then only
  found the first.
2011-01-21 11:59:15 -05:00
Federico Hernandez
0dd969cc24 CMake
- missing cmake message
2011-01-20 22:19:34 +01:00
Paul Beckingham
e301cda990 Bug, Reorg
- Fixed bug in journal annotations that omitted \n characters for
  certain events, creating an unreadable journal entry.
- Relocated the 'Total active time' into the journal table, made
  the text bold, and changed from "Xh XXm" format to Duration::format.
2011-01-20 10:42:37 -05:00
Federico Hernandez
200fbe3334 Fixed broken unit tests that use _version
- _verstion now outputs the short git sha1 id and not longer the
  task version when building from the git repository.
2011-01-18 02:37:06 +01:00
Federico Hernandez
0cac03ad4a Feature #638
- added worded dates "later" and "someday" to enable the hiding of
  a task until doomsday.
2011-01-18 02:21:00 +01:00
Federico Hernandez
be0357da4a CMake
- added information to task diag to indicate if task is built with
  cmake (to support the upcoming move away from autotools).
2011-01-18 00:00:28 +01:00
Federico Hernandez
32235ca60a CMake
- improve compilation by removing the git sha1 dependency into its
  own include file that is just used 2 times instead of auto.h that
  is included in more places.
2011-01-17 23:27:38 +01:00
Johannes Schlatow
792eab8621 Info report
* added a line to the journal which shows the total time a task was active
2011-01-17 15:21:55 +01:00
Paul Beckingham
8e5ad1288c Holidays
- Added three missing holiday files to Makefile.am.
2011-01-16 20:03:06 -05:00
Paul Beckingham
332dbc4a08 Holidays
- Added new holiday configuration file for Austria (thanks to Andreas Poisel).
2011-01-16 17:01:47 -05:00
Paul Beckingham
0fda4b060c Bug
- _query command used {} instead of [] for task collection.
2011-01-16 01:03:28 -05:00
Federico Hernandez
55de71feca SHA1
- removed previously introduced _sha1 helper command
- modified helper command _version to either display the version
  or the sha1 depending if build from source tar ball or from git.
2011-01-15 22:18:44 +01:00
Federico Hernandez
c0c58f9aff Added _sha1 helper command to quickly identify a
task dev version.
2011-01-15 21:41:28 +01:00
Paul Beckingham
ae4e28689d Holiday Files
- Updated all holiday files to have a complete set of 2011 definitions,
  and remove 2010 definitions.
2011-01-14 23:04:29 -05:00
Paul Beckingham
7ca51e78f0 Feature - enhanced date parse error
- When a date fails to parse, the expected format is displayed, as a reminder
  (thanks to Eric Fluger).
2011-01-14 22:56:52 -05:00
Paul Beckingham
d4772fe060 Bug
- Fixed bug that caused entry, end, start and wait dates to not use report-
  specific date format overrides (thanks to Eric Fluger).
2011-01-14 22:12:17 -05:00
Paul Beckingham
47f2758c8f Holidays
- Added new holiday configuration file for Italy (thanks to Nicola Busanello).
2011-01-11 00:51:12 -05:00
Paul Beckingham
dac31390cb Merge branch '1.9.4' of tasktools.org:task into 1.9.4 2011-01-11 00:08:23 -05:00
Paul Beckingham
68fe437889 Taskd
- Modified Task::composeJSON to use ISO 8601 date format, and the new
  hierarchical annotation format.
2011-01-11 00:07:11 -05:00
Federico Hernandez
d358af4a53 Merge branch '1.9.4' of tasktools.org:task into 1.9.4 2011-01-11 00:37:23 +01:00
Federico Hernandez
e3269984ce Feature #629 - Holidays
- new configuration file for New Zealand (thanks to Stephen Haywood)
2011-01-11 00:36:41 +01:00
Federico Hernandez
e9b9adad06 Holidays
- new configuration file for New Zealand (thanks to Stephen Haywood)
2011-01-11 00:33:44 +01:00
Paul Beckingham
c08c280dd9 Feature #608
- Added feature #608, and now completing a task, with journal.time turned on
  will stop the task first (thanks to Andy Kriger).
2011-01-09 23:39:05 -05:00
Paul Beckingham
109f22051d Bug #603
- When an ID was not specified, delete gave no feedback (thanks to
  Steve Rader).
- Closer inspection showed this to be true for the urgency, query, delete,
  start, stop, done, modify, append, prepend, duplicate, annotate and denotate
  commands.
2011-01-09 23:15:30 -05:00
Paul Beckingham
9764fe310a Documentation
- Mentioned import from a URL in the NEWS file.
2011-01-09 23:07:22 -05:00
Paul Beckingham
10a69c4d3d Import
- Modified man page to acknowledge import from file or URL.
- Changed FEATURE_URL from #if to #ifdef, for consistency.
- Modified import.url.t to accomodate a new URL for the test.
2011-01-09 23:05:01 -05:00
Paul Beckingham
77f26994a6 Merge branch '1.9.4' of tasktools.org:task into 1.9.4 2011-01-09 21:25:59 -05:00
Paul Beckingham
1d8a60a9ba Bug
- Fixed bug that caused the 'done' command to always exit with a non-zero
  status (thanks to Steve Rader).
2011-01-09 21:25:09 -05:00
Johannes Schlatow
59e2e102e6 Merge branch '1.9.4' of tasktools.org:task into 1.9.4 2011-01-10 01:03:49 +01:00
Johannes Schlatow
f52e98d8df Zsh completion
* improved naming conventions of tags for use with zstyle
* added file completion for push/pull
2011-01-10 01:03:38 +01:00
Paul Beckingham
08c089258f Documentation
- Added missing documentation - bugs/features that were closed, but
  not listed in the ChangeLog.
2011-01-09 16:48:10 -05:00
Johannes Schlatow
976cd284ff Zsh completion
* fixed ID completion after edit/info/annotate/start/...
* now IDs will be updated any time the completion function is called
2011-01-09 18:01:53 +01:00
Federico Hernandez
914626e2b2 Merge branch '1.9.4' of tasktools.org:task into 1.9.4 2011-01-08 21:25:32 +01:00
Federico Hernandez
a5f8762570 Msg for sha1 searching in cmake 2011-01-08 21:25:18 +01:00
Paul Beckingham
8d4deda2bb Feature #309
- Added feature #309, which sets the xterm title when reports are run,
  according to the configuration variable 'xterm.title', which defaults to off.
2011-01-08 11:30:58 -05:00
Paul Beckingham
0c05069baf Bug #624
- Enhanced unit tests in response to bug #624 (thanks to Steve Rader).
2011-01-08 11:12:39 -05:00
Paul Beckingham
b5c46062c6 Feature - dependency column justification
- The dependency columns are now right-justified (thanks to Eric Fluger).
2011-01-08 11:10:39 -05:00
Federico Hernandez
022b219c0f CMake
- added sha1 of git commit to task diag
2011-01-08 01:10:26 +01:00
Federico Hernandez
e28d03df82 CMake
- build only target for the unit tests - to be used by the tinderbox
2011-01-07 23:04:04 +01:00
Federico Hernandez
733101a560 CMake
- made lua optional
- included a package_source stub for cpack
2011-01-07 22:23:42 +01:00
Federico Hernandez
32144fb6b0 Removed README.build from Makefile.am 2011-01-06 23:56:51 +01:00
Federico Hernandez
4cdec31803 CMake
- fixed scripts dir that just installed the directories but not the
  files
2011-01-05 23:08:48 +01:00
Federico Hernandez
70a83dad4d CMake
- the version number in the man pages is now set automatically via
  the ${PACKAGE_STRING} cmake variable
2011-01-05 22:46:25 +01:00
Steve Rader
86eef4c184 Bug #618
- Applied patch to fix bug #618, so that the configuration setting
  'edit.verbose' can be set to 'no' and eliminate the help text when using
  the 'task edit' command (thanks to Steve Rader).

Signed-off-by: Paul Beckingham <paul@beckingham.net>
2011-01-05 08:56:28 -05:00
Paul Beckingham
8fefc8c12a Merge branch '1.9.4' of tasktools.org:task into 1.9.4 2011-01-05 08:30:21 -05:00
Federico Hernandez
75a3266929 Merged README.build to INSTALL 2011-01-05 09:58:07 +01:00
Federico Hernandez
7f0c3bf94b Prepared gitignore for upcoming CPack 2011-01-05 01:26:32 +01:00
Federico Hernandez
506799cac4 CMake
- finalized install target
2011-01-05 01:10:26 +01:00
Paul Beckingham
fca8c43d47 Merge branch '1.9.4' of tasktools.org:task into 1.9.4 2011-01-04 17:37:02 -05:00
Federico Hernandez
198e69f8d1 CMake
- install target: included man pages and rc files
2011-01-04 23:26:35 +01:00
Paul Beckingham
28ceaaaaab Merge branch '1.9.4' of tasktools.org:task into 1.9.4 2011-01-04 16:30:03 -05:00
Paul Beckingham
2bee2f4aa5 Unit Tests
- Added new "is" method for double-precision floating point comparison,
  with tolerance value.
2011-01-04 16:29:31 -05:00
Johannes Schlatow
86f778f504 Merge branch '1.9.4' of tasktools.org:task into 1.9.4 2011-01-04 21:57:23 +01:00
Johannes Schlatow
2181c48eb7 Zsh completion
- added features #585 and #586
2011-01-04 21:57:15 +01:00
Federico Hernandez
9429c96172 CMake
- install command for task binary had wrong target
2011-01-04 08:44:59 +01:00
Steve Rader
e2d11d8575 Bug #590
- Applied patch to fix bug #590, which makes the yes/no/all/quit
  confirmation prompts consistent (thanks to Steve Rader).
- Patch modified to work with autocomplete.

Signed-off-by: Paul Beckingham <paul@beckingham.net>
2011-01-03 23:11:38 -05:00
Paul Beckingham
b553954d37 Bug #597
- Fixed bug #597, which caused a missing project to be counted as a project
  in the projects command (thanks to Steve Rader).
2011-01-03 22:21:51 -05:00
Steve Rader
07755e2c56 Bug #613
- Missing projects are now consistently reported as "(none)" in the
  summary chart and the projects command.

Signed-off-by: Paul Beckingham <paul@beckingham.net>
2011-01-03 22:04:10 -05:00
Paul Beckingham
6b18a2842f Build
- Made pthreads usage conditional upon HAVE_LIBPTHREAD.
2011-01-03 19:34:00 -05:00
Paul Beckingham
6a7e741b02 Bug
- Fixed visual problem where two consecutive months are rendered on the
  x-axis as "OctNov".  Now it renders as "Oc Nov", truncating the earlier
  label.
2011-01-03 14:51:43 -05:00
Paul Beckingham
96851c1d34 Cmake
- Removed NOPE define.
2011-01-02 20:45:24 -05:00
Federico Hernandez
2663f437fc CMake
- foreach loop in test to compile the unit tests
2011-01-03 01:41:48 +01:00
Federico Hernandez
94224d0ac5 CMake
- finalized unit tests transition to CMake
- introduced 2 variables to collect inlcude dirs and libraries
2011-01-03 01:05:39 +01:00
Federico Hernandez
3a599b66f5 CMake
- added stub for the cmake file in test
- proof of concept to generate the test binaries by linking to libtask
2011-01-02 23:53:50 +01:00
Federico Hernandez
51fd0afade CMake
- moved configuration stuff from src to top level cmake file
- building static library task and using it for building task binary
- the static library will then be used as well in the unit tests
2011-01-02 23:45:25 +01:00
Federico Hernandez
101bc8045b with_lua description not longer needed with cmake 2011-01-02 20:21:43 +01:00
Federico Hernandez
3e68bc9ec5 CMake
- added library checks to cmake
- added configuration of include files to cmake
- move package information into configurable include file
- cmake.h.in generates auto.h to be compatible with current
  implementation of autoconf
2011-01-02 16:26:33 +01:00
Paul Beckingham
462caf5bd4 Copyright
- Updated copyright to 2011.
2010-12-31 22:03:05 -05:00
Paul Beckingham
98f3e6e61d Code Cleanup
- Used File object inside Sensor.
2010-12-31 17:25:13 -05:00
Paul Beckingham
8543bd457b Documentation Update
- Added discussion of "less -FrX" and the reported problems with Linux
  'more' (thanks to Steve Rader).
2010-12-31 12:41:44 -05:00
Paul Beckingham
08f32cb9e9 Bug
- Sorting bug in which 'urgency' column was not identified as numeric.
2010-12-31 00:34:23 -05:00
Paul Beckingham
57d577a140 Bug #595
- Fixed bug #595, where taskwarrior ignored changes to the wait date during
  the edit command, consequently not changing task status (thanks to Eric
  Fluger).
2010-12-31 00:33:43 -05:00
Paul Beckingham
1b66904550 Urgency/next
- Added 'urgency' as a reportable, sortable column.  This will allow
  us to test the urgency coefficients.  Note that this is experimental,
  and as such will not be documented.
2010-12-30 22:20:33 -05:00
Paul Beckingham
77f3269f09 Bug #589
- Fixed bug #589, where the man page did not adequately describe searching
  or usage of attribute modifiers (thanks to Steve Rader).
2010-12-30 09:37:40 -05:00
Paul Beckingham
317b7f5d40 Bug #587
- Fixed bug #587, where the man page needed clarification on quoting some
  arguments to prevent them from being broken up by the shell (thanks to
  Steve Rader).
2010-12-29 22:54:32 -05:00
Paul Beckingham
552c594d3f Documentation
- Updated the INSTALL file to discuss cmake, not autoconf.
- Removed the transient test/Makefile from git.
2010-12-29 16:48:54 -05:00
Paul Beckingham
429709a426 Documentation
- Added brief discussion of the reasons Lua is the chosen plugin
  langauge (thanks to Eric Fluger).
2010-12-29 10:19:52 -05:00
Paul Beckingham
f5f1b38fe8 CMake
- Added cmake transient files to the .gitignore file.
2010-12-29 10:19:15 -05:00
Federico Hernandez
b2a7b91a7c Cmake:
- added parts of the configure.ac checks to src/CMakeList.txt as
  comments/TODOs
2010-12-29 01:14:04 +01:00
Federico Hernandez
fb24835ac5 First commit of cmake stubs - more to come 2010-12-29 00:31:20 +01:00
Federico Hernandez
dd10bf52e7 Unit tests:
- TZ related bug in date.t.cpp (test 78). 1234567890 is 2/14 in CET.
  Changed epoch to 1234526400 which is 2/13/2009 12:00:00 UTC.
2010-12-28 22:33:18 +01:00
Federico Hernandez
5d775fdc3e Cmake:
- adapted makefile and unit tests to new place of test dir
2010-12-28 21:38:03 +01:00
Federico Hernandez
17ef077e27 Moved src/tests to test (cmake preperations) 2010-12-28 21:17:23 +01:00
Federico Hernandez
02dcdf83b5 Fixed auto.h includes to point to top level dir for cmake 2010-12-28 21:12:30 +01:00
Paul Beckingham
d572383e76 Merge branch '1.9.4' of tasktools.org:task into 1.9.4 2010-12-27 16:34:09 -05:00
Paul Beckingham
a6cf99a83c Code Cleanup
- Migrated format helper functions over from taskd.
- Converted much of the sprintf usage to format calls.
2010-12-27 16:31:11 -05:00
Federico Hernandez
74607341ff New platform: NetBSD 2010-12-27 22:11:47 +01:00
Paul Beckingham
5f007ed1d9 Bug
- The burndown chart was reserving space for the y-axis labels based
  on the maximum value in the data.  This is wrong.  Instead it should
  have used the maximum *label*.  Consider a graph with a maximum value
  of 99, having a width of 2 characters.  The graph labels should go up
  to 100, not 99, and therefore will take up 3 characters.
2010-12-27 01:11:03 -05:00
Paul Beckingham
8d720cacc5 Bug
- When rc.regex:on is set, filters with "+tag" elements were causing
  a segfault because the "tag" word was converted to a non-capturing
  regex, no results were captured, and array[0] failed.  Now it is
  implemented that tag elements in a filter never use regexes, which
  maintains the idea the tags are not really words, but tokens that
  either match or don't.
2010-12-27 00:57:24 -05:00
Paul Beckingham
4a58fbdd53 Merge branch '1.9.4' of tasktools.org:task into 1.9.4 2010-12-27 00:24:30 -05:00
Paul Beckingham
3d7bb9d253 Bug #564
- Fixed bug #564, which allowed the deletion of parent recurring tasks (thanks
  to Peter De Poorter).
2010-12-27 00:22:57 -05:00
Paul Beckingham
7f32435ce9 Helper Command
- Added _query helper command for script writers, which accepts a filter like
  any other report, but returns raw JSON.
2010-12-26 10:00:41 -05:00
Johannes Schlatow
126a3d88b5 Zsh completion
- added completion of attributes
- added completion of projects and tags
- added completion of special dates and frequencies
2010-12-25 23:57:00 +01:00
Paul Beckingham
367c32c050 Error
- Forgot to uncomment the lua line.  Oops.
2010-12-24 00:29:09 -05:00
Paul Beckingham
d9bd9c3532 Merge branch '1.9.4' of tasktools.org:task into 1.9.4 2010-12-24 00:28:35 -05:00
Paul Beckingham
879f0fed78 Feature #574
- Added feature #574, default due dates (thanks to Erlan Sergaziev).
2010-12-24 00:28:06 -05:00
Paul Beckingham
07050a35f3 Portability
- Added preliminary enhancement to configure.ac (thanks to Sander Marechal),
  but this still needs work.
2010-12-23 23:53:28 -05:00
Paul Beckingham
05d664cae1 Bug #541
- Fixed bug #541, which prevented sorting by 'age' column in some situations.
2010-12-23 23:26:01 -05:00
Paul Beckingham
18c770141d Merge branch '1.9.4' of tasktools.org:task into 1.9.4
Conflicts:
	ChangeLog
2010-12-23 23:16:05 -05:00
Paul Beckingham
595dd9f3f4 Bug #581
- Applied patch to fix bug #581, in which backslashes in annotations and
  descriptions caused problems (thanks to Itay Perl).
- Corrected unit tests that were shown to be incorrect, after the patch
  corrected other behavior.
2010-12-23 23:14:20 -05:00
Paul Beckingham
1d4c79b897 Code Cleanup
- Applied refactoring patch from Itay Perl.
2010-12-23 22:58:55 -05:00
Johannes Schlatow
ee77debfce Bug #540
- fixed issue with user names containing @ characters
- updated ChangeLog
- updated task-sync.5
2010-12-24 01:00:03 +01:00
Johannes Schlatow
d44e592635 Bug #580
- reuse merge uri for autopush
2010-12-23 22:15:11 +01:00
Paul Beckingham
4840708090 Bug #579
- Fixed bug #579, which displayed incorrect counts when using the 'limit:N'
  filter (thanks to Thomas Sattler).
- Changed wording from 'lines' to 'tasks', because the former was inaccurate.
- Adjusted limit.t tests accordingly.
2010-12-22 09:31:00 -05:00
Johannes Schlatow
bad31d83b1 Bug #570
- fixed execvp parameter
2010-12-16 22:36:24 +01:00
Paul Beckingham
1c29c2c87d Diagnostics
- Added mention of $TERM and the size of the terminal.
2010-12-16 09:29:46 -05:00
Paul Beckingham
ca4b15bc0b Holidays
- Added feature #575, including Danish holidays (thanks to Irfan Siddiqui).
2010-12-15 16:13:27 -05:00
Paul Beckingham
c73f131f32 Eliminated ncurses
- Removed autoconf ncurses detection.
- Modified man pages.
- Inserted vitapi replacement code.
- Cached terminal size values for reuse.
- Modified packaging info for OSX.
- Removed -lncurses from unit test makefile.
- Removed obsolete taskrc example.
- Modified (simplified) source build instructions.
2010-12-14 14:40:03 -05:00
Johannes Schlatow
551c4b99c4 Bug #570
- fixed merge/push/pull bug (missing brace expansion in dash)
2010-12-14 10:27:28 +01:00
Federico Hernandez
4ca35fb956 Feature #567
- added a calendar offset that effectively changes the first
  month to be displayed in the calendar report (thanks to
  Michelle Crane)
- calendar.offset turns the featue off or on
- calendar.offset.value controls the number of month to be
  applied for the offset
2010-12-01 23:25:13 +01:00
Paul Beckingham
14ab7ba7bd GC
- Forgot to add 'gc' as a valid configuration variable.
2010-11-29 23:43:36 -05:00
Paul Beckingham
068d85b1f3 Unit Tests
- Added a context value for gc=1, which otherwise defaults to 0 when
  the Config object is empty.
2010-11-29 08:37:20 -05:00
Paul Beckingham
d2fdc10f39 iUnit Tests
- Corrected test that changed columns in the ls report, but not the
  corresponding sort order.
2010-11-29 08:19:12 -05:00
Paul Beckingham
2b7452f9a7 Feature #561
- Added taskrc.5 documentation for rc.gc=off.
2010-11-28 16:32:51 -05:00
Paul Beckingham
0ac2b43ad3 Feature #561
- Added ability to temporarily suspend GC (rc.gc:0) for a given command, which
  helps scriptwriters implement shadow files externally (thanks to Sander
  Marechal).
2010-11-28 16:26:21 -05:00
Paul Beckingham
5bf8feefca Shadow Files
- Added a missing check for file overwrites.
2010-11-28 12:04:44 -05:00
Paul Beckingham
bdc167fd6a Miscellaneous Edits
- Added Max Muller to AUTHORS for suggestions.
- Fixed a unit test Perl warning.
2010-11-28 08:44:25 -05:00
Paul Beckingham
aa98ca42c8 Shell
- Added support for 'bye' and 'exit' as well as 'quit' from the task
  shell.  Thanks to foucist.
2010-11-27 21:33:20 -05:00
Paul Beckingham
5adc86bbbf Sorting
- Added 'description+' to all reports with duplicate sort keys, to stabilize
  the sequence.
2010-11-27 19:52:15 -05:00
Paul Beckingham
bfc2367bdb Code Cleanup
- Removed used of foreach macro.
2010-11-27 19:42:34 -05:00
Paul Beckingham
4c3354fa50 Journal Feature
- Added change log display to the 'info' command, controlled by the
  'journal.info' configuration setting.
2010-11-27 16:38:36 -05:00
Paul Beckingham
31cf470cc8 Copyright
- Made all the copyright notices consistent.  It was bothering me.
2010-11-27 09:13:09 -05:00
Paul Beckingham
fe85e28605 Show Command Defaults
- Added highlighting for the show command that indicates which values differ
  from the defaults.
2010-11-26 19:32:37 -05:00
Paul Beckingham
7a95c38290 Diagnostics
- Added configuration settings for 'regex' and 'locking', which might
  be useful.
2010-11-26 17:38:52 -05:00
Paul Beckingham
fe65d28f99 Feature #158
- Added feature #158, regular expression support for filters and substitutions.
- Added unit tests to att.t and filter.t.
- Updated docs.
2010-11-26 17:26:03 -05:00
Paul Beckingham
09ce815fc5 Feature #247
- Added feature #247, providing infinite width reports when redirecting output
  to a file, by setting defaultwidth to 0.
2010-11-26 14:54:55 -05:00
Paul Beckingham
38ffa390ea Bug #542
- Fixed bug #542, which sorted the countdown columns incorrectly (thanks to
  Michelle Crane).
- Duration could not parse all varieties of it's own output, which is why the
  sorting was broken, in particular negative durations and real numbers in
  durations (such as (1.2y').
- Sorting in Table::sort_compare for Table::periodAscending and
  Table::periodDescending was broken.
- Missing unit tests for countdown_compact.
- Imported Nibbler::getNumber from the Attitash project.
- Additional Duration unit tests.
- Additional Nibbler unit tests.
- Additional countdown.t unit tests.
2010-11-26 14:00:49 -05:00
Paul Beckingham
c2a84c7cf6 Unit Tests
- Added unit tests for bug #495, which cannot be replicated.
2010-11-26 11:40:27 -05:00
Paul Beckingham
da5e2925ad Bug #530
- Fixed bug #530, where unrecognized periods on recurring tasks were not
  being properly handled (thanks to T. Charles Yun).
2010-11-26 11:23:09 -05:00
Paul Beckingham
6ef5650129 Bug #515
- Fixed bug #515, which displayed an incorrect message after duplicating a
  non-existent task (thanks to Peter De Poorter).
2010-11-26 11:08:51 -05:00
Paul Beckingham
d7de67d242 Feature #546
- Added feature #546, which is a 'count' command that counts tasks, and is
  intended to help scripts that manipulate task output.
- Added unit tests.
- Added man page description.
2010-11-26 10:39:00 -05:00
Paul Beckingham
4c40784328 Merge branch '1.9.4' of tasktools.org:task into 1.9.4 2010-11-24 18:18:21 -05:00
Paul Beckingham
b581e5d3c4 Burndown
- Added discussion of the new burndown.bias configuration variable
  to the NEWS file.
- Changed 'major' and 'minor' string names to avoid some clash with
  gnu_version_major etc.
- Added missing include for Linux.
- Added new burndown configuration variables to the allowed list.
2010-11-24 18:16:57 -05:00
Paul Beckingham
fd27fe3392 Portability
- Added missing include.
- Apparently, you cannot have a string name 'major' or 'minor', which
  clashes with gnu_version_major etc.
2010-11-24 23:14:48 +00:00
Paul Beckingham
955634c35b Burndown Chart
- Added debug output showing calculations.
- Made the bias configurable, defaulting to 0.666.
- Added 'burndown.bias' to the taskrc.5 man page.
2010-11-24 15:11:02 -05:00
Paul Beckingham
42c0b33f07 Burndown Chart
- Implemented rate calculations
- Implemented completion estimate
- Added debug diagnostics for the inevitable questions that will arise
2010-11-24 13:01:34 -05:00
Paul Beckingham
c5158a6457 Burndown Chart
- Now renders (and wraps if necessary) a chart title, with additional
  filter description.
- Removed more redundant code.
- Fixed divide-by-zero bug when the filter resulted in zero matches.
- Made the burndown commands read-only, so that filters apply.
2010-11-22 23:54:16 -05:00
Paul Beckingham
9fd9e8e3a8 Recurrence
- Child tasks now have their own entry date, instead of inheriting it
  from the parent.  This improves the ability to report new tasks in
  the burndown charts, history report.
2010-11-22 23:11:45 -05:00
Paul Beckingham
ead7cfe2b8 Burndown Chart
- Completed chart rendering for all three variations.
- Updated assorted documentation.
- Removed most of the obsolete code.
- Not completed:
  - find rate calculation/algorithm
  - fix rate calculation/algorithm
  - completion date algorithm
2010-11-22 22:42:03 -05:00
Paul Beckingham
3a4fff1683 Merge branch '1.9.4' of tasktools.org:task into 1.9.4 2010-11-22 01:48:59 -05:00
Paul Beckingham
c4a5a75fd6 Burndown Chart
- Infrastructure rewritten with the following benefits:
  - greater performance
  - reduced memory footprint
  - generalized periods (daily, weekly, monthly)
- Currently graphs do not render, daily chart is still the old implementation
2010-11-22 01:47:10 -05:00
Johannes Schlatow
4cb5caa342 Bug #548
- Fixed issue with push command where curl transfers
  only pending.data
- Differentiate between "command not found" and other errors
2010-11-22 01:16:07 +01:00
Paul Beckingham
652b7d9c8d Burndown Chart
- Implemented burndown.daily, which is functional, but has outstanding
  problems that need to be addressed:
    - Slow
    - Does not optimize output (i.e. contains /\S\s+$/)
    - Needs generalized helper functions to reduce the size of the handler
2010-11-21 00:28:34 -05:00
Paul Beckingham
94480c23d2 Bug 555
- Fixed #555 that caused a segfault when 'log' was used with a project,
  because the onProjectChange code assumes the files are still open, and
  they were not.  Checked all other commands for similar problem.
- Added Itay Perl to the AUTHORS file.
- Added unit test.
2010-11-20 09:48:19 -05:00
Paul Beckingham
d3303f6a98 Code Cleanup
- Obsoleted the monthlyEpoch and yearlyEpoch functions, which are better
  served by the Date::startOf{Month,Year} methos.
2010-11-15 12:04:27 -05:00
Paul Beckingham
125058093f Dates
- Added Date::startof{Day,Week,Month,Year} methods to facilitate the
  history, ghistory and burndown charts.
2010-11-15 11:43:21 -05:00
Paul Beckingham
891136788f Documentation
- New task-sync man page not mentioned in default .taskrc file.
2010-11-12 08:51:48 -05:00
Paul Beckingham
d1b7e66694 Bug #538
- Fixed bug #538, where some color legend items were not readable.
2010-11-11 14:47:13 -05:00
Paul Beckingham
914007c7e5 Merge branch '1.9.4' of tasktools.org:task into 1.9.4 2010-11-11 13:16:34 -05:00
Paul Beckingham
e9d60e693e Packaging
- Added Andraž 'ruskie' Levstik to the AUTHORS file for his contribution
  which is to add task to the sourcemage distribution.
2010-11-11 13:08:15 -05:00
Johannes Schlatow
e6ea471cbe ChangeLog
- added note for previously fixed bug #537
2010-11-11 18:42:23 +01:00
Johannes Schlatow
a3ba025d22 Bug
- fixed #537, URIs in task-sync.5
2010-11-11 18:34:22 +01:00
Paul Beckingham
b9f10addf8 Bug #539
- Fixed but #539, where the man page task-color(5) contained a line that
  began with a ' and was not displayed.
2010-11-11 10:36:37 -05:00
Paul Beckingham
c8e35fab88 Bug #535 - Missing holidays-NO.rc file in package
- Fixed bug #535 which omitted the file from the top-level Makefile.am
  (thanks to Jostein Berntsen).
2010-11-10 17:47:55 -05:00
Paul Beckingham
cc8299f0cc Bug #529
- Fixed bug #529, where the 'depends' attribute was not mentioned in the
  task man page (thanks to Dirk Deimeke).
2010-11-09 07:56:48 -05:00
Paul Beckingham
55ad0cb8b7 Version number
- Removed all the changes from the NEWS file, ready for whatever
  comes next.
- Bumped version number in task-tutorial.5, othewise it looks dated.
2010-11-08 22:30:13 -05:00
Federico Hernandez
3c9bf20798 Bumped version number to 1.9.4 2010-11-09 02:26:35 +01:00
Federico Hernandez
6b77459286 Added SHA1 of tagged release commit 2010-11-09 02:18:37 +01:00
422 changed files with 10467 additions and 5497 deletions

9
.gitignore vendored
View File

@@ -6,6 +6,7 @@ config.status
src/.deps
src/Makefile
*/*task
*/*libtask.a
stamp-h1
Makefile
Makefile.in
@@ -17,3 +18,11 @@ src/tests/*.data
*~
.*.swp
package-config/osx/binary/task
CMakeCache.txt
CMakeFiles
cmake_install.cmake
install_manifest.txt
_CPack_Packages
CPackConfig.cmake
CPackSourceConfig.cmake
commit.h

17
AUTHORS
View File

@@ -32,6 +32,14 @@ The following submitted code, packages or analysis, and deserve special thanks:
Kathryn Andersen
Alexander Schremmer
Jostein Berntsen
Andraž 'ruskie' Levstik
Irfan Siddiqui
Itay Perl
Sander Marechal
Stephen Heywood
Nicola Busanello
Eric Fluger
Andreas Poisel
Thanks to the following, who submitted detailed bug reports and excellent
suggestions:
@@ -63,3 +71,12 @@ suggestions:
Michelle Crane
Elizabeth Maxson
Peter De Poorter
Max Muller
Thomas Sattler
Erlan Sergaziev
Steve Rader
Andy Kriger
Patrick R McDonald
Pete Lewis
Bryce Harrington

104
CMakeLists.txt Normal file
View File

@@ -0,0 +1,104 @@
cmake_minimum_required (VERSION 2.8)
include (CheckFunctionExists)
set (HAVE_CMAKE true)
project (task)
set (PROJECT_VERSION "1.9.4")
SET (TASK_MAN1DIR share/man/man1 CACHE STRING "Installation directory for man pages, section 1")
SET (TASK_MAN5DIR share/man/man5 CACHE STRING "Installation directory for man pages, section 5")
SET (TASK_DOCDIR share/doc/task CACHE STRING "Installation directory for doc files")
SET (TASK_BINDIR bin CACHE STRING "Installation directory for the binary")
message ("-- Looking for SHA1 references")
if (EXISTS .git/index)
set (HAVE_COMMIT true)
execute_process (COMMAND git log -1 --pretty=format:%h
OUTPUT_VARIABLE COMMIT)
configure_file ( ${CMAKE_SOURCE_DIR}/commit.h.in
${CMAKE_SOURCE_DIR}/commit.h)
message ("-- Found SHA1 reference: ${COMMIT}")
endif (EXISTS .git/index)
set (PACKAGE "${PROJECT_NAME}")
set (VERSION "${PROJECT_VERSION}")
set (PACKAGE_BUGREPORT "support@taskwarrior.org")
set (PACKAGE_NAME "${PACKAGE}")
set (PACKAGE_TARNAME "${PACKAGE}")
set (PACKAGE_VERSION "${VERSION}")
set (PACKAGE_STRING "${PACKAGE} ${VERSION}")
message ("-- Looking for Lua51")
find_package (Lua51)
if (LUA51_FOUND)
message ("-- Found Lua51: ${LUA_LIBRARIES}")
set (HAVE_LIBLUA true)
set (TASK_INCLUDE_DIRS ${TASK_INCLUDE_DIRS} ${LUA_INCLUDE_DIR})
set (TASK_LIBRARIES ${TASK_LIBRARIES} ${LUA_LIBRARIES})
endif (LUA51_FOUND)
message ("-- Looking for pthread")
find_path (PTHREAD_INCLUDE_DIR pthread.h)
find_library (PTHREAD_LIBRARY NAMES pthread)
if (PTHREAD_INCLUDE_DIR AND PTHREAD_LIBRARY)
message ("-- Found pthread: ${PTHREAD_LIBRARY}")
set (HAVE_LIBPTHREAD true)
set (TASK_INCLUDE_DIRS ${TASK_INCLUDE_DIRS} ${PTHREAD_INCLUDE_DIR})
set (TASK_LIBRARIES ${TASK_LIBRARIES} ${PTHREAD_LIBRARIES})
endif (PTHREAD_INCLUDE_DIR AND PTHREAD_LIBRARY)
#message ("-- Looking for readline")
#find_path (READLINE_INCLUDE_DIR readline/readline.h)
#find_library (READLINE_LIBRARY NAMES readline)
#if (READLINE_INCLUDE_DIR AND READLINE_LIBRARY)
# message ("-- Found readline: ${READLINE_LIBRARY}")
# set (HAVE_LIBREADLINE true)
# set (HAVE_READLINE true)
# set (TASK_INCLUDE_DIRS ${TASK_INCLUDE_DIRS} ${READLINE_INCLUDE_DIR})
# set (TASK_LIBRARIES ${TASK_LIBRARIES } ${READLINE_LIBRARIES})
#endif (READLINE_INCLUDE_DIR AND READLINE_LIBRARY)
check_function_exists (random HAVE_RANDOM)
check_function_exists (srandom HAVE_SRANDOM)
check_function_exists (uuid_unparse_lower HAVE_UUID)
if (${CMAKE_SYSTEM_NAME} MATCHES "Linux")
set (LINUX true)
elseif (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
set (DARWIN true)
elseif (${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD")
set (FREEBSD true)
else (${CMAKE_SYSTEM_NAME} MATCHES "Linux")
set (UNKNOWN true)
endif (${CMAKE_SYSTEM_NAME} MATCHES "Linux")
message ("-- Configuring auto.h")
configure_file (
${CMAKE_SOURCE_DIR}/cmake.h.in
${CMAKE_SOURCE_DIR}/auto.h)
add_subdirectory (src)
add_subdirectory (doc)
add_subdirectory (i18n)
add_subdirectory (scripts)
if (EXISTS test)
add_subdirectory (test EXCLUDE_FROM_ALL)
endif (EXISTS test)
set (doc_FILES NEWS ChangeLog README INSTALL AUTHORS COPYING)
foreach (doc_FILE ${doc_FILES})
install (FILES ${doc_FILE} DESTINATION ${TASK_DOCDIR})
endforeach (doc_FILE)
# ---
set (CPACK_SOURCE_GENERATOR "TGZ")
set (CPACK_SOURCE_PACKAGE_FILE_NAME ${PACKAGE_NAME}-${PACKAGE_VERSION})
set (CPACK_SOURCE_IGNORE_FILES "CMakeCache" "CMakeFiles" "CPackConfig" "CPackSourceConfig"
"_CPack_Packages" "cmake_install" "install_manifest"
"Makefile$" "test" "package-config" "misc/*"
"src/task$" "src/libtask.a" "auto.h$"
"/\\.gitignore" "/\\.git/" "swp$")
include (CPack)

127
ChangeLog
View File

@@ -1,7 +1,126 @@
------ current release ---------------------------
1.9.3 (11/08/2010)
1.9.4 (03/03/2011)
+ Added burndown charts - 'burndown.daily', 'burndown.weekly',
'burndown.monthly', that use 'color.burndown.pending', 'color.burndown.started'
and 'color.burndown.done' colors.
+ Added highlighting for the 'show' command that indicates which values differ
from the defaults.
+ Added change log display to the 'info' command, controlled by the
'journal.info' configuration setting.
+ Added 'description+' to all reports with duplicate sort keys, to stabilize
the sequence.
+ Added ability to temporarily suspend GC (rc.gc:0) for a given command, which
helps scriptwriters implement shadow files externally (thanks to Sander
Marechal).
+ Added alias 'export.json' that maps to the new _query helper command.
+ Added new dark-gray-256 color theme.
+ Added feature #30, which eliminates the dependency on ncurses (thanks to
Johan Friis).
+ Added feature #41, XML export in the form of add-on script export-xml.pl,
export-xml.py and export-xml.rb.
+ Added feature #157, which implements the _query command, a helper command for
script writers, which accepts a filter like any other report, but returns
only full JSON.
+ Added feature #158, regular expression support for filters and substitutions.
+ Added feature #247, providing infinite width reports when redirecting output
to a file, by setting defaultwidth to 0.
+ Added feature #309, which sets the xterm title when reports are run,
according to the configuration variable 'xterm.title', which defaults to off.
+ Added feature #546, which is a 'count' command that counts tasks, and is
intended to help scripts that manipulate task output.
+ Added feature #567, which makes it possible to apply an offset to the first
month to be displayed in the calendar report (thanks to Michelle Crane).
+ Added feature #574, default due dates (thanks to Erlan Sergaziev).
+ Added feature #575, including Danish holidays (thanks to Irfan Siddiqui).
+ Added feature #608, and now completing a task, with journal.time turned on
will stop the task first (thanks to Andy Kriger).
+ Added feature #629, a new holiday configuration file for New Zealand
(thanks to Stephen Haywood).
+ Added feature #638, a wait:later possibility (thanks to Clément Bœsch).
+ Added feature #46, proper sortable age column.
+ Added new holiday configuration file for Italy (thanks to Nicola Busanello).
+ Added new holiday configuration file for Austria (thanks to Andreas Poisel).
+ Eliminated dependency on ncurses.
+ The dependency columns are now right-justified (thanks to Eric Fluger).
+ When a date fails to parse, the expected format is displayed, as a reminder
(thanks to Eric Fluger).
+ Fixed bug that caused the 'done' command to always exit with a non-zero
status (thanks to Steve Rader).
+ Fixed bug that caused entry, end, start and wait dates to not use report-
specific date format overrides (thanks to Eric Fluger).
+ Fixed bug #485, which caused filters of 'recur' to fail for partial matches
(thanks to T. Charles Yun).
+ Fixed bug #515, which displayed an incorrect message after duplicating a
non-existent task (thanks to Peter De Poorter).
+ Fixed bug #529, where the 'depends' attribute was not mentioned in the
task man page (thanks to Dirk Deimeke).
+ Fixed bug #530, where unrecognized periods on recurring tasks were not
being properly handled (thanks to T. Charles Yun).
+ Fixed bug #535 which omitted the holidays-NO.rc file from the packages
(thanks to Jostein Berntsen).
+ Fixed bug #537, where the man page task-sync(5) mis-specified some URIs.
+ Fixed bug #538, where some color legend items were not readable.
+ Fixed bug #539, where the man page task-color(5) contained a line that
began with a ' and was not displayed.
+ Fixed bug #540, where user names containing @s could not be parsed.
+ Fixed bug #541, which prevented sorting by 'age' column in some situations.
+ Fixed bug #542, which sorted the countdown columns incorrectly (thanks to
Michelle Crane).
+ Fixed bug #555, which caused a segfault when logging a task with a project
(thanks to Itay Perl).
+ Fixed bug #564, which allowed the deletion of parent recurring tasks (thanks
to Peter De Poorter).
+ Fixed bug #570, which used unsupported brace expansion with dash (default
/bin/sh in Ubuntu).
+ Fixed bug #579, which displayed incorrect counts when using the 'limit:N'
filter (thanks to Thomas Sattler).
+ Fixed bug #580, where reusing the merge uri for autopush failed when the
uri was taken from taskrc.
+ Applied patch to fix bug #581, in which backslashes in annotations and
descriptions caused problems (thanks to Itay Perl).
+ Fixed bug #587, where the man page needed clarification on quoting some
arguments to prevent them from being broken up by the shell (thanks to
Steve Rader).
+ Fixed bug #589, where the man page did not adequately describe searching
or usage of attribute modifiers (thanks to Steve Rader).
+ Applied patch to fix bug #590, which makes the yes/no/all/quit confirmation
prompts consistent (thanks to Steve Rader).
+ Fixed bug #595, where taskwarrior ignored changes to the wait date during
the edit command, consequently not changing task status (thanks to Eric
Fluger).
+ Fixed bug #597, which caused a missing project to be counted as a project
in the projects command (thanks to Steve Rader).
+ Fixed bug #603, which caused no feedback when task IDs were not specified
(thanks to Steve Rader).
+ Applied patch to fix bug #613, so that the summary report and the projects
command now consistently show a missing project as "(none)" (thanks to
Steve Rader).
+ Applied patch to fix bug #618, so that the configuration setting
'edit.verbose' can be set to 'no' and eliminate the help text when using
the 'task edit' command (thanks to Steve Rader).
+ Enhanced unit tests in response to bug #624 (thanks to Steve Rader).
+ Fixed bug #628, where dateformats containing spaces were not properly
parsed (thanks to Steve Rader).
+ Fixed bug #634, so that 'undo' obeys the 'confirmation' setting (thanks to
Steve Rader).
+ Fixed bug #641, where certain reports broke when 'dateformat' differed from
'dateformat.report'.
+ Fixed bug #651, which broke the edit command when a task description
contained certain tokens (like 'Due:').
+ Fixed bug #653, which caused undo information to be recorded when no changes
were made by the 'edit' command.
+ Fixed bug #654, which broke the info command when a task had no journal
entries.
+ Fixed bug #656, which caused multiple recurring child tasks to be created
(thanks to Bryce Harrington).
+ Fixed bug #671, removing the claim in the 'edit' command claims that
description text can wrap over multiple lines, because it cannot.
------ old releases ------------------------------
1.9.3 (11/08/2010) bf36b47593a33e6347425d47a36477b627310e65
+ Added feature #43, now task supports relative dates like '3wks',
'1 month', '4d' for 'due', 'wait' and 'until' dates. Essentially
durations are now allowed where dates are expected, and are treated
@@ -35,8 +154,6 @@
report.
+ Added feature #481, allowing for user control of the color rule order
of precedence via the 'rule.precedence.color' configuration variable.
+ Fixed bug #493, which made waiting, recurring tasks invisible (thanks to
Alexander Schremmer).
+ Added feature #499, giving an extra line in the message output when
doing bulk done changes (thanks to T. Charles Yun).
+ New 'depends' column for custom reports.
@@ -86,6 +203,8 @@
+ Fixed bug #480, which didn't properly support @ characters in tags. This
also now supports $ and #.
+ Fixed bug #489, which caused the filter 'tags.none:' to fail.
+ Fixed bug #493, which made waiting, recurring tasks invisible (thanks to
Alexander Schremmer).
+ Fixed bug #494, causing imported text files to ultimately lack uuids
(thanks to Elizabeth Maxson).
+ Fixed problem with command line configuration overrides that had no
@@ -97,8 +216,6 @@
+ Clarified the documentation regarding the project name (taskwarrior) and
the program name (task).
------ old releases ------------------------------
1.9.2 (7/10/2010) a13989f18eb34b3363f433c965084b6491425b9f
+ Added feature #320, so the command "task 123" is interpreted as an implicit
"task info 123" command (thanks to John Florian).

293
INSTALL
View File

@@ -1,234 +1,149 @@
Installation Instructions
*************************
-------------------------
Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005,
2006 Free Software Foundation, Inc.
# Building task with autotools is deprecated and will be phased out.
#
# Please follow the instructions below to build task with cmake.
#
# In case you still want or need to build task with autotools:
#
# $ ./configure
# $ make
# $ sudo make install
#
# For more details on using autotools and options to ./configure please refer
# to the autoconf manual.
This file is free documentation; the Free Software Foundation gives
unlimited permission to copy, distribute and modify it.
Pre-requisites
--------------
You will need the CMake build system installed in order to build taskwarrior
from source.
Optionally, you might want to have Lua installed, if you wish to write plugins
and modify taskwarrior.
More information on cmake can be obtained at http://cmake.org
Basic Installation
==================
------------------
Briefly, the shell commands `./configure; make; make install' should
configure, build, and install this package. The following
more-detailed instructions are generic; see the `README' file for
instructions specific to this package.
Briefly, these shell commands will unpack, build and install taskwarrior:
The `configure' shell script attempts to guess correct values for
various system-dependent variables used during compilation. It uses
those values to create a `Makefile' in each directory of the package.
It may also create one or more `.h' files containing system-dependent
definitions. Finally, it creates a shell script `config.status' that
you can run in the future to recreate the current configuration, and a
file `config.log' containing compiler output (useful mainly for
debugging `configure').
$ tar xzf task-X.Y.Z.tar.gz [1]
$ cd task-X.Y.Z [2]
$ cmake . [3]
$ make [4]
$ sudo make install [5]
$ cd .. ; rm -r task-X.Y.Z [6]
It can also use an optional file (typically called `config.cache'
and enabled with `--cache-file=config.cache' or simply `-C') that saves
the results of its tests to speed up reconfiguring. Caching is
disabled by default to prevent problems with accidental use of stale
cache files.
These commands are explained below:
If you need to do unusual things to compile the package, please try
to figure out how `configure' could check whether to do them, and mail
diffs or instructions to the address given in the `README' so they can
be considered for the next release. If you are using the cache, and at
some point `config.cache' contains results you don't want to keep, you
may remove or edit it.
1. Unpacks the source tarball. This creates the directory task-X.Y.Z,
containing all the code.
The file `configure.ac' (or `configure.in') is used to create
`configure' by a program called `autoconf'. You need `configure.ac' if
you want to change it or regenerate `configure' using a newer version
of `autoconf'.
2. Change directory to the root of the distribution.
The simplest way to compile this package is:
3. Invokes CMake to scan for dependencies and machine-specific details, then
generate the makefiles. This may take a minute.
1. `cd' to the directory containing the package's source code and type
`./configure' to configure the package for your system.
4. Builds taskwarrior. This may take a minute.
Running `configure' might take a while. While running, it prints
some messages telling which features it is checking for.
5. Installs the program, documentation and other data files.
2. Type `make' to compile the package.
6. Removes the temporary directory.
3. Optionally, type `make check' to run any self-tests that come with
the package.
4. Type `make install' to install the programs and any data files and
documentation.
Build and configurations options
--------------------------------
5. You can remove the program binaries and object files from the
source code directory by typing `make clean'. To also remove the
files that `configure' created (so you can compile the package for
a different kind of computer), type `make distclean'. There is
also a `make maintainer-clean' target, but that is intended mainly
for the package's developers. If you use it, you may have to get
all sorts of other programs in order to regenerate files that came
with the distribution.
You can customize the configuration run with cmake variables. This will modify the
installation process:
Compilers and Options
=====================
To change the installation directory you use the following configuration variable:
Some systems require unusual options for compilation or linking that the
`configure' script does not know about. Run `./configure --help' for
details on some of the pertinent environment variables.
$ cmake -DCMAKE_INSTALL_PREFIX=<path-to-installation-dir> .
You can give `configure' initial values for configuration parameters
by setting variables in the command line or in the environment. Here
is an example:
cmake configuration variables are applied with the -D option and consist of a <name>
and a <value>:
./configure CC=c99 CFLAGS=-g LIBS=-lposix
$ cmake -D<name>=<value> .
*Note Defining Variables::, for more details.
Four more variables can customize the installation process. The following table lists
them and their defaults plus the CMAKE_INSTALL_PREFIX:
Compiling For Multiple Architectures
====================================
CMAKE_INSTALL_PREFIX /usr/local
TASK_BINDIR bin
TASK_DOCDIR share/doc/task
TASK_MAN1DIR share/man/man1
TASK_MAN5DIR share/man/man5
You can compile the package for more than one kind of computer at the
same time, by placing the object files for each architecture in their
own directory. To do this, you can use GNU `make'. `cd' to the
directory where you want the object files and executables to go and run
the `configure' script. `configure' automatically checks for the
source code in the directory that `configure' is in and in `..'.
The correpsonding TASK_* variables will be combined with CMAKE_INSTALL_PREFIX to get
absolute installation directoris:
With a non-GNU `make', it is safer to compile the package for one
architecture at a time in the source code directory. After you have
installed the package for one architecture, use `make distclean' before
reconfiguring for another architecture.
CMAKE_INSTALL_PREFIZ/TASK_BINDIR /usr/local/bin
CMAKE_INSTALL_PREFIZ/TASK_DOCDIR /usr/local/share/doc/task
CMAKE_INSTALL_PREFIZ/TASK_MAN1DIR /usr/local/share/man/man1
CMAKE_INSTALL_PREFIZ/TASK_MAN5DIR /usr/local/share/man/man5
Installation Names
==================
By default, `make install' installs the package's commands under
`/usr/local/bin', include files under `/usr/local/include', etc. You
can specify an installation prefix other than `/usr/local' by giving
`configure' the option `--prefix=PREFIX'.
Uninstallation
--------------
You can specify separate installation prefixes for
architecture-specific files and architecture-independent files. If you
pass the option `--exec-prefix=PREFIX' to `configure', the package uses
PREFIX as the prefix for installing programs and libraries.
Documentation and other data files still use the regular prefix.
To uninstall taskwarrior, you need the Makefiles, so if you deleted them in
step 7 above, they must first be regenerated by following steps [1], [2] and
[3]. Then simply run:
In addition, if you use an unusual directory layout you can give
options like `--bindir=DIR' to specify different values for particular
kinds of files. Run `configure --help' for a list of the directories
you can set and what kinds of files go in them.
$ sudo make uninstall TODO TODO TODO -- cmake doesn't include uninstall
If the package supports it, you can cause programs to be installed
with an extra prefix or suffix on their names by giving `configure' the
option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
Optional Features
=================
Taskwarrior Build Notes
-----------------------
Some packages pay attention to `--enable-FEATURE' options to
`configure', where FEATURE indicates an optional part of the package.
They may also pay attention to `--with-PACKAGE' options, where PACKAGE
is something like `gnu-as' or `x' (for the X Window System). The
`README' should mention any `--enable-' and `--with-' options that the
package recognizes.
Taskwarrior 1.9.4 has dependencies that are detected by cmake in almost all cases,
but there are situations and operating systems that mean you will need to offer
a little help.
For packages that use the X Window System, `configure' can usually
find the X include and library files automatically, but if it doesn't,
you can use the `configure' options `--x-includes=DIR' and
`--x-libraries=DIR' to specify their locations.
If taskwarrior will not build on your system, first take a look at the Operating
System notes below. If this doesn't help, then go to the Troubleshooting
section, which includes instructions on how to contact us for help.
Specifying the System Type
==========================
There may be some features `configure' cannot figure out automatically,
but needs to determine by the type of machine the package will run on.
Usually, assuming the package is built to be run on the _same_
architectures, `configure' can figure that out, but if it prints a
message saying it cannot guess the machine type, give it the
`--build=TYPE' option. TYPE can either be a short name for the system
type, such as `sun4', or a canonical name which has the form:
Operating System Notes
----------------------
CPU-COMPANY-SYSTEM
Cygwin
If 'make install' fails when writing to the /usr/local/share/ directory,
this may be because your current login doesn't have permission to write
to the Windows directory containing your Cygwin installation. Either
login to Windows as an Administrator and try the 'make install' process
again, or reinstall Cygwin under your normal Windows login.
where SYSTEM can have one of these forms:
OS KERNEL-OS
Darwin
If you're having trouble with Lua, check to see if the include files were
installed. If you're using fink, this will require the lua51-dev package in
addition to lua51.
See the file `config.sub' for the possible values of each field. If
`config.sub' isn't included in this package, then this package doesn't
need to know the machine type.
If you are _building_ compiler tools for cross-compiling, you should
use the option `--target=TYPE' to select the type of system they will
produce code for.
Troubleshooting
---------------
If you want to _use_ a cross compiler, that generates code for a
platform different from the build platform, you should specify the
"host" platform (i.e., that on which the generated programs will
eventually be run) with `--host=TYPE'.
If you've recently made changes to dependencies (by reinstalling Lua, for
example) be sure to rerun 'cmake .' before trying to execute 'make' again.
Sharing Defaults
================
CMake will run and locate all the necessary pieces for the build, and create
a Makefile. There may be errors and warnings when running CMake, or there
may be compiler errors and warnings when running 'make'. Sometimes you will run
CMake with no reported problems, and the build will fail later. This is
almost always because CMake is mistaken about some assumption.
If you want to set default values for `configure' scripts to share, you
can create a site shell script called `config.site' that gives default
values for variables like `CC', `cache_file', and `prefix'.
`configure' looks for `PREFIX/share/config.site' if it exists, then
`PREFIX/etc/config.site' if it exists. Or, you can set the
`CONFIG_SITE' environment variable to the location of the site script.
A warning: not all `configure' scripts look for a site script.
If a build does not succeed, please send the contents of the 'CMakeCache.txt'
and 'CMakeFiles/CMakeOutput.log' files to support@taskwarrior.org, or post a
message in the support forums at taskwarrior.org along with the information.
Defining Variables
==================
Variables not defined in a site shell script can be set in the
environment passed to `configure'. However, some packages may run
configure again during the build, and the customized values of these
variables may be lost. In order to avoid this problem, you should set
them in the `configure' command line, using `VAR=value'. For example:
./configure CC=/usr/local2/bin/gcc
causes the specified `gcc' to be used as the C compiler (unless it is
overridden in the site shell script).
Unfortunately, this technique does not work for `CONFIG_SHELL' due to
an Autoconf bug. Until the bug is fixed you can use this workaround:
CONFIG_SHELL=/bin/bash /bin/bash ./configure CONFIG_SHELL=/bin/bash
`configure' Invocation
======================
`configure' recognizes the following options to control how it operates.
`--help'
`-h'
Print a summary of the options to `configure', and exit.
`--version'
`-V'
Print the version of Autoconf used to generate the `configure'
script, and exit.
`--cache-file=FILE'
Enable the cache: use and save the results of the tests in FILE,
traditionally `config.cache'. FILE defaults to `/dev/null' to
disable caching.
`--config-cache'
`-C'
Alias for `--cache-file=config.cache'.
`--quiet'
`--silent'
`-q'
Do not print messages saying which checks are being made. To
suppress all normal output, redirect it to `/dev/null' (any error
messages will still be shown).
`--srcdir=DIR'
Look for the package's source code in directory DIR. Usually
`configure' can determine that directory automatically.
`configure' also accepts some other, not widely useful, options. Run
`configure --help' for more details.
If CMake runs but taskwarrior does not build, please send the contents of the
above files as well as a transcript from the build, which is not written to a
file and must be captured from the terminal.
---

View File

@@ -3,9 +3,7 @@ SUBDIRS = src
dist_man_MANS = doc/man/task.1 doc/man/taskrc.5 doc/man/task-tutorial.5 doc/man/task-faq.5 doc/man/task-color.5 doc/man/task-sync.5
#docdir = $(datadir)/doc/${PACKAGE}-${VERSION}
doc_DATA = AUTHORS ChangeLog COPYING NEWS README
EXTRA_DIST = INSTALL README.build
doc_DATA = AUTHORS ChangeLog COPYING NEWS README INSTALL
bashscriptsdir = $(docdir)
nobase_dist_bashscripts_DATA = scripts/bash/task_completion.sh
@@ -13,6 +11,12 @@ nobase_dist_bashscripts_DATA = scripts/bash/task_completion.sh
zshscriptsdir = $(docdir)
nobase_dist_zshscripts_DATA = scripts/zsh/_task
addonsdir = $(docdir)
nobase_dist_addons_DATA = scripts/add-ons/export-csv.pl scripts/add-ons/export-ical.pl scripts/add-ons/export-xml.pl scripts/add-ons/export-xml.py scripts/add-ons/export-xml.rb scripts/add-ons/export-yaml.pl
fishdir = $(docdir)
nobase_dist_fish_DATA = scripts/fish/task.fish
vimscriptsdir = $(docdir)
nobase_dist_vimscripts_DATA = scripts/vim/README scripts/vim/ftdetect/task.vim scripts/vim/syntax/taskdata.vim scripts/vim/syntax/taskedit.vim scripts/vim/syntax/taskrc.vim
@@ -20,5 +24,4 @@ i18ndir = $(docdir)
nobase_dist_i18n_DATA = i18n/strings.de-DE i18n/strings.en-US i18n/strings.es-ES i18n/strings.fr-FR i18n/strings.nl-NL i18n/strings.sv-SE i18n/tips.de-DE i18n/tips.en-US i18n/tips.sv-SE
rcfiledir = $(docdir)/rc
dist_rcfile_DATA = doc/rc/holidays-CA.rc doc/rc/holidays-DE.rc doc/rc/holidays-ES.rc doc/rc/holidays-FR.rc doc/rc/holidays-NL.rc doc/rc/holidays-SE.rc doc/rc/holidays-UK.rc doc/rc/holidays-US.rc doc/rc/dark-16.theme doc/rc/dark-256.theme doc/rc/light-16.theme doc/rc/light-256.theme doc/rc/dark-blue-256.theme doc/rc/dark-green-256.theme doc/rc/dark-red-256.theme doc/rc/dark-violets-256.theme doc/rc/dark-yellow-green.theme
dist_rcfile_DATA = doc/rc/dark-16.theme doc/rc/dark-256.theme doc/rc/dark-blue-256.theme doc/rc/dark-green-256.theme doc/rc/dark-red-256.theme doc/rc/dark-violets-256.theme doc/rc/dark-yellow-green.theme doc/rc/holidays-AT.rc doc/rc/holidays-CA.rc doc/rc/holidays-DE.rc doc/rc/holidays-DK.rc doc/rc/holidays-ES.rc doc/rc/holidays-FR.rc doc/rc/holidays-IT.rc doc/rc/holidays-NL.rc doc/rc/holidays-NO.rc doc/rc/holidays-NZ.rc doc/rc/holidays-SE.rc doc/rc/holidays-UK.rc doc/rc/holidays-US.rc doc/rc/light-16.theme doc/rc/light-256.theme doc/rc/dark-gray-256.theme

110
NEWS
View File

@@ -1,77 +1,72 @@
New Features in taskwarrior 1.9.3
New Features in taskwarrior 1.9.4
- Start and stop times for a task can now be recorded as annotations.
- Special tags 'nocolor', 'nocal' and 'nonag'.
- Now supports durations in dates, such as:
$ task ... due:4d
$ task ... due:3wks
- 'sow', 'som' and 'soy' are now accepted in dates. 'soww' and 'eoww' are
now synonyms for 'sow' and 'eow' (ww = working week) 'socw' and 'eocw'
refer to the calendar week (starting Sunday/Monday and
- Now supports the beginning of the week, month and year in dates.
- Now supports 'now' as a date/time.
- Now defines an overdue task as being one second after the due date,
instead of the day after the due date.
- Import and export of YAML 1.1, including round-trip capability, and
detection of duplicate imports.
- New merge capability for syncing task data files.
- New push capability for distributing merged changes.
- New pull capability for copying data files from a remote location.
- When completing or modifying a task, the project status is displayed.
- The 'info' report is now colorized.
- Certain characters (#, $, @) are now supported for use in tags.
- User-controlled color rule precedence.
- Two new color themes.
- New holiday files for US, SE, DE, CA, FR, UK, ES, NL and NO localizations.
- Task dependencies, and new 'blocked' and 'unblocked' reports for list
those tasks.
- New burndown charts.
- New 'count' helper command.
- Inifinite width reports, when redirecting output.
- Added highlighting for the show command that indicates which values differ
from the defaults.
- Added change log display to the 'info' command.
- The first month in the calendar report can now be changed with an offset
value.
- No more dependency on ncurses.
- New '_query' helper command for script writers, which accepts a filter like
any other report, but returns unformatted JSON. The new alias 'export.json'
maps to the _query command.
- Import can now read from files and URLs.
- Assorted bug fixes.
- New literal date "later" and "someday" to be used with the wait attribute to
hide a task until somepoint in time (this sets the wait date to 1/18/2038).
- Total active time now shown on the info report.
- Add-on scripts: export-xml.pl, export-xml.py, export-xml.rb, export-ical.pl,
export-csv.pl and export-yaml.pl.
- New dark-gray-256 color theme.
Please refer to the ChangeLog file for full details. There are too many to
list here.
New commands in taskwarrior 1.9.3
New commands in taskwarrior 1.9.4
- New 'task color legend' command will show samples of all the defined colors
and color rules from your .taskrc and theme.
- New 'task export.yaml' command will export YAML 1.1, which can then be
imported via 'task import <file>'.
- New 'task merge <url>' command that can merge the local and an undo.data
file from another taskwarrior user, to sync across machines, for example.
- New 'task push <url>' command to distribute merged changes.
- New 'task pull <url>' command to copy data files from a remote location.
- New 'diagnostics' command to aid bug reporting.
- 'burndown.daily', 'burndown.weekly', 'burndown.monthly', also with
'burndown' that is an alias to burndown.weekly.
- 'count' accepts a filter, and simply returns a count of the tasks
matching the filter. Used as a helper command by scripts.
- '_query' helper command for all future export formats.
New configuration options in taskwarrior 1.9.3
New configuration options in taskwarrior 1.9.4
- journal.time, journal.time.start.annotation, journal.time.stop.annotation
ending Saturday/Sunday).
- Color rule precedence can now be explicitly set with the configuration
variable rule.precedence.color. Try "task show rule.pre" to show the
default settings.
- merge.autopush to control whether pushing after merging is automated.
- merge.*.uri to configure source locations for the merge command
(e.g. merge.default.uri).
- push.*.uri to configure target locations for the push command.
- pull.*.uri to configure source locations for the pull command.
- dependency.confirm controls whether dependency chain repair needs to be
confirmed.
- dependency.reminder controls whether the user is nagged about dependency
chain violations.
- color.burndown.pending, color.burndown.started and color.burndown.done
control the color of the burndown charts.
- burndown.bias, which is a tweakable control for the completion estimation
for the burndown charts, and is documented in taskrc(5).
- defaultwidth=0 is causes word-wrapping to be turned off, and effectively
set reports to potentially have infinite width .
- journal.info controls whether a change log for each task is displayed by
the 'info' command.
- gc=off can be used, temporarily, to defer GC until later commands, which
eliminates problems with task ID numbers for script writers.
- calendar.offset=off and calendar.offset.value=-1 to apply an offset value
to change the effective first month in the calendar report.
- default.due can be specified, and adds a default due date to all added
and imported tasks that don't otherwise have a due date.
- edit.verbose can be set to 'off' to eliminated the help text when using
the 'task edit' command.
- xterm.title can be set to 'on' to update the xterm window title when a
report is run.
- new holidays configuration file for New Zealand, Italy, Austria.
Newly deprecated features in taskwarrior 1.9.3
Newly deprecated features in taskwarrior 1.9.4
- entry_time, start_time and end_time are now synonyms for the entry, start
and end fields. Recent enhancements to date formatting render these fields
obsolete. The 'task show' command warns of the use of these deprecated
fields. The synonyms will be removed in a future version of taskwarrior.
- The export commands (export, export.csv, export.yaml, export.ical and
export.vcalendar) are deprecated, and will be replaced in future releases
by add-on scripts.
---
Taskwarrior has been built and tested on the following configurations:
* OS X 10.6 Snow Leopard and 10.5 Leopard
* Fedora 13 Goddard, 12 Constantine
* Fedora 14 Laughlin, 13 Goddard
* Ubuntu 10.10 Maverick Meerkat, 10.04 Lucid Lynx
* Debian Sid
* Slackware 12.2
@@ -83,6 +78,7 @@ Taskwarrior has been built and tested on the following configurations:
* Solaris 10 and 8
* OpenBSD 4.5
* FreeBSD
* NetBSD
* Cygwin 1.7 and 1.5
* Haiku R1/alpha1

View File

@@ -1,98 +0,0 @@
Taskwarrior Build Notes
----------------
Taskwarrior 1.9 has dependencies that are detected by the configure program in
almost all cases, but there are situations and operating systems that mean you
will need to offer configure a little help.
If taskwarrior will not build on your system, first take a look at the Operating
System notes below. If this doesn't help, then go to the Troubleshooting
section, which includes instructions on how to contact us for help.
Operating System Notes
----------------------
Cygwin 1.7
Building taskwarrior on Cygwin 1.7 requires a configure option:
./configure --with-ncurses-inc=/usr/include/ncurses
This is because the ncurses include files are in a different location to
Cygwin 1.5.
Haiku Alpha/R1
Taskwarrior must be built with gcc version 4.x, so make sure you run:
$ setgcc gcc4
To switch from gcc 2.95 to gcc 4.x.
Troubleshooting
---------------
In most cases, it is sufficient to run the configure program like this:
$ ./configure
Configure will run and locate all the necessary pieces for the build, and create
a Makefile. There may be errors and warnings when running configure, or there
may be compiler errors and warnings when running 'make'. Sometimes you will run
configure with no reported problems, and the build will fail later. This is
almost always because configure is mistaken about some assumption.
The configure program can accept several options that help with its ability to
locate and use the ncurses library. They are:
--with-ncurses
This option tells configure that no matter what it thinks, ncurses is
definitely on this system and should be enabled. If needed, this option
probable needs to be accompanied by the next two options.
--with-ncurses-inc=/usr/include
If configure cannot find ncurses header files, this option will tell it
exactly where to look. The path specified in this example is the default,
so that probably won't help you. The path should be the directory in which
the file 'ncurses.h' resides. Here are some possible values to try:
/usr/include (the default shown above)
/usr/include/ncurses
/usr/local/include
/usr/local/include/ncurses
This should cover most systems, but new variations keeps cropping up.
--with-ncurses-lib=/usr/lib
If configure cannot find the ncurses library, this option will tell it
exactly where to look. The path specified in this example is the default,
so that probably won't help you. The path should be the directory in which
the file 'libncurses.a' (or your system's equivalent) resides. Here are
some possible values to try:
/usr/lib
/usr/local/lib
This should cover most systems, but new variations keeps cropping up.
--without-ncurses
This disables ncurses support in taskwarrior, and should really be used as a
last resort. We know of no systems where this is needed.
If trying these options does not succeed, please send the contents of the
'config.log' files to support@taskwarrior.org, or post a message in the support
forums at taskwarrior.org along with the information.
If configure runs, but taskwarrior does not build, when ideally you would send
both the contents of config.log, and a transcript from the build, which is not
written to a file, and must be captured from the terminal.
---

48
cmake.h.in Normal file
View File

@@ -0,0 +1,48 @@
/* cmake.h.in. Creates auto.h during a cmake run */
/* Package information */
#define PACKAGE "${PACKAGE}"
#define VERSION "${VERSION}"
#define PACKAGE_BUGREPORT "${PACKAGE_BUGREPORT}"
#define PACKAGE_NAME "${PACKAGE_NAME}"
#define PACKAGE_TARNAME "${PACKAGE_TARNAME}"
#define PACKAGE_VERSION "${PACKAGE_VERSION}"
#define PACKAGE_STRING "${PACKAGE_STRING}"
/* git information */
#cmakedefine HAVE_COMMIT
/* cmake information */
#cmakedefine HAVE_CMAKE
#define CMAKE_VERSION "${CMAKE_VERSION}"
/* Compiling platform */
#cmakedefine LINUX
#cmakedefine DARWIN
#cmakedefine CYGWIN
#cmakedefine FREEBSD
#cmakedefine OPENBSD
#cmakedefine HAIKU
#cmakedefine SOLARIS
#cmakedefine WIN32
#cmakedefine UNKNOWN
/* Found the lua library */
#cmakedefine HAVE_LIBLUA
/* Found the pthread library */
#cmakedefine HAVE_LIBPTHREAD
/* Found the readline library */
#cmakedefine HAVE_READLINE
#cmakedefine HAVE_LIBREADLINE
/* Found random */
#cmakedefine HAVE_RANDOM
/* Found srandom */
#cmakedefine HAVE_SRANDOM
/* Found uuid_unparse_lower */
#cmakedefine HAVE_UUID

4
commit.h.in Normal file
View File

@@ -0,0 +1,4 @@
/* commit.h.in. Creates commit.h during a cmake run */
/* git information */
#define COMMIT "${COMMIT}"

View File

@@ -2,7 +2,7 @@
# Process this file with autoconf to produce a configure script.
AC_PREREQ(2.61)
AC_INIT(task, 1.9.3, support@taskwarrior.org)
AC_INIT(task, 1.9.4, support@taskwarrior.org)
# Source type.
@@ -64,37 +64,6 @@ else
fi
# ncurses enabled by default.
AC_ARG_WITH([ncurses],
[AS_HELP_STRING([--without-ncurses], [disable support for ncurses])],
[with_ncurses=no],
[with_ncurses=yes])
AC_ARG_WITH([ncurses-inc],
[AS_HELP_STRING ([--with-ncurses-inc=DIR], [ncurses include files are in DIR])],
[ncurses_inc=$withval],
[ncurses_inc=''])
AC_ARG_WITH([ncurses-lib],
[AS_HELP_STRING ([--with-ncurses-lib=DIR], [ncurses lib files are in DIR])],
[ncurses_lib=$withval],
[ncurses_lib=''])
if test "x$with_ncurses" = "xyes" ; then
AC_DEFINE([HAVE_LIBNCURSES], [1], [Defined if you have libncurses])
if test -n "$ncurses_inc"; then
CFLAGS="$CFLAGS -I$ncurses_inc"
CXXFLAGS="$CXXFLAGS -I$ncurses_inc"
fi
if test -n "$ncurses_lib"; then
LDFLAGS="$LDFLAGS -L$ncurses_lib"
fi
AC_CHECK_LIB([ncurses],[main])
fi
# Readline enabled by default.
#AC_ARG_WITH([readline],
# [AS_HELP_STRING([--without-readline], [disable support for readline])],
@@ -144,6 +113,7 @@ AC_ARG_WITH([lua-lib],
if test "x$with_lua" = "xyes" ; then
AC_DEFINE([HAVE_LIBLUA], [1], [Defined if you have liblua])
if test -n "$lua_inc"; then
CFLAGS="$CFLAGS -I$lua_inc"
CXXFLAGS="$CXXFLAGS -I$lua_inc"
@@ -154,6 +124,26 @@ if test "x$with_lua" = "xyes" ; then
fi
AC_CHECK_LIB([lua],[main])
# The following code should replace the one line above, but is not working.
# Anyone know why?
# # check for lua. this is separate from the above libraries because it's
# # liblua50 on debian and liblua everywhere else.
# AC_CHECK_LIB(lua, lua_open, LIB_LUA="-llua")
# AC_CHECK_LIB(lualib, luaopen_base, LIB_LUA_LIB=-llualib, , [$LIB_LUA -ldl -lm])
#
# if test "x${LIB_LUA}" = "x"; then
# echo "Could not find liblua. Please install liblua 5.1+"
# exit 1
# fi
#
# if test "x${LIB_LUA_LIB}" = "x"; then
# echo "Could not find liblualib. Please install liblualib 5.1+"
# exit 1
# fi
#
# LDFLAGS="$LDFLAGS $LIB_LUA $LIB_LUA_LIB"
fi

13
doc/CMakeLists.txt Normal file
View File

@@ -0,0 +1,13 @@
message ("-- Configuring man pages")
set (man_FILES task-color.5 task-faq.5 task-sync.5 task-tutorial.5 task.1 taskrc.5)
foreach (man_FILE ${man_FILES})
configure_file (
man/${man_FILE}.in
man/${man_FILE})
endforeach (man_FILE)
install (DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/man/ DESTINATION ${TASK_MAN1DIR}
FILES_MATCHING PATTERN "*.1")
install (DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/man/ DESTINATION ${TASK_MAN5DIR}
FILES_MATCHING PATTERN "*.5")
install (DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/rc DESTINATION ${TASK_DOCDIR})

6
doc/man/.gitignore vendored Normal file
View File

@@ -0,0 +1,6 @@
task-color.5
task-faq.5
task-sync.5
task-tutorial.5
task.1
taskrc.5

View File

@@ -1,4 +1,4 @@
.TH task-color 5 2010-10-07 "task 1.9.3" "User Manuals"
.TH task-color 5 2011-03-03 "${PACKAGE_STRING}" "User Manuals"
.SH NAME
task-color \- A color tutorial for the task(1) command line todo manager.
@@ -236,13 +236,13 @@ It is possible to create a very colorful mix of rules. With 256-color support,
those colors can be made subtle, and complementary, but without care, this can
be a visual mess. Beware!
The precedence for the color rules is determined by the configuration variable
'rule.precedence.color', which by default contains:
The precedence for the color rules is determined by the configuration
variable 'rule.precedence.color', which by default contains:
due.today,active,blocked,overdue,due,keyword,project,tag,recurring,pri,tagged
These are just the color rules with the 'color.' prefix removed. The rule
'color.due.today' is the highest precedence, and 'color.tagged' is the lowest.
These are just the color rules with the 'color.' prefix removed. The
rule 'color.due.today' is the highest precedence, and 'color.tagged' is the lowest.
The keyword rule shown here as 'keyword' corresponds to a wildcard pattern,
meaning 'color.keyword.*', or in other words all the keyword rules. Similarly
@@ -290,7 +290,7 @@ on <http://taskwarrior.org>.
.SH "CREDITS & COPYRIGHTS"
Taskwarrior was written by P. Beckingham <paul@beckingham.net>.
.br
Copyright (C) 2006 \- 2010 P. Beckingham
Copyright (C) 2006 \- 2011 P. Beckingham
This man page was originally written by Paul Beckingham.

View File

@@ -1,4 +1,4 @@
.TH task-faq 5 2010-10-07 "task 1.9.3" "User Manuals"
.TH task-faq 5 2011-03-03 "${PACKAGE_STRING}" "User Manuals"
.SH NAME
task-faq \- A FAQ for the task(1) command line todo manager.
@@ -21,6 +21,14 @@ Prevent this with the following entry in your .taskrc file:
_forcecolor=on
There is an additional problem with using pagers such as 'less' and 'more'.
When using less, these options will preserve the color codes:
task ... | less -FrX
There have been problems reported with the Linux 'more' pager, which inserts
newline characters.
.TP
.B Q: How do I backup my taskwarrior data files? Where are they?
A: Taskwarrior writes all pending tasks to the file
@@ -61,23 +69,6 @@ automatically upgrade the file but if you need to revert to a previous version
of taskwarrior, there is the file format to consider. This is yet another good
reason to back up your task data files!
.TP
.B Q: I'm using Ubuntu 9.04, and I want to word-wrap descriptions. How do I do this?
A: You need to install ncurses, by doing this:
% sudo apt-get install libncurses5-dev
Then you need to rebuild taskwarrior from scratch, starting with
% cd task-X.X.X
% ./configure
...
The result should be a taskwarrior program that knows the width of the terminal
window, and wraps accordingly.
Note that all the binary packages include this capability.
.TP
.B Q: How do I build taskwarrior under Cygwin?
A: Take a look at the README.build file, where the latest information on build
@@ -86,15 +77,9 @@ you'll need to make sure you have the following packages available first:
gcc
make
libncurses-devel
libncurses8
The gcc and make packages allow you to compile the code, and are therefore
required, but the ncurses packages are optional. Ncurses will allow taskwarrior
to determine the width of the window, and therefore use the whole width and wrap
text accordingly, for a more aesthetically pleasing display.
Note that there are binary packages that all include this capability.
required.
.TP
.B Q: Do colors work under Cygwin?
@@ -315,6 +300,17 @@ non-exact match:
This will remove the second annotation - the first non-exact match.
.TP
.B Q: Why Lua as an extension language?
Lua has many positive attributes:
- Lua is written using tight, fast, standard C
- Lua is a breeze to integrate into any product
- The Lua source code is beautifully written
- Lua is a small language
Guile, Scheme and Neko were also considered.
.TP
.B Q: How can I help?
There are lots of ways. Here are some:
@@ -331,7 +327,7 @@ There are lots of ways. Here are some:
.SH "CREDITS & COPYRIGHTS"
Taskwarrior was written by P. Beckingham <paul@beckingham.net>.
.br
Copyright (C) 2006 \- 2010 P. Beckingham
Copyright (C) 2006 \- 2011 P. Beckingham
This man page was originally written by P. Beckingham.

View File

@@ -1,4 +1,4 @@
.TH task-sync 5 2010-10-07 "task 1.9.3" "User Manuals"
.TH task-sync 5 2011-03-03 "${PACKAGE_STRING}" "User Manuals"
.SH NAME
task-sync \- A tutorial for the task(1) data synchronization capabilities.
@@ -109,9 +109,9 @@ All the other URIs allow access to remote machines. The first uses SSH and scp
.br
.RS
ssh://[user@]host[:port]:path/to/undo.data
ssh://[user@]host[:port]/path/to/undo.data
.br
[user@]host[:port]:/path/
[user@]host:/path/
.RE
Rsync is another supported protocol that minimizes network traffic, by a clever
@@ -131,7 +131,22 @@ http://host[:port]/path/to/undo.data
.br
https://host[:port]/path/to/undo.data
.br
ftp://user@host[:port]/path/to/undo.data
ftp://[user@]host[:port]/path/to/undo.data
.RE
You can use single quotes to encapsulate user names that contain delimiting
characters like '@', '/' or ':', e.g.:
.br
.RS
ssh://'user@name'@host/
.RE
Remember to escape the quotes on your shell:
.br
.RS
$ task push ftp://\'user@name\':host/
.RE
.SH CONFLICTS
@@ -310,10 +325,10 @@ used for synchronization.
.SH "CREDITS & COPYRIGHTS"
task was written by P. Beckingham <paul@beckingham.net>.
.br
Copyright (C) 2006 \- 2010 P. Beckingham, F. Hernandez.
Copyright (C) 2006 \- 2011 P. Beckingham, F. Hernandez.
The sync capabilities were written by J. Schlatow.
Parts copyright (C) 2010 J. Schlatow.
Parts copyright (C) 2010 - 2011 J. Schlatow.
task is distributed under the GNU General Public License. See
http://www.gnu.org/licenses/gpl-2.0.txt for more information.

View File

@@ -1,4 +1,4 @@
.TH task-tutorial 5 2010-10-07 "task 1.9.3" "User Manuals"
.TH task-tutorial 5 2011-03-03 "${PACKAGE_STRING}" "User Manuals"
.SH NAME
task-tutorial \- A tutorial for the task(1) command line todo manager.
@@ -1985,7 +1985,7 @@ need to prefix every command with "task".
.RS
$ task shell
.br
task 1.9.3 shell
task 1.9.4 shell
.br
.br
@@ -3319,7 +3319,7 @@ BEGIN:VCALENDAR
.br
VERSION:2.0
.br
PRODID:-//GBF//task 1.9.3.beta1//EN
PRODID:-//GBF//task 1.9.4.beta1//EN
.br
BEGIN:VTODO
.br
@@ -3478,7 +3478,7 @@ $ task help
.SH "CREDITS & COPYRIGHTS"
task was written by P. Beckingham <paul@beckingham.net>.
.br
Copyright (C) 2006 \- 2010 P. Beckingham
Copyright (C) 2006 \- 2011 P. Beckingham
This man page was originally written by Federico Hernandez, and has been modified and supplemented by Paul Beckingham.

View File

@@ -1,4 +1,4 @@
.TH task 1 2010-10-07 "task 1.9.3" "User Manuals"
.TH task 1 2011-03-03 "${PACKAGE_STRING}" "User Manuals"
.SH NAME
task \- A command line todo manager.
@@ -35,9 +35,10 @@ Adds an annotation to an existing task.
.TP
.B denotate ID description
Deletes an annotation for the specified task. If the provided description matches an
annotation exactly, the corresponding annotation is deleted. If the provided description
matches annotations partly, the first partly matched annotation is deleted.
Deletes an annotation for the specified task. If the provided description
matches an annotation exactly, the corresponding annotation is deleted. If the
provided description matches annotations partly, the first partly matched
annotation is deleted.
.TP
.B info ID
@@ -49,7 +50,7 @@ With an ID but no specific command, taskwarrior runs the "info" command.
.TP
.B undo
Reverts the most recent action.
Reverts the most recent action. Obeys the confirmation setting.
.TP
.B shell
@@ -110,6 +111,18 @@ Shows a graphical report of task status by month. Alias to ghistory.monthly.
.B ghistory.annual
Shows a graphical report of task status by year.
.TP
.B burndown.daily
Shows a graphical burndown chart, by day.
.TP
.B burndown.weekly
Shows a graphical burndown chart, by week.
.TP
.B burndown.monthly
Shows a graphical burndown chart, by month.
.TP
.B calendar [ y | due [y] | month year [y] | year ]
Shows a monthly calendar with due tasks marked.
@@ -120,33 +133,37 @@ Shows task database statistics.
.TP
.B import \fIfile
Imports tasks from a variety of formats.
Imports tasks in a variety of formats, from file or URL.
.TP
.B export
Exports all tasks in the default format. This is an alias to the command export.yaml.
Redirect the output to a file, if you wish to save it, or pipe it to another command.
Exports all tasks in the default format. This is an alias to the command
export.yaml. Redirect the output to a file, if you wish to save it, or pipe it
to another command.
.TP
.B export.csv
Exports all tasks in CSV format.
Redirect the output to a file, if you wish to save it, or pipe it to another command.
Redirect the output to a file, if you wish to save it, or pipe it to another
command.
.TP
.B export.ical
Exports all tasks in iCalendar format.
Redirect the output to a file, if you wish to save it, or pipe it to another command.
Redirect the output to a file, if you wish to save it, or pipe it to another
command.
.TP
.B export.yaml
Exports all tasks in YAML 1.1 format.
Redirect the output to a file, if you wish to save it, or pipe it to another command.
Redirect the output to a file, if you wish to save it, or pipe it to another
command.
.TP
.B merge URL
Merges two task databases by comparing the modifications that are stored in the
undo.data files. The location of the second undo.data file must be passed on as argument. URL may have the following syntaxes:
undo.data files. The location of the second undo.data file must be passed on as
argument. URL may have the following syntaxes:
ssh://[user@]host.xz[:port]/path/to/undo.data
@@ -176,6 +193,10 @@ Overwrites the task database with those files found at the URL.
Displays all possible colors, a named sample, or a legend containing all
currently defined colors.
.TP
.B count [filter]
Displays only a count of tasks matching the filter.
.TP
.B version
Shows the taskwarrior version number
@@ -215,16 +236,25 @@ Modifies the existing task with provided information.
.TP
.B ID /from/to/
Performs one substitution on task description and annotation for fixing mistakes.
Performs one substitution on task description and annotation for fixing
mistakes.
If either 'from' or 'to' contain spaces, you will need to put quotes around
the whole thing.
.TP
.B ID /from/to/g
Performs all substitutions on task description and annotation for fixing mistakes.
Performs all substitutions on task description and annotation for fixing
mistakes.
If either 'from' or 'to' contain spaces, you will need to put quotes around
the whole thing.
.TP
.B edit ID
Launches an editor to let you modify all aspects of a task directly.
Use carefully.
In general, this is not the recommended method of modifying tasks, but is
provided for exceptional circumstances. Use carefully.
.TP
.B append [tags] [attrs] description
@@ -242,67 +272,86 @@ these reports can be configured in the configuration file. See also the man page
taskrc(5).
.TP
.B active [tags] [attrs] [description]
Shows all tasks matching the specified criteria
that are started but not completed.
.B active [filter]
Shows all tasks matching the filter that are started but not completed.
.TP
.B all [tags] [attrs] [description]
Shows all tasks matching the specified criteria.
.B all [filter]
Shows all tasks matching the filter, including parents of recurring tasks.
.TP
.B completed [tags] [attrs] [description]
Shows all tasks matching the specified criteria
that are completed.
.B completed [filter]
Shows all tasks matching the filter that are completed.
.TP
.B minimal [tags] [attrs] [description]
Provides a minimal listing of tasks with specified criteria.
.B minimal [filter]
Provides a minimal listing of tasks matching the filter.
.TP
.B ls [tags] [attrs] [description]
Provides a short listing of tasks with specified criteria.
.B ls [filter]
Provides a short listing of tasks matching the filter.
.TP
.B list [tags] [attrs] [description]
Provides a more detailed listing of tasks with specified criteria.
.B list [filter]
Provides a more detailed listing of tasks matching the filter.
.TP
.B long [tags] [attrs] [description]
Provides the most detailed listing of tasks with specified criteria.
.B long [filter]
Provides the most detailed listing of tasks with filter.
.TP
.B newest [tags] [attrs] [description]
Shows the newest tasks with specified criteria.
.B newest [filter]
Shows the newest tasks with filter.
.TP
.B oldest [tags] [attrs] [description]
Shows the oldest tasks with specified criteria
.B oldest [filter]
Shows the oldest tasks with filter
.TP
.B overdue [tags] [attrs] [description]
Shows all incomplete tasks matching the specified criteria
.B overdue [filter]
Shows all incomplete tasks matching the filter
that are beyond their due date.
.TP
.B recurring [tags] [attrs] [description]
Shows all recurring tasks matching the specified criteria.
.B recurring [filter]
Shows all recurring tasks matching the filter.
.TP
.B waiting [tags] [attrs] [description]
Shows all waiting tasks matching the specified criteria.
.B waiting [filter]
Shows all waiting tasks matching the filter.
.TP
.B blocked [tags] [attrs] [description]
Shows all blocked tasks, that are dependent on other tasks.
.B blocked [filter]
Shows all blocked tasks, that are dependent on other tasks, matching the filter.
.TP
.B unblocked [tags] [attrs] [description]
Shows all tasks that are not blocked by dependencies.
.B unblocked [filter]
Shows all tasks that are not blocked by dependencies, matching the filter.
.TP
.B next [tags] [attrs] [description]
Shows all tasks with upcoming due dates matching the specified criteria.
.B next [filter]
Shows all tasks with upcoming due dates matching the filter.
.SH FILTERS
A filter is a set of search criteria that the report applies before displaying
the results. For example, to list all tasks belonging to the 'Home' project:
task list project:Home
You can specify multiple filters, each of which further restrict the results:
task list project:Home +weekend garden
This example applies three filters: the 'Home' project, the 'weekend' tag, and
the description or annotations must contain the characters 'garden'. In this
example, 'garden' is translated internally to:
description.contains:garden
as a convenient shortcut. The 'contains' here is an attribute modifier, which
is used to exert more control over the filter than simply absence or presence.
See 'ATTRIBUTE MODIFIERS' for a complete list of modifiers.
.SH ATTRIBUTES AND METADATA
@@ -362,12 +411,18 @@ Specifies background color.
Specifies the desired number of tasks a report should show, if a positive
integer is given. The value 'page' may also be used, and will limit the
report output to as many lines of text as will fit on screen. This defaults
to 25 lines, if ncurses is not installed or enabled.
to 25 lines.
.TP
.B wait:<wait-date>
Date until task becomes pending.
.TP
.B depends:<id1,id2 ...>
Declares this task to be dependent on id1 and id2. This means that the tasks
id1 and id2 should be completed before this task. Consequently, this task will
then show up on the 'blocked' report.
.SH ATTRIBUTE MODIFIERS
Attribute modifiers improve filters. Supported modifiers are:
@@ -403,6 +458,86 @@ For example:
task list due.before:eom priority.not:L
.RE
The
.I before
modifier is used to compare values, preserving semantics, so project.before:B
list all projects that begin with 'A'. Priority 'L' is before 'M', and
due:2011-01-01 is before due:2011-01-02. The synonyms 'under' and 'below' are
included to allow filters that read more naturally.
The
.I after
modifier is the inverse of the
.I before
modifier.
The
.I none
modifier requires that the attribute does not have a value. For example:
task list priority:
task list priority.none:
are equivalent, and list tasks that do not have a priority.
The
.I any
modifier requires that the attribute has a value, but any value will suffice.
The
.I is
modifier requires an exact match with the value.
The
.I isnt
modifier is the inverse of the
.I is
modifier.
The
.I has
modifier is used to search for a substring, such as:
task list description.has:foo
task list foo
which are equivalent and will return any task that has 'foo' in the description
or annotations.
The
.I hasnt
modifier is the inverse of the
.I has
modifier.
The
.I startswith
modifier matches against the left, or beginning of an attribute, such that:
task list project.startswith:H
task list project:H
are equivalent and will match any project starting with 'H'.
The
.I endswith
modifier matches against the right, or end of an attribute.
The
.I word
modifier requires that the attribute contain the whole word specified, such
that this:
task list description.word:bar
will match the description 'foo bar baz' but does not match 'dog food'.
The
.I noword
modifier is the inverse of the
.I word
modifier.
.SH SPECIFYING DATES AND FREQUENCIES
.SS DATES
@@ -461,6 +596,15 @@ task ... due:eom
.br
task ... due:eoy
.TP
At some point or later
.br
task ... wait:later
.br
task ... wait:someday
This sets the wait date to 1/18/2038.
.TP
Next occurring weekday
task ... due:fri
@@ -507,7 +651,8 @@ Every two years.
.SH COMMAND ABBREVIATION
All taskwarrior commands may be abbreviated as long as a unique prefix is used. E.g.
All taskwarrior commands may be abbreviated as long as a unique prefix is used,
for example:
.RS
$ task li
@@ -546,6 +691,19 @@ as description:
$ task add -- project:Home needs scheduling
.RE
In other situations, the shell sees spaces and breaks up arguments. For
example, this command:
.RS
$ task 123 /from this/to that/
.RE
is broken up into several arguments, which is corrected with quotes:
.RS
$ task 123 "/from this/to that/"
.RE
.SH CONFIGURATION FILE AND OVERRIDE OPTIONS
Taskwarrior stores its configuration in a file in the user's home directory:
~/.taskrc . The default configuration file can be overridden with
@@ -593,7 +751,7 @@ can be configured in the configuration file.
.SH "CREDITS & COPYRIGHTS"
Taskwarrior was written by P. Beckingham <paul@beckingham.net>.
.br
Copyright (C) 2006 \- 2010 P. Beckingham
Copyright (C) 2006 \- 2011 P. Beckingham
This man page was originally written by P.C. Shyamshankar, and has been modified
and supplemented by Federico Hernandez.

View File

@@ -1,4 +1,4 @@
.TH taskrc 5 2010-10-07 "task 1.9.2" "User Manuals"
.TH taskrc 5 2011-03-03 "${PACKAGE_STRING}" "User Manuals"
.SH NAME
taskrc \- Configuration file for the task(1) command
@@ -146,6 +146,13 @@ files on an NFS mount may need to set locking to "off". Note that there is
danger in setting this value to "off" - another program (or another instance of
task) may write to the task.pending file at the same time.
.TP
.B gc=on
Can be used to temporarily suspend garbage collection (gc), so that task IDs
don't change. Note that this should be used in the form of a command line
override (task rc.gc=off ...), and not permanently used in the .taskrc file,
as this significantly affects performance.
.SS TERMINAL
.TP
.B curses=on
@@ -155,6 +162,8 @@ using, for text wrapping.
.TP
.B defaultwidth=80
The width of tables used when ncurses support is not available. Defaults to 80.
If set to 0, is interpreted as infinite width, therefore with no word-wrapping;
useful when redirecting report output to a file for subsequent manipulation.
.TP
.B editor=vi
@@ -164,6 +173,13 @@ command is used. Taskwarrior will first look for this configuration variable. If
found, it is used. Otherwise it will look for the $VISUAL or $EDITOR
environment variables, before it defaults to using "vi".
.TP
.B edit.verbose=on
When set to on (the default), helpful explanatory comments are added to the
edited file when using the "task edit ..." command. Setting this to off means
that you would see a smaller, more compact representation of the task, with no
help text.
.SS MISCELLANEOUS
.TP
@@ -180,8 +196,9 @@ Controls some of the verbosity of taskwarrior.
.TP
.B confirmation=yes
May be "yes" or "no", and determines whether taskwarrior will ask for
confirmation before deleting a task or doing bulk changes. The default value
is "yes".
confirmation before deleting a task, performing bulk changes, or the undo
command. The default value is "yes". Consider leaving this setting as "no",
for safety.
.TP
.B echo.command=yes
@@ -253,6 +270,13 @@ names you have used, or just the ones used in active tasks. The default value i
May be yes or no, and determines whether keyword lookup and substitutions on the
description and annotations are done in a case sensitive way. Defaults to yes.
The default value is off, because this advanced feature could cause confusion
among users that are not comfortable with regular expressions.
.TP
.B xterm.title=no
Sets the xterm window title when reports are run. Defaults to off.
.TP
.B _forcecolor=no
Taskwarrior shuts off color automatically when the output is not sent directly
@@ -306,6 +330,16 @@ comparison of the data. This can be in either the 'side' style, which compares
values side-by-side in a table, or 'diff' style, which uses a format similar to
the 'diff' command.
.TP
.B burndown.bias=0.666
The burndown bias is a number that lies within the range 0 <= bias <= 1. The bias
is the fraction of the find/fix rates derived from the short-term data (last
25% of the report) versus the longer term data (last 50% of the report). A
value of 0.666 (the default) means that the short-term rate has twice the weight
of the longer-term rate. The calculation is as follows:
rate = (long-term-rate * (1 - bias)) + (short-term-rate * bias)
.TP
.B debug=off
Taskwarrior has a debug mode that causes diagnostic output to be displayed.
@@ -403,6 +437,12 @@ a D b Y (V) would do an output as "Fri 24 Jul 2009 (30)"
A, B D, Y would do an output as "Friday, July 24, 2009"
.br
vV a Y-M-D would do an output as "v30 Fri 2009-07-24"
.br
yMD.HN would do an output as "110124.2342"
.br
m/d/Y H:N would do an output as "1/24/2011 10:42"
.br
a D b Y H:N:S would do and output as "Mon 24 Jan 2011 11:19:42"
.RE
.RE
@@ -436,6 +476,16 @@ is "sparse".
The report to run when displaying the details of tasks with due date when
running the "task calendar" command. The default value is "list".
.TP
.B calendar.offset=off
If "on" the first month in the calendar report is effectively changed by the
offset value specified in calendar.offset.value. It defaults to "off".
.TP
.B calendar.offset.value=-1
The offset value to apply to the first month in the calendar report. The default
value is "-1".
.TP
.B calendar.holidays=full
If set to full running "task calendar" will display holidays in the calendar by
@@ -450,16 +500,23 @@ turned off by setting the variable to none. The default value is "none".
.B journal.time=no
May be yes or no, and determines whether the 'start' and 'stop' commands should
record an annotation when being executed. The default value is "no". The text of
the corresponding annotations is controlled by
the corresponding annotations is controlled by:
.TP journal.time.start.annotation=Started task
.TP
.B journal.time.start.annotation=Started task
The text of the annotation that is recorded when executing the start command and
having set journal.time.
.TP journal.time.stop.annotation=Stopped task
.TP
.B journal.time.stop.annotation=Stopped task
The text of the annotation that is recorded when executing the stop command and
having set journal.time.
.TP
.B journal.info=on
When enabled, this setting causes a change log of each task to be displayed by
the 'info' command. Default value is "on".
.SS Holidays
Holidays are entered either directly in the .taskrc file or via an include file
that is specified in .taskrc. For each holiday the name and the date is
@@ -701,6 +758,19 @@ Colors the bars on the ghistory report graphs. Defaults to red, green and
yellow bars.
.RE
.TP
.B color.burndown.pending=on red
.RE
.br
.B color.burndown.started=on yellow
.RE
.br
.B color.burndown.done=on green
.RS
Colors the bars on the burndown reports graphs. Defaults to red, green and
yellow bars.
.RE
.TP
.B color.undo.before=red
.RE
@@ -775,6 +845,13 @@ Provides a default priority for the
.I task add
command, if you don't specify one. The default is blank.
.TP
.B
default.due=...
Provides a default due date for the
.I task add
command, if you don't specify one. The default is blank.
.TP
.B
default.command=list
@@ -926,7 +1003,7 @@ Lists all tasks with upcoming due dates matching the specified criteria.
.SH "CREDITS & COPYRIGHTS"
Taskwarrior was written by P. Beckingham <paul@beckingham.net>.
.br
Copyright (C) 2006 \- 2010 P. Beckingham
Copyright (C) 2006 \- 2011 P. Beckingham
This man page was originally written by Federico Hernandez.

View File

@@ -1,40 +1,241 @@
# This document defines the BNF grammar that will be supported in Taskwarrior
# 2.1.
# This is a full BNF grammar for the taskwarrior command line. It is intended
# that a future release of taskwarrior will incorporate a complete lexer/parser
# implementing this grammar, which will allow for more sophisticated command
# lines, for example:
#
# task delete 1 2 4-7
# task add pri:H pro:X -- pro pri 1 ///
#
command ::= simple_command
| filter_command filter?
| id_command
| "export" file
| <id>
| <id> <substitution> ;
# Commands (alphabetically)
simple_command ::= "version" | "help" | "projects" | "tags" | "next" | "stats"
| "color" ;
command_add ::= "add" ws+ task-elements ;
filter_command ::= "summary" | "history" | "calendar" | "active" | "overdue"
| "oldest" | "newest" | "add" | "list" | "long" | "ls"
| "completed" ;
command_annotate ::= "annotate" ws+ range ws+ words ;
id_command ::= "delete" | "undelete" | "info" | "start" | "end" | "done"
| "undo" ;
command_append ::= "append" ws+ range ws+ words ;
filter ::= filter_part+ ;
command_burndown ::= "burndown.monthly" ws+ filter
| "burndown.weekly" ws+ filter
| "burndown.daily" ws+ filter
| "burndown.monthly"
| "burndown.weekly"
| "burndown.daily"
;
filter_part ::= tag_add | tag_remove | attribute | word ;
command_calendar ::= "calendar" ws+ "due" ws+ filter
| "calendar" ws+ "due"
| "calendar" ws+ "y" ws+ filter
| "calendar" ws+ "y"
| "calendar" ws+ year ws+ filter
| "calendar" ws+ year
| "calendar" ws+ year ws+ month ws+ filter
| "calendar" ws+ year ws+ month
| "calendar" ws+ month-name ws+ filter
| "calendar" ws+ month-name
| "calendar" ws+ filter
| "calendar"
;
tag_add ::= "+" word ;
tag_remove ::= "-" word ;
attribute ::= word ":" word ;
word ::=
file ::=
id ::= digit+ ;
digit ::= "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" ;
substitution ::= "/" word+ "/" word* "/" "g"? ;
command_colors ::= "colors" ws+ "legend"
| "colors" ws+ "sample"
| "colors"
;
command_config ::= "config" ws+ word ws+ words
| "config" ws+ word
;
command_count ::= "count" ws+ filter
| "count"
;
# TODO en-passant
command_delete ::= "delete" ws+ range ;
command_denotate ::= "denotate" ws+ range ws+ pattern ;
command_diagnostics ::= "diagnostics" ;
# TODO en-passant
command_done ::= "done" ws+ range ;
# TODO en-passant
command_duplicate ::= "duplicate" ws+ range ;
command_edit ::= "edit" ws+ range ;
command_ghistory ::= "ghistory.annual" ws+ filter
| "ghistory.monthly" ws+ filter
| "ghistory.weekly" ws+ filter
| "ghistory.daily" ws+ filter
| "ghistory.annual"
| "ghistory.monthly"
| "ghistory.weekly"
| "ghistory.daily"
;
command_help ::= "help" ;
command_history ::= "history.annual" ws+ filter
| "history.monthly" ws+ filter
| "history.weekly" ws+ filter
| "history.daily" ws+ filter
| "history.annual"
| "history.monthly"
| "history.weekly"
| "history.daily"
;
command_import ::= "import" ws+ file
| "import" ws+ "-"
;
command_info ::= "info" ws+ range
;
command_log ::= "log" ws+ task-elements ;
command_merge ::= "merge" ws+ url ;
command_prepend ::= "prepend" ws+ range ws+ words ;
command_projects ::= "projects" ws+ filter
| "projects"
;
command_pull ::= "pull" ws+ url ;
command_push ::= "push" ws+ url ;
command_shell ::= "shell" ;
command_show ::= "show" ws+ pattern
| "show"
;
command_start ::= "start" ws+ range
| "start"
;
command_stats ::= "statistics" ws+ filter
| "statistics"
;
command_stop ::= "stop" ws+ range
| "stop"
;
command_summary ::= "summary" ws+ filter
| "summary"
;
command_tags ::= "tags" ;
command_timesheet ::= "timesheet" ws+ digit
| "timesheet"
;
command_undo ::= "undo" ;
command_version ::= "version" ;
# command_report ::= report ws+ filter ;
# Helper Commands (alphabetically)
helper_query ::= "query" ws+ filter
| "query"
;
# Primitives
range ::= ;
id-equivalent ::= uuid | id ;
id ::= digit+ ;
uuid ::= ;
attribute ::= ;
modifier ::= ;
task-elements ::= task-element+ ;
task-element ::= attribute ws+
| tag ws+
| word ws+
;
filter ::= filter-elements+ ;
filter-elements ::= range
| pattern
| filter-attribute ;
filter-attribute ::= field modifier? ":" value? ;
modifier ::= ".above"
| ".after"
| ".any"
| ".before"
| ".below"
| ".contains"
| ".endswith"
| ".equals"
| ".has"
| ".hasnt"
| ".is"
| ".isnt"
| ".left"
| ".none"
| ".not"
| ".noword"
| ".over"
| ".right"
| ".startswith"
| ".under"
| ".word"
;
value ::= ;
year ::= digit digit digit digit ;
month ::= "1" | "2" | "3" | "4" | "5" | "6"
| "7" | "8" | "9" | "10" | "11" | "12"
;
# TODO Case-insensitive
month-name ::= "january"
| "february"
| "march"
| "april"
| "may"
| "june"
| "july"
| "august"
| "september"
| "october"
| "november"
| "december"
;
filter-attribute ::= field "." modifier ":" value
| field "." modifier ":"
| field ":" value
| field ":"
;
tag ::= "+" word
| "-" word ;
substitution ::= "/" pattern "/" words "/" "g"? ;
pattern ::= ;
url ::= ;
file ::= ;
words ::= ;
word ::= ;
# Fundamentals
digit ::= "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" ;
ws ::= " " | "\t" ;
# End

View File

@@ -12,60 +12,5 @@ echo 'include /usr/local/share/doc/task/rc/dark-violets-256.theme' >> x
echo 'include /usr/local/share/doc/task/rc/holidays-US.rc' >> x
echo 'color.alternate=' >> x
echo 'report.list.columns=id,project,priority_long,start,due,recur,age_compact,tags,description' >> x
echo 'report.list.labels=ID,Project,Pri,Started,Due,Recur,Age,Tags,Description' >> x
echo 'report.list.sort=due+,priority_long-,project+' >> x
# Import tasks with old timestamps
cat <<EOF >file.yaml
%YAML 1.1
---
task:
description: Try out the color themes
entry: 1281914800
start: 1282044800
project: software
status: pending
uuid: 13afada0-a446-8d5a-c213-30d99d52c4b0
task:
description: Visit http://taskwarrior.org
entry: 1281089630
tags: www
priority: H
project: software
status: pending
uuid: 23afada0-a446-8d5a-c213-30d99d52c4b0
task:
description: Review task list
entry: 1281289630
due: 1282844800
recur: weekly
project: gtd
status: pending
uuid: 33afada0-a446-8d5a-c213-30d99d52c4b0
task:
description: Try out latest FireFox beta
entry: 1281289630
project: software
status: pending
uuid: 43afada0-a446-8d5a-c213-30d99d52c4b0
...
EOF
printf "y\n" | task rc:x import file.yaml
# Now the visible part.
echo
echo '$ task calendar sep 2010'
task rc:x calendar sep 2010
echo
echo '$ task calendar'
task rc:x calendar
echo
echo '$ task overdue'
task rc:x 2 done
exit

View File

@@ -12,60 +12,5 @@ echo 'include /usr/local/share/doc/task/rc/dark-violets-256.theme' >> x
echo 'include /usr/local/share/doc/task/rc/holidays-US.rc' >> x
echo 'color.alternate=' >> x
echo 'report.list.columns=id,project,priority_long,start,due,recur,age_compact,tags,description' >> x
echo 'report.list.labels=ID,Project,Pri,Started,Due,Recur,Age,Tags,Description' >> x
echo 'report.list.sort=due+,priority_long-,project+' >> x
# Import tasks with old timestamps
cat <<EOF >file.yaml
%YAML 1.1
---
task:
description: Try out the color themes
entry: 1281914800
start: 1282044800
project: software
status: pending
uuid: 13afada0-a446-8d5a-c213-30d99d52c4b0
task:
description: Visit http://taskwarrior.org
entry: 1281089630
tags: www
priority: H
project: software
status: pending
uuid: 23afada0-a446-8d5a-c213-30d99d52c4b0
task:
description: Review task list
entry: 1281289630
due: 1282844800
recur: weekly
project: gtd
status: pending
uuid: 33afada0-a446-8d5a-c213-30d99d52c4b0
task:
description: Try out latest FireFox beta
entry: 1281289630
project: software
status: pending
uuid: 43afada0-a446-8d5a-c213-30d99d52c4b0
...
EOF
printf "y\n" | task rc:x import file.yaml
# Now the visible part.
echo
echo '$ task calendar sep 2010'
task rc:x calendar sep 2010
echo
echo '$ task calendar'
task rc:x calendar
echo
echo '$ task overdue'
task rc:x 2 done
exit

View File

@@ -12,60 +12,5 @@ echo 'include /usr/local/share/doc/task/rc/dark-violets-256.theme' >> x
echo 'include /usr/local/share/doc/task/rc/holidays-US.rc' >> x
echo 'color.alternate=' >> x
echo 'report.list.columns=id,project,priority_long,start,due,recur,age_compact,tags,description' >> x
echo 'report.list.labels=ID,Project,Pri,Started,Due,Recur,Age,Tags,Description' >> x
echo 'report.list.sort=due+,priority_long-,project+' >> x
# Import tasks with old timestamps
cat <<EOF >file.yaml
%YAML 1.1
---
task:
description: Try out the color themes
entry: 1281914800
start: 1282044800
project: software
status: pending
uuid: 13afada0-a446-8d5a-c213-30d99d52c4b0
task:
description: Visit http://taskwarrior.org
entry: 1281089630
tags: www
priority: H
project: software
status: pending
uuid: 23afada0-a446-8d5a-c213-30d99d52c4b0
task:
description: Review task list
entry: 1281289630
due: 1282844800
recur: weekly
project: gtd
status: pending
uuid: 33afada0-a446-8d5a-c213-30d99d52c4b0
task:
description: Try out latest FireFox beta
entry: 1281289630
project: software
status: pending
uuid: 43afada0-a446-8d5a-c213-30d99d52c4b0
...
EOF
printf "y\n" | task rc:x import file.yaml
# Now the visible part.
echo
echo '$ task calendar sep 2010'
task rc:x calendar sep 2010
echo
echo '$ task calendar'
task rc:x calendar
echo
echo '$ task overdue'
task rc:x 2 done
exit

View File

@@ -12,60 +12,5 @@ echo 'include /usr/local/share/doc/task/rc/dark-violets-256.theme' >> x
echo 'include /usr/local/share/doc/task/rc/holidays-US.rc' >> x
echo 'color.alternate=' >> x
echo 'report.list.columns=id,project,priority_long,start,due,recur,age_compact,tags,description' >> x
echo 'report.list.labels=ID,Project,Pri,Started,Due,Recur,Age,Tags,Description' >> x
echo 'report.list.sort=due+,priority_long-,project+' >> x
# Import tasks with old timestamps
cat <<EOF >file.yaml
%YAML 1.1
---
task:
description: Try out the color themes
entry: 1281914800
start: 1282044800
project: software
status: pending
uuid: 13afada0-a446-8d5a-c213-30d99d52c4b0
task:
description: Visit http://taskwarrior.org
entry: 1281089630
tags: www
priority: H
project: software
status: pending
uuid: 23afada0-a446-8d5a-c213-30d99d52c4b0
task:
description: Review task list
entry: 1281289630
due: 1282844800
recur: weekly
project: gtd
status: pending
uuid: 33afada0-a446-8d5a-c213-30d99d52c4b0
task:
description: Try out latest FireFox beta
entry: 1281289630
project: software
status: pending
uuid: 43afada0-a446-8d5a-c213-30d99d52c4b0
...
EOF
printf "y\n" | task rc:x import file.yaml
# Now the visible part.
echo
echo '$ task calendar sep 2010'
task rc:x calendar sep 2010
echo
echo '$ task calendar'
task rc:x calendar
echo
echo '$ task overdue'
task rc:x 2 done
exit

View File

@@ -3,7 +3,7 @@
#
# taskwarrior - a command line task list manager.
#
# Copyright 2006 - 2010, Paul Beckingham.
# Copyright 2006 - 2011, Paul Beckingham, Federico Hernandez.
# All rights reserved.
#
# This program is free software; you can redistribute it and/or modify it under
@@ -32,13 +32,21 @@ color.header=yellow
color.footnote=yellow
color.debug=yellow
color.summary.bar=on green
color.summary.background=on black
color.summary.bar=black on green
color.summary.background=white on black
color.history.add=black on red
color.history.done=black on green
color.history.delete=black on yellow
color.burndown.pending=on red
color.burndown.started=on yellow
color.burndown.done=on green
color.sync.added=green
color.sync.changed=yellow
color.sync.rejected=red
color.undo.before=red
color.undo.after=green

View File

@@ -3,7 +3,7 @@
#
# taskwarrior - a command line task list manager.
#
# Copyright 2006 - 2010, Paul Beckingham.
# Copyright 2006 - 2011, Paul Beckingham, Federico Hernandez.
# All rights reserved.
#
# This program is free software; you can redistribute it and/or modify it under
@@ -32,13 +32,21 @@ color.header=color3
color.footnote=color3
color.debug=color3
color.summary.bar=on rgb141
color.summary.background=on color0
color.summary.bar=black on rgb141
color.summary.background=white on color0
color.history.add=color0 on rgb500
color.history.done=color0 on rgb050
color.history.delete=color0 on rgb550
color.burndown.pending=on color9
color.burndown.started=on color11
color.burndown.done=on rgb010
color.sync.added=rgb010
color.sync.changed=color11
color.sync.rejected=color9
color.undo.before=color1
color.undo.after=color2

View File

@@ -3,7 +3,7 @@
#
# taskwarrior - a command line task list manager.
#
# Copyright 2006 - 2010, Paul Beckingham.
# Copyright 2006 - 2011, Paul Beckingham, Federico Hernandez.
# All rights reserved.
#
# This program is free software; you can redistribute it and/or modify it under
@@ -32,13 +32,21 @@ color.header=rgb013
color.footnote=rgb013
color.debug=rgb013
color.summary.bar=on rgb003
color.summary.background=on color0
color.summary.bar=white on rgb003
color.summary.background=white on color0
color.history.add=color0 on rgb015
color.history.done=color0 on rgb025
color.history.delete=color0 on rgb035
color.burndown.pending=on rgb004
color.burndown.started=on rgb015
color.burndown.done=on gray4
color.sync.added=gray4
color.sync.changed=rgb015
color.sync.rejected=rgb004
color.undo.before=rgb013
color.undo.after=rgb035

View File

@@ -0,0 +1,75 @@
###############################################################################
# Sample taskwarrior 1.9 (or later) dark gray 256-color theme
#
# taskwarrior - a command line task list manager.
#
# Copyright 2011, Paul Beckingham, Federico Hernandez.
# All rights reserved.
#
# This program is free software; you can redistribute it and/or modify it under
# the terms of the GNU General Public License as published by the Free Software
# Foundation; either version 2 of the License, or (at your option) any later
# version.
#
# This program is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
# details.
#
# You should have received a copy of the GNU General Public License along with
# this program; if not, write to the
#
# Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor,
# Boston, MA
# 02110-1301
# USA
#
################################################################################
color=on
color.header=color8
color.footnote=color8
color.debug=color8
color.summary.bar=black on gray12
color.summary.background=white on gray3
color.history.add=color0 on gray6
color.history.done=color0 on gray15
color.history.delete=color0 on gray10
color.burndown.pending=on gray6
color.burndown.started=on gray15
color.burndown.done=on gray10
color.sync.added=gray10
color.sync.changed=gray15
color.sync.rejected=gray6
color.undo.before=gray6
color.undo.after=gray15
color.calendar.today=color8 on color15
color.calendar.due=color7 on color8
color.calendar.due.today=color15 on color8
color.calendar.overdue=underline color0 on color7
color.calendar.weekend=on color235
color.calendar.holiday=color7 on color15
color.calendar.weeknumber=gray4
color.recurring=gray8
color.overdue=color0 on color15
color.due.today=underline color0 on color7
color.due=color7
color.active=color7 on color8
color.pri.none=
color.pri.H=color15
color.pri.M=color7
color.pri.L=color8
color.tagged=gray12
color.blocked=color15 on color8
color.project.none=
color.tag.none=
color.alternate=on gray2

View File

@@ -3,7 +3,7 @@
#
# taskwarrior - a command line task list manager.
#
# Copyright 2006 - 2010, Paul Beckingham.
# Copyright 2006 - 2011, Paul Beckingham, Federico Hernandez.
# All rights reserved.
#
# This program is free software; you can redistribute it and/or modify it under
@@ -32,13 +32,21 @@ color.header=rgb031
color.footnote=rgb031
color.debug=rgb031
color.summary.bar=on rgb030
color.summary.background=on color0
color.summary.bar=white on rgb030
color.summary.background=white on color0
color.history.add=color0 on rgb010
color.history.done=color0 on rgb030
color.history.delete=color0 on rgb050
color.burndown.pending=on rgb010
color.burndown.started=on rgb030
color.burndown.done=on gray4
color.sync.added=gray4
color.sync.changed=rgb030
color.sync.rejected=rgb010
color.undo.before=rgb031
color.undo.after=rgb053

View File

@@ -3,7 +3,7 @@
#
# taskwarrior - a command line task list manager.
#
# Copyright 2006 - 2010, Paul Beckingham.
# Copyright 2006 - 2011, Paul Beckingham, Federico Hernandez.
# All rights reserved.
#
# This program is free software; you can redistribute it and/or modify it under
@@ -32,13 +32,21 @@ color.header=rgb100
color.footnote=rgb100
color.debug=rgb100
color.summary.bar=on rgb300
color.summary.background=on color0
color.summary.bar=white on rgb300
color.summary.background=white on color0
color.history.add=color0 on rgb100
color.history.done=color0 on rgb300
color.history.delete=color0 on rgb500
color.burndown.pending=on rgb200
color.burndown.started=on rgb411
color.burndown.done=on gray4
color.sync.added=gray4
color.sync.changed=rgb411
color.sync.rejected=rgb200
color.undo.before=rgb301
color.undo.after=rgb503

View File

@@ -3,7 +3,7 @@
#
# taskwarrior - a command line task list manager.
#
# Copyright 2010, Kathryn Andersen
# Copyright 2010 - 2011, Kathryn Andersen
# All rights reserved.
#
# This program is free software; you can redistribute it and/or modify it under
@@ -32,13 +32,21 @@ color.header=rgb013
color.footnote=rgb013
color.debug=rgb013
color.summary.bar=on rgb103
color.summary.background=on color0
color.summary.bar=white on rgb103
color.summary.background=white on color0
color.history.add=color0 on rgb105
color.history.done=color0 on rgb205
color.history.delete=color0 on rgb305
color.burndown.pending=on rgb103
color.burndown.started=on rgb214
color.burndown.done=on gray4
color.sync.added=gray4
color.sync.changed=rgb214
color.sync.rejected=rgb103
color.undo.before=rgb103
color.undo.after=rgb305

View File

@@ -3,7 +3,7 @@
#
# taskwarrior - a command line task list manager.
#
# Copyright 2010, Kathryn Andersen
# Copyright 2010 - 2011, Kathryn Andersen
# All rights reserved.
#
# This program is free software; you can redistribute it and/or modify it under
@@ -32,13 +32,21 @@ color.header=rgb031
color.footnote=rgb031
color.debug=rgb031
color.summary.bar=on rgb030
color.summary.background=on color0
color.summary.bar=white on rgb030
color.summary.background=white on color0
color.history.add=color0 on rgb010
color.history.done=color0 on rgb030
color.history.delete=color0 on rgb050
color.burndown.pending=on rgb110
color.burndown.started=on rgb430
color.burndown.done=on gray4
color.sync.added=gray4
color.sync.changed=rgb430
color.sync.rejected=rgb110
color.undo.before=rgb031
color.undo.after=rgb053

78
doc/rc/holidays-AT.rc Normal file
View File

@@ -0,0 +1,78 @@
################################################################################
# Sample calendar for Austria
#
# taskwarrior - a command line task list manager.
#
# Copyright 2011, Andreas Poisel
# All rights reserved.
#
# This program is free software; you can redistribute it and/or modify it under
# the terms of the GNU General Public License as published by the Free Software
# Foundation; either version 2 of the License, or (at your option) any later
# version.
#
# This program is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
# details.
#
# You should have received a copy of the GNU General Public License along with
# this program; if not, write to the
#
# Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor,
# Boston, MA
# 02110-1301
# USA
#
################################################################################
calendar.holidays=sparse
# 2011
holiday.neujahr.name=Neujahr
holiday.neujahr.date=20110101
holiday.heiligedreikonige.name=Heilige drei Könige
holiday.heiligedreikonige.date=20110106
holiday.josef.name=Josef (K, St, T, V)
holiday.josef.date=20110319
holiday.karfreitag.name=Karfreitag
holiday.karfreitag.date=20110422
holiday.ostersonntag.name=Ostersonntag
holiday.ostersonntag.date=20110424
holiday.ostermontag.name=Ostermontag
holiday.ostermontag.date=20110425
holiday.staatsfeiertag.name=Staatsfeiertag
holiday.staatsfeiertag.date=20110501
holiday.florian.name=Florian (OÖ)
holiday.florian.date=20110504
holiday.christihimmelfahrt.name=Christi Himmelfahrt
holiday.christihimmelfahrt.date=20110602
holiday.pfingstsonntag.name=Pfingstsonntag
holiday.pfingstsonntag.date=20110612
holiday.pfingstmontag.name=Pfingstmontag
holiday.pfingstmontag.date=20110613
holiday.fronleichnam.name=Fronleichnam
holiday.fronleichnam.date=20110623
holiday.mariahimmelfahrt.name=MariÀ Himmelfahrt
holiday.mariahimmelfahrt.date=20110815
holiday.rupert.name=Rupert (S)
holiday.rupert.date=20110924
holiday.kvolksabst.name=Tag der Volksabstimmung (K)
holiday.kvolksabst.date=20111010
holiday.allerheiligen.name=Allerheiligen
holiday.allerheiligen.date=20111101
holiday.martin.name=Martin (B)
holiday.martin.date=20111111
holiday.leopold.name=Leopold (W, NÖ)
holiday.leopold.date=20111115
holiday.mariaempfaengnis.name=MariÀ EmpfÀngnis
holiday.mariaempfaengnis.date=20111208
holiday.heiligerabend.name=Heiliger Abend
holiday.heiligerabend.date=20111224
holiday.christtag.name=Christtag
holiday.christtag.date=20111225
holiday.stefanitag.name=Stefanitag
holiday.stefanitag.date=20111226
holiday.silvester.name=Silvester
holiday.silvester.date=20111231

View File

@@ -3,7 +3,7 @@
#
# taskwarrior - a command line task list manager.
#
# Copyright 2010, Cory Donnelly.
# Copyright 2010 - 2011, Cory Donnelly.
# All rights reserved.
#
# This program is free software; you can redistribute it and/or modify it under
@@ -29,20 +29,6 @@
calendar.holidays=sparse
# 2010
holiday.labourday.name=Labour Day
holiday.labourday.date=20100906
holiday.thanksgiving.name=Thanksgiving Day
holiday.thanksgiving.date=20101011
holiday.remembranceday.name=Remembrance Day
holiday.remembranceday.date=20101111
holiday.christmasday.name=Christmas Day
holiday.christmasday.date=20101225
holiday.boxingday.name=Boxing Day
holiday.boxingday.date=20101226
holiday.newyearseve.name=New Year's Eve
holiday.newyearseve.date=20101231
# 2011
holiday.newyearsday.name=New Year's Day
holiday.newyearsday.date=20110101
@@ -58,19 +44,16 @@ holiday.canadaday.name=Canada Day
holiday.canadaday.date=20110701
holiday.firstmondayofaugust.name=First Monday of August
holiday.firstmondayofaugust.date=20110801
holiday.labourday.name=Labour Day
holiday.labourday.date=20110905
holiday.thanksgiving.name=Thanksgiving Day
holiday.thanksgiving.date=20111010
holiday.remembranceday.name=Remembrance Day
holiday.remembranceday.date=20111111
holiday.christmasday.name=Christmas Day
holiday.christmasday.date=20111225
holiday.boxingday.name=Boxing Day
holiday.boxingday.date=20111226
holiday.newyearseve.name=New Year's Eve
holiday.newyearseve.date=20111231
# Commented out to prevent collision with names of 2010 holidays
# that haven't happened yet
#holiday.labourday.name=Labour Day
#holiday.labourday.date=20110905
#holiday.thanksgiving.name=Thanksgiving Day
#holiday.thanksgiving.date=20111010
#holiday.remembranceday.name=Remembrance Day
#holiday.remembranceday.date=20111111
#holiday.christmasday.name=Christmas Day
#holiday.christmasday.date=20111225
#holiday.boxingday.name=Boxing Day
#holiday.boxingday.date=20111226
#holiday.newyearseve.name=New Year's Eve
#holiday.newyearseve.date=20111231

View File

@@ -3,7 +3,7 @@
#
# taskwarrior - a command line task list manager.
#
# Copyright 2010, Federico Hernandez.
# Copyright 2010 - 2011, Federico Hernandez.
# All rights reserved.
#
# This program is free software; you can redistribute it and/or modify it under
@@ -29,22 +29,6 @@
calendar.holidays=sparse
# 2010
holiday.reformationstag.name=Reformationstag (BB,MV,SN,ST,TH)
holiday.reformationstag.date=20101031
holiday.allerheiligen.name=Allerheiligen (BW,BY,NRW,RP,SL)
holiday.allerheiligen.date=20101101
holiday.bussundbettag.name=Buss und Bettag (SN)
holiday.bussundbettag.date=20101117
holiday.heiligabend.name=Heilig Abend
holiday.heiligabend.date=20101224
holiday.weihnachtstag.name=Weihnachtstag
holiday.weihnachtstag.date=20101225
holiday.zweiterweihnachtstag.name=Zweiter Weihnachtstag
holiday.zweiterweihnachtstag.date=20101226
holiday.sylvester.name=Sylvester
holiday.sylvester.date=20101231
# 2011
holiday.neujahr.name=Neujahr
holiday.neujahr.date=20110101
@@ -70,18 +54,17 @@ holiday.mariahimmelfahrt.name=Mariä Himmelfahrt (SL)
holiday.mariahimmelfahrt.date=20110815
holiday.einheit.name=Tag der Deutschen Einheit
holiday.einheit.date=20111003
#holiday.reformationstag.name=Reformationstag (BB,MV,SN,ST,TH)
#holiday.reformationstag.date=20111031
#holiday.allerheiligen.name=Allerheiligen (BW,BY,NRW,RP,SL)
#holiday.allerheiligen.date=20111101
#holiday.bussundbettag.name=Buss und Bettag (SN)
#holiday.bussundbettag.date=20111116
#holiday.heiligabend.name=Heilig Abend
#holiday.heiligabend.date=20111224
#holiday.weihnachtstag.name=Weihnachtstag
#holiday.weihnachtstag.date=20111225
#holiday.zweiterweihnachtstag.name=Zweiter Weihnachtstag
#holiday.zweiterweihnachtstag.date=20111226
#holiday.sylvester.name=Sylvester
#holiday.sylvester.date=20111231
holiday.reformationstag.name=Reformationstag (BB,MV,SN,ST,TH)
holiday.reformationstag.date=20111031
holiday.allerheiligen.name=Allerheiligen (BW,BY,NRW,RP,SL)
holiday.allerheiligen.date=20111101
holiday.bussundbettag.name=Buss und Bettag (SN)
holiday.bussundbettag.date=20111116
holiday.heiligabend.name=Heilig Abend
holiday.heiligabend.date=20111224
holiday.weihnachtstag.name=Weihnachtstag
holiday.weihnachtstag.date=20111225
holiday.zweiterweihnachtstag.name=Zweiter Weihnachtstag
holiday.zweiterweihnachtstag.date=20111226
holiday.sylvester.name=Sylvester
holiday.sylvester.date=20111231

82
doc/rc/holidays-DK.rc Normal file
View File

@@ -0,0 +1,82 @@
################################################################################
# Sample calendar for Denmark
#
# taskwarrior - a command line task list manager.
#
# Copyright 2010 - 2011, Irfan Siddiqui.
# All rights reserved.
#
# This program is free software; you can redistribute it and/or modify it under
# the terms of the GNU General Public License as published by the Free Software
# Foundation; either version 2 of the License, or (at your option) any later
# version.
#
# This program is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
# details.
#
# You should have received a copy of the GNU General Public License along with
# this program; if not, write to the
#
# Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor,
# Boston, MA
# 02110-1301
# USA
#
################################################################################
calendar.holidays=sparse
# 2011
holiday.nytårsdag.name=Nytårsdag
holiday.nytårsdag.date=20110101
holiday.palmesøndag.name=Palmesøndag
holiday.palmesøndag.date=20110417
holiday.skærtorsdag.name=Skærtorsdag
holiday.skærtorsdag.date=20110421
holiday.langfredag.name=Langfredag
holiday.langfredag.date=20110422
holiday.påskedag.name=Påskedag
holiday.påskedag.date=20110424
holiday.andenpåskedag.name=Anden påskedag
holiday.andenpåskedag.date=20110425
holiday.storebededag.name=Store bededag
holiday.storebededag.date=20110520
holiday.kristihimmelfartsdag.name=Kristi himmelfartsdag
holiday.kristihimmelfartsdag.date=20110602
holiday.pinsedag.name=Pinsedag
holiday.pinsedag.date=20110612
holiday.andenpinsedag.name=Anden pinsedag
holiday.andenpinsedag.date=20110613
holiday.juledag.name=Juledag
holiday.juledag.date=20111225
holiday.andenjuledag.name=Anden juledag
holiday.andenjuledag.date=20111226
# 2012
#holiday.nytårsdag.name=Nytårsdag
#holiday.nytårsdag.date=20120101
#holiday.palmesøndag.name=Palmesøndag
#holiday.palmesøndag.date=20120401
#holiday.skærtorsdag.name=Skærtorsdag
#holiday.skærtorsdag.date=20120405
#holiday.langfredag.name=Langfredag
#holiday.langfredag.date=20120406
#holiday.påskedag.name=Påskedag
#holiday.påskedag.date=20120408
#holiday.andenpåskedag.name=Anden påskedag
#holiday.andenpåskedag.date=20120409
#holiday.storebededag.name=Store bededag
#holiday.storebededag.date=20120504
#holiday.kristihimmelfartsdag.name=Kristi himmelfartsdag
#holiday.kristihimmelfartsdag.date=20120517
#holiday.pinsedag.name=Pinsedag
#holiday.pinsedag.date=20120527
#holiday.andenpinsedag.name=Anden pinsedag
#holiday.andenpinsedag.date=20120528
#holiday.juledag.name=Juledag
#holiday.juledag.date=20121225
#holiday.andenjuledag.name=Anden juledag
#holiday.andenjuledag.date=20121226

View File

@@ -3,7 +3,7 @@
#
# taskwarrior - a command line task list manager.
#
# Copyright 2010, Federico Hernandez.
# Copyright 2010 - 2011, Federico Hernandez.
# All rights reserved.
#
# This program is free software; you can redistribute it and/or modify it under
@@ -29,22 +29,6 @@
calendar.holidays=sparse
# 2010
holiday.fiestanacional.name=Fiesta Nacional de España
holiday.fiestanacional.date=20101012
holiday.santos.name=Dia de todos los Santos
holiday.santos.date=20101101
holiday.constitucion.name=Dia de la Constitución
holiday.constitucion.date=20101206
holiday.concepcion.name=Inmaculada Concepción
holiday.concepcion.date=20101208
holiday.nochebuena.name=Noche Buena
holiday.nochebuena.date=20101224
holiday.navidad.name=Navidad
holiday.navidad.date=20101225
holiday.nochevieja.name=Noche Vieja
holiday.nochevieja.date=20101231
# 2011
holiday.anonuevo.name=Año Nuevo
holiday.anonuevo.date=20110101
@@ -56,18 +40,17 @@ holiday.trabajo.name=Fiesta del Trabajo
holiday.trabajo.date=20110501
holiday.virgen.name=Asunción de la Virgen
holiday.virgen.date=20110815
#holiday.fiestanacional.name=Fiesta Nacional de España
#holiday.fiestanacional.date=20111012
#holiday.santos.name=Dia de todos los Santos
#holiday.santos.date=20111101
#holiday.constitucion.name=Dia de la Constitución
#holiday.constitucion.date=20111206
#holiday.concepcion.name=Inmaculada Concepción
#holiday.concepcion.date=20111208
#holiday.nochebuena.name=Noche Buena
#holiday.nochebuena.date=20111224
#holiday.navidad.name=Navidad
#holiday.navidad.date=20111225
#holiday.nochevieja.name=Noche Vieja
#holiday.nochevieja.date=20111231
holiday.fiestanacional.name=Fiesta Nacional de España
holiday.fiestanacional.date=20111012
holiday.santos.name=Dia de todos los Santos
holiday.santos.date=20111101
holiday.constitucion.name=Dia de la Constitución
holiday.constitucion.date=20111206
holiday.concepcion.name=Inmaculada Concepción
holiday.concepcion.date=20111208
holiday.nochebuena.name=Noche Buena
holiday.nochebuena.date=20111224
holiday.navidad.name=Navidad
holiday.navidad.date=20111225
holiday.nochevieja.name=Noche Vieja
holiday.nochevieja.date=20111231

View File

@@ -3,7 +3,7 @@
#
# taskwarrior - a command line task list manager.
#
# Copyright 2010, Paul Beckingham.
# Copyright 2010 - 2011, Paul Beckingham, Federico Hernandez.
# All rights reserved.
#
# This program is free software; you can redistribute it and/or modify it under
@@ -29,14 +29,6 @@
calendar.holidays=sparse
# 2010
holiday.toussaint.name=La Toussaint
holiday.toussaint.date=20101101
holiday.armistice.name=Jour d'armistice
holiday.armistice.date=20101111
holiday.noël.name=Noël
holiday.noël.date=20101225
# 2011
holiday.jourdelan.name=Jour de l'an
holiday.jourdelan.date=20110101
@@ -52,11 +44,10 @@ holiday.bastille.name=Fête nationale
holiday.bastille.date=20110714
holiday.assomption.name=Assomption
holiday.assomption.date=20110815
#holiday.toussaint.name=La Toussaint
#holiday.toussaint.date=20111101
#holiday.armistice.name=Jour d'armistice
#holiday.armistice.date=20111111
#holiday.noël.name=Noël
#holiday.noël.date=20111225
holiday.toussaint.name=La Toussaint
holiday.toussaint.date=20111101
holiday.armistice.name=Jour d'armistice
holiday.armistice.date=20111111
holiday.noël.name=Noël
holiday.noël.date=20111225

68
doc/rc/holidays-IT.rc Normal file
View File

@@ -0,0 +1,68 @@
################################################################################
# Sample calendar for the US
#
# taskwarrior - a command line task list manager.
#
# Copyright 2011, Nicola Busanello
# All rights reserved.
#
# This program is free software; you can redistribute it and/or modify it under
# the terms of the GNU General Public License as published by the Free Software
# Foundation; either version 2 of the License, or (at your option) any later
# version.
#
# This program is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
# details.
#
# You should have received a copy of the GNU General Public License along with
# this program; if not, write to the
#
# Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor,
# Boston, MA
# 02110-1301
# USA
#
################################################################################
calendar.holidays=sparse
# 2011
# fisse (legali)
holiday.capodanno.name=Capodanno
holiday.capodanno.date=20110101
holiday.sanmarco.name=Festa della liberazione
holiday.sanmarco.date=20110425
holiday.lavoratori.name=Festa del lavoro
holiday.lavoratori.date=20110501
holiday.repubblica.name=Festa della repubblica
holiday.repubblica.date=20110602
# fisse (cristiane)
holiday.epifania.name=Epifania
holiday.epifania.date=20110106
holiday.ferragosto.name=Assunzione (ferragosto)
holiday.ferragosto.date=20110815
holiday.ognissanti.name=Ognissanti
holiday.ognissanti.date=20111101
holiday.madonna.name=Immacolata concezione
holiday.madonna.date=20111208
holiday.natale.name=Natale
holiday.natale.date=20111225
holiday.sstefano.name=S.to Stefano
holiday.sstefano.date=20111226
# variabili (cristiane)
holiday.carnevale.name=Carnevale
holiday.carnevale.date=20110308
holiday.pasqua.name=Pasqua
holiday.pasqua.date=20110424
# nel 2011 coincide con la festa della liberazione
#holiday.pasqua.name=Pasquetta
#holiday.pasqua.date=20110425
# 2012

View File

@@ -3,7 +3,7 @@
#
# taskwarrior - a command line task list manager.
#
# Copyright 2010, Charles T. Yun
# Copyright 2010 - 2011, Charles T. Yun
# All rights reserved.
#
# This program is free software; you can redistribute it and/or modify it under
@@ -29,16 +29,6 @@
calendar.holidays=sparse
# 2010
holiday.sinterklaas.name=Sinterklaas
holiday.sinterklaas.date=20101205
holiday.koninkrijksdag.name=Koninkrijksdag
holiday.koninkrijksdag.date=20101215
holiday.kerstmis.name=Kerstmis
holiday.kerstmis.date=20101225
holiday.kerstmis.name=Tweede Kerstdag
holiday.kerstmis.date=20101226
# 2011
holiday.nieuwjaar.name=Nieuwjaar
holiday.nieuwjaar.date=20110101
@@ -60,14 +50,14 @@ holiday.pinksteren.name= Pinksteren
holiday.pinksteren.date=20110612
holiday.pinksteren.name=Tweede Pinksterdag
holiday.pinksteren.date=20110613
#holiday.sinterklaas.name=Sinterklaas
#holiday.sinterklaas.date=20111205
#holiday.koninkrijksdag.name=Koninkrijksdag
#holiday.koninkrijksdag.date=20111215
#holiday.kerstmis.name=Kerstmis
#holiday.kerstmis.date=20111225
#holiday.kerstmis.name=Tweede Kerstdag
#holiday.kerstmis.date=20111226
holiday.sinterklaas.name=Sinterklaas
holiday.sinterklaas.date=20111205
holiday.koninkrijksdag.name=Koninkrijksdag
holiday.koninkrijksdag.date=20111215
holiday.kerstmis.name=Kerstmis
holiday.kerstmis.date=20111225
holiday.kerstmis.name=Tweede Kerstdag
holiday.kerstmis.date=20111226
# 2012
#holiday.nieuwjaar.name=Nieuwjaar

View File

@@ -3,7 +3,7 @@
#
# taskwarrior - a command line task list manager.
#
# Copyright 2010, Jostein Berntsen
# Copyright 2010 - 2011, Jostein Berntsen
# All rights reserved.
#
# This program is free software; you can redistribute it and/or modify it under
@@ -29,16 +29,6 @@
calendar.holidays=sparse
# 2010
holiday.julaften.name=Julaften
holiday.julaften.date=20101224
holiday.juledag.name=Juledag
holiday.juledag.date=20101225
holiday.juledag2.name=Juledag
holiday.juledag2.date=20101226
holiday.nyttårsaften.name=Nyttårsaften
holiday.nyttårsaften.date=20101231
# 2011
holiday.nyttårsdag.name=Nyttårsdag
holiday.nyttårsdag.date=20110101
@@ -66,14 +56,14 @@ holiday.pinsedag.name=Pinsedag
holiday.pinsedag.date=20110612
holiday.pinsedag2.name=Pinsedag
holiday.pinsedag2.date=20110613
#holiday.julaften.name=Julaften
#holiday.julaften.date=20111224
#holiday.juledag.name=Juledag
#holiday.juledag.date=20111225
#holiday.juledag2.name=Juledag
#holiday.juledag2.date=20111226
#holiday.nyttårsaften.name=Nyttårsaften
#holiday.nyttårsaften.date=20111231
holiday.julaften.name=Julaften
holiday.julaften.date=20111224
holiday.juledag.name=Juledag
holiday.juledag.date=20111225
holiday.juledag2.name=Juledag
holiday.juledag2.date=20111226
holiday.nyttårsaften.name=Nyttårsaften
holiday.nyttårsaften.date=20111231
# 2012
#holiday.nyttårsdag.name=Nyttårsdag

110
doc/rc/holidays-NZ.rc Normal file
View File

@@ -0,0 +1,110 @@
################################################################################
# Sample calendar for New Zealand
#
# Information sourced from:
# http://www.ers.dol.govt.nz/holidays_act_2003/dates/2010_13.html
#
################################################################################
#
# taskwarrior - a command line task list manager.
#
# Copyright 2011, Stephen Heywood.
# All rights reserved.
#
# This program is free software; you can redistribute it and/or modify it under
# the terms of the GNU General Public License as published by the Free Software
# Foundation; either version 2 of the License, or (at your option) any later
# version.
#
# This program is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
# details.
#
# You should have received a copy of the GNU General Public License along with
# this program; if not, write to the
#
# Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor,
# Boston, MA
# 02110-1301
# USA
#
################################################################################
calendar.holidays=sparse
# 2011
holiday.newyear.name=New Year's Day
holiday.newyear.date=20110101
holiday.dayafternewyearsday.name=Day after New Years Day
holiday.dayafternewyearsday.date=20110102
holiday.waitangiday.name=Waitangi Day
holiday.waitangiday.date=20110206
holiday.goodfriday.name=Good Friday
holiday.goodfriday.date=20110422
holiday.eastermonday.name=Easter Monday
holiday.eastermonday.date=20110425
holiday.anzacday.name=ANZAC Day
holiday.anzacday.date=20110425
holiday.queensbirthday.name=Queen's Birthday
holiday.queensbirthday.date=20110606
holiday.labourday.name=Labour Day
holiday.labourday.date=20111024
holiday.christmas.name=Christmas Day
holiday.christmas.date=20111225
holiday.boxingday.name=Boxing Day
holiday.boxingday.date=20111226
# 2012
#holiday.newyear.name=New Year's Day
#holiday.newyear.date=20120101
#holiday.dayafternewyearsday.name=Day after New Years Day
#holiday.dayafternewyearsday.date=20120102
#holiday.waitangiday.name=Waitangi Day
#holiday.waitangiday.date=20120206
#holiday.goodfriday.name=Good Friday
#holiday.goodfriday.date=20120406
#holiday.eastermonday.name=Easter Monday
#holiday.eastermonday.date=20120409
#holiday.anzacday.name=ANZAC Day
#holiday.anzacday.date=20120425
#holiday.queensbirthday.name=Queen's Birthday
#holiday.queensbirthday.date=20120604
#holiday.labourday.name=Labour Day
#holiday.labourday.date=20121022
#holiday.christmas.name=Christmas Day
#holiday.christmas.date=20121225
#holiday.boxingday.name=Boxing Day
#holiday.boxingday.date=20121226
# 2013
#holiday.newyear.name=New Year's Day
#holiday.newyear.date=20130101
#holiday.dayafternewyearsday.name=Day after New Years Day
#holiday.dayafternewyearsday.date=20130102
#holiday.waitangiday.name=Waitangi Day
#holiday.waitangiday.date=20130206
#holiday.goodfriday.name=Good Friday
#holiday.goodfriday.date=20130329
#holiday.eastermonday.name=Easter Monday
#holiday.eastermonday.date=20130401
#holiday.anzacday.name=ANZAC Day
#holiday.anzacday.date=20130425
#holiday.queensbirthday.name=Queen's Birthday
#holiday.queensbirthday.date=20130603
#holiday.labourday.name=Labour Day
#holiday.labourday.date=20131028
#holiday.christmas.name=Christmas Day
#holiday.christmas.date=20131225
#holiday.boxingday.name=Boxing Day
#holiday.boxingday.date=20131226

View File

@@ -3,7 +3,7 @@
#
# taskwarrior - a command line task list manager.
#
# Copyright 2010, Federico Hernandez.
# Copyright 2010 - 2011, Federico Hernandez.
# All rights reserved.
#
# This program is free software; you can redistribute it and/or modify it under
@@ -29,18 +29,6 @@
calendar.holidays=sparse
# 2010
holiday.allahelgonsdag.name=Alla Helgons Dag
holiday.allahelgonsdag.date=20101106
holiday.julafton.name=Julafton
holiday.julafton.date=20101224
holiday.juldagen.name=Juldagen
holiday.juldagen.date=20101225
holiday.annandagjul.name=Annandag jul
holiday.annandagjul.date=20101226
holiday.nyårsafton.name=Nyårsafton
holiday.nyårsafton.date=20101231
# 2011
holiday.nyårsdagen.name=Nyårsdagen
holiday.nyårsdagen.date=20110101
@@ -66,14 +54,13 @@ holiday.midsommarafton.name=Midsommarafton
holiday.midsommarafton.date=20110624
holiday.midsommardagen.name=Midsommardagen
holiday.midsommardagen.date=20110625
# holiday.allahelgonsdag.name=Alla Helgons Dag
# holiday.allahelgonsdag.date=20111105
# holiday.julafton.name=Julafton
# holiday.julafton.date=20111224
# holiday.juldagen.name=Juldagen
# holiday.juldagen.date=20111225
# holiday.annandagjul.name=Annandag jul
# holiday.annandagjul.date=20111226
# holiday.nyårsafton.name=Nyårsafton
# holiday.nyårsafton.date=20111231
holiday.allahelgonsdag.name=Alla Helgons Dag
holiday.allahelgonsdag.date=20111105
holiday.julafton.name=Julafton
holiday.julafton.date=20111224
holiday.juldagen.name=Juldagen
holiday.juldagen.date=20111225
holiday.annandagjul.name=Annandag jul
holiday.annandagjul.date=20111226
holiday.nyårsafton.name=Nyårsafton
holiday.nyårsafton.date=20111231

View File

@@ -3,7 +3,7 @@
#
# taskwarrior - a command line task list manager.
#
# Copyright 2010, Federico Hernandez.
# Copyright 2010 - 2011, Federico Hernandez.
# All rights reserved.
#
# This program is free software; you can redistribute it and/or modify it under
@@ -29,12 +29,6 @@
calendar.holidays=sparse
# 2010
holiday.christmas.name=Christmas Day
holiday.christmas.date=20101225
holiday.boxingday.name=Boxing Day
holiday.boxingday.date=20101226
# 2011
holiday.newyear.name=New Year's Day
holiday.newyear.date=20110101
@@ -48,9 +42,8 @@ holiday.spring.name=Spring Bank Holiday
holiday.spring.name=20110530
holiday.august.name=August Bank Holiday
holiday.august.name=20110829
#holiday.christmas.name=Christmas Day
#holiday.christmas.date=20111225
#holiday.boxingday.name=Boxing Day
#holiday.boxingday.date=20111226
holiday.christmas.name=Christmas Day
holiday.christmas.date=20111225
holiday.boxingday.name=Boxing Day
holiday.boxingday.date=20111226

View File

@@ -3,7 +3,7 @@
#
# taskwarrior - a command line task list manager.
#
# Copyright 2010, Federico Hernandez.
# Copyright 2010 - 2011, Federico Hernandez.
# All rights reserved.
#
# This program is free software; you can redistribute it and/or modify it under
@@ -29,20 +29,6 @@
calendar.holidays=sparse
# 2010
holiday.laborday.name=Labor Day
holiday.laborday.date=20100906
holiday.columbusday.name=Columbus Day
holiday.columbusday.date=20101011
holiday.veteransdays.name=Veterans Day
holiday.veteransdays.date=20101111
holiday.thanksgiving.name=Thanksgiving Day
holiday.thanksgiving.date=20101125
holiday.christmasday.name=Christmas Day
holiday.christmasday.date=20101225
holiday.newyearseve.name=New Year's Eve
holiday.newyearseve.date=20101231
# 2011
holiday.newyearsday.name=New Year's Day
holiday.newyearsday.date=20110101
@@ -56,17 +42,16 @@ holiday.memorialday.name=Memorial Day
holiday.memorialday.date=20110530
holiday.independenceday.name=Independence Day
holiday.independenceday.date=20110704
# holiday.laborday.name=Labor Day
# holiday.laborday.date=20110905
# holiday.columbusday.name=Columbus Day
# holiday.columbusday.date=20111010
# holiday.veteransdays.name=Veterans Day
# holiday.veteransdays.date=20111111
# holiday.thanksgiving.name=Thanksgiving Day
# holiday.thanksgiving.date=20111124
# holiday.christmasday.name=Christmas Day
# holiday.christmasday.date=20111225
# holiday.newyearseve.name=New Year's Eve
# holiday.newyearseve.date=20111231
holiday.laborday.name=Labor Day
holiday.laborday.date=20110905
holiday.columbusday.name=Columbus Day
holiday.columbusday.date=20111010
holiday.veteransdays.name=Veterans Day
holiday.veteransdays.date=20111111
holiday.thanksgiving.name=Thanksgiving Day
holiday.thanksgiving.date=20111124
holiday.christmasday.name=Christmas Day
holiday.christmasday.date=20111225
holiday.newyearseve.name=New Year's Eve
holiday.newyearseve.date=20111231

View File

@@ -3,7 +3,7 @@
#
# taskwarrior - a command line task list manager.
#
# Copyright 2006 - 2010, Paul Beckingham.
# Copyright 2006 - 2011, Paul Beckingham, Federico Hernandez.
# All rights reserved.
#
# This program is free software; you can redistribute it and/or modify it under
@@ -32,13 +32,21 @@ color.header=blue
color.footnote=blue
color.debug=blue
color.summary.bar=on green
color.summary.background=on black
color.summary.bar=black on green
color.summary.background=white on black
color.history.add=black on red
color.history.done=black on green
color.history.delete=black on yellow
color.burndown.pending=on red
color.burndown.started=on yellow
color.burndown.done=on green
color.sync.added=green
color.sync.changed=yellow
color.sync.rejected=red
color.undo.before=red
color.undo.after=green

View File

@@ -3,7 +3,7 @@
#
# taskwarrior - a command line task list manager.
#
# Copyright 2006 - 2010, Paul Beckingham.
# Copyright 2006 - 2011, Paul Beckingham, Federico Hernandez.
# All rights reserved.
#
# This program is free software; you can redistribute it and/or modify it under
@@ -31,13 +31,21 @@ color.header=color4
color.footnote=color4
color.debug=color4
color.summary.bar=on rgb141
color.summary.background=on color0
color.summary.bar=black on rgb141
color.summary.background=white on color0
color.history.add=color0 on rgb500
color.history.done=color0 on rgb050
color.history.delete=color0 on rgb550
color.burndown.pending=on rgb200
color.burndown.started=on rgb520
color.burndown.done=on rgb011
color.sync.added=rgb011
color.sync.changed=rgb520
color.sync.rejected=rgb200
color.undo.before=color1
color.undo.after=color2

4
i18n/CMakeLists.txt Normal file
View File

@@ -0,0 +1,4 @@
install (DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/ DESTINATION ${TASK_DOCDIR}/i18n
FILES_MATCHING REGEX "strings.*"
REGEX "tips.*"
PATTERN "CMakeFiles" EXCLUDE)

View File

@@ -18,7 +18,7 @@
105 Inverted sequence range high-low
106 ID Range too large
107 Not a sequence.
108 Interactive mode is only available when built with ncurses support.
109 Empty record in input
110 Unrecognized characters at end of line
111 Record not recognized as format 4

View File

@@ -19,11 +19,6 @@ strip the trailing \n characters from the end of the file.
If you must edit your pending.data file, make sure that your text editor doesn't
convert from a Unix to a DOS file encoding.
%
Did you build task from source? If you didn't have ncurses installed at the
time, then you're missing out on text wrapping and task cannot take advantage of
the full terminal width. Consider rebuilding with ncurses installed, or install
from a pre-built package for your OS.
%
Do you have the latest version of task installed? Check http://taskwarrior.org
periodically for news of updates. That feature you wanted might be ready...
%

View File

@@ -75,11 +75,11 @@ Note: This is being written from the OSX 10.6 perspective, and may therefore
Any text editor will do, but look for this line (line 5):
LFLAGS = -L/usr/local/lib -lncurses -llua
LFLAGS = -L/usr/local/lib -llua
and change it to:
LFLAGS = -L/usr/local/lib -lncurses
LFLAGS = -L/usr/local/lib
Now build the unit tests:
@@ -256,8 +256,8 @@ Note: This is being written from the OSX 10.6 perspective, and may therefore
$ /usr/local/bin/task version
task 1.9.2 built for darwin-ncurses
Copyright (C) 2006 - 2010 P. Beckingham, F. Hernandez.
task 1.9.4 built for darwin
Copyright (C) 2006 - 2011 P. Beckingham, F. Hernandez.
Taskwarrior may be copied only under the terms of the GNU General Public
License, which may be found in the taskwarrior source kit.
@@ -269,7 +269,7 @@ Note: This is being written from the OSX 10.6 perspective, and may therefore
$ man task
...
...
task 1.9.2 2010-05-22 task 1.9.2
task 1.9.4 2011-0l-10 task 1.9.4
The man page should list 1.9.2 as the version number, but the date will be
different.

View File

@@ -32,10 +32,10 @@ Upstream Authors:
Copyright:
Copyright 2006 - 2010, Paul Beckingham
Copyright 2009 - 2010 Federico Hernandez
Copyright 2006 - 2010, Paul Beckingham, Federico Hernandez
Copyright 2009 - 2010 John Florian
Copyright 2006 - 2011, Paul Beckingham
Copyright 2009 - 2011 Federico Hernandez
Copyright 2006 - 2011, Paul Beckingham, Federico Hernandez
Copyright 2009 - 2011 John Florian
Copyright 2009 P.C. Shyamshankar
Copyright © 19942008 Lua.org, PUC-Rio
@@ -60,6 +60,6 @@ Public License can be found in `/usr/share/common-licenses/GPL-2'.
The Debian packaging is:
Copyright (C) 2009 - 2010, Federico Hernandez <ultrafredde@gmail.com>
Copyright (C) 2009 - 2011, Federico Hernandez <ultrafredde@gmail.com>
and is licensed under the GPL, see above.

1
scripts/CMakeLists.txt Normal file
View File

@@ -0,0 +1 @@
install (DIRECTORY bash fish vim zsh add-ons DESTINATION ${TASK_DOCDIR}/scripts)

70
scripts/add-ons/export-csv.pl Executable file
View File

@@ -0,0 +1,70 @@
#! /usr/bin/perl
################################################################################
## taskwarrior - a command line task list manager.
##
## Copyright 2006 - 2011, Paul Beckingham, Federico Hernandez.
## All rights reserved.
##
## This program is free software; you can redistribute it and/or modify it under
## the terms of the GNU General Public License as published by the Free Software
## Foundation; either version 2 of the License, or (at your option) any later
## version.
##
## This program is distributed in the hope that it will be useful, but WITHOUT
## ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
## FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
## details.
##
## You should have received a copy of the GNU General Public License along with
## this program; if not, write to the
##
## Free Software Foundation, Inc.,
## 51 Franklin Street, Fifth Floor,
## Boston, MA
## 02110-1301
## USA
##
################################################################################
use strict;
use warnings;
use JSON;
# Use the taskwarrior 1.9.4+ _query command to issue a query and return JSON
my $command = '/usr/local/bin/task _query ' . join (' ', @ARGV);
# Generate output.
print "'uuid','status','tags','entry','start','due','recur','end','project',",
"'priority','fg','bg','description'\n";
for my $task (split /,$/ms, qx{$command})
{
my $data = from_json ($task);
print "'$data->{'uuid'}',",
"'$data->{'status'}',",
"'", (exists $data->{'tags'} ? join (' ', @{$data->{'tags'}}) : ''), "',",
"'$data->{'entry'}',",
"'", ($data->{'start'} || ''), "',",
"'", ($data->{'due'} || ''), "',",
"'", ($data->{'recur'} || ''), "',",
"'", ($data->{'end'} || ''), "',",
"'", ($data->{'project'} || ''), "',",
"'", ($data->{'priority'} || ''), "',",
"'", ($data->{'fg'} || ''), "',",
"'", ($data->{'bg'} || ''), "',",
"'$data->{'description'}'",
"\n";
# Note that this format ignores:
# wait
# until
# annotations
# mask
# imask
}
exit 0;
################################################################################

91
scripts/add-ons/export-ical.pl Executable file
View File

@@ -0,0 +1,91 @@
#! /usr/bin/perl
################################################################################
## taskwarrior - a command line task list manager.
##
## Copyright 2006 - 2011, Paul Beckingham, Federico Hernandez.
## All rights reserved.
##
## This program is free software; you can redistribute it and/or modify it under
## the terms of the GNU General Public License as published by the Free Software
## Foundation; either version 2 of the License, or (at your option) any later
## version.
##
## This program is distributed in the hope that it will be useful, but WITHOUT
## ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
## FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
## details.
##
## You should have received a copy of the GNU General Public License along with
## this program; if not, write to the
##
## Free Software Foundation, Inc.,
## 51 Franklin Street, Fifth Floor,
## Boston, MA
## 02110-1301
## USA
##
################################################################################
use strict;
use warnings;
use JSON;
# Use the taskwarrior 1.9.4+ _query command to issue a query and return JSON
my $command = '/usr/local/bin/task _query ' . join (' ', @ARGV);
# Generate output.
print "BEGIN:VCALENDAR\n",
"VERSION:2.0\n",
"PRODID:=//GBF/taskwarrior 1.9.4//EN\n";
for my $task (split /,$/ms, qx{$command})
{
my $data = from_json ($task);
print "BEGIN:VTODO\n";
print "UID:$data->{'uuid'}\n";
print "DTSTAMP:$data->{'entry'}\n";
print "DTSTART:$data->{'start'}\n" if exists $data->{'start'};
print "DUE:$data->{'due'}\n" if exists $data->{'due'};
print "COMPLETED:$data->{'end'}\n" if exists $data->{'end'};
print "SUMMARY:$data->{'description'}\n";
print "CLASS:PRIVATE\n";
print "CATEGORIES:", join (',', @{$data->{'tags'}}), "\n" if exists $data->{'tags'};
# Priorities map to a 1-9 scale.
if (exists $data->{'priority'})
{
print "PRIORITY:", ($data->{'priority'} eq 'H' ? '1' :
$data->{'priority'} eq 'M' ? '5' :
'9'), "\n";
}
# Status maps differently.
my $status = $data->{'status'};
if ($status eq 'pending' || $status eq 'waiting')
{
print "STATUS:", (exists $data->{'start'} ? 'IN-PROCESS' : 'NEEDS-ACTION'), "\n";
}
elsif ($status eq 'completed')
{
print "STATUS:COMPLETED\n";
}
elsif ($status eq 'deleted')
{
print "STATUS:CANCELLED\n";
}
# Annotations become comments.
if (exists $data->{'annotations'})
{
print "COMMENT:$_->{'description'}\n" for @{$data->{'annotations'}};
}
print "END:VTODO\n";
}
print "END:VCALENDAR\n";
exit 0;
################################################################################

74
scripts/add-ons/export-xml.pl Executable file
View File

@@ -0,0 +1,74 @@
#! /usr/bin/perl
################################################################################
## taskwarrior - a command line task list manager.
##
## Copyright 2006 - 2011, Paul Beckingham, Federico Hernandez.
## All rights reserved.
##
## This program is free software; you can redistribute it and/or modify it under
## the terms of the GNU General Public License as published by the Free Software
## Foundation; either version 2 of the License, or (at your option) any later
## version.
##
## This program is distributed in the hope that it will be useful, but WITHOUT
## ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
## FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
## details.
##
## You should have received a copy of the GNU General Public License along with
## this program; if not, write to the
##
## Free Software Foundation, Inc.,
## 51 Franklin Street, Fifth Floor,
## Boston, MA
## 02110-1301
## USA
##
################################################################################
use strict;
use warnings;
use JSON;
# Use the taskwarrior 1.9.4+ _query command to issue a query and return JSON
my $command = '/usr/local/bin/task _query ' . join (' ', @ARGV);
# Generate output.
print "<tasks>\n";
for my $task (split /,$/ms, qx{$command})
{
my $data = from_json ($task);
print " <task>\n";
for my $key (keys %$data)
{
if ($key eq 'annotations')
{
print " <annotations>\n";
for my $anno (@{$data->{$key}})
{
print " <annotation>\n";
print " <$_>$anno->{$_}</$_>\n" for keys %$anno;
print " </annotation>\n";
}
print " </annotations>\n";
}
elsif ($key eq 'tags')
{
print " <tags>\n";
print " <tag>$_</tag>\n" for @{$data->{'tags'}};
print " </tags>\n";
}
else
{
print " <$key>$data->{$key}</$key>\n";
}
}
print " </task>\n";
}
print "</tasks>\n";
exit 0;
################################################################################

62
scripts/add-ons/export-xml.py Executable file
View File

@@ -0,0 +1,62 @@
#! /usr/bin/python
################################################################################
## taskwarrior - a command line task list manager.
##
## Copyright 2006 - 2011, Paul Beckingham, Federico Hernandez.
## All rights reserved.
##
## This program is free software; you can redistribute it and/or modify it under
## the terms of the GNU General Public License as published by the Free Software
## Foundation; either version 2 of the License, or (at your option) any later
## version.
##
## This program is distributed in the hope that it will be useful, but WITHOUT
## ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
## FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
## details.
##
## You should have received a copy of the GNU General Public License along with
## this program; if not, write to the
##
## Free Software Foundation, Inc.,
## 51 Franklin Street, Fifth Floor,
## Boston, MA
## 02110-1301
## USA
##
################################################################################
import sys
import commands
import json
# Use the taskwarrior 1.9.4+ _query command to issue a query and return JSON
command = "/usr/local/bin/task _query " + " ".join (sys.argv[1:])
# Generate output.
print "<tasks>"
for task in commands.getoutput (command).split (",\n"):
data = json.loads (task)
print (" <task>")
for name,value in data.items ():
if name == "annotations":
print (" <annotations>")
for anno in value:
print (" <annotation>")
for name,value in anno.items ():
print (" <{0}>{1}</{0}>".format (name, value))
print (" </annotation>")
print (" </annotations>")
elif name == "tags":
print (" <tags>")
for tag in value:
print (" <tag>{0}</tag>".format (tag))
print (" </tags>")
else:
print (" <{0}>{1}</{0}>".format (name, value))
print (" </task>")
print ("</tasks>")
sys.exit (0)
################################################################################

67
scripts/add-ons/export-xml.rb Executable file
View File

@@ -0,0 +1,67 @@
#! /usr/bin/ruby
################################################################################
## taskwarrior - a command line task list manager.
##
## Copyright 2006 - 2011, Paul Beckingham, Federico Hernandez.
## All rights reserved.
##
## This program is free software; you can redistribute it and/or modify it under
## the terms of the GNU General Public License as published by the Free Software
## Foundation; either version 2 of the License, or (at your option) any later
## version.
##
## This program is distributed in the hope that it will be useful, but WITHOUT
## ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
## FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
## details.
##
## You should have received a copy of the GNU General Public License along with
## this program; if not, write to the
##
## Free Software Foundation, Inc.,
## 51 Franklin Street, Fifth Floor,
## Boston, MA
## 02110-1301
## USA
##
################################################################################
require 'rubygems'
require 'json'
# Use the taskwarrior 1.9.4+ _query command to issue a query and return JSON
lines = IO.popen("/usr/local/bin/task _query " + ARGV.join(" ")).readlines
# Generate output.
print "<tasks>\n"
lines.each do |line|
data = JSON.parse(line)
print " <task>\n"
data.each do |key,value|
if key == "annotations"
print " <annotations>\n"
value.each do |anno|
print " <annotation>\n"
anno.each do |key,value|
print " <#{key}>#{value}</#{key}>\n"
end
print " </annotation>\n"
end
print " </annotations>\n"
elsif key == "tags"
print " <tags>\n"
value.each do |tag|
print " <tag>#{tag}</tag>\n"
end
print " </tags>\n"
else
print " <#{key}>#{value}</#{key}>\n"
end
end
print " </task>\n"
end
print "</tasks>\n"
exit 0
################################################################################

72
scripts/add-ons/export-yaml.pl Executable file
View File

@@ -0,0 +1,72 @@
#! /usr/bin/perl
################################################################################
## taskwarrior - a command line task list manager.
##
## Copyright 2006 - 2011, Paul Beckingham, Federico Hernandez.
## All rights reserved.
##
## This program is free software; you can redistribute it and/or modify it under
## the terms of the GNU General Public License as published by the Free Software
## Foundation; either version 2 of the License, or (at your option) any later
## version.
##
## This program is distributed in the hope that it will be useful, but WITHOUT
## ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
## FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
## details.
##
## You should have received a copy of the GNU General Public License along with
## this program; if not, write to the
##
## Free Software Foundation, Inc.,
## 51 Franklin Street, Fifth Floor,
## Boston, MA
## 02110-1301
## USA
##
################################################################################
use strict;
use warnings;
use JSON;
# Use the taskwarrior 1.9.4+ _query command to issue a query and return JSON
my $command = '/usr/local/bin/task _query ' . join (' ', @ARGV);
# Generate output.
print "%YAML 1.1\n",
"---\n";
for my $task (split /,$/ms, qx{$command})
{
my $data = from_json ($task);
print " task:\n";
for my $key (keys %$data)
{
if ($key eq 'annotations')
{
print " annotations:\n";
for my $anno (@{$data->{$key}})
{
print " annotation:\n";
print " $_:$anno->{$_}\n" for keys %$anno;
}
}
elsif ($key eq 'tags')
{
print " tags:\n";
print " tag:$_\n" for @{$data->{'tags'}};
}
else
{
print " $key:$data->{$key}\n";
}
}
}
print "...\n";
exit 0;
################################################################################

View File

@@ -1,6 +1,6 @@
# bash completion support for taskwarrior
#
# Copyright 2009-2010 Federico Hernandez
# Copyright 2009 - 2011 Federico Hernandez
# All rights reserved.
#
# This script is part of the taskwarrior project.

View File

@@ -12,7 +12,7 @@
# * Attribute names and modifiers
#
# License:
# Copyright 2009 Mick Koch <kchmck@gmail.com>
# Copyright 2009 - 2011 Mick Koch <kchmck@gmail.com>
#
# This script is free software. It comes without any warranty, to the extent
# permitted by applicable law. You can redistribute it and/or modify it under

View File

@@ -53,7 +53,7 @@ You should then be ready to go.
---
All four above mentioned files are
Copyright 2009-2010 John Florian
Copyright 2009 - 2011 John Florian
and are available under the GNU Public License version 2 or later.
For the full text of this license, see COPYING.

View File

@@ -4,7 +4,7 @@
" Maintainer: John Florian <jflorian@doubledog.org>
" Updated: Thu Dec 10 18:28:26 EST 2009
"
" Copyright 2009-2010 John Florian
" Copyright 2009 - 2011 John Florian
"
" This file is available under the GNU Public License version 2 or later.
" For the full text of this license, see COPYING.

View File

@@ -3,7 +3,7 @@
" Maintainer: John Florian <jflorian@doubledog.org>
" Updated: Wed Jul 8 19:46:20 EDT 2009
"
" Copyright 2009-2010 John Florian
" Copyright 2009 - 2011 John Florian
"
" This file is available under the GNU Public License version 2 or later.
" For the full text of this license, see COPYING.

View File

@@ -3,7 +3,7 @@
" Maintainer: John Florian <jflorian@doubledog.org>
" Updated: Wed Jul 8 19:46:32 EDT 2009
"
" Copyright 2009-2010 John Florian
" Copyright 2009 - 2011 John Florian
"
" This file is available under the GNU Public License version 2 or later.
" For the full text of this license, see COPYING.

View File

@@ -3,7 +3,7 @@
" Maintainer: John Florian <jflorian@doubledog.org>
" Updated: Sat Feb 20 14:14:44 EST 2010
"
" Copyright 2009-2010 John Florian
" Copyright 2009 - 2011 John Florian
"
" This file is available under the GNU Public License version 2 or later.
" For the full text of this license, see COPYING.

View File

@@ -1,13 +1,8 @@
#compdef task
#
# This script is currently unmaintained and was released for an earlier version
# of taskwarrior. We welcome any zsh user that wants to contribute to
# taskwarrior to take a look at this script and either confirm its working
# status or improve it. Please contact us at support@taskwarrior.org if you
# have further questions on how to contribute to taskwarrior.
#
# zsh completion for taskwarrior
#
# Copyright 2010 - 2011 Johannes Schlatow
# Copyright 2009 P.C. Shyamshankar
# All rights reserved.
#
@@ -32,9 +27,54 @@
# 02110-1301
# USA
#
typeset -g _task_cmds
typeset -g _task_cmds _task_projects _task_tags _task_config _task_modifiers
_task_projects=($(task _projects))
_task_tags=($(task _tags))
_task_ids=($(task _ids))
_task_config=($(task _config))
_task_modifiers=(
'before' \
'after' \
'none' \
'any' \
'is' \
'isnt' \
'has' \
'hasnt' \
'startswith' \
'endswith' \
'word' \
'noword'
)
_task_cmds=($(task _commands))
_task_zshcmds=( ${(f)"$(task _zshcommands)"} )
_task_idCmds=(
'append' \
'prepend' \
'annotate' \
'denotate' \
'edit' \
'duplicate' \
'info' \
'start' \
'stop' \
'done'
)
_task_idCmdsDesc=(
'append:Appends more description to an existing task.' \
'prepend:Prepends more description to an existing task.' \
'annotate:Adds an annotation to an existing task.' \
'denotate:Deletes an annotation of an existing task.' \
'edit:Launches an editor to let you modify a task directly.' \
'duplicate:Duplicates the specified task, and allows modifications.' \
'info:Shows all data, metadata for specified task.' \
'start:Marks specified task as started.' \
'stop:Removes the start time from a task.' \
'done:Marks the specified task as completed.'
)
_task() {
_arguments -s -S \
@@ -42,18 +82,196 @@ _task() {
return 0
}
local -a reply args word
word=$'[^\0]#\0'
# priorities
local -a task_priorities
_regex_words values 'task priorities' \
'H:High' \
'M:Middle' \
'L:Low'
task_priorities=("$reply[@]")
# projects
local -a task_projects
task_projects=(
/"$word"/
":values:task projects:compadd -a _task_projects"
)
local -a _task_dates
_regex_words values 'task dates' \
'tod*ay:Today' \
'yes*terday:Yesterday' \
'tom*orrow:Tomorrow' \
'sow:Start of week' \
'soww:Start of work week' \
'socw:Start of calendar week' \
'som:Start of month' \
'soy:Start of year' \
'eow:End of week' \
'eoww:End of work week' \
'eocw:End of calendar week' \
'eom:End of month' \
'eoy:End of year' \
'mon:Monday' \
'tue:Tuesday'\
'wed:Wednesday' \
'thu:Thursday' \
'fri:Friday' \
'sat:Saturday' \
'sun:Sunday'
_task_dates=("$reply[@]")
local -a _task_reldates
_regex_words values 'task reldates' \
'hrs:n hours' \
'day:n days' \
'1st:first' \
'2nd:second' \
'3rd:third' \
'th:4th, 5th, etc.' \
'wks:weeks'
_task_reldates=("$reply[@]")
task_dates=(
\( "$_task_dates[@]" \|
\( /$'[0-9][0-9]#'/- \( "$_task_reldates[@]" \) \)
\)
)
_regex_words values 'task frequencies' \
'daily:Every day' \
'day:Every day' \
'weekdays:Every day skipping weekend days' \
'weekly:Every week' \
'biweekly:Every two weeks' \
'fortnight:Every two weeks' \
'quarterly:Every three months' \
'semiannual:Every six months' \
'annual:Every year' \
'yearly:Every year' \
'biannual:Every two years' \
'biyearly:Every two years'
_task_freqs=("$reply[@]")
local -a _task_frequencies
_regex_words values 'task frequencies' \
'd:days' \
'w:weeks' \
'q:quarters' \
'y:years'
_task_frequencies=("$reply[@]")
task_freqs=(
\( "$_task_freqs[@]" \|
\( /$'[0-9][0-9]#'/- \( "$_task_frequencies[@]" \) \)
\)
)
# attributes
local -a task_attributes
_regex_words -t ':' default 'task attributes' \
'pro*ject:Project name:$task_projects' \
'du*e:Due date:$task_dates' \
'wa*it:Date until task becomes pending:$task_dates' \
're*cur:Recurrence frequency:$task_freqs' \
'pri*ority:priority:$task_priorities' \
'un*til:Recurrence end date:$task_dates' \
'fg:Foreground color' \
'bg:Background color' \
'li*mit:Desired number of rows in report'
task_attributes=("$reply[@]")
args=(
\( "$task_attributes[@]" \|
\( /'(project|due|wait|recur|priority|until|fg|bg|limit).'/- \( /$'[^:]#:'/ ":default:modifiers:compadd -S ':' -a _task_modifiers" \) \) \|
\( /'(rc).'/- \( /$'[^:]#:'/ ":arguments:config:compadd -S ':' -a _task_config" \) \) \|
\( /'(+|-)'/- \( /"$word"/ ":values:remove tag:compadd -a _task_tags" \) \) \|
\( /"$word"/ \)
\) \#
)
_regex_arguments _task_attributes "${args[@]}"
## task commands
# default completion
(( $+functions[_task_default] )) ||
_task_default() {
_task_attributes "$@"
}
# commands expecting an ID
(( $+functions[_task_id] )) ||
_task_id() {
if (( CURRENT < 3 )); then
# update IDs
_task_zshids=( ${(f)"$(task _zshids)"} )
_describe -t values 'task IDs' _task_zshids
else
_task_attributes "$@"
fi
}
# merge completion
(( $+functions[_task_merge] )) ||
_task_merge() {
# TODO match URIs in .taskrc
_files
}
# push completion
(( $+functions[_task_push] )) ||
_task_push() {
# TODO match URIs in .taskrc
_files
}
# pull completion
(( $+functions[_task_pull] )) ||
_task_pull() {
# TODO match URIs in .taskrc
_files
}
# modify (task [0-9]* ...) completion
(( $+functions[_task_modify] )) ||
_task_modify() {
_describe -t commands 'task command' _task_idCmdsDesc
_task_attributes "$@"
}
## first level completion => task sub-command completion
(( $+functions[_task_commands] )) ||
_task_commands() {
local cmd ret=1
if (( CURRENT == 1 )); then
_describe -t commands 'task command' _task_cmds
else
local curcontext="${curcontext}"
cmd="${_task_cmds[(r)$words[1]:*]%%:*}"
if (( CURRENT == 1 )); then
# update IDs
_task_zshids=( ${(f)"$(task _zshids)"} )
_describe -t commands 'task command' _task_zshcmds
_describe -t values 'task IDs' _task_zshids
# TODO match more than one ID
elif [[ $words[1] =~ ^[0-9]*$ ]] then
_call_function ret _task_modify
return ret
else
# local curcontext="${curcontext}"
# cmd="${_task_cmds[(r)$words[1]:*]%%:*}"
cmd="${_task_cmds[(r)$words[1]]}"
idCmd="${(M)_task_idCmds[@]:#$words[1]}"
if (( $#cmd )); then
curcontext="${curcontext%:*:*}:task-${cmd}"
_call_function ret _task_${cmd} || _message "No command remaining."
# curcontext="${curcontext%:*:*}:task-${cmd}"
if (( $#idCmd )); then
_call_function ret _task_id
else
_call_function ret _task_${cmd} ||
_call_function ret _task_default ||
_message "No command remaining."
fi
else
_message "Unknown subcommand ${cmd}"
fi

View File

@@ -1,7 +1,7 @@
////////////////////////////////////////////////////////////////////////////////
// Taskwarrior Lua API
//
// Copyright 2006 - 2010, Paul Beckingham.
// Copyright 2006 - 2011, Paul Beckingham, Federico Hernandez.
// All rights reserved.
//
// This program is free software; you can redistribute it and/or modify it under
@@ -115,13 +115,6 @@ static int api_task_feature (lua_State* L)
#endif
}
else if (name == "ncurses")
{
#ifdef HAVE_NCURSES
value = true;
#endif
}
else if (name == "lua")
value = true;

View File

@@ -1,7 +1,7 @@
////////////////////////////////////////////////////////////////////////////////
// taskwarrior - a command line task list manager.
//
// Copyright 2006 - 2010, Paul Beckingham.
// Copyright 2006 - 2011, Paul Beckingham, Federico Hernandez.
// All rights reserved.
//
// This program is free software; you can redistribute it and/or modify it under
@@ -27,7 +27,7 @@
#ifndef INCLUDED_API
#define INCLUDED_API
#include "auto.h"
#include "../auto.h"
#ifdef HAVE_LIBLUA
#include <vector>

View File

@@ -1,7 +1,7 @@
////////////////////////////////////////////////////////////////////////////////
// taskwarrior - a command line task list manager.
//
// Copyright 2006 - 2010, Paul Beckingham.
// Copyright 2006 - 2011, Paul Beckingham, Federico Hernandez.
// All rights reserved.
//
// This program is free software; you can redistribute it and/or modify it under
@@ -29,13 +29,15 @@
#include <sstream>
#include <stdlib.h>
#include <string.h>
#include "text.h"
#include "Color.h"
#include "util.h"
#include "Date.h"
#include "Duration.h"
#include "Context.h"
#include "Att.h"
#include <text.h>
#include <rx.h>
#include <Color.h>
#include <util.h>
#include <Date.h>
#include <Duration.h>
#include <Context.h>
#include <Att.h>
#include <main.h>
extern Context context;
@@ -52,6 +54,7 @@ static const char* internalNames[] =
"status",
"description",
"tags",
"urgency",
// Note that annotations are not listed.
};
@@ -89,6 +92,22 @@ static const char* modifierNames[] =
#define NUM_MODIFIABLE_NAMES (sizeof (modifiableNames) / sizeof (modifiableNames[0]))
#define NUM_MODIFIER_NAMES (sizeof (modifierNames) / sizeof (modifierNames[0]))
////////////////////////////////////////////////////////////////////////////////
static inline std::string& str_replace (
std::string &str,
const std::string& search,
const std::string& replacement)
{
std::string::size_type pos = 0;
while ((pos = str.find (search, pos)) != std::string::npos)
{
str.replace (pos, search.length (), replacement);
pos += replacement.length ();
}
return str;
}
////////////////////////////////////////////////////////////////////////////////
Att::Att ()
: mName ("")
@@ -186,14 +205,18 @@ bool Att::valid (const std::string& input) const
if (!n.getUntilOneOf (".:", ignored))
return false;
if (n.skip (':') &&
(n.getQuoted ('"', ignored) ||
n.getUntil (' ', ignored) ||
n.getUntilEOS (ignored) ||
n.depleted ()))
return true;
if (n.skip (':'))
{
if (input.find ('@') <= n.cursor () ||
input.find ('/') <= n.cursor ())
return false;
return false;
if (n.getQuoted ('"', ignored) ||
n.getUntil (' ', ignored) ||
n.getUntilEOS (ignored) ||
n.depleted ())
return true;
}
}
return false;
@@ -448,7 +471,8 @@ std::string Att::type (const std::string& name) const
else if (name == "recur")
return "duration";
else if (name == "limit")
else if (name == "limit" ||
name == "urgency")
return "number";
else if (name == "priority")
@@ -472,10 +496,12 @@ std::string Att::modType (const std::string& name) const
}
////////////////////////////////////////////////////////////////////////////////
//
// ______________
// | |
// | v
// start --> name --> . --> mod --> : --> " --> value --> " --> end
// | ^
// |_____________________|
// | ^ | ^
// |_____________________| |_____________|
//
void Att::parse (const std::string& input)
{
@@ -513,8 +539,8 @@ void Att::parse (Nibbler& n)
{
// Both quoted and unquoted Att's are accepted.
// Consider removing this for a stricter parse.
if (n.getQuoted ('"', mValue) ||
n.getUntil (' ', mValue))
if (n.getQuoted ('"', mValue) ||
n.getUntilEOS (mValue))
{
decode (mValue);
}
@@ -533,11 +559,22 @@ void Att::parse (Nibbler& n)
////////////////////////////////////////////////////////////////////////////////
// "this" is the attribute that has modifiers. "other" is the attribute from a
// Record that does not have modifiers, but may have a value.
//
// In other words, the filter:
// task list description.contains:foo
//
// Is represented with:
// this = filter (description.contains:foo)
// other = actual task data to be matched
//
bool Att::match (const Att& other) const
{
// All matches are assumed to pass, any short-circuit on non-match.
bool case_sensitive = context.config.getBoolean ("search.case.sensitive");
// Are regular expressions being used in place of string comparison?
bool regex = context.config.getBoolean ("regex");
// If there are no mods, just perform a straight compare on value.
if (mMod == "")
{
@@ -557,30 +594,73 @@ bool Att::match (const Att& other) const
}
else
{
#ifdef FEATURE_REGEX
if (regex)
{
std::string pattern = "^" + mValue + "$";
if (!regexMatch (other.mValue, pattern, case_sensitive))
return false;
}
else if (!compare (mValue, other.mValue, (bool) case_sensitive))
return false;
#else
if (!compare (mValue, other.mValue, (bool) case_sensitive))
return false;
#endif
}
}
// has = contains as a substring.
else if (mMod == "has" || mMod == "contains") // TODO i18n
{
#ifdef FEATURE_REGEX
if (regex)
{
if (!regexMatch (other.mValue, mValue, case_sensitive))
return false;
}
else if (find (other.mValue, mValue, (bool) case_sensitive) == std::string::npos)
return false;
#else
if (find (other.mValue, mValue, (bool) case_sensitive) == std::string::npos)
return false;
#endif
}
// is = equal. Nop.
else if (mMod == "is" || mMod == "equals") // TODO i18n
{
#ifdef FEATURE_REGEX
if (regex)
{
std::string pattern = "^" + mValue + "$";
if (!regexMatch (other.mValue, pattern, case_sensitive))
return false;
}
else if (!compare (mValue, other.mValue, (bool) case_sensitive))
return false;
#else
if (!compare (mValue, other.mValue, (bool) case_sensitive))
return false;
#endif
}
// isnt = not equal.
else if (mMod == "isnt" || mMod == "not") // TODO i18n
{
#ifdef FEATURE_REGEX
if (regex)
{
std::string pattern = "^" + mValue + "$";
if (regexMatch (other.mValue, pattern, case_sensitive))
return false;
}
else if (compare (mValue, other.mValue, (bool) case_sensitive))
return false;
#else
if (compare (mValue, other.mValue, (bool) case_sensitive))
return false;
#endif
}
// any = any value, but not empty value.
@@ -600,30 +680,66 @@ bool Att::match (const Att& other) const
// startswith = first characters must match.
else if (mMod == "startswith" || mMod == "left") // TODO i18n
{
if (other.mValue.length () < mValue.length ())
return false;
#ifdef FEATURE_REGEX
if (regex)
{
std::string pattern = "^" + mValue;
if (!regexMatch (other.mValue, pattern, case_sensitive))
return false;
}
else
{
#endif
if (other.mValue.length () < mValue.length ())
return false;
if (!compare (mValue, other.mValue.substr (0, mValue.length ()), (bool) case_sensitive))
return false;
return false;
#ifdef FEATURE_REGEX
}
#endif
}
// endswith = last characters must match.
else if (mMod == "endswith" || mMod == "right") // TODO i18n
{
if (other.mValue.length () < mValue.length ())
return false;
#ifdef FEATURE_REGEX
if (regex)
{
std::string pattern = mValue + "$";
if (!regexMatch (other.mValue, pattern, case_sensitive))
return false;
}
else
{
#endif
if (other.mValue.length () < mValue.length ())
return false;
if (!compare (mValue, other.mValue.substr (
other.mValue.length () - mValue.length (),
std::string::npos), (bool) case_sensitive))
return false;
if (!compare (mValue, other.mValue.substr (
other.mValue.length () - mValue.length (),
std::string::npos), (bool) case_sensitive))
return false;
#ifdef FEATURE_REGEX
}
#endif
}
// hasnt = does not contain as a substring.
else if (mMod == "hasnt") // TODO i18n
{
#ifdef FEATURE_REGEX
if (regex)
{
if (regexMatch (other.mValue, mValue, case_sensitive))
return false;
}
else if (find (other.mValue, mValue, (bool) case_sensitive) != std::string::npos)
return false;
#else
if (find (other.mValue, mValue, (bool) case_sensitive) != std::string::npos)
return false;
#endif
}
// before = under = below = <
@@ -705,30 +821,66 @@ bool Att::match (const Att& other) const
// word = contains as a substring, with word boundaries.
else if (mMod == "word") // TODO i18n
{
// Fail if the substring is not found.
std::string::size_type sub = find (other.mValue, mValue, (bool) case_sensitive);
if (sub == std::string::npos)
return false;
#ifdef FEATURE_REGEX
if (regex && other.mName != "tags")
{
std::vector <int> start;
std::vector <int> end;
if (!regexMatch (start, end, other.mValue, mValue, case_sensitive))
return false;
// Also fail if there is no word boundary at beginning and end.
if (!isWordStart (other.mValue, sub))
return false;
if (!isWordStart (other.mValue, start[0]))
return false;
if (!isWordEnd (other.mValue, sub + mValue.length () - 1))
return false;
if (!isWordEnd (other.mValue, end[0]))
return false;
}
else
{
#endif
// Fail if the substring is not found.
std::string::size_type sub = find (other.mValue, mValue, (bool) case_sensitive);
if (sub == std::string::npos)
return false;
// Also fail if there is no word boundary at beginning and end.
if (!isWordStart (other.mValue, sub))
return false;
if (!isWordEnd (other.mValue, sub + mValue.length () - 1))
return false;
#ifdef FEATURE_REGEX
}
#endif
}
// noword = does not contain as a substring, with word boundaries.
else if (mMod == "noword") // TODO i18n
{
// Fail if the substring is not found.
std::string::size_type sub = find (other.mValue, mValue);
if (sub != std::string::npos &&
isWordStart (other.mValue, sub) &&
isWordEnd (other.mValue, sub + mValue.length () - 1))
#ifdef FEATURE_REGEX
if (regex && other.mName != "tags")
{
return false;
std::vector <int> start;
std::vector <int> end;
if (regexMatch (start, end, other.mValue, mValue, case_sensitive) &&
isWordStart (other.mValue, start[0]) &&
isWordEnd (other.mValue, end[0]))
return false;
}
else
{
#endif
// Fail if the substring is not found.
std::string::size_type sub = find (other.mValue, mValue);
if (sub != std::string::npos &&
isWordStart (other.mValue, sub) &&
isWordEnd (other.mValue, sub + mValue.length () - 1))
{
return false;
}
#ifdef FEATURE_REGEX
}
#endif
}
return true;
@@ -831,9 +983,7 @@ void Att::enquote (std::string& value) const
// that hand-editing the pending.data file could cause.
void Att::dequote (std::string& value) const
{
std::string::size_type quote;
while ((quote = value.find ('"')) != std::string::npos)
value.replace (quote, 1, "");
str_replace (value, "\"", "");
}
////////////////////////////////////////////////////////////////////////////////
@@ -842,21 +992,14 @@ void Att::dequote (std::string& value) const
// " -> &dquot;
// [ -> &open;
// ] -> &close;
// \ -> \\ (extra chars to disambiguate multi-line comment)
void Att::encode (std::string& value) const
{
std::string::size_type i;
while ((i = value.find ('\t')) != std::string::npos)
value.replace (i, 1, "&tab;"); // no i18n
while ((i = value.find ('"')) != std::string::npos)
value.replace (i, 1, "&dquot;"); // no i18n
while ((i = value.find ('[')) != std::string::npos)
value.replace (i, 1, "&open;"); // no i18n
while ((i = value.find (']')) != std::string::npos)
value.replace (i, 1, "&close;"); // no i18n
str_replace (value, "\t", "&tab;");
str_replace (value, "\"", "&dquot;");
str_replace (value, "[", "&open;");
str_replace (value, "]", "&close;");
str_replace (value, "\\", "\\\\");
}
////////////////////////////////////////////////////////////////////////////////
@@ -870,35 +1013,19 @@ void Att::encode (std::string& value) const
// : <- &colon;
void Att::decode (std::string& value) const
{
std::string::size_type i;
// Supported encodings.
while ((i = value.find ("&tab;")) != std::string::npos)
value.replace (i, 5, "\t");
while ((i = value.find ("&dquot;")) != std::string::npos)
value.replace (i, 7, "\"");
while ((i = value.find ("&quot;")) != std::string::npos)
value.replace (i, 6, "\"");
while ((i = value.find ("&open;")) != std::string::npos)
value.replace (i, 6, "[");
while ((i = value.find ("&close;")) != std::string::npos)
value.replace (i, 7, "]");
str_replace (value, "&tab;", "\t");
str_replace (value, "&dquot;", "\"");
str_replace (value, "&quot;", "'");
str_replace (value, "&open;", "[");
str_replace (value, "&close;", "]");
// Support for deprecated encodings. These cannot be removed or old files
// will not be parsable. Not just old files - completed.data can contain
// tasks formatted/encoded using these.
while ((i = value.find ("&squot;")) != std::string::npos)
value.replace (i, 7, "'");
while ((i = value.find ("&comma;")) != std::string::npos)
value.replace (i, 7, ",");
while ((i = value.find ("&colon;")) != std::string::npos)
value.replace (i, 7, ":");
str_replace (value, "&squot;", "'");
str_replace (value, "&comma;", ",");
str_replace (value, "&colon;", ":");
}
////////////////////////////////////////////////////////////////////////////////

View File

@@ -1,7 +1,7 @@
////////////////////////////////////////////////////////////////////////////////
// taskwarrior - a command line task list manager.
//
// Copyright 2006 - 2010, Paul Beckingham.
// Copyright 2006 - 2011, Paul Beckingham, Federico Hernandez.
// All rights reserved.
//
// This program is free software; you can redistribute it and/or modify it under

31
src/CMakeLists.txt Normal file
View File

@@ -0,0 +1,31 @@
include_directories (${CMAKE_SOURCE_DIR}/src
${TASK_INCLUDE_DIRS})
set (task_SRCS API.cpp API.h Att.cpp Att.h Cmd.cpp Cmd.h Color.cpp Color.h
Config.cpp Config.h Context.cpp Context.h Date.cpp Date.h
Directory.cpp Directory.h Duration.cpp Duration.h File.cpp
File.h Filter.cpp Filter.h Grid.cpp Grid.h Hooks.cpp Hooks.h
JSON.cpp JSON.h Keymap.cpp Keymap.h Lisp.cpp Lisp.h Location.cpp
Location.h Nibbler.cpp Nibbler.h Path.cpp Path.h Permission.cpp
Permission.h Record.cpp Record.h Rectangle.cpp Rectangle.h
Sensor.cpp Sensor.h Sequence.cpp Sequence.h StringTable.cpp
StringTable.h Subst.cpp Subst.h TDB.cpp TDB.h Table.cpp Table.h
Task.cpp Task.h Taskmod.cpp Taskmod.h Thread.cpp Thread.h
Timer.cpp Timer.h Transport.cpp Transport.h TransportSSH.cpp
TransportSSH.h TransportRSYNC.cpp TransportRSYNC.h
TransportCurl.cpp TransportCurl.h Tree.cpp Tree.h burndown.cpp
command.cpp custom.cpp dependency.cpp diag.cpp edit.cpp
export.cpp history.cpp i18n.h import.cpp interactive.cpp
recur.cpp report.cpp rules.cpp rx.cpp rx.h text.cpp text.h
utf8.cpp utf8.h util.cpp util.h Uri.cpp Uri.h)
add_library (task STATIC ${task_SRCS})
add_executable (task_executable main.cpp)
target_link_libraries (task_executable task ${TASK_LIBRARIES})
set_property (TARGET task_executable PROPERTY OUTPUT_NAME "task")
install (TARGETS task_executable DESTINATION ${TASK_BINDIR})
set (CMAKE_BUILD_TYPE debug)
set (CMAKE_C_FLAGS_DEBUG "-ggdb3")
set (CMAKE_C_FLAGS_RELEASE "-O3")

View File

@@ -1,7 +1,7 @@
////////////////////////////////////////////////////////////////////////////////
// taskwarrior - a command line task list manager.
//
// Copyright 2006 - 2010, Paul Beckingham, Federico Hernandez.
// Copyright 2006 - 2011, Paul Beckingham, Federico Hernandez.
// All rights reserved.
//
// This program is free software; you can redistribute it and/or modify it under
@@ -135,6 +135,9 @@ void Cmd::load ()
commands.push_back ("_config");
commands.push_back ("_version");
commands.push_back ("_urgency");
commands.push_back ("_query");
commands.push_back ("_zshcommands");
commands.push_back ("_zshids");
commands.push_back ("export.csv");
commands.push_back ("export.ical");
commands.push_back ("export.yaml");
@@ -142,6 +145,10 @@ void Cmd::load ()
commands.push_back ("history.annual");
commands.push_back ("ghistory.monthly");
commands.push_back ("ghistory.annual");
commands.push_back ("burndown.daily");
commands.push_back ("burndown.weekly");
commands.push_back ("burndown.monthly");
commands.push_back ("count");
// Commands whose names are localized.
commands.push_back (context.stringtable.get (CMD_ADD, "add"));
@@ -237,6 +244,9 @@ bool Cmd::isReadOnlyCommand ()
command == "_config" ||
command == "_version" ||
command == "_urgency" ||
command == "_query" ||
command == "_zshcommands" ||
command == "_zshids" ||
command == "export.csv" ||
command == "export.ical" ||
command == "export.yaml" ||
@@ -244,6 +254,10 @@ bool Cmd::isReadOnlyCommand ()
command == "history.annual" ||
command == "ghistory.monthly" ||
command == "ghistory.annual" ||
command == "burndown.daily" ||
command == "burndown.weekly" ||
command == "burndown.monthly" ||
command == "count" ||
command == context.stringtable.get (CMD_CALENDAR, "calendar") ||
command == context.stringtable.get (CMD_COLORS, "colors") ||
command == context.stringtable.get (CMD_DIAGNOSTICS, "diagnostics") ||

View File

@@ -1,7 +1,7 @@
////////////////////////////////////////////////////////////////////////////////
// taskwarrior - a command line task list manager.
//
// Copyright 2006 - 2010, Paul Beckingham, Federico Hernandez.
// Copyright 2006 - 2011, Paul Beckingham, Federico Hernandez.
// All rights reserved.
//
// This program is free software; you can redistribute it and/or modify it under

View File

@@ -1,7 +1,7 @@
////////////////////////////////////////////////////////////////////////////////
// taskwarrior - a command line task list manager.
//
// Copyright 2006 - 2010, Paul Beckingham.
// Copyright 2006 - 2011, Paul Beckingham, Federico Hernandez.
// All rights reserved.
//
// This program is free software; you can redistribute it and/or modify it under

View File

@@ -1,7 +1,7 @@
////////////////////////////////////////////////////////////////////////////////
// taskwarrior - a command line task list manager.
//
// Copyright 2006 - 2010, Paul Beckingham.
// Copyright 2006 - 2011, Paul Beckingham, Federico Hernandez.
// All rights reserved.
//
// This program is free software; you can redistribute it and/or modify it under

View File

@@ -1,7 +1,7 @@
////////////////////////////////////////////////////////////////////////////////
// taskwarrior - a command line task list manager.
//
// Copyright 2006 - 2010, Paul Beckingham, Federico Hernandez.
// Copyright 2006 - 2011, Paul Beckingham, Federico Hernandez.
// All rights reserved.
//
// This program is free software; you can redistribute it and/or modify it under

View File

@@ -1,7 +1,7 @@
////////////////////////////////////////////////////////////////////////////////
// taskwarrior - a command line task list manager.
//
// Copyright 2006 - 2010, Paul Beckingham, Federico Hernandez.
// Copyright 2006 - 2011, Paul Beckingham, Federico Hernandez.
// All rights reserved.
//
// This program is free software; you can redistribute it and/or modify it under

View File

@@ -1,7 +1,7 @@
///////////////////////////////////////////////////////////////////////////////
// taskwarrior - a command line task list manager.
//
// Copyright 2006 - 2010, Paul Beckingham.
// Copyright 2006 - 2011, Paul Beckingham, Federico Hernandez.
// All rights reserved.
//
// This program is free software; you can redistribute it and/or modify it under
@@ -48,7 +48,7 @@
std::string Config::defaults =
"# Taskwarrior program configuration file.\n"
"# For more documentation, see http://taskwarrior.org or try 'man task', 'man task-faq',\n"
"# 'man task-tutorial', 'man task-color' or 'man taskrc'\n"
"# 'man task-tutorial', 'man task-color', 'man task-sync' or 'man taskrc'\n"
"\n"
"# Here is an example of entries that use the default, override and blank values\n"
"# variable=foo -- By specifying a value, this overrides the default\n"
@@ -60,11 +60,13 @@ std::string Config::defaults =
"# Files\n"
"data.location=~/.task\n"
"locking=on # Use file-level locking\n"
"gc=on # Garbage-collect data files - DO NOT CHANGE unless you are sure\n"
"\n"
"# Terminal\n"
"curses=on # Use ncurses library to determine terminal width\n"
"defaultwidth=80 # Without ncurses, assumed width\n"
"curses=on # Detects terminal width\n"
"defaultwidth=80 # Without detection, assumed width\n"
"#editor=vi # Preferred text editor\n"
"edit.verbose=yes # Include comments in files created during task edit\n"
"\n"
"# Miscellaneous\n"
"verbose=yes # Provide extra feedback\n"
@@ -80,6 +82,9 @@ std::string Config::defaults =
"recurrence.indicator=R # What to show as a task recurrence indicator\n"
"recurrence.limit=1 # Number of future recurring pending tasks\n"
"undo.style=side # Undo style - can be 'side', or 'diff'\n"
"burndown.bias=0.666 # Weighted mean bias toward recent data\n"
"regex=no # Assume all search/filter strings are regexes\n"
"xterm.title=no # Sets xterm title for some commands\n"
"\n"
"# Dates\n"
"dateformat=m/d/Y # Preferred input and display date format\n"
@@ -94,6 +99,8 @@ std::string Config::defaults =
"calendar.legend=yes # Display the legend on calendar\n"
"calendar.details=sparse # Calendar shows information for tasks w/due dates: full, sparse or none\n"
"calendar.details.report=list # Report to use when showing task information in cal\n"
"calendar.offset=no # Apply an offset value to control the first month of the calendar\n"
"calendar.offset.value=-1 # The number of months the first month of the calendar is moved\n"
"calendar.holidays=none # Show public holidays on calendar:full, sparse or none\n"
"#monthsperline=3 # Number of calendar months on a line\n"
"\n"
@@ -101,6 +108,7 @@ std::string Config::defaults =
"journal.time=no # Record start/stop commands as annotation\n"
"journal.time.start.annotation=Started task # Annotation description for the start journal entry\n"
"journal.time.stop.annotation=Stopped task # Annotation description for the stop journal entry\n"
"journal.info=on # Display task journal with info command\n"
"\n"
"# Dependency controls\n"
"dependency.reminder=on # Nags on dependency chain violations\n"
@@ -129,13 +137,17 @@ std::string Config::defaults =
"color.debug=color3 # Color of diagnostic output\n"
"color.alternate=on color233 # Alternate color for line coloring\n"
"\n"
"color.summary.bar=on rgb141 # Color of summary report progress bar\n"
"color.summary.background=on color0 # Color of summary report background\n"
"color.summary.bar=black on rgb141 # Color of summary report progress bar\n"
"color.summary.background=white on color0 # Color of summary report background\n"
"\n"
"color.history.add=color0 on rgb500 # Color of added tasks in ghistory report\n"
"color.history.done=color0 on rgb050 # Color of completed tasks in ghistory report\n"
"color.history.delete=color0 on rgb550 # Color of deleted tasks in ghistory report\n"
"\n"
"color.burndown.pending=color0 on rgb500 # Color of pending tasks in burndown report\n"
"color.burndown.done=color0 on rgb050 # Color of completed tasks in burndown report\n"
"color.burndown.started=color0 on rgb550 # Color of started tasks in burndown report\n"
"\n"
"color.sync.added=rgb005 # Color of added tasks in sync output\n"
"color.sync.changed=rgb550 # Color of changed tasks in sync output\n"
"color.sync.rejected=rgb500 # Color of rejected tasks in sync output\n"
@@ -174,13 +186,17 @@ std::string Config::defaults =
"color.debug=yellow # Color of diagnostic output\n"
"color.alternate= # Alternate color for line coloring\n"
"\n"
"color.summary.bar=on green # Color of summary report progress bar\n"
"color.summary.background=on black # Color of summary report background\n"
"color.summary.bar=black on green # Color of summary report progress bar\n"
"color.summary.background=white on black # Color of summary report background\n"
"\n"
"color.history.add=black on red # Color of added tasks in ghistory report\n"
"color.history.done=black on green # Color of completed tasks in ghistory report\n"
"color.history.delete=black on yellow # Color of deleted tasks in ghistory report\n"
"\n"
"color.burndown.pending=black on red # Color of pending tasks in burndown report\n"
"color.burndown.done=black on green # Color of completed tasks in burndown report\n"
"color.burndown.started=black on yellow # Color of started tasks in burndown report\n"
"\n"
"color.sync.added=green # Color of added tasks in sync output\n"
"color.sync.changed=yellow # Color of changed tasks in sync output\n"
"color.sync.rejected=red # Color of rejected tasks in sync output\n"
@@ -227,6 +243,7 @@ std::string Config::defaults =
"\n"
"#default.project=foo # Default project for 'add' command\n"
"#default.priority=M # Default priority for 'add' command\n"
"#default.due=eom # Default due date for 'add' command\n"
"default.command=list # When no arguments are specified\n"
"\n"
"_forcecolor=no # Forces color to be on, even for non TTY output\n"
@@ -273,6 +290,8 @@ std::string Config::defaults =
"alias.ghistory=ghistory.monthly # Prefer monthly graphical over annual history reports\n"
"alias.export=export.yaml # Prefer YAML over CSV or iCal export\n"
"alias.export.vcalendar=export.ical # They are the same\n"
"alias.export.json=_query # The _query command will be used for all export\n"
"alias.burndown=burndown.weekly # Prefer the weekly burndown chart\n"
"\n"
"# Fields: id, uuid, project, priority, priority_long, entry, start, end,\n"
"# due, countdown, countdown_compact, age, age_compact, active, tags,\n"
@@ -287,7 +306,7 @@ std::string Config::defaults =
"report.long.description=Lists all task, all data, matching the specified criteria\n"
"report.long.columns=id,project,priority,entry,start,due,recur,countdown,age,depends,tags,description\n"
"report.long.labels=ID,Project,Pri,Added,Started,Due,Recur,Countdown,Age,Deps,Tags,Description\n"
"report.long.sort=due+,priority-,project+\n"
"report.long.sort=due+,priority-,project+,description+\n"
"report.long.filter=status:pending\n"
"#report.long.dateformat=m/d/Y\n"
"#report.long.annotations=full\n"
@@ -296,7 +315,7 @@ std::string Config::defaults =
"report.list.description=Lists all tasks matching the specified criteria\n"
"report.list.columns=id,project,priority,due,active,age,description\n"
"report.list.labels=ID,Project,Pri,Due,Active,Age,Description\n"
"report.list.sort=due+,priority-,active-,project+\n"
"report.list.sort=due+,priority-,active-,project+,description+\n"
"report.list.filter=status:pending\n"
"#report.list.dateformat=m/d/Y\n"
"#report.list.annotations=full\n"
@@ -305,7 +324,7 @@ std::string Config::defaults =
"report.ls.description=Minimal listing of all tasks matching the specified criteria\n"
"report.ls.columns=id,project,priority,description\n"
"report.ls.labels=ID,Project,Pri,Description\n"
"report.ls.sort=priority-,project+\n"
"report.ls.sort=priority-,project+,description+\n"
"report.ls.filter=status:pending\n"
"#report.ls.dateformat=m/d/Y\n"
"#report.ls.annotations=full\n"
@@ -341,7 +360,7 @@ std::string Config::defaults =
"report.overdue.description=Lists overdue tasks matching the specified criteria\n"
"report.overdue.columns=id,project,priority,due,active,age,description\n"
"report.overdue.labels=ID,Project,Pri,Due,Active,Age,Description\n"
"report.overdue.sort=due+,priority-,active-,project+\n"
"report.overdue.sort=due+,priority-,active-,project+,description+\n"
"report.overdue.filter=status:pending due.before:now\n"
"#report.overdue.dateformat=m/d/Y\n"
"#report.overdue.annotations=full\n"
@@ -350,7 +369,7 @@ std::string Config::defaults =
"report.active.description=Lists active tasks matching the specified criteria\n"
"report.active.columns=id,project,priority,due,active,age,description\n"
"report.active.labels=ID,Project,Pri,Due,Active,Age,Description\n"
"report.active.sort=due+,priority-,project+\n"
"report.active.sort=due+,priority-,project+,description+\n"
"report.active.filter=status:pending start.any:\n"
"#report.active.dateformat=m/d/Y\n"
"#report.active.annotations=full\n"
@@ -359,7 +378,7 @@ std::string Config::defaults =
"report.completed.description=Lists completed tasks matching the specified criteria\n"
"report.completed.columns=end,project,priority,age,description\n"
"report.completed.labels=Complete,Project,Pri,Age,Description\n"
"report.completed.sort=end+,priority-,project+\n"
"report.completed.sort=end+,priority-,project+,description+\n"
"report.completed.filter=status:completed\n"
"#report.completed.dateformat=m/d/Y\n"
"#report.completed.annotations=full\n"
@@ -368,7 +387,7 @@ std::string Config::defaults =
"report.recurring.description=Lists recurring tasks matching the specified criteria\n"
"report.recurring.columns=id,project,priority,due,recur,active,age,description\n"
"report.recurring.labels=ID,Project,Pri,Due,Recur,Active,Age,Description\n"
"report.recurring.sort=due+,priority-,active-,project+\n"
"report.recurring.sort=due+,priority-,active-,project+,description+\n"
"report.recurring.filter=status:pending parent.any:\n"
"#report.recurring.dateformat=m/d/Y\n"
"#report.recurring.annotations=full\n"
@@ -377,13 +396,13 @@ std::string Config::defaults =
"report.waiting.description=Lists all waiting tasks matching the specified criteria\n"
"report.waiting.columns=id,project,priority,wait,age,description\n"
"report.waiting.labels=ID,Project,Pri,Wait,Age,Description\n"
"report.waiting.sort=wait+,priority-,project+\n"
"report.waiting.sort=wait+,priority-,project+,description+\n"
"report.waiting.filter=status:waiting\n"
"#report.waiting.dateformat=m/d/Y\n"
"#report.waiting.annotations=full\n"
"\n"
"# task all\n"
"report.all.description=Lists all tasks matching the specified criteria\n"
"report.all.description=Lists all tasks matching the specified criteria, including parents of recurring tasks\n"
"report.all.columns=id,project,priority,due,end,active,age,description\n"
"report.all.labels=ID,Project,Pri,Due,Completed,Active,Age,Description\n"
"report.all.sort=project+,due+,end+,priority-,active-,description+\n"
@@ -395,7 +414,7 @@ std::string Config::defaults =
"report.next.description=Lists the most urgent tasks\n"
"report.next.columns=id,project,priority,due,active,age,description\n"
"report.next.labels=ID,Project,Pri,Due,Active,Age,Description\n"
"report.next.sort=due+,priority-,active-,project+\n"
"report.next.sort=due+,priority-,active-,project+,description+\n"
"report.next.filter=status:pending limit:page depends.none:\n"
"#report.next.dateformat=m/d/Y\n"
"#report.next.annotations=full\n"
@@ -404,7 +423,7 @@ std::string Config::defaults =
"report.blocked.description=Lists all blocked tasks matching the specified criteria\n"
"report.blocked.columns=id,depends,project,priority,due,active,age,description\n"
"report.blocked.labels=ID,Deps,Project,Pri,Due,Active,Age,Description\n"
"report.blocked.sort=due+,priority-,active-,project+\n"
"report.blocked.sort=due+,priority-,active-,project+,description+\n"
"report.blocked.filter=status:pending depends.any:\n"
"#report.blocked.dateformat=m/d/Y\n"
"\n"
@@ -412,7 +431,7 @@ std::string Config::defaults =
"report.unblocked.description=Lists all unblocked tasks matching the specified criteria\n"
"report.unblocked.columns=id,depends,project,priority,due,active,age,description\n"
"report.unblocked.labels=ID,Deps,Project,Pri,Due,Active,Age,Description\n"
"report.unblocked.sort=due+,priority-,active-,project+\n"
"report.unblocked.sort=due+,priority-,active-,project+,description+\n"
"report.unblocked.filter=status:pending depends.none:\n"
"#report.unblocked.dateformat=m/d/Y\n"
"\n";
@@ -624,17 +643,13 @@ const bool Config::getBoolean (const std::string& key)
////////////////////////////////////////////////////////////////////////////////
void Config::set (const std::string& key, const int value)
{
char v[24];
sprintf (v, "%d", value);
(*this)[key] = v;
(*this)[key] = format (value);
}
////////////////////////////////////////////////////////////////////////////////
void Config::set (const std::string& key, const double value)
{
char v[32];
sprintf (v, "%f", value);
(*this)[key] = v;
(*this)[key] = format (value, 1, 8);
}
////////////////////////////////////////////////////////////////////////////////
@@ -645,23 +660,25 @@ void Config::set (const std::string& key, const std::string& value)
////////////////////////////////////////////////////////////////////////////////
// Provide a vector of all configuration keys.
void Config::all (std::vector<std::string>& items)
void Config::all (std::vector<std::string>& items) const
{
foreach (i, *this)
items.push_back (i->first);
std::map <std::string, std::string>::const_iterator it;
for (it = this->begin (); it != this->end (); ++it)
items.push_back (it->first);
}
////////////////////////////////////////////////////////////////////////////////
std::string Config::checkForDeprecatedColor ()
{
std::vector <std::string> deprecated;
foreach (i, *this)
std::map <std::string, std::string>::const_iterator it;
for (it = this->begin (); it != this->end (); ++it)
{
if (i->first.find ("color.") != std::string::npos)
if (it->first.find ("color.") != std::string::npos)
{
std::string value = get (i->first);
std::string value = get (it->first);
if (value.find ("_") != std::string::npos)
deprecated.push_back (i->first);
deprecated.push_back (it->first);
}
}
@@ -671,8 +688,9 @@ std::string Config::checkForDeprecatedColor ()
out << "Your .taskrc file contains color settings that use deprecated "
<< "underscores. Please check:\n";
foreach (i, deprecated)
out << " " << *i << "=" << get (*i) << "\n";
std::vector <std::string>::iterator it2;
for (it2 = deprecated.begin (); it2 != deprecated.end (); ++it2)
out << " " << *it2 << "=" << get (*it2) << "\n";
out << "\n";
}
@@ -684,15 +702,16 @@ std::string Config::checkForDeprecatedColor ()
std::string Config::checkForDeprecatedColumns ()
{
std::vector <std::string> deprecated;
foreach (i, *this)
std::map <std::string, std::string>::const_iterator it;
for (it = this->begin (); it != this->end (); ++it)
{
if (i->first.find ("report") == 0)
if (it->first.find ("report") == 0)
{
std::string value = get (i->first);
std::string value = get (it->first);
if (value.find ("entry_time") != std::string::npos ||
value.find ("start_time") != std::string::npos ||
value.find ("end_time") != std::string::npos)
deprecated.push_back (i->first);
deprecated.push_back (it->first);
}
}
@@ -704,8 +723,9 @@ std::string Config::checkForDeprecatedColumns ()
out << "Your .taskrc file contains reports with deprecated columns. "
<< "Please check for entry_time, start_time or end_time in:\n";
foreach (i, deprecated)
out << " " << *i << "\n";
std::vector <std::string>::iterator it2;
for (it2 = deprecated.begin (); it2 != deprecated.end (); ++it2)
out << " " << *it2 << "=" << get (*it2) << "\n";
out << "\n";
}

View File

@@ -1,7 +1,7 @@
////////////////////////////////////////////////////////////////////////////////
// taskwarrior - a command line task list manager.
//
// Copyright 2006 - 2010, Paul Beckingham.
// Copyright 2006 - 2011, Paul Beckingham, Federico Hernandez.
// All rights reserved.
//
// This program is free software; you can redistribute it and/or modify it under
@@ -57,7 +57,7 @@ public:
void set (const std::string&, const int);
void set (const std::string&, const double);
void set (const std::string&, const std::string&);
void all (std::vector <std::string>&);
void all (std::vector <std::string>&) const;
std::string checkForDeprecatedColor ();
std::string checkForDeprecatedColumns ();

View File

@@ -1,7 +1,7 @@
////////////////////////////////////////////////////////////////////////////////
// taskwarrior - a command line task list manager.
//
// Copyright 2006 - 2010, Paul Beckingham, Federico Hernandez.
// Copyright 2006 - 2011, Paul Beckingham, Federico Hernandez.
// All rights reserved.
//
// This program is free software; you can redistribute it and/or modify it under
@@ -56,6 +56,8 @@ Context::Context ()
, var_overrides ("")
, cmd ()
, inShadow (false)
, terminal_width (0)
, terminal_height (0)
{
}
@@ -204,6 +206,17 @@ int Context::dispatch (std::string &out)
hooks.trigger ("pre-dispatch");
// For read-only commands, optionally update the xterm window title.
// Why just the read-only commands? Because this capability is to answer the
// question of 'what did I just do to generate this outout?'.
if (config.getBoolean ("xterm.title") &&
cmd.isReadOnlyCommand ())
{
std::string title;
join (title, " ", args);
std::cout << "]0;task " << title << "" << std::endl;
}
// TODO Just look at this thing. It cries out for a dispatch table.
if (cmd.command == "projects") { rc = handleProjects (out); }
else if (cmd.command == "tags") { rc = handleTags (out); }
@@ -218,6 +231,9 @@ int Context::dispatch (std::string &out)
else if (cmd.command == "history.annual") { rc = handleReportHistoryAnnual (out); }
else if (cmd.command == "ghistory.monthly") { rc = handleReportGHistoryMonthly (out); }
else if (cmd.command == "ghistory.annual") { rc = handleReportGHistoryAnnual (out); }
else if (cmd.command == "burndown.daily") { rc = handleReportBurndownDaily (out); }
else if (cmd.command == "burndown.weekly") { rc = handleReportBurndownWeekly (out); }
else if (cmd.command == "burndown.monthly") { rc = handleReportBurndownMonthly (out); }
else if (cmd.command == "summary") { rc = handleReportSummary (out); }
else if (cmd.command == "calendar") { rc = handleReportCalendar (out); }
else if (cmd.command == "timesheet") { rc = handleReportTimesheet (out); }
@@ -246,6 +262,7 @@ int Context::dispatch (std::string &out)
else if (cmd.command == "push") { handlePush (out); }
else if (cmd.command == "pull") { handlePull (out); }
else if (cmd.command == "diagnostics") { handleDiagnostics (out); }
else if (cmd.command == "count") { rc = handleCount (out); }
else if (cmd.command == "_projects") { rc = handleCompletionProjects (out); }
else if (cmd.command == "_tags") { rc = handleCompletionTags (out); }
else if (cmd.command == "_commands") { rc = handleCompletionCommands (out); }
@@ -253,6 +270,9 @@ int Context::dispatch (std::string &out)
else if (cmd.command == "_config") { rc = handleCompletionConfig (out); }
else if (cmd.command == "_version") { rc = handleCompletionVersion (out); }
else if (cmd.command == "_urgency") { rc = handleUrgency (out); }
else if (cmd.command == "_query") { rc = handleQuery (out); }
else if (cmd.command == "_zshcommands") { rc = handleZshCompletionCommands (out); }
else if (cmd.command == "_zshids") { rc = handleZshCompletionIDs (out); }
else if (cmd.command == "" &&
sequence.size ()) { rc = handleModify (out); }
@@ -292,6 +312,10 @@ void Context::shadow ()
throw std::string ("Configuration variable 'shadow.file' is set to "
"overwrite your completed tasks. Please change it.");
if (shadowFile.data == dataLocation + "/undo.data")
throw std::string ("Configuration variable 'shadow.file' is set to "
"overwrite your undo log. Please change it.");
std::string oldCurses = config.get ("curses");
std::string oldColor = config.get ("color");
@@ -829,6 +853,21 @@ void Context::autoFilter (Att& a, Filter& f)
}
}
// Recurrence periods are matched left-most.
else if (a.name () == "recur" && a.mod () == "")
{
if (a.value () != "")
{
f.push_back (Att ("recur", "startswith", a.value ()));
debug ("auto filter: " + a.name () + ".startswith:" + a.value ());
}
else
{
f.push_back (Att ("recur", "is", a.value ()));
debug ("auto filter: " + a.name () + ".is:" + a.value ());
}
}
// The limit attribute does not participate in filtering, and needs to be
// specifically handled in handleCustomReport.
else if (a.name () == "limit")

View File

@@ -1,7 +1,7 @@
////////////////////////////////////////////////////////////////////////////////
// taskwarrior - a command line task list manager.
//
// Copyright 2006 - 2010, Paul Beckingham.
// Copyright 2006 - 2011, Paul Beckingham, Federico Hernandez.
// All rights reserved.
//
// This program is free software; you can redistribute it and/or modify it under
@@ -99,6 +99,9 @@ public:
std::vector <std::string> footnotes;
std::vector <std::string> debugMessages;
bool inShadow;
int terminal_width;
int terminal_height;
};
#endif

View File

@@ -1,7 +1,7 @@
////////////////////////////////////////////////////////////////////////////////
// taskwarrior - a command line task list manager.
//
// Copyright 2006 - 2010, Paul Beckingham, Federico Hernandez.
// Copyright 2006 - 2011, Paul Beckingham, Federico Hernandez.
// All rights reserved.
//
// This program is free software; you can redistribute it and/or modify it under
@@ -113,7 +113,7 @@ Date::Date (const std::string& input, const std::string& format /* = "m/d/Y" */)
if (i >= input.length () ||
! isdigit (input[i]))
{
throw std::string ("\"") + input + "\" is not a valid date (m).";
throw std::string ("\"") + input + "\" is not a valid date (m). Expected format '" + format + "'";
}
if (i + 1 < input.length () &&
@@ -134,7 +134,7 @@ Date::Date (const std::string& input, const std::string& format /* = "m/d/Y" */)
if (i >= input.length () ||
! isdigit (input[i]))
{
throw std::string ("\"") + input + "\" is not a valid date (d).";
throw std::string ("\"") + input + "\" is not a valid date (d). Expected format '" + format + "'";
}
if (i + 1 < input.length () &&
@@ -157,7 +157,7 @@ Date::Date (const std::string& input, const std::string& format /* = "m/d/Y" */)
! isdigit (input[i + 0]) ||
! isdigit (input[i + 1]))
{
throw std::string ("\"") + input + "\" is not a valid date (y).";
throw std::string ("\"") + input + "\" is not a valid date (y). Expected format '" + format + "'";
}
year = atoi (input.substr (i, 2).c_str ()) + 2000;
@@ -169,7 +169,7 @@ Date::Date (const std::string& input, const std::string& format /* = "m/d/Y" */)
! isdigit (input[i + 0]) ||
! isdigit (input[i + 1]))
{
throw std::string ("\"") + input + "\" is not a valid date (M).";
throw std::string ("\"") + input + "\" is not a valid date (M). Expected format '" + format + "'";
}
month = atoi (input.substr (i, 2).c_str ());
@@ -181,7 +181,7 @@ Date::Date (const std::string& input, const std::string& format /* = "m/d/Y" */)
! isdigit (input[i + 0]) ||
! isdigit (input[i + 1]))
{
throw std::string ("\"") + input + "\" is not a valid date (D).";
throw std::string ("\"") + input + "\" is not a valid date (D). Expected format '" + format + "'";
}
day = atoi (input.substr (i, 2).c_str ());
@@ -193,7 +193,7 @@ Date::Date (const std::string& input, const std::string& format /* = "m/d/Y" */)
! isdigit (input[i + 0]) ||
! isdigit (input[i + 1]))
{
throw std::string ("\"") + input + "\" is not a valid date (V).";
throw std::string ("\"") + input + "\" is not a valid date (V). Expected format '" + format + "'";
}
i += 2;
@@ -207,7 +207,7 @@ Date::Date (const std::string& input, const std::string& format /* = "m/d/Y" */)
! isdigit (input[i + 2]) ||
! isdigit (input[i + 3]))
{
throw std::string ("\"") + input + "\" is not a valid date (Y).";
throw std::string ("\"") + input + "\" is not a valid date (Y). Expected format '" + format + "'";
}
year = atoi (input.substr (i, 4).c_str ());
@@ -221,7 +221,7 @@ Date::Date (const std::string& input, const std::string& format /* = "m/d/Y" */)
isdigit (input[i + 1]) ||
isdigit (input[i + 2]))
{
throw std::string ("\"") + input + "\" is not a valid date (a).";
throw std::string ("\"") + input + "\" is not a valid date (a). Expected format '" + format + "'";
}
i += 3;
@@ -233,7 +233,7 @@ Date::Date (const std::string& input, const std::string& format /* = "m/d/Y" */)
isdigit (input[i + 1]) ||
isdigit (input[i + 2]))
{
throw std::string ("\"") + input + "\" is not a valid date (b).";
throw std::string ("\"") + input + "\" is not a valid date (b). Expected format '" + format + "'";
}
month = Date::monthOfYear (input.substr (i, 3).c_str());
@@ -247,7 +247,7 @@ Date::Date (const std::string& input, const std::string& format /* = "m/d/Y" */)
isdigit (input[i + 1]) ||
isdigit (input[i + 2]))
{
throw std::string ("\"") + input + "\" is not a valid date (A).";
throw std::string ("\"") + input + "\" is not a valid date (A). Expected format '" + format + "'";
}
i += Date::dayName( Date::dayOfWeek (input.substr (i, 3).c_str()) ).size();
@@ -259,7 +259,7 @@ Date::Date (const std::string& input, const std::string& format /* = "m/d/Y" */)
isdigit (input[i + 1]) ||
isdigit (input[i + 2]))
{
throw std::string ("\"") + input + "\" is not a valid date (B).";
throw std::string ("\"") + input + "\" is not a valid date (B). Expected format '" + format + "'";
}
month = Date::monthOfYear (input.substr (i, 3).c_str());
@@ -271,7 +271,7 @@ Date::Date (const std::string& input, const std::string& format /* = "m/d/Y" */)
if (i >= input.length () ||
! isdigit (input[i]))
{
throw std::string ("\"") + input + "\" is not a valid date (h).";
throw std::string ("\"") + input + "\" is not a valid date (h). Expected format '" + format + "'";
}
if (i + 1 < input.length () &&
@@ -293,7 +293,7 @@ Date::Date (const std::string& input, const std::string& format /* = "m/d/Y" */)
! isdigit (input[i + 0]) ||
! isdigit (input[i + 1]))
{
throw std::string ("\"") + input + "\" is not a valid date (H).";
throw std::string ("\"") + input + "\" is not a valid date (H). Expected format '" + format + "'";
}
hour = atoi (input.substr (i, 2).c_str ());
@@ -305,7 +305,7 @@ Date::Date (const std::string& input, const std::string& format /* = "m/d/Y" */)
! isdigit (input[i + 0]) ||
! isdigit (input[i + 1]))
{
throw std::string ("\"") + input + "\" is not a valid date (N).";
throw std::string ("\"") + input + "\" is not a valid date (N). Expected format '" + format + "'";
}
minute = atoi (input.substr (i, 2).c_str ());
@@ -317,7 +317,7 @@ Date::Date (const std::string& input, const std::string& format /* = "m/d/Y" */)
! isdigit (input[i + 0]) ||
! isdigit (input[i + 1]))
{
throw std::string ("\"") + input + "\" is not a valid date (S).";
throw std::string ("\"") + input + "\" is not a valid date (S). Expected format '" + format + "'";
}
second = atoi (input.substr (i, 2).c_str ());
@@ -328,7 +328,7 @@ Date::Date (const std::string& input, const std::string& format /* = "m/d/Y" */)
if (i >= input.length () ||
input[i] != format[f])
{
throw std::string ("\"") + input + "\" is not a valid date (DEFAULT).";
throw std::string ("\"") + input + "\" is not a valid date. Expected format '" + format + "'";
}
++i;
break;
@@ -344,10 +344,10 @@ Date::Date (const std::string& input, const std::string& format /* = "m/d/Y" */)
}
if (i < input.length ())
throw std::string ("\"") + input + "\" is not a valid date in " + format + " format.";
throw std::string ("\"") + input + "\" is not a valid date. Expected format '" + format + "'";
if (!valid (month, day, year))
throw std::string ("\"") + input + "\" is not a valid date (VALID).";
throw std::string ("\"") + input + "\" is not a valid date but is in a valid format.";
// Convert to epoch.
struct tm t = {0};
@@ -460,6 +460,32 @@ const std::string Date::toString (const std::string& format /*= "m/d/Y" */) cons
return formatted;
}
////////////////////////////////////////////////////////////////////////////////
Date Date::startOfDay () const
{
return Date (month (), day (), year (), 0, 0, 0);
}
////////////////////////////////////////////////////////////////////////////////
Date Date::startOfWeek () const
{
Date sow (mT);
sow -= (dayOfWeek () * 86400);
return Date (sow.month (), sow.day (), sow.year (), 0, 0, 0);
}
////////////////////////////////////////////////////////////////////////////////
Date Date::startOfMonth () const
{
return Date (month (), 1, year (), 0, 0, 0);
}
////////////////////////////////////////////////////////////////////////////////
Date Date::startOfYear () const
{
return Date (1, 1, year (), 0, 0, 0);
}
////////////////////////////////////////////////////////////////////////////////
bool Date::valid (const std::string& input, const std::string& format)
{
@@ -839,6 +865,62 @@ time_t Date::operator- (const Date& rhs)
return mT - rhs.mT;
}
////////////////////////////////////////////////////////////////////////////////
// Prefix decrement by one day.
void Date::operator-- ()
{
Date yesterday = startOfDay () - 1;
yesterday = Date (yesterday.month (),
yesterday.day (),
yesterday.year (),
hour (),
minute (),
second ());
mT = yesterday.mT;
}
////////////////////////////////////////////////////////////////////////////////
// Postfix decrement by one day.
void Date::operator-- (int)
{
Date yesterday = startOfDay () - 1;
yesterday = Date (yesterday.month (),
yesterday.day (),
yesterday.year (),
hour (),
minute (),
second ());
mT = yesterday.mT;
}
////////////////////////////////////////////////////////////////////////////////
// Prefix increment by one day.
void Date::operator++ ()
{
Date tomorrow = (startOfDay () + 90001).startOfDay ();
tomorrow = Date (tomorrow.month (),
tomorrow.day (),
tomorrow.year (),
hour (),
minute (),
second ());
mT = tomorrow.mT;
}
////////////////////////////////////////////////////////////////////////////////
// Postfix increment by one day.
void Date::operator++ (int)
{
Date tomorrow = (startOfDay () + 90001).startOfDay ();
tomorrow = Date (tomorrow.month (),
tomorrow.day (),
tomorrow.year (),
hour (),
minute (),
second ());
mT = tomorrow.mT;
}
////////////////////////////////////////////////////////////////////////////////
bool Date::isEpoch (const std::string& input)
{
@@ -903,6 +985,8 @@ bool Date::isRelativeDate (const std::string& input)
supported.push_back ("midsommar");
supported.push_back ("midsommarafton");
supported.push_back ("now");
supported.push_back ("later");
supported.push_back ("someday");
std::vector <std::string> matches;
if (autoComplete (in, supported, matches) == 1)
@@ -1059,6 +1143,12 @@ bool Date::isRelativeDate (const std::string& input)
mT = time (NULL);
return true;
}
else if (found == "later" || found == "someday")
{
Date then (1, 18, 2038);
mT = then.mT;
return true;
}
}
// Support "21st" to indicate the next date that is the 21st day.

View File

@@ -1,7 +1,7 @@
////////////////////////////////////////////////////////////////////////////////
// taskwarrior - a command line task list manager.
//
// Copyright 2006 - 2010, Paul Beckingham, Federico Hernandez.
// Copyright 2006 - 2011, Paul Beckingham, Federico Hernandez.
// All rights reserved.
//
// This program is free software; you can redistribute it and/or modify it under
@@ -50,6 +50,12 @@ public:
std::string toISO ();
void toMDY (int&, int&, int&);
const std::string toString (const std::string& format = "m/d/Y") const;
Date startOfDay () const;
Date startOfWeek () const;
Date startOfMonth () const;
Date startOfYear () const;
static bool valid (const std::string&, const std::string& format = "m/d/Y");
static bool valid (const int, const int, const int, const int, const int, const int);
static bool valid (const int, const int, const int);
@@ -91,6 +97,11 @@ public:
time_t operator- (const Date&);
void operator-- (); // Prefix
void operator-- (int); // Postfix
void operator++ (); // Prefix
void operator++ (int); // Postfix
private:
bool isEpoch (const std::string&);
bool isRelativeDate (const std::string&);

View File

@@ -1,7 +1,7 @@
////////////////////////////////////////////////////////////////////////////////
// taskwarrior - a command line task list manager.
//
// Copyright 2006 - 2009, Paul Beckingham.
// Copyright 2006 - 2011, Paul Beckingham, Federico Hernandez.
// All rights reserved.
//
// This program is free software; you can redistribute it and/or modify it under

View File

@@ -1,7 +1,7 @@
////////////////////////////////////////////////////////////////////////////////
// taskwarrior - a command line task list manager.
//
// Copyright 2006 - 2009, Paul Beckingham.
// Copyright 2006 - 2011, Paul Beckingham, Federico Hernandez.
// All rights reserved.
//
// This program is free software; you can redistribute it and/or modify it under

View File

@@ -1,7 +1,7 @@
////////////////////////////////////////////////////////////////////////////////
// taskwarrior - a command line task list manager.
//
// Copyright 2006 - 2010, Paul Beckingham.
// Copyright 2006 - 2011, Paul Beckingham, Federico Hernandez.
// All rights reserved.
//
// This program is free software; you can redistribute it and/or modify it under
@@ -242,13 +242,13 @@ bool Duration::valid (const std::string& input) const
std::string lower_input = lowerCase (input);
// Assume the ordinal is 1, but look for an integer, just in case.
int value = 1;
double value = 1;
Nibbler n (lower_input);
n.skipAll (' ');
n.getInt (value);
n.getNumber (value);
n.skipAll (' ');
if (value < 0)
if (value < 0.0)
value = -value;
std::string units;
@@ -272,14 +272,14 @@ void Duration::parse (const std::string& input)
std::string lower_input = lowerCase (input);
// Assume the ordinal is 1, but look for an integer, just in case.
int value = 1;
double value = 1;
Nibbler n (lower_input);
n.skipAll (' ');
n.getInt (value);
n.getNumber (value);
n.skipAll (' ');
if (value < 0)
if (value < 0.0)
{
mNegative = true;
value = -value;
@@ -301,62 +301,62 @@ void Duration::parse (const std::string& input)
{
std::string match = matches[0];
if (match == "biannual") mSecs = value * 86400 * 730;
else if (match == "biyearly") mSecs = value * 86400 * 730;
if (match == "biannual") mSecs = (int) (value * 86400 * 730);
else if (match == "biyearly") mSecs = (int) (value * 86400 * 730);
else if (match == "yearly") mSecs = value * 86400 * 365;
else if (match == "annual") mSecs = value * 86400 * 365;
else if (match == "years") mSecs = value * 86400 * 365;
else if (match == "yrs") mSecs = value * 86400 * 365;
else if (match == "y") mSecs = value * 86400 * 365;
else if (match == "yearly") mSecs = value * 86400 * 365;
else if (match == "annual") mSecs = value * 86400 * 365;
else if (match == "yearly") mSecs = (int) (value * 86400 * 365);
else if (match == "annual") mSecs = (int) (value * 86400 * 365);
else if (match == "years") mSecs = (int) (value * 86400 * 365);
else if (match == "yrs") mSecs = (int) (value * 86400 * 365);
else if (match == "y") mSecs = (int) (value * 86400 * 365);
else if (match == "yearly") mSecs = (int) (value * 86400 * 365);
else if (match == "annual") mSecs = (int) (value * 86400 * 365);
else if (match == "semiannual") mSecs = value * 86400 * 183;
else if (match == "semiannual") mSecs = (int) (value * 86400 * 183);
else if (match == "bimonthly") mSecs = value * 86400 * 61;
else if (match == "quarterly") mSecs = value * 86400 * 91;
else if (match == "quarters") mSecs = value * 86400 * 91;
else if (match == "qrtrs") mSecs = value * 86400 * 91;
else if (match == "qtrs") mSecs = value * 86400 * 91;
else if (match == "q") mSecs = value * 86400 * 91;
else if (match == "bimonthly") mSecs = (int) (value * 86400 * 61);
else if (match == "quarterly") mSecs = (int) (value * 86400 * 91);
else if (match == "quarters") mSecs = (int) (value * 86400 * 91);
else if (match == "qrtrs") mSecs = (int) (value * 86400 * 91);
else if (match == "qtrs") mSecs = (int) (value * 86400 * 91);
else if (match == "q") mSecs = (int) (value * 86400 * 91);
else if (match == "monthly") mSecs = value * 86400 * 30;
else if (match == "month") mSecs = value * 86400 * 30;
else if (match == "months") mSecs = value * 86400 * 30;
else if (match == "mnths") mSecs = value * 86400 * 30;
else if (match == "mos") mSecs = value * 86400 * 30;
else if (match == "mo") mSecs = value * 86400 * 30;
else if (match == "mths") mSecs = value * 86400 * 30;
else if (match == "monthly") mSecs = (int) (value * 86400 * 30);
else if (match == "month") mSecs = (int) (value * 86400 * 30);
else if (match == "months") mSecs = (int) (value * 86400 * 30);
else if (match == "mnths") mSecs = (int) (value * 86400 * 30);
else if (match == "mos") mSecs = (int) (value * 86400 * 30);
else if (match == "mo") mSecs = (int) (value * 86400 * 30);
else if (match == "mths") mSecs = (int) (value * 86400 * 30);
else if (match == "biweekly") mSecs = value * 86400 * 14;
else if (match == "fortnight") mSecs = value * 86400 * 14;
else if (match == "biweekly") mSecs = (int) (value * 86400 * 14);
else if (match == "fortnight") mSecs = (int) (value * 86400 * 14);
else if (match == "weekly") mSecs = value * 86400 * 7;
else if (match == "sennight") mSecs = value * 86400 * 7;
else if (match == "weeks") mSecs = value * 86400 * 7;
else if (match == "wks") mSecs = value * 86400 * 7;
else if (match == "w") mSecs = value * 86400 * 7;
else if (match == "weekly") mSecs = (int) (value * 86400 * 7);
else if (match == "sennight") mSecs = (int) (value * 86400 * 7);
else if (match == "weeks") mSecs = (int) (value * 86400 * 7);
else if (match == "wks") mSecs = (int) (value * 86400 * 7);
else if (match == "w") mSecs = (int) (value * 86400 * 7);
else if (match == "daily") mSecs = value * 86400 * 1;
else if (match == "day") mSecs = value * 86400 * 1;
else if (match == "weekdays") mSecs = value * 86400 * 1;
else if (match == "days") mSecs = value * 86400 * 1;
else if (match == "d") mSecs = value * 86400 * 1;
else if (match == "daily") mSecs = (int) (value * 86400 * 1);
else if (match == "day") mSecs = (int) (value * 86400 * 1);
else if (match == "weekdays") mSecs = (int) (value * 86400 * 1);
else if (match == "days") mSecs = (int) (value * 86400 * 1);
else if (match == "d") mSecs = (int) (value * 86400 * 1);
else if (match == "hours") mSecs = value * 3600;
else if (match == "hrs") mSecs = value * 3600;
else if (match == "h") mSecs = value * 3600;
else if (match == "hours") mSecs = (int) (value * 3600);
else if (match == "hrs") mSecs = (int) (value * 3600);
else if (match == "h") mSecs = (int) (value * 3600);
else if (match == "minutes") mSecs = value * 60;
else if (match == "mins") mSecs = value * 60;
else if (match == "min") mSecs = value * 60;
else if (match == "m") mSecs = value * 60;
else if (match == "minutes") mSecs = (int) (value * 60);
else if (match == "mins") mSecs = (int) (value * 60);
else if (match == "min") mSecs = (int) (value * 60);
else if (match == "m") mSecs = (int) (value * 60);
else if (match == "seconds") mSecs = value;
else if (match == "secs") mSecs = value;
else if (match == "sec") mSecs = value;
else if (match == "s") mSecs = value;
else if (match == "seconds") mSecs = (int) value;
else if (match == "secs") mSecs = (int) value;
else if (match == "sec") mSecs = (int) value;
else if (match == "s") mSecs = (int) value;
else if (match == "-") mSecs = 0;
}

View File

@@ -1,7 +1,7 @@
////////////////////////////////////////////////////////////////////////////////
// taskwarrior - a command line task list manager.
//
// Copyright 2006 - 2010, Paul Beckingham.
// Copyright 2006 - 2011, Paul Beckingham, Federico Hernandez.
// All rights reserved.
//
// This program is free software; you can redistribute it and/or modify it under

View File

@@ -1,7 +1,7 @@
////////////////////////////////////////////////////////////////////////////////
// taskwarrior - a command line task list manager.
//
// Copyright 2006 - 2010, Paul Beckingham.
// Copyright 2006 - 2011, Paul Beckingham, Federico Hernandez.
// All rights reserved.
//
// This program is free software; you can redistribute it and/or modify it under

View File

@@ -1,7 +1,7 @@
////////////////////////////////////////////////////////////////////////////////
// taskwarrior - a command line task list manager.
//
// Copyright 2006 - 2010, Paul Beckingham.
// Copyright 2006 - 2011, Paul Beckingham, Federico Hernandez.
// All rights reserved.
//
// This program is free software; you can redistribute it and/or modify it under

View File

@@ -1,7 +1,7 @@
////////////////////////////////////////////////////////////////////////////////
// taskwarrior - a command line task list manager.
//
// Copyright 2006 - 2010, Paul Beckingham.
// Copyright 2006 - 2011, Paul Beckingham, Federico Hernandez.
// All rights reserved.
//
// This program is free software; you can redistribute it and/or modify it under

View File

@@ -1,7 +1,7 @@
////////////////////////////////////////////////////////////////////////////////
// taskwarrior - a command line task list manager.
//
// Copyright 2006 - 2010, Paul Beckingham.
// Copyright 2006 - 2011, Paul Beckingham, Federico Hernandez.
// All rights reserved.
//
// This program is free software; you can redistribute it and/or modify it under

View File

@@ -1,7 +1,7 @@
////////////////////////////////////////////////////////////////////////////////
// taskwarrior - a command line task list manager.
//
// Copyright 2006 - 2010, Paul Beckingham.
// Copyright 2006 - 2011, Paul Beckingham, Federico Hernandez.
// All rights reserved.
//
// This program is free software; you can redistribute it and/or modify it under
@@ -61,6 +61,7 @@
#include <iostream>
#include <stdlib.h>
#include <text.h>
#include <Grid.h>
////////////////////////////////////////////////////////////////////////////////
@@ -364,16 +365,14 @@ Grid::Cell::operator double () const
Grid::Cell::operator std::string () const
{
char s[64] = {0};
switch (mType)
{
case CELL_BOOL: return mBool ? "true" : "false"; // TODO i18n
case CELL_CHAR: sprintf (s, "%c", mChar); return std::string (s);
case CELL_INT: sprintf (s, "%d", mInt); return std::string (s);
case CELL_FLOAT: sprintf (s, "%f", mFloat); return std::string (s);
case CELL_DOUBLE: sprintf (s, "%f", mDouble); return std::string (s);
case CELL_STRING: return mString;
case CELL_CHAR: return format (mChar);
case CELL_INT: return format (mInt);
case CELL_FLOAT: return format (mFloat, 1, 6);
case CELL_DOUBLE: return format (mDouble, 1, 8);
case CELL_STRING: return mString;
}
return std::string ("");

View File

@@ -1,7 +1,7 @@
////////////////////////////////////////////////////////////////////////////////
// taskwarrior - a command line task list manager.
//
// Copyright 2006 - 2010, Paul Beckingham.
// Copyright 2006 - 2011, Paul Beckingham, Federico Hernandez.
// All rights reserved.
//
// This program is free software; you can redistribute it and/or modify it under

View File

@@ -1,7 +1,7 @@
////////////////////////////////////////////////////////////////////////////////
// taskwarrior - a command line task list manager.
//
// Copyright 2006 - 2010, Paul Beckingham.
// Copyright 2006 - 2011, Paul Beckingham, Federico Hernandez.
// All rights reserved.
//
// This program is free software; you can redistribute it and/or modify it under
@@ -147,6 +147,8 @@ Hooks::Hooks ()
validProgramEvents.push_back ("post-done-command");
validProgramEvents.push_back ("pre-duplicate-command");
validProgramEvents.push_back ("post-duplicate-command");
validProgramEvents.push_back ("pre-count-command");
validProgramEvents.push_back ("post-count-command");
validProgramEvents.push_back ("pre-edit-command");
validProgramEvents.push_back ("post-edit-command");
validProgramEvents.push_back ("pre-export-command");
@@ -155,6 +157,8 @@ Hooks::Hooks ()
validProgramEvents.push_back ("post-ghistory-command");
validProgramEvents.push_back ("pre-history-command");
validProgramEvents.push_back ("post-history-command");
validProgramEvents.push_back ("pre-burndown-command");
validProgramEvents.push_back ("post-burndown-command");
validProgramEvents.push_back ("pre-import-command");
validProgramEvents.push_back ("post-import-command");
validProgramEvents.push_back ("pre-info-command");

View File

@@ -1,7 +1,7 @@
////////////////////////////////////////////////////////////////////////////////
// taskwarrior - a command line task list manager.
//
// Copyright 2006 - 2010, Paul Beckingham.
// Copyright 2006 - 2011, Paul Beckingham, Federico Hernandez.
// All rights reserved.
//
// This program is free software; you can redistribute it and/or modify it under
@@ -30,7 +30,7 @@
#include <vector>
#include <string>
#include "API.h"
#include "auto.h"
#include "../auto.h"
// Hook class representing a single hook, which is just a three-way map.
class Hook

338
src/JSON.cpp Normal file
View File

@@ -0,0 +1,338 @@
////////////////////////////////////////////////////////////////////////////////
// taskwarrior - a command line task list manager.
//
// Copyright 2010 - 2011, Paul Beckingham, Federico Hernandez.
// All rights reserved.
//
// This program is free software; you can redistribute it and/or modify it under
// the terms of the GNU General Public License as published by the Free Software
// Foundation; either version 2 of the License, or (at your option) any later
// version.
//
// This program is distributed in the hope that it will be useful, but WITHOUT
// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
// FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
// details.
//
// You should have received a copy of the GNU General Public License along with
// this program; if not, write to the
//
// Free Software Foundation, Inc.,
// 51 Franklin Street, Fifth Floor,
// Boston, MA
// 02110-1301
// USA
//
////////////////////////////////////////////////////////////////////////////////
#include <iostream>
#include <sstream>
#include <utf8.h>
#include <JSON.h>
////////////////////////////////////////////////////////////////////////////////
JSON::JSON ()
: root ("root")
{
}
////////////////////////////////////////////////////////////////////////////////
JSON::JSON (const std::string& input)
: root ("root")
{
Nibbler n (input);
if (!parseObject (&root, n))
throw std::string ("Syntax error in request.");
}
////////////////////////////////////////////////////////////////////////////////
JSON::~JSON ()
{
}
////////////////////////////////////////////////////////////////////////////////
// \n -> "\\n"
// \t -> "\\t"
std::string JSON::encode (const std::string& input)
{
std::string output;
for (std::string::size_type i = 0; i < input.length (); ++i)
{
switch (input[i])
{
// Simple translations.
case '"': output += "\\\""; break;
case '\\': output += "\\\\"; break;
case '/': output += "\\/"; break;
case '\b': output += "\\b"; break;
case '\f': output += "\\f"; break;
case '\n': output += "\\n"; break;
case '\r': output += "\\r"; break;
case '\t': output += "\\t"; break;
// Default NOP.
default: output += input[i]; break;
}
}
return output;
}
////////////////////////////////////////////////////////////////////////////////
std::string JSON::decode (const std::string& input)
{
std::string output;
for (unsigned int i = 0; i < input.length (); ++i)
{
if (input[i] == '\\')
{
++i;
switch (input[i])
{
// Simple translations.
case '"': output += '"'; break;
case '\\': output += '\\'; break;
case '/': output += '/'; break;
case 'b': output += '\b'; break;
case 'f': output += '\f'; break;
case 'n': output += '\n'; break;
case 'r': output += '\r'; break;
case 't': output += '\t'; break;
// Compose a UTF8 unicode character.
case 'u':
output += utf8_character (utf8_codepoint (input.substr (++i)));
i += 3;
break;
// If it is an unrecognized seqeence, do nothing.
default:
output += '\\';
output += input[i];
break;
}
}
else
output += input[i];
}
return output;
}
////////////////////////////////////////////////////////////////////////////////
Tree* JSON::tree ()
{
return &root;
}
////////////////////////////////////////////////////////////////////////////////
// object
// {}
// { pair , ... }
bool JSON::parseObject (Tree* t, Nibbler& nibbler)
{
Nibbler n (nibbler);
n.skipWS ();
if (n.skip ('{'))
{
n.skipWS ();
Tree* node = new Tree ("node");
if (parsePair (node, n))
{
t->addBranch (node);
n.skipWS ();
while (n.skip (','))
{
n.skipWS ();
node = new Tree ("node");
if (!parsePair (node, n))
{
delete node;
return false;
}
t->addBranch (node);
n.skipWS ();
}
}
else
delete node;
if (n.skip ('}'))
{
n.skipWS ();
nibbler = n;
t->attribute ("type", "collection");
return true;
}
}
return false;
}
////////////////////////////////////////////////////////////////////////////////
// pair
// string : value
bool JSON::parsePair (Tree* t, Nibbler& nibbler)
{
Nibbler n (nibbler);
std::string value;
if (n.getQuoted ('"', value))
{
n.skipWS ();
if (n.skip (':'))
{
n.skipWS ();
if (parseValue (t, n))
{
nibbler = n;
t->name (value);
return true;
}
}
}
return false;
}
////////////////////////////////////////////////////////////////////////////////
// array
// []
// [ value , ... ]
bool JSON::parseArray (Tree* t, Nibbler& nibbler)
{
Nibbler n (nibbler);
n.skipWS ();
if (n.skip ('['))
{
n.skipWS ();
Tree* node = new Tree ("node");
if (parseValue (node, n))
{
t->addBranch (node);
n.skipWS ();
while (n.skip (','))
{
n.skipWS ();
node = new Tree ("node");
if (!parseValue (node, n))
{
delete node;
return false;
}
t->addBranch (node);
n.skipWS ();
}
}
else
delete node;
if (n.skip (']'))
{
n.skipWS ();
nibbler = n;
t->attribute ("type", "list");
return true;
}
}
return false;
}
////////////////////////////////////////////////////////////////////////////////
// value
// string
// number
// object
// array
// true
// false
// null
bool JSON::parseValue (Tree* t, Nibbler& nibbler)
{
if (parseString (t, nibbler) ||
parseNumber (t, nibbler) ||
parseObject (t, nibbler) ||
parseArray (t, nibbler) ||
nibbler.getLiteral ("true") ||
nibbler.getLiteral ("false") ||
nibbler.getLiteral ("null"))
{
return true;
}
return false;
}
////////////////////////////////////////////////////////////////////////////////
// string
// ""
// " chars "
//
// chars
// char
// char chars
//
// char
// any-Unicode-character-except-"-or-\-or-control-character
// \"
// \\ [extra text to de-confuse gcc]
// \/
// \b
// \f
// \n
// \r
// \t
// \u four-hex-digits
bool JSON::parseString (Tree* t, Nibbler& nibbler)
{
std::string value;
if (nibbler.getQuoted ('"', value, false))
{
t->attribute ("type", "string");
t->attribute ("value", value);
return true;
}
return false;
}
////////////////////////////////////////////////////////////////////////////////
// number
// int frac exp
// int frac
// int exp
// int
bool JSON::parseNumber (Tree* t, Nibbler& nibbler)
{
int i;
double d;
if (nibbler.getNumber (d))
{
t->attribute ("type", "number");
t->attribute ("value", d);
return true;
}
else if (nibbler.getInt (i))
{
t->attribute ("type", "number");
t->attribute ("value", i);
return true;
}
return false;
}
////////////////////////////////////////////////////////////////////////////////

61
src/JSON.h Normal file
View File

@@ -0,0 +1,61 @@
////////////////////////////////////////////////////////////////////////////////
// taskwarrior - a command line task list manager.
//
// Copyright 2010 - 2011, Paul Beckingham, Federico Hernandez.
// All rights reserved.
//
// This program is free software; you can redistribute it and/or modify it under
// the terms of the GNU General Public License as published by the Free Software
// Foundation; either version 2 of the License, or (at your option) any later
// version.
//
// This program is distributed in the hope that it will be useful, but WITHOUT
// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
// FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
// details.
//
// You should have received a copy of the GNU General Public License along with
// this program; if not, write to the
//
// Free Software Foundation, Inc.,
// 51 Franklin Street, Fifth Floor,
// Boston, MA
// 02110-1301
// USA
//
////////////////////////////////////////////////////////////////////////////////
#ifndef INCLUDED_JSON
#define INCLUDED_JSON
#include <string>
#include <Tree.h>
#include <Nibbler.h>
class JSON
{
public:
JSON (); // Default constructor
JSON (const std::string&); // Constructor
JSON (const JSON&); // Copy constructor
JSON& operator= (const JSON&); // Assignment operator
~JSON (); // Destructor
static std::string encode (const std::string&);
static std::string decode (const std::string&);
Tree* tree ();
private:
bool parseObject (Tree*, Nibbler&);
bool parsePair (Tree*, Nibbler&);
bool parseArray (Tree*, Nibbler&);
bool parseValue (Tree*, Nibbler&);
bool parseString (Tree*, Nibbler&);
bool parseNumber (Tree*, Nibbler&);
private:
Tree root;
};
#endif
////////////////////////////////////////////////////////////////////////////////

View File

@@ -1,7 +1,7 @@
////////////////////////////////////////////////////////////////////////////////
// taskwarrior - a command line task list manager.
//
// Copyright 2006 - 2010, Paul Beckingham.
// Copyright 2006 - 2011, Paul Beckingham, Federico Hernandez.
// All rights reserved.
//
// This program is free software; you can redistribute it and/or modify it under

View File

@@ -1,7 +1,7 @@
////////////////////////////////////////////////////////////////////////////////
// taskwarrior - a command line task list manager.
//
// Copyright 2006 - 2010, Paul Beckingham.
// Copyright 2006 - 2011, Paul Beckingham, Federico Hernandez.
// All rights reserved.
//
// This program is free software; you can redistribute it and/or modify it under

Some files were not shown because too many files have changed in this diff Show More