Compare commits
227 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2d99b80672 | ||
|
|
949d71a81b | ||
|
|
df1fc5a6da | ||
|
|
7745733001 | ||
|
|
10ef12b008 | ||
|
|
19ef6a672d | ||
|
|
6c110a641d | ||
|
|
2ec296088a | ||
|
|
14cc9c6873 | ||
|
|
05c157e449 | ||
|
|
73fd2cefca | ||
|
|
f2f590e193 | ||
|
|
a840b6505b | ||
|
|
467f0a477e | ||
|
|
e046b37287 | ||
|
|
9efe1d45cc | ||
|
|
2ed73c0700 | ||
|
|
d845dca3af | ||
|
|
930e695ea4 | ||
|
|
079bcff893 | ||
|
|
ea57b560d9 | ||
|
|
436c152fde | ||
|
|
f93273ef23 | ||
|
|
6608cbf287 | ||
|
|
a65fe591b8 | ||
|
|
afb89f0add | ||
|
|
2ac5c2f897 | ||
|
|
2e9bc3194b | ||
|
|
691931adf9 | ||
|
|
b2828b9702 | ||
|
|
776a56fa67 | ||
|
|
bc5cdfecb4 | ||
|
|
d80e9aa7c5 | ||
|
|
1e2b551795 | ||
|
|
ea374c05df | ||
|
|
3a7e620ce6 | ||
|
|
589c918f79 | ||
|
|
1ea513ad75 | ||
|
|
036d77e08f | ||
|
|
783a326b11 | ||
|
|
a650847201 | ||
|
|
7e1e187d6c | ||
|
|
3a623af363 | ||
|
|
6b5253e6a0 | ||
|
|
feb19cafdd | ||
|
|
c963fd30ba | ||
|
|
eee4d05b77 | ||
|
|
5f8858856b | ||
|
|
8b28b013c4 | ||
|
|
074ae41ee6 | ||
|
|
06e15b6e25 | ||
|
|
14f06e98b7 | ||
|
|
18aa5c5b69 | ||
|
|
6e872c69dd | ||
|
|
3ba877b078 | ||
|
|
4d95dcf1da | ||
|
|
03d8cf1114 | ||
|
|
2d50d1cbf5 | ||
|
|
ad2614c452 | ||
|
|
eaf184c833 | ||
|
|
57c1983e07 | ||
|
|
2f4e0d9e17 | ||
|
|
43e68f73d3 | ||
|
|
6fd2fb08bb | ||
|
|
c5b61a3125 | ||
|
|
5317703dcc | ||
|
|
f820e7a8be | ||
|
|
cc0b0b00af | ||
|
|
8ed1cc6006 | ||
|
|
103bcef6ab | ||
|
|
0dd969cc24 | ||
|
|
e301cda990 | ||
|
|
200fbe3334 | ||
|
|
0cac03ad4a | ||
|
|
be0357da4a | ||
|
|
32235ca60a | ||
|
|
792eab8621 | ||
|
|
8e5ad1288c | ||
|
|
332dbc4a08 | ||
|
|
0fda4b060c | ||
|
|
55de71feca | ||
|
|
c0c58f9aff | ||
|
|
ae4e28689d | ||
|
|
7ca51e78f0 | ||
|
|
d4772fe060 | ||
|
|
47f2758c8f | ||
|
|
dac31390cb | ||
|
|
68fe437889 | ||
|
|
d358af4a53 | ||
|
|
e3269984ce | ||
|
|
e9b9adad06 | ||
|
|
c08c280dd9 | ||
|
|
109f22051d | ||
|
|
9764fe310a | ||
|
|
10a69c4d3d | ||
|
|
77f26994a6 | ||
|
|
1d8a60a9ba | ||
|
|
59e2e102e6 | ||
|
|
f52e98d8df | ||
|
|
08c089258f | ||
|
|
976cd284ff | ||
|
|
914626e2b2 | ||
|
|
a5f8762570 | ||
|
|
8d4deda2bb | ||
|
|
0c05069baf | ||
|
|
b5c46062c6 | ||
|
|
022b219c0f | ||
|
|
e28d03df82 | ||
|
|
733101a560 | ||
|
|
32144fb6b0 | ||
|
|
4cdec31803 | ||
|
|
70a83dad4d | ||
|
|
86eef4c184 | ||
|
|
8fefc8c12a | ||
|
|
75a3266929 | ||
|
|
7f0c3bf94b | ||
|
|
506799cac4 | ||
|
|
fca8c43d47 | ||
|
|
198e69f8d1 | ||
|
|
28ceaaaaab | ||
|
|
2bee2f4aa5 | ||
|
|
86f778f504 | ||
|
|
2181c48eb7 | ||
|
|
9429c96172 | ||
|
|
e2d11d8575 | ||
|
|
b553954d37 | ||
|
|
07755e2c56 | ||
|
|
6b18a2842f | ||
|
|
6a7e741b02 | ||
|
|
96851c1d34 | ||
|
|
2663f437fc | ||
|
|
94224d0ac5 | ||
|
|
3a599b66f5 | ||
|
|
51fd0afade | ||
|
|
101bc8045b | ||
|
|
3e68bc9ec5 | ||
|
|
462caf5bd4 | ||
|
|
98f3e6e61d | ||
|
|
8543bd457b | ||
|
|
08f32cb9e9 | ||
|
|
57d577a140 | ||
|
|
1b66904550 | ||
|
|
77f3269f09 | ||
|
|
317b7f5d40 | ||
|
|
552c594d3f | ||
|
|
429709a426 | ||
|
|
f5f1b38fe8 | ||
|
|
b2a7b91a7c | ||
|
|
fb24835ac5 | ||
|
|
dd10bf52e7 | ||
|
|
5d775fdc3e | ||
|
|
17ef077e27 | ||
|
|
02dcdf83b5 | ||
|
|
d572383e76 | ||
|
|
a6cf99a83c | ||
|
|
74607341ff | ||
|
|
5f007ed1d9 | ||
|
|
8d720cacc5 | ||
|
|
4a58fbdd53 | ||
|
|
3d7bb9d253 | ||
|
|
7f32435ce9 | ||
|
|
126a3d88b5 | ||
|
|
367c32c050 | ||
|
|
d9bd9c3532 | ||
|
|
879f0fed78 | ||
|
|
07050a35f3 | ||
|
|
05d664cae1 | ||
|
|
18c770141d | ||
|
|
595dd9f3f4 | ||
|
|
1d4c79b897 | ||
|
|
ee77debfce | ||
|
|
d44e592635 | ||
|
|
4840708090 | ||
|
|
bad31d83b1 | ||
|
|
1c29c2c87d | ||
|
|
ca4b15bc0b | ||
|
|
c73f131f32 | ||
|
|
551c4b99c4 | ||
|
|
4ca35fb956 | ||
|
|
14ab7ba7bd | ||
|
|
068d85b1f3 | ||
|
|
d2fdc10f39 | ||
|
|
2b7452f9a7 | ||
|
|
0ac2b43ad3 | ||
|
|
5bf8feefca | ||
|
|
bdc167fd6a | ||
|
|
aa98ca42c8 | ||
|
|
5adc86bbbf | ||
|
|
bfc2367bdb | ||
|
|
4c3354fa50 | ||
|
|
31cf470cc8 | ||
|
|
fe85e28605 | ||
|
|
7a95c38290 | ||
|
|
fe65d28f99 | ||
|
|
09ce815fc5 | ||
|
|
38ffa390ea | ||
|
|
c2a84c7cf6 | ||
|
|
da5e2925ad | ||
|
|
6ef5650129 | ||
|
|
d7de67d242 | ||
|
|
4c40784328 | ||
|
|
b581e5d3c4 | ||
|
|
fd27fe3392 | ||
|
|
955634c35b | ||
|
|
42c0b33f07 | ||
|
|
c5158a6457 | ||
|
|
9fd9e8e3a8 | ||
|
|
ead7cfe2b8 | ||
|
|
3a4fff1683 | ||
|
|
c4a5a75fd6 | ||
|
|
4cb5caa342 | ||
|
|
652b7d9c8d | ||
|
|
94480c23d2 | ||
|
|
d3303f6a98 | ||
|
|
125058093f | ||
|
|
891136788f | ||
|
|
d1b7e66694 | ||
|
|
914007c7e5 | ||
|
|
e9d60e693e | ||
|
|
e6ea471cbe | ||
|
|
a3ba025d22 | ||
|
|
b9f10addf8 | ||
|
|
c8e35fab88 | ||
|
|
cc8299f0cc | ||
|
|
55ad0cb8b7 | ||
|
|
3c9bf20798 | ||
|
|
6b77459286 |
9
.gitignore
vendored
9
.gitignore
vendored
@@ -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
17
AUTHORS
@@ -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
104
CMakeLists.txt
Normal 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
127
ChangeLog
@@ -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
293
INSTALL
@@ -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.
|
||||
|
||||
---
|
||||
|
||||
13
Makefile.am
13
Makefile.am
@@ -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
110
NEWS
@@ -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
|
||||
|
||||
|
||||
98
README.build
98
README.build
@@ -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
48
cmake.h.in
Normal 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
4
commit.h.in
Normal file
@@ -0,0 +1,4 @@
|
||||
/* commit.h.in. Creates commit.h during a cmake run */
|
||||
|
||||
/* git information */
|
||||
#define COMMIT "${COMMIT}"
|
||||
54
configure.ac
54
configure.ac
@@ -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
13
doc/CMakeLists.txt
Normal 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
6
doc/man/.gitignore
vendored
Normal file
@@ -0,0 +1,6 @@
|
||||
task-color.5
|
||||
task-faq.5
|
||||
task-sync.5
|
||||
task-tutorial.5
|
||||
task.1
|
||||
taskrc.5
|
||||
@@ -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.
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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.
|
||||
@@ -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.
|
||||
|
||||
@@ -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.
|
||||
@@ -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.
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
75
doc/rc/dark-gray-256.theme
Normal file
75
doc/rc/dark-gray-256.theme
Normal 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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
78
doc/rc/holidays-AT.rc
Normal 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
|
||||
@@ -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
|
||||
|
||||
@@ -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
82
doc/rc/holidays-DK.rc
Normal 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
|
||||
@@ -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
|
||||
|
||||
@@ -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
68
doc/rc/holidays-IT.rc
Normal 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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
110
doc/rc/holidays-NZ.rc
Normal 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
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
4
i18n/CMakeLists.txt
Normal file
@@ -0,0 +1,4 @@
|
||||
install (DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/ DESTINATION ${TASK_DOCDIR}/i18n
|
||||
FILES_MATCHING REGEX "strings.*"
|
||||
REGEX "tips.*"
|
||||
PATTERN "CMakeFiles" EXCLUDE)
|
||||
@@ -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
|
||||
|
||||
@@ -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...
|
||||
%
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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 © 1994–2008 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
1
scripts/CMakeLists.txt
Normal 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
70
scripts/add-ons/export-csv.pl
Executable 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
91
scripts/add-ons/export-ical.pl
Executable 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
74
scripts/add-ons/export-xml.pl
Executable 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
62
scripts/add-ons/export-xml.py
Executable 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
67
scripts/add-ons/export-xml.rb
Executable 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
72
scripts/add-ons/export-yaml.pl
Executable 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;
|
||||
|
||||
################################################################################
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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>
|
||||
|
||||
297
src/Att.cpp
297
src/Att.cpp
@@ -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
|
||||
// : <- :
|
||||
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 (""")) != 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, """, "'");
|
||||
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 (",")) != std::string::npos)
|
||||
value.replace (i, 7, ",");
|
||||
|
||||
while ((i = value.find (":")) != std::string::npos)
|
||||
value.replace (i, 7, ":");
|
||||
str_replace (value, "&squot;", "'");
|
||||
str_replace (value, ",", ",");
|
||||
str_replace (value, ":", ":");
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
@@ -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
31
src/CMakeLists.txt
Normal 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")
|
||||
16
src/Cmd.cpp
16
src/Cmd.cpp
@@ -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") ||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
102
src/Config.cpp
102
src/Config.cpp
@@ -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";
|
||||
}
|
||||
|
||||
@@ -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 ();
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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
|
||||
|
||||
128
src/Date.cpp
128
src/Date.cpp
@@ -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.
|
||||
|
||||
13
src/Date.h
13
src/Date.h
@@ -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&);
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
106
src/Duration.cpp
106
src/Duration.cpp
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
15
src/Grid.cpp
15
src/Grid.cpp
@@ -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 ("");
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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");
|
||||
|
||||
@@ -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
338
src/JSON.cpp
Normal 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
61
src/JSON.h
Normal 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
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
@@ -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
|
||||
|
||||
@@ -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
Reference in New Issue
Block a user