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/.deps
|
||||||
src/Makefile
|
src/Makefile
|
||||||
*/*task
|
*/*task
|
||||||
|
*/*libtask.a
|
||||||
stamp-h1
|
stamp-h1
|
||||||
Makefile
|
Makefile
|
||||||
Makefile.in
|
Makefile.in
|
||||||
@@ -17,3 +18,11 @@ src/tests/*.data
|
|||||||
*~
|
*~
|
||||||
.*.swp
|
.*.swp
|
||||||
package-config/osx/binary/task
|
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
|
Kathryn Andersen
|
||||||
Alexander Schremmer
|
Alexander Schremmer
|
||||||
Jostein Berntsen
|
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
|
Thanks to the following, who submitted detailed bug reports and excellent
|
||||||
suggestions:
|
suggestions:
|
||||||
@@ -63,3 +71,12 @@ suggestions:
|
|||||||
Michelle Crane
|
Michelle Crane
|
||||||
Elizabeth Maxson
|
Elizabeth Maxson
|
||||||
Peter De Poorter
|
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 ---------------------------
|
------ 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',
|
+ Added feature #43, now task supports relative dates like '3wks',
|
||||||
'1 month', '4d' for 'due', 'wait' and 'until' dates. Essentially
|
'1 month', '4d' for 'due', 'wait' and 'until' dates. Essentially
|
||||||
durations are now allowed where dates are expected, and are treated
|
durations are now allowed where dates are expected, and are treated
|
||||||
@@ -35,8 +154,6 @@
|
|||||||
report.
|
report.
|
||||||
+ Added feature #481, allowing for user control of the color rule order
|
+ Added feature #481, allowing for user control of the color rule order
|
||||||
of precedence via the 'rule.precedence.color' configuration variable.
|
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
|
+ Added feature #499, giving an extra line in the message output when
|
||||||
doing bulk done changes (thanks to T. Charles Yun).
|
doing bulk done changes (thanks to T. Charles Yun).
|
||||||
+ New 'depends' column for custom reports.
|
+ New 'depends' column for custom reports.
|
||||||
@@ -86,6 +203,8 @@
|
|||||||
+ Fixed bug #480, which didn't properly support @ characters in tags. This
|
+ Fixed bug #480, which didn't properly support @ characters in tags. This
|
||||||
also now supports $ and #.
|
also now supports $ and #.
|
||||||
+ Fixed bug #489, which caused the filter 'tags.none:' to fail.
|
+ 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
|
+ Fixed bug #494, causing imported text files to ultimately lack uuids
|
||||||
(thanks to Elizabeth Maxson).
|
(thanks to Elizabeth Maxson).
|
||||||
+ Fixed problem with command line configuration overrides that had no
|
+ Fixed problem with command line configuration overrides that had no
|
||||||
@@ -97,8 +216,6 @@
|
|||||||
+ Clarified the documentation regarding the project name (taskwarrior) and
|
+ Clarified the documentation regarding the project name (taskwarrior) and
|
||||||
the program name (task).
|
the program name (task).
|
||||||
|
|
||||||
------ old releases ------------------------------
|
|
||||||
|
|
||||||
1.9.2 (7/10/2010) a13989f18eb34b3363f433c965084b6491425b9f
|
1.9.2 (7/10/2010) a13989f18eb34b3363f433c965084b6491425b9f
|
||||||
+ Added feature #320, so the command "task 123" is interpreted as an implicit
|
+ Added feature #320, so the command "task 123" is interpreted as an implicit
|
||||||
"task info 123" command (thanks to John Florian).
|
"task info 123" command (thanks to John Florian).
|
||||||
|
|||||||
293
INSTALL
293
INSTALL
@@ -1,234 +1,149 @@
|
|||||||
Installation Instructions
|
Installation Instructions
|
||||||
*************************
|
-------------------------
|
||||||
|
|
||||||
Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005,
|
# Building task with autotools is deprecated and will be phased out.
|
||||||
2006 Free Software Foundation, Inc.
|
#
|
||||||
|
# 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
|
Pre-requisites
|
||||||
unlimited permission to copy, distribute and modify it.
|
--------------
|
||||||
|
|
||||||
|
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
|
Basic Installation
|
||||||
==================
|
------------------
|
||||||
|
|
||||||
Briefly, the shell commands `./configure; make; make install' should
|
Briefly, these shell commands will unpack, build and install taskwarrior:
|
||||||
configure, build, and install this package. The following
|
|
||||||
more-detailed instructions are generic; see the `README' file for
|
|
||||||
instructions specific to this package.
|
|
||||||
|
|
||||||
The `configure' shell script attempts to guess correct values for
|
$ tar xzf task-X.Y.Z.tar.gz [1]
|
||||||
various system-dependent variables used during compilation. It uses
|
$ cd task-X.Y.Z [2]
|
||||||
those values to create a `Makefile' in each directory of the package.
|
$ cmake . [3]
|
||||||
It may also create one or more `.h' files containing system-dependent
|
$ make [4]
|
||||||
definitions. Finally, it creates a shell script `config.status' that
|
$ sudo make install [5]
|
||||||
you can run in the future to recreate the current configuration, and a
|
$ cd .. ; rm -r task-X.Y.Z [6]
|
||||||
file `config.log' containing compiler output (useful mainly for
|
|
||||||
debugging `configure').
|
|
||||||
|
|
||||||
It can also use an optional file (typically called `config.cache'
|
These commands are explained below:
|
||||||
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.
|
|
||||||
|
|
||||||
If you need to do unusual things to compile the package, please try
|
1. Unpacks the source tarball. This creates the directory task-X.Y.Z,
|
||||||
to figure out how `configure' could check whether to do them, and mail
|
containing all the code.
|
||||||
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.
|
|
||||||
|
|
||||||
The file `configure.ac' (or `configure.in') is used to create
|
2. Change directory to the root of the distribution.
|
||||||
`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'.
|
|
||||||
|
|
||||||
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
|
4. Builds taskwarrior. This may take a minute.
|
||||||
`./configure' to configure the package for your system.
|
|
||||||
|
|
||||||
Running `configure' might take a while. While running, it prints
|
5. Installs the program, documentation and other data files.
|
||||||
some messages telling which features it is checking for.
|
|
||||||
|
|
||||||
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
|
Build and configurations options
|
||||||
documentation.
|
--------------------------------
|
||||||
|
|
||||||
5. You can remove the program binaries and object files from the
|
You can customize the configuration run with cmake variables. This will modify the
|
||||||
source code directory by typing `make clean'. To also remove the
|
installation process:
|
||||||
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.
|
|
||||||
|
|
||||||
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
|
$ cmake -DCMAKE_INSTALL_PREFIX=<path-to-installation-dir> .
|
||||||
`configure' script does not know about. Run `./configure --help' for
|
|
||||||
details on some of the pertinent environment variables.
|
|
||||||
|
|
||||||
You can give `configure' initial values for configuration parameters
|
cmake configuration variables are applied with the -D option and consist of a <name>
|
||||||
by setting variables in the command line or in the environment. Here
|
and a <value>:
|
||||||
is an example:
|
|
||||||
|
|
||||||
./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
|
The correpsonding TASK_* variables will be combined with CMAKE_INSTALL_PREFIX to get
|
||||||
same time, by placing the object files for each architecture in their
|
absolute installation directoris:
|
||||||
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 `..'.
|
|
||||||
|
|
||||||
With a non-GNU `make', it is safer to compile the package for one
|
CMAKE_INSTALL_PREFIZ/TASK_BINDIR /usr/local/bin
|
||||||
architecture at a time in the source code directory. After you have
|
CMAKE_INSTALL_PREFIZ/TASK_DOCDIR /usr/local/share/doc/task
|
||||||
installed the package for one architecture, use `make distclean' before
|
CMAKE_INSTALL_PREFIZ/TASK_MAN1DIR /usr/local/share/man/man1
|
||||||
reconfiguring for another architecture.
|
CMAKE_INSTALL_PREFIZ/TASK_MAN5DIR /usr/local/share/man/man5
|
||||||
|
|
||||||
Installation Names
|
|
||||||
==================
|
|
||||||
|
|
||||||
By default, `make install' installs the package's commands under
|
Uninstallation
|
||||||
`/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'.
|
|
||||||
|
|
||||||
You can specify separate installation prefixes for
|
To uninstall taskwarrior, you need the Makefiles, so if you deleted them in
|
||||||
architecture-specific files and architecture-independent files. If you
|
step 7 above, they must first be regenerated by following steps [1], [2] and
|
||||||
pass the option `--exec-prefix=PREFIX' to `configure', the package uses
|
[3]. Then simply run:
|
||||||
PREFIX as the prefix for installing programs and libraries.
|
|
||||||
Documentation and other data files still use the regular prefix.
|
|
||||||
|
|
||||||
In addition, if you use an unusual directory layout you can give
|
$ sudo make uninstall TODO TODO TODO -- cmake doesn't include uninstall
|
||||||
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.
|
|
||||||
|
|
||||||
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
|
Taskwarrior 1.9.4 has dependencies that are detected by cmake in almost all cases,
|
||||||
`configure', where FEATURE indicates an optional part of the package.
|
but there are situations and operating systems that mean you will need to offer
|
||||||
They may also pay attention to `--with-PACKAGE' options, where PACKAGE
|
a little help.
|
||||||
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.
|
|
||||||
|
|
||||||
For packages that use the X Window System, `configure' can usually
|
If taskwarrior will not build on your system, first take a look at the Operating
|
||||||
find the X include and library files automatically, but if it doesn't,
|
System notes below. If this doesn't help, then go to the Troubleshooting
|
||||||
you can use the `configure' options `--x-includes=DIR' and
|
section, which includes instructions on how to contact us for help.
|
||||||
`--x-libraries=DIR' to specify their locations.
|
|
||||||
|
|
||||||
Specifying the System Type
|
|
||||||
==========================
|
|
||||||
|
|
||||||
There may be some features `configure' cannot figure out automatically,
|
Operating System Notes
|
||||||
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:
|
|
||||||
|
|
||||||
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
|
Troubleshooting
|
||||||
use the option `--target=TYPE' to select the type of system they will
|
---------------
|
||||||
produce code for.
|
|
||||||
|
|
||||||
If you want to _use_ a cross compiler, that generates code for a
|
If you've recently made changes to dependencies (by reinstalling Lua, for
|
||||||
platform different from the build platform, you should specify the
|
example) be sure to rerun 'cmake .' before trying to execute 'make' again.
|
||||||
"host" platform (i.e., that on which the generated programs will
|
|
||||||
eventually be run) with `--host=TYPE'.
|
|
||||||
|
|
||||||
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
|
If a build does not succeed, please send the contents of the 'CMakeCache.txt'
|
||||||
can create a site shell script called `config.site' that gives default
|
and 'CMakeFiles/CMakeOutput.log' files to support@taskwarrior.org, or post a
|
||||||
values for variables like `CC', `cache_file', and `prefix'.
|
message in the support forums at taskwarrior.org along with the information.
|
||||||
`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.
|
|
||||||
|
|
||||||
Defining Variables
|
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.
|
||||||
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.
|
|
||||||
|
|
||||||
|
---
|
||||||
|
|||||||
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
|
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}
|
#docdir = $(datadir)/doc/${PACKAGE}-${VERSION}
|
||||||
doc_DATA = AUTHORS ChangeLog COPYING NEWS README
|
doc_DATA = AUTHORS ChangeLog COPYING NEWS README INSTALL
|
||||||
|
|
||||||
EXTRA_DIST = INSTALL README.build
|
|
||||||
|
|
||||||
bashscriptsdir = $(docdir)
|
bashscriptsdir = $(docdir)
|
||||||
nobase_dist_bashscripts_DATA = scripts/bash/task_completion.sh
|
nobase_dist_bashscripts_DATA = scripts/bash/task_completion.sh
|
||||||
@@ -13,6 +11,12 @@ nobase_dist_bashscripts_DATA = scripts/bash/task_completion.sh
|
|||||||
zshscriptsdir = $(docdir)
|
zshscriptsdir = $(docdir)
|
||||||
nobase_dist_zshscripts_DATA = scripts/zsh/_task
|
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)
|
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
|
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
|
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
|
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.
|
- New burndown charts.
|
||||||
- Special tags 'nocolor', 'nocal' and 'nonag'.
|
- New 'count' helper command.
|
||||||
- Now supports durations in dates, such as:
|
- Inifinite width reports, when redirecting output.
|
||||||
$ task ... due:4d
|
- Added highlighting for the show command that indicates which values differ
|
||||||
$ task ... due:3wks
|
from the defaults.
|
||||||
- 'sow', 'som' and 'soy' are now accepted in dates. 'soww' and 'eoww' are
|
- Added change log display to the 'info' command.
|
||||||
now synonyms for 'sow' and 'eow' (ww = working week) 'socw' and 'eocw'
|
- The first month in the calendar report can now be changed with an offset
|
||||||
refer to the calendar week (starting Sunday/Monday and
|
value.
|
||||||
- Now supports the beginning of the week, month and year in dates.
|
- No more dependency on ncurses.
|
||||||
- Now supports 'now' as a date/time.
|
- New '_query' helper command for script writers, which accepts a filter like
|
||||||
- Now defines an overdue task as being one second after the due date,
|
any other report, but returns unformatted JSON. The new alias 'export.json'
|
||||||
instead of the day after the due date.
|
maps to the _query command.
|
||||||
- Import and export of YAML 1.1, including round-trip capability, and
|
- Import can now read from files and URLs.
|
||||||
detection of duplicate imports.
|
- Assorted bug fixes.
|
||||||
- New merge capability for syncing task data files.
|
- New literal date "later" and "someday" to be used with the wait attribute to
|
||||||
- New push capability for distributing merged changes.
|
hide a task until somepoint in time (this sets the wait date to 1/18/2038).
|
||||||
- New pull capability for copying data files from a remote location.
|
- Total active time now shown on the info report.
|
||||||
- When completing or modifying a task, the project status is displayed.
|
- Add-on scripts: export-xml.pl, export-xml.py, export-xml.rb, export-ical.pl,
|
||||||
- The 'info' report is now colorized.
|
export-csv.pl and export-yaml.pl.
|
||||||
- Certain characters (#, $, @) are now supported for use in tags.
|
- New dark-gray-256 color theme.
|
||||||
- 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.
|
|
||||||
|
|
||||||
Please refer to the ChangeLog file for full details. There are too many to
|
Please refer to the ChangeLog file for full details. There are too many to
|
||||||
list here.
|
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
|
- 'burndown.daily', 'burndown.weekly', 'burndown.monthly', also with
|
||||||
and color rules from your .taskrc and theme.
|
'burndown' that is an alias to burndown.weekly.
|
||||||
- New 'task export.yaml' command will export YAML 1.1, which can then be
|
- 'count' accepts a filter, and simply returns a count of the tasks
|
||||||
imported via 'task import <file>'.
|
matching the filter. Used as a helper command by scripts.
|
||||||
- New 'task merge <url>' command that can merge the local and an undo.data
|
- '_query' helper command for all future export formats.
|
||||||
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.
|
|
||||||
|
|
||||||
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
|
- color.burndown.pending, color.burndown.started and color.burndown.done
|
||||||
ending Saturday/Sunday).
|
control the color of the burndown charts.
|
||||||
- Color rule precedence can now be explicitly set with the configuration
|
- burndown.bias, which is a tweakable control for the completion estimation
|
||||||
variable rule.precedence.color. Try "task show rule.pre" to show the
|
for the burndown charts, and is documented in taskrc(5).
|
||||||
default settings.
|
- defaultwidth=0 is causes word-wrapping to be turned off, and effectively
|
||||||
- merge.autopush to control whether pushing after merging is automated.
|
set reports to potentially have infinite width .
|
||||||
- merge.*.uri to configure source locations for the merge command
|
- journal.info controls whether a change log for each task is displayed by
|
||||||
(e.g. merge.default.uri).
|
the 'info' command.
|
||||||
- push.*.uri to configure target locations for the push command.
|
- gc=off can be used, temporarily, to defer GC until later commands, which
|
||||||
- pull.*.uri to configure source locations for the pull command.
|
eliminates problems with task ID numbers for script writers.
|
||||||
- dependency.confirm controls whether dependency chain repair needs to be
|
- calendar.offset=off and calendar.offset.value=-1 to apply an offset value
|
||||||
confirmed.
|
to change the effective first month in the calendar report.
|
||||||
- dependency.reminder controls whether the user is nagged about dependency
|
- default.due can be specified, and adds a default due date to all added
|
||||||
chain violations.
|
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
|
- The export commands (export, export.csv, export.yaml, export.ical and
|
||||||
and end fields. Recent enhancements to date formatting render these fields
|
export.vcalendar) are deprecated, and will be replaced in future releases
|
||||||
obsolete. The 'task show' command warns of the use of these deprecated
|
by add-on scripts.
|
||||||
fields. The synonyms will be removed in a future version of taskwarrior.
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
Taskwarrior has been built and tested on the following configurations:
|
Taskwarrior has been built and tested on the following configurations:
|
||||||
|
|
||||||
* OS X 10.6 Snow Leopard and 10.5 Leopard
|
* 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
|
* Ubuntu 10.10 Maverick Meerkat, 10.04 Lucid Lynx
|
||||||
* Debian Sid
|
* Debian Sid
|
||||||
* Slackware 12.2
|
* Slackware 12.2
|
||||||
@@ -83,6 +78,7 @@ Taskwarrior has been built and tested on the following configurations:
|
|||||||
* Solaris 10 and 8
|
* Solaris 10 and 8
|
||||||
* OpenBSD 4.5
|
* OpenBSD 4.5
|
||||||
* FreeBSD
|
* FreeBSD
|
||||||
|
* NetBSD
|
||||||
* Cygwin 1.7 and 1.5
|
* Cygwin 1.7 and 1.5
|
||||||
* Haiku R1/alpha1
|
* 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.
|
# Process this file with autoconf to produce a configure script.
|
||||||
|
|
||||||
AC_PREREQ(2.61)
|
AC_PREREQ(2.61)
|
||||||
AC_INIT(task, 1.9.3, support@taskwarrior.org)
|
AC_INIT(task, 1.9.4, support@taskwarrior.org)
|
||||||
|
|
||||||
|
|
||||||
# Source type.
|
# Source type.
|
||||||
@@ -64,37 +64,6 @@ else
|
|||||||
fi
|
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.
|
# Readline enabled by default.
|
||||||
#AC_ARG_WITH([readline],
|
#AC_ARG_WITH([readline],
|
||||||
# [AS_HELP_STRING([--without-readline], [disable support for 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
|
if test "x$with_lua" = "xyes" ; then
|
||||||
AC_DEFINE([HAVE_LIBLUA], [1], [Defined if you have liblua])
|
AC_DEFINE([HAVE_LIBLUA], [1], [Defined if you have liblua])
|
||||||
|
|
||||||
if test -n "$lua_inc"; then
|
if test -n "$lua_inc"; then
|
||||||
CFLAGS="$CFLAGS -I$lua_inc"
|
CFLAGS="$CFLAGS -I$lua_inc"
|
||||||
CXXFLAGS="$CXXFLAGS -I$lua_inc"
|
CXXFLAGS="$CXXFLAGS -I$lua_inc"
|
||||||
@@ -154,6 +124,26 @@ if test "x$with_lua" = "xyes" ; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
AC_CHECK_LIB([lua],[main])
|
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
|
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
|
.SH NAME
|
||||||
task-color \- A color tutorial for the task(1) command line todo manager.
|
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
|
those colors can be made subtle, and complementary, but without care, this can
|
||||||
be a visual mess. Beware!
|
be a visual mess. Beware!
|
||||||
|
|
||||||
The precedence for the color rules is determined by the configuration variable
|
The precedence for the color rules is determined by the configuration
|
||||||
'rule.precedence.color', which by default contains:
|
variable 'rule.precedence.color', which by default contains:
|
||||||
|
|
||||||
due.today,active,blocked,overdue,due,keyword,project,tag,recurring,pri,tagged
|
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
|
These are just the color rules with the 'color.' prefix removed. The
|
||||||
'color.due.today' is the highest precedence, and 'color.tagged' is the lowest.
|
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,
|
The keyword rule shown here as 'keyword' corresponds to a wildcard pattern,
|
||||||
meaning 'color.keyword.*', or in other words all the keyword rules. Similarly
|
meaning 'color.keyword.*', or in other words all the keyword rules. Similarly
|
||||||
@@ -290,7 +290,7 @@ on <http://taskwarrior.org>.
|
|||||||
.SH "CREDITS & COPYRIGHTS"
|
.SH "CREDITS & COPYRIGHTS"
|
||||||
Taskwarrior was written by P. Beckingham <paul@beckingham.net>.
|
Taskwarrior was written by P. Beckingham <paul@beckingham.net>.
|
||||||
.br
|
.br
|
||||||
Copyright (C) 2006 \- 2010 P. Beckingham
|
Copyright (C) 2006 \- 2011 P. Beckingham
|
||||||
|
|
||||||
This man page was originally written by Paul 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
|
.SH NAME
|
||||||
task-faq \- A FAQ for the task(1) command line todo manager.
|
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
|
_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
|
.TP
|
||||||
.B Q: How do I backup my taskwarrior data files? Where are they?
|
.B Q: How do I backup my taskwarrior data files? Where are they?
|
||||||
A: Taskwarrior writes all pending tasks to the file
|
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
|
of taskwarrior, there is the file format to consider. This is yet another good
|
||||||
reason to back up your task data files!
|
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
|
.TP
|
||||||
.B Q: How do I build taskwarrior under Cygwin?
|
.B Q: How do I build taskwarrior under Cygwin?
|
||||||
A: Take a look at the README.build file, where the latest information on build
|
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
|
gcc
|
||||||
make
|
make
|
||||||
libncurses-devel
|
|
||||||
libncurses8
|
|
||||||
|
|
||||||
The gcc and make packages allow you to compile the code, and are therefore
|
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
|
required.
|
||||||
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.
|
|
||||||
|
|
||||||
.TP
|
.TP
|
||||||
.B Q: Do colors work under Cygwin?
|
.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.
|
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
|
.TP
|
||||||
.B Q: How can I help?
|
.B Q: How can I help?
|
||||||
There are lots of ways. Here are some:
|
There are lots of ways. Here are some:
|
||||||
@@ -331,7 +327,7 @@ There are lots of ways. Here are some:
|
|||||||
.SH "CREDITS & COPYRIGHTS"
|
.SH "CREDITS & COPYRIGHTS"
|
||||||
Taskwarrior was written by P. Beckingham <paul@beckingham.net>.
|
Taskwarrior was written by P. Beckingham <paul@beckingham.net>.
|
||||||
.br
|
.br
|
||||||
Copyright (C) 2006 \- 2010 P. Beckingham
|
Copyright (C) 2006 \- 2011 P. Beckingham
|
||||||
|
|
||||||
This man page was originally written by 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
|
.SH NAME
|
||||||
task-sync \- A tutorial for the task(1) data synchronization capabilities.
|
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
|
.br
|
||||||
.RS
|
.RS
|
||||||
ssh://[user@]host[:port]:path/to/undo.data
|
ssh://[user@]host[:port]/path/to/undo.data
|
||||||
.br
|
.br
|
||||||
[user@]host[:port]:/path/
|
[user@]host:/path/
|
||||||
.RE
|
.RE
|
||||||
|
|
||||||
Rsync is another supported protocol that minimizes network traffic, by a clever
|
Rsync is another supported protocol that minimizes network traffic, by a clever
|
||||||
@@ -131,7 +131,22 @@ http://host[:port]/path/to/undo.data
|
|||||||
.br
|
.br
|
||||||
https://host[:port]/path/to/undo.data
|
https://host[:port]/path/to/undo.data
|
||||||
.br
|
.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
|
.RE
|
||||||
|
|
||||||
.SH CONFLICTS
|
.SH CONFLICTS
|
||||||
@@ -310,10 +325,10 @@ used for synchronization.
|
|||||||
.SH "CREDITS & COPYRIGHTS"
|
.SH "CREDITS & COPYRIGHTS"
|
||||||
task was written by P. Beckingham <paul@beckingham.net>.
|
task was written by P. Beckingham <paul@beckingham.net>.
|
||||||
.br
|
.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.
|
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
|
task is distributed under the GNU General Public License. See
|
||||||
http://www.gnu.org/licenses/gpl-2.0.txt for more information.
|
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
|
.SH NAME
|
||||||
task-tutorial \- A tutorial for the task(1) command line todo manager.
|
task-tutorial \- A tutorial for the task(1) command line todo manager.
|
||||||
@@ -1985,7 +1985,7 @@ need to prefix every command with "task".
|
|||||||
.RS
|
.RS
|
||||||
$ task shell
|
$ task shell
|
||||||
.br
|
.br
|
||||||
task 1.9.3 shell
|
task 1.9.4 shell
|
||||||
.br
|
.br
|
||||||
|
|
||||||
.br
|
.br
|
||||||
@@ -3319,7 +3319,7 @@ BEGIN:VCALENDAR
|
|||||||
.br
|
.br
|
||||||
VERSION:2.0
|
VERSION:2.0
|
||||||
.br
|
.br
|
||||||
PRODID:-//GBF//task 1.9.3.beta1//EN
|
PRODID:-//GBF//task 1.9.4.beta1//EN
|
||||||
.br
|
.br
|
||||||
BEGIN:VTODO
|
BEGIN:VTODO
|
||||||
.br
|
.br
|
||||||
@@ -3478,7 +3478,7 @@ $ task help
|
|||||||
.SH "CREDITS & COPYRIGHTS"
|
.SH "CREDITS & COPYRIGHTS"
|
||||||
task was written by P. Beckingham <paul@beckingham.net>.
|
task was written by P. Beckingham <paul@beckingham.net>.
|
||||||
.br
|
.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.
|
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
|
.SH NAME
|
||||||
task \- A command line todo manager.
|
task \- A command line todo manager.
|
||||||
@@ -35,9 +35,10 @@ Adds an annotation to an existing task.
|
|||||||
|
|
||||||
.TP
|
.TP
|
||||||
.B denotate ID description
|
.B denotate ID description
|
||||||
Deletes an annotation for the specified task. If the provided description matches an
|
Deletes an annotation for the specified task. If the provided description
|
||||||
annotation exactly, the corresponding annotation is deleted. If the provided description
|
matches an annotation exactly, the corresponding annotation is deleted. If the
|
||||||
matches annotations partly, the first partly matched annotation is deleted.
|
provided description matches annotations partly, the first partly matched
|
||||||
|
annotation is deleted.
|
||||||
|
|
||||||
.TP
|
.TP
|
||||||
.B info ID
|
.B info ID
|
||||||
@@ -49,7 +50,7 @@ With an ID but no specific command, taskwarrior runs the "info" command.
|
|||||||
|
|
||||||
.TP
|
.TP
|
||||||
.B undo
|
.B undo
|
||||||
Reverts the most recent action.
|
Reverts the most recent action. Obeys the confirmation setting.
|
||||||
|
|
||||||
.TP
|
.TP
|
||||||
.B shell
|
.B shell
|
||||||
@@ -110,6 +111,18 @@ Shows a graphical report of task status by month. Alias to ghistory.monthly.
|
|||||||
.B ghistory.annual
|
.B ghistory.annual
|
||||||
Shows a graphical report of task status by year.
|
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
|
.TP
|
||||||
.B calendar [ y | due [y] | month year [y] | year ]
|
.B calendar [ y | due [y] | month year [y] | year ]
|
||||||
Shows a monthly calendar with due tasks marked.
|
Shows a monthly calendar with due tasks marked.
|
||||||
@@ -120,33 +133,37 @@ Shows task database statistics.
|
|||||||
|
|
||||||
.TP
|
.TP
|
||||||
.B import \fIfile
|
.B import \fIfile
|
||||||
Imports tasks from a variety of formats.
|
Imports tasks in a variety of formats, from file or URL.
|
||||||
|
|
||||||
.TP
|
.TP
|
||||||
.B export
|
.B export
|
||||||
Exports all tasks in the default format. This is an alias to the command export.yaml.
|
Exports all tasks in the default format. This is an alias to the command
|
||||||
Redirect the output to a file, if you wish to save it, or pipe it to another command.
|
export.yaml. Redirect the output to a file, if you wish to save it, or pipe it
|
||||||
|
to another command.
|
||||||
|
|
||||||
.TP
|
.TP
|
||||||
.B export.csv
|
.B export.csv
|
||||||
Exports all tasks in CSV format.
|
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
|
.TP
|
||||||
.B export.ical
|
.B export.ical
|
||||||
Exports all tasks in iCalendar format.
|
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
|
.TP
|
||||||
.B export.yaml
|
.B export.yaml
|
||||||
Exports all tasks in YAML 1.1 format.
|
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
|
.TP
|
||||||
.B merge URL
|
.B merge URL
|
||||||
Merges two task databases by comparing the modifications that are stored in the
|
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
|
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
|
Displays all possible colors, a named sample, or a legend containing all
|
||||||
currently defined colors.
|
currently defined colors.
|
||||||
|
|
||||||
|
.TP
|
||||||
|
.B count [filter]
|
||||||
|
Displays only a count of tasks matching the filter.
|
||||||
|
|
||||||
.TP
|
.TP
|
||||||
.B version
|
.B version
|
||||||
Shows the taskwarrior version number
|
Shows the taskwarrior version number
|
||||||
@@ -215,16 +236,25 @@ Modifies the existing task with provided information.
|
|||||||
|
|
||||||
.TP
|
.TP
|
||||||
.B ID /from/to/
|
.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
|
.TP
|
||||||
.B ID /from/to/g
|
.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
|
.TP
|
||||||
.B edit ID
|
.B edit ID
|
||||||
Launches an editor to let you modify all aspects of a task directly.
|
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
|
.TP
|
||||||
.B append [tags] [attrs] description
|
.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).
|
taskrc(5).
|
||||||
|
|
||||||
.TP
|
.TP
|
||||||
.B active [tags] [attrs] [description]
|
.B active [filter]
|
||||||
Shows all tasks matching the specified criteria
|
Shows all tasks matching the filter that are started but not completed.
|
||||||
that are started but not completed.
|
|
||||||
|
|
||||||
.TP
|
.TP
|
||||||
.B all [tags] [attrs] [description]
|
.B all [filter]
|
||||||
Shows all tasks matching the specified criteria.
|
Shows all tasks matching the filter, including parents of recurring tasks.
|
||||||
|
|
||||||
.TP
|
.TP
|
||||||
.B completed [tags] [attrs] [description]
|
.B completed [filter]
|
||||||
Shows all tasks matching the specified criteria
|
Shows all tasks matching the filter that are completed.
|
||||||
that are completed.
|
|
||||||
|
|
||||||
.TP
|
.TP
|
||||||
.B minimal [tags] [attrs] [description]
|
.B minimal [filter]
|
||||||
Provides a minimal listing of tasks with specified criteria.
|
Provides a minimal listing of tasks matching the filter.
|
||||||
|
|
||||||
.TP
|
.TP
|
||||||
.B ls [tags] [attrs] [description]
|
.B ls [filter]
|
||||||
Provides a short listing of tasks with specified criteria.
|
Provides a short listing of tasks matching the filter.
|
||||||
|
|
||||||
.TP
|
.TP
|
||||||
.B list [tags] [attrs] [description]
|
.B list [filter]
|
||||||
Provides a more detailed listing of tasks with specified criteria.
|
Provides a more detailed listing of tasks matching the filter.
|
||||||
|
|
||||||
.TP
|
.TP
|
||||||
.B long [tags] [attrs] [description]
|
.B long [filter]
|
||||||
Provides the most detailed listing of tasks with specified criteria.
|
Provides the most detailed listing of tasks with filter.
|
||||||
|
|
||||||
.TP
|
.TP
|
||||||
.B newest [tags] [attrs] [description]
|
.B newest [filter]
|
||||||
Shows the newest tasks with specified criteria.
|
Shows the newest tasks with filter.
|
||||||
|
|
||||||
.TP
|
.TP
|
||||||
.B oldest [tags] [attrs] [description]
|
.B oldest [filter]
|
||||||
Shows the oldest tasks with specified criteria
|
Shows the oldest tasks with filter
|
||||||
|
|
||||||
.TP
|
.TP
|
||||||
.B overdue [tags] [attrs] [description]
|
.B overdue [filter]
|
||||||
Shows all incomplete tasks matching the specified criteria
|
Shows all incomplete tasks matching the filter
|
||||||
that are beyond their due date.
|
that are beyond their due date.
|
||||||
|
|
||||||
.TP
|
.TP
|
||||||
.B recurring [tags] [attrs] [description]
|
.B recurring [filter]
|
||||||
Shows all recurring tasks matching the specified criteria.
|
Shows all recurring tasks matching the filter.
|
||||||
|
|
||||||
.TP
|
.TP
|
||||||
.B waiting [tags] [attrs] [description]
|
.B waiting [filter]
|
||||||
Shows all waiting tasks matching the specified criteria.
|
Shows all waiting tasks matching the filter.
|
||||||
|
|
||||||
.TP
|
.TP
|
||||||
.B blocked [tags] [attrs] [description]
|
.B blocked [filter]
|
||||||
Shows all blocked tasks, that are dependent on other tasks.
|
Shows all blocked tasks, that are dependent on other tasks, matching the filter.
|
||||||
|
|
||||||
.TP
|
.TP
|
||||||
.B unblocked [tags] [attrs] [description]
|
.B unblocked [filter]
|
||||||
Shows all tasks that are not blocked by dependencies.
|
Shows all tasks that are not blocked by dependencies, matching the filter.
|
||||||
|
|
||||||
.TP
|
.TP
|
||||||
.B next [tags] [attrs] [description]
|
.B next [filter]
|
||||||
Shows all tasks with upcoming due dates matching the specified criteria.
|
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
|
.SH ATTRIBUTES AND METADATA
|
||||||
|
|
||||||
@@ -362,12 +411,18 @@ Specifies background color.
|
|||||||
Specifies the desired number of tasks a report should show, if a positive
|
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
|
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
|
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
|
.TP
|
||||||
.B wait:<wait-date>
|
.B wait:<wait-date>
|
||||||
Date until task becomes pending.
|
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
|
.SH ATTRIBUTE MODIFIERS
|
||||||
Attribute modifiers improve filters. Supported modifiers are:
|
Attribute modifiers improve filters. Supported modifiers are:
|
||||||
|
|
||||||
@@ -403,6 +458,86 @@ For example:
|
|||||||
task list due.before:eom priority.not:L
|
task list due.before:eom priority.not:L
|
||||||
.RE
|
.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
|
.SH SPECIFYING DATES AND FREQUENCIES
|
||||||
|
|
||||||
.SS DATES
|
.SS DATES
|
||||||
@@ -461,6 +596,15 @@ task ... due:eom
|
|||||||
.br
|
.br
|
||||||
task ... due:eoy
|
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
|
.TP
|
||||||
Next occurring weekday
|
Next occurring weekday
|
||||||
task ... due:fri
|
task ... due:fri
|
||||||
@@ -507,7 +651,8 @@ Every two years.
|
|||||||
|
|
||||||
|
|
||||||
.SH COMMAND ABBREVIATION
|
.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
|
.RS
|
||||||
$ task li
|
$ task li
|
||||||
@@ -546,6 +691,19 @@ as description:
|
|||||||
$ task add -- project:Home needs scheduling
|
$ task add -- project:Home needs scheduling
|
||||||
.RE
|
.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
|
.SH CONFIGURATION FILE AND OVERRIDE OPTIONS
|
||||||
Taskwarrior stores its configuration in a file in the user's home directory:
|
Taskwarrior stores its configuration in a file in the user's home directory:
|
||||||
~/.taskrc . The default configuration file can be overridden with
|
~/.taskrc . The default configuration file can be overridden with
|
||||||
@@ -593,7 +751,7 @@ can be configured in the configuration file.
|
|||||||
.SH "CREDITS & COPYRIGHTS"
|
.SH "CREDITS & COPYRIGHTS"
|
||||||
Taskwarrior was written by P. Beckingham <paul@beckingham.net>.
|
Taskwarrior was written by P. Beckingham <paul@beckingham.net>.
|
||||||
.br
|
.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
|
This man page was originally written by P.C. Shyamshankar, and has been modified
|
||||||
and supplemented by Federico Hernandez.
|
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
|
.SH NAME
|
||||||
taskrc \- Configuration file for the task(1) command
|
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
|
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.
|
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
|
.SS TERMINAL
|
||||||
.TP
|
.TP
|
||||||
.B curses=on
|
.B curses=on
|
||||||
@@ -155,6 +162,8 @@ using, for text wrapping.
|
|||||||
.TP
|
.TP
|
||||||
.B defaultwidth=80
|
.B defaultwidth=80
|
||||||
The width of tables used when ncurses support is not available. Defaults to 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
|
.TP
|
||||||
.B editor=vi
|
.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
|
found, it is used. Otherwise it will look for the $VISUAL or $EDITOR
|
||||||
environment variables, before it defaults to using "vi".
|
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
|
.SS MISCELLANEOUS
|
||||||
|
|
||||||
.TP
|
.TP
|
||||||
@@ -180,8 +196,9 @@ Controls some of the verbosity of taskwarrior.
|
|||||||
.TP
|
.TP
|
||||||
.B confirmation=yes
|
.B confirmation=yes
|
||||||
May be "yes" or "no", and determines whether taskwarrior will ask for
|
May be "yes" or "no", and determines whether taskwarrior will ask for
|
||||||
confirmation before deleting a task or doing bulk changes. The default value
|
confirmation before deleting a task, performing bulk changes, or the undo
|
||||||
is "yes".
|
command. The default value is "yes". Consider leaving this setting as "no",
|
||||||
|
for safety.
|
||||||
|
|
||||||
.TP
|
.TP
|
||||||
.B echo.command=yes
|
.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
|
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.
|
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
|
.TP
|
||||||
.B _forcecolor=no
|
.B _forcecolor=no
|
||||||
Taskwarrior shuts off color automatically when the output is not sent directly
|
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
|
values side-by-side in a table, or 'diff' style, which uses a format similar to
|
||||||
the 'diff' command.
|
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
|
.TP
|
||||||
.B debug=off
|
.B debug=off
|
||||||
Taskwarrior has a debug mode that causes diagnostic output to be displayed.
|
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"
|
A, B D, Y would do an output as "Friday, July 24, 2009"
|
||||||
.br
|
.br
|
||||||
vV a Y-M-D would do an output as "v30 Fri 2009-07-24"
|
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
|
||||||
.RE
|
.RE
|
||||||
|
|
||||||
@@ -436,6 +476,16 @@ is "sparse".
|
|||||||
The report to run when displaying the details of tasks with due date when
|
The report to run when displaying the details of tasks with due date when
|
||||||
running the "task calendar" command. The default value is "list".
|
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
|
.TP
|
||||||
.B calendar.holidays=full
|
.B calendar.holidays=full
|
||||||
If set to full running "task calendar" will display holidays in the calendar by
|
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
|
.B journal.time=no
|
||||||
May be yes or no, and determines whether the 'start' and 'stop' commands should
|
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
|
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
|
The text of the annotation that is recorded when executing the start command and
|
||||||
having set journal.time.
|
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
|
The text of the annotation that is recorded when executing the stop command and
|
||||||
having set journal.time.
|
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
|
.SS Holidays
|
||||||
Holidays are entered either directly in the .taskrc file or via an include file
|
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
|
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.
|
yellow bars.
|
||||||
.RE
|
.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
|
.TP
|
||||||
.B color.undo.before=red
|
.B color.undo.before=red
|
||||||
.RE
|
.RE
|
||||||
@@ -775,6 +845,13 @@ Provides a default priority for the
|
|||||||
.I task add
|
.I task add
|
||||||
command, if you don't specify one. The default is blank.
|
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
|
.TP
|
||||||
.B
|
.B
|
||||||
default.command=list
|
default.command=list
|
||||||
@@ -926,7 +1003,7 @@ Lists all tasks with upcoming due dates matching the specified criteria.
|
|||||||
.SH "CREDITS & COPYRIGHTS"
|
.SH "CREDITS & COPYRIGHTS"
|
||||||
Taskwarrior was written by P. Beckingham <paul@beckingham.net>.
|
Taskwarrior was written by P. Beckingham <paul@beckingham.net>.
|
||||||
.br
|
.br
|
||||||
Copyright (C) 2006 \- 2010 P. Beckingham
|
Copyright (C) 2006 \- 2011 P. Beckingham
|
||||||
|
|
||||||
This man page was originally written by Federico Hernandez.
|
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
|
# Commands (alphabetically)
|
||||||
| filter_command filter?
|
|
||||||
| id_command
|
|
||||||
| "export" file
|
|
||||||
| <id>
|
|
||||||
| <id> <substitution> ;
|
|
||||||
|
|
||||||
simple_command ::= "version" | "help" | "projects" | "tags" | "next" | "stats"
|
command_add ::= "add" ws+ task-elements ;
|
||||||
| "color" ;
|
|
||||||
|
|
||||||
filter_command ::= "summary" | "history" | "calendar" | "active" | "overdue"
|
command_annotate ::= "annotate" ws+ range ws+ words ;
|
||||||
| "oldest" | "newest" | "add" | "list" | "long" | "ls"
|
|
||||||
| "completed" ;
|
|
||||||
|
|
||||||
id_command ::= "delete" | "undelete" | "info" | "start" | "end" | "done"
|
command_append ::= "append" ws+ range ws+ words ;
|
||||||
| "undo" ;
|
|
||||||
|
|
||||||
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 ;
|
command_colors ::= "colors" ws+ "legend"
|
||||||
tag_remove ::= "-" word ;
|
| "colors" ws+ "sample"
|
||||||
attribute ::= word ":" word ;
|
| "colors"
|
||||||
word ::=
|
;
|
||||||
file ::=
|
|
||||||
id ::= digit+ ;
|
command_config ::= "config" ws+ word ws+ words
|
||||||
digit ::= "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" ;
|
| "config" ws+ word
|
||||||
substitution ::= "/" word+ "/" word* "/" "g"? ;
|
;
|
||||||
|
|
||||||
|
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 'include /usr/local/share/doc/task/rc/holidays-US.rc' >> x
|
||||||
echo 'color.alternate=' >> 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
|
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 'include /usr/local/share/doc/task/rc/holidays-US.rc' >> x
|
||||||
echo 'color.alternate=' >> 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
|
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 'include /usr/local/share/doc/task/rc/holidays-US.rc' >> x
|
||||||
echo 'color.alternate=' >> 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
|
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 'include /usr/local/share/doc/task/rc/holidays-US.rc' >> x
|
||||||
echo 'color.alternate=' >> 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
|
exit
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
#
|
#
|
||||||
# taskwarrior - a command line task list manager.
|
# taskwarrior - a command line task list manager.
|
||||||
#
|
#
|
||||||
# Copyright 2006 - 2010, Paul Beckingham.
|
# Copyright 2006 - 2011, Paul Beckingham, Federico Hernandez.
|
||||||
# All rights reserved.
|
# All rights reserved.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify it under
|
# 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.footnote=yellow
|
||||||
color.debug=yellow
|
color.debug=yellow
|
||||||
|
|
||||||
color.summary.bar=on green
|
color.summary.bar=black on green
|
||||||
color.summary.background=on black
|
color.summary.background=white on black
|
||||||
|
|
||||||
color.history.add=black on red
|
color.history.add=black on red
|
||||||
color.history.done=black on green
|
color.history.done=black on green
|
||||||
color.history.delete=black on yellow
|
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.before=red
|
||||||
color.undo.after=green
|
color.undo.after=green
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
#
|
#
|
||||||
# taskwarrior - a command line task list manager.
|
# taskwarrior - a command line task list manager.
|
||||||
#
|
#
|
||||||
# Copyright 2006 - 2010, Paul Beckingham.
|
# Copyright 2006 - 2011, Paul Beckingham, Federico Hernandez.
|
||||||
# All rights reserved.
|
# All rights reserved.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify it under
|
# 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.footnote=color3
|
||||||
color.debug=color3
|
color.debug=color3
|
||||||
|
|
||||||
color.summary.bar=on rgb141
|
color.summary.bar=black on rgb141
|
||||||
color.summary.background=on color0
|
color.summary.background=white on color0
|
||||||
|
|
||||||
color.history.add=color0 on rgb500
|
color.history.add=color0 on rgb500
|
||||||
color.history.done=color0 on rgb050
|
color.history.done=color0 on rgb050
|
||||||
color.history.delete=color0 on rgb550
|
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.before=color1
|
||||||
color.undo.after=color2
|
color.undo.after=color2
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
#
|
#
|
||||||
# taskwarrior - a command line task list manager.
|
# taskwarrior - a command line task list manager.
|
||||||
#
|
#
|
||||||
# Copyright 2006 - 2010, Paul Beckingham.
|
# Copyright 2006 - 2011, Paul Beckingham, Federico Hernandez.
|
||||||
# All rights reserved.
|
# All rights reserved.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify it under
|
# 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.footnote=rgb013
|
||||||
color.debug=rgb013
|
color.debug=rgb013
|
||||||
|
|
||||||
color.summary.bar=on rgb003
|
color.summary.bar=white on rgb003
|
||||||
color.summary.background=on color0
|
color.summary.background=white on color0
|
||||||
|
|
||||||
color.history.add=color0 on rgb015
|
color.history.add=color0 on rgb015
|
||||||
color.history.done=color0 on rgb025
|
color.history.done=color0 on rgb025
|
||||||
color.history.delete=color0 on rgb035
|
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.before=rgb013
|
||||||
color.undo.after=rgb035
|
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.
|
# taskwarrior - a command line task list manager.
|
||||||
#
|
#
|
||||||
# Copyright 2006 - 2010, Paul Beckingham.
|
# Copyright 2006 - 2011, Paul Beckingham, Federico Hernandez.
|
||||||
# All rights reserved.
|
# All rights reserved.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify it under
|
# 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.footnote=rgb031
|
||||||
color.debug=rgb031
|
color.debug=rgb031
|
||||||
|
|
||||||
color.summary.bar=on rgb030
|
color.summary.bar=white on rgb030
|
||||||
color.summary.background=on color0
|
color.summary.background=white on color0
|
||||||
|
|
||||||
color.history.add=color0 on rgb010
|
color.history.add=color0 on rgb010
|
||||||
color.history.done=color0 on rgb030
|
color.history.done=color0 on rgb030
|
||||||
color.history.delete=color0 on rgb050
|
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.before=rgb031
|
||||||
color.undo.after=rgb053
|
color.undo.after=rgb053
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
#
|
#
|
||||||
# taskwarrior - a command line task list manager.
|
# taskwarrior - a command line task list manager.
|
||||||
#
|
#
|
||||||
# Copyright 2006 - 2010, Paul Beckingham.
|
# Copyright 2006 - 2011, Paul Beckingham, Federico Hernandez.
|
||||||
# All rights reserved.
|
# All rights reserved.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify it under
|
# 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.footnote=rgb100
|
||||||
color.debug=rgb100
|
color.debug=rgb100
|
||||||
|
|
||||||
color.summary.bar=on rgb300
|
color.summary.bar=white on rgb300
|
||||||
color.summary.background=on color0
|
color.summary.background=white on color0
|
||||||
|
|
||||||
color.history.add=color0 on rgb100
|
color.history.add=color0 on rgb100
|
||||||
color.history.done=color0 on rgb300
|
color.history.done=color0 on rgb300
|
||||||
color.history.delete=color0 on rgb500
|
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.before=rgb301
|
||||||
color.undo.after=rgb503
|
color.undo.after=rgb503
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
#
|
#
|
||||||
# taskwarrior - a command line task list manager.
|
# taskwarrior - a command line task list manager.
|
||||||
#
|
#
|
||||||
# Copyright 2010, Kathryn Andersen
|
# Copyright 2010 - 2011, Kathryn Andersen
|
||||||
# All rights reserved.
|
# All rights reserved.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify it under
|
# 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.footnote=rgb013
|
||||||
color.debug=rgb013
|
color.debug=rgb013
|
||||||
|
|
||||||
color.summary.bar=on rgb103
|
color.summary.bar=white on rgb103
|
||||||
color.summary.background=on color0
|
color.summary.background=white on color0
|
||||||
|
|
||||||
color.history.add=color0 on rgb105
|
color.history.add=color0 on rgb105
|
||||||
color.history.done=color0 on rgb205
|
color.history.done=color0 on rgb205
|
||||||
color.history.delete=color0 on rgb305
|
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.before=rgb103
|
||||||
color.undo.after=rgb305
|
color.undo.after=rgb305
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
#
|
#
|
||||||
# taskwarrior - a command line task list manager.
|
# taskwarrior - a command line task list manager.
|
||||||
#
|
#
|
||||||
# Copyright 2010, Kathryn Andersen
|
# Copyright 2010 - 2011, Kathryn Andersen
|
||||||
# All rights reserved.
|
# All rights reserved.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify it under
|
# 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.footnote=rgb031
|
||||||
color.debug=rgb031
|
color.debug=rgb031
|
||||||
|
|
||||||
color.summary.bar=on rgb030
|
color.summary.bar=white on rgb030
|
||||||
color.summary.background=on color0
|
color.summary.background=white on color0
|
||||||
|
|
||||||
color.history.add=color0 on rgb010
|
color.history.add=color0 on rgb010
|
||||||
color.history.done=color0 on rgb030
|
color.history.done=color0 on rgb030
|
||||||
color.history.delete=color0 on rgb050
|
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.before=rgb031
|
||||||
color.undo.after=rgb053
|
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.
|
# taskwarrior - a command line task list manager.
|
||||||
#
|
#
|
||||||
# Copyright 2010, Cory Donnelly.
|
# Copyright 2010 - 2011, Cory Donnelly.
|
||||||
# All rights reserved.
|
# All rights reserved.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify it under
|
# This program is free software; you can redistribute it and/or modify it under
|
||||||
@@ -29,20 +29,6 @@
|
|||||||
|
|
||||||
calendar.holidays=sparse
|
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
|
# 2011
|
||||||
holiday.newyearsday.name=New Year's Day
|
holiday.newyearsday.name=New Year's Day
|
||||||
holiday.newyearsday.date=20110101
|
holiday.newyearsday.date=20110101
|
||||||
@@ -58,19 +44,16 @@ holiday.canadaday.name=Canada Day
|
|||||||
holiday.canadaday.date=20110701
|
holiday.canadaday.date=20110701
|
||||||
holiday.firstmondayofaugust.name=First Monday of August
|
holiday.firstmondayofaugust.name=First Monday of August
|
||||||
holiday.firstmondayofaugust.date=20110801
|
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.
|
# taskwarrior - a command line task list manager.
|
||||||
#
|
#
|
||||||
# Copyright 2010, Federico Hernandez.
|
# Copyright 2010 - 2011, Federico Hernandez.
|
||||||
# All rights reserved.
|
# All rights reserved.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify it under
|
# This program is free software; you can redistribute it and/or modify it under
|
||||||
@@ -29,22 +29,6 @@
|
|||||||
|
|
||||||
calendar.holidays=sparse
|
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
|
# 2011
|
||||||
holiday.neujahr.name=Neujahr
|
holiday.neujahr.name=Neujahr
|
||||||
holiday.neujahr.date=20110101
|
holiday.neujahr.date=20110101
|
||||||
@@ -70,18 +54,17 @@ holiday.mariahimmelfahrt.name=Mariä Himmelfahrt (SL)
|
|||||||
holiday.mariahimmelfahrt.date=20110815
|
holiday.mariahimmelfahrt.date=20110815
|
||||||
holiday.einheit.name=Tag der Deutschen Einheit
|
holiday.einheit.name=Tag der Deutschen Einheit
|
||||||
holiday.einheit.date=20111003
|
holiday.einheit.date=20111003
|
||||||
|
holiday.reformationstag.name=Reformationstag (BB,MV,SN,ST,TH)
|
||||||
#holiday.reformationstag.name=Reformationstag (BB,MV,SN,ST,TH)
|
holiday.reformationstag.date=20111031
|
||||||
#holiday.reformationstag.date=20111031
|
holiday.allerheiligen.name=Allerheiligen (BW,BY,NRW,RP,SL)
|
||||||
#holiday.allerheiligen.name=Allerheiligen (BW,BY,NRW,RP,SL)
|
holiday.allerheiligen.date=20111101
|
||||||
#holiday.allerheiligen.date=20111101
|
holiday.bussundbettag.name=Buss und Bettag (SN)
|
||||||
#holiday.bussundbettag.name=Buss und Bettag (SN)
|
holiday.bussundbettag.date=20111116
|
||||||
#holiday.bussundbettag.date=20111116
|
holiday.heiligabend.name=Heilig Abend
|
||||||
#holiday.heiligabend.name=Heilig Abend
|
holiday.heiligabend.date=20111224
|
||||||
#holiday.heiligabend.date=20111224
|
holiday.weihnachtstag.name=Weihnachtstag
|
||||||
#holiday.weihnachtstag.name=Weihnachtstag
|
holiday.weihnachtstag.date=20111225
|
||||||
#holiday.weihnachtstag.date=20111225
|
holiday.zweiterweihnachtstag.name=Zweiter Weihnachtstag
|
||||||
#holiday.zweiterweihnachtstag.name=Zweiter Weihnachtstag
|
holiday.zweiterweihnachtstag.date=20111226
|
||||||
#holiday.zweiterweihnachtstag.date=20111226
|
holiday.sylvester.name=Sylvester
|
||||||
#holiday.sylvester.name=Sylvester
|
holiday.sylvester.date=20111231
|
||||||
#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.
|
# taskwarrior - a command line task list manager.
|
||||||
#
|
#
|
||||||
# Copyright 2010, Federico Hernandez.
|
# Copyright 2010 - 2011, Federico Hernandez.
|
||||||
# All rights reserved.
|
# All rights reserved.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify it under
|
# This program is free software; you can redistribute it and/or modify it under
|
||||||
@@ -29,22 +29,6 @@
|
|||||||
|
|
||||||
calendar.holidays=sparse
|
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
|
# 2011
|
||||||
holiday.anonuevo.name=Año Nuevo
|
holiday.anonuevo.name=Año Nuevo
|
||||||
holiday.anonuevo.date=20110101
|
holiday.anonuevo.date=20110101
|
||||||
@@ -56,18 +40,17 @@ holiday.trabajo.name=Fiesta del Trabajo
|
|||||||
holiday.trabajo.date=20110501
|
holiday.trabajo.date=20110501
|
||||||
holiday.virgen.name=Asunción de la Virgen
|
holiday.virgen.name=Asunción de la Virgen
|
||||||
holiday.virgen.date=20110815
|
holiday.virgen.date=20110815
|
||||||
|
holiday.fiestanacional.name=Fiesta Nacional de España
|
||||||
#holiday.fiestanacional.name=Fiesta Nacional de España
|
holiday.fiestanacional.date=20111012
|
||||||
#holiday.fiestanacional.date=20111012
|
holiday.santos.name=Dia de todos los Santos
|
||||||
#holiday.santos.name=Dia de todos los Santos
|
holiday.santos.date=20111101
|
||||||
#holiday.santos.date=20111101
|
holiday.constitucion.name=Dia de la Constitución
|
||||||
#holiday.constitucion.name=Dia de la Constitución
|
holiday.constitucion.date=20111206
|
||||||
#holiday.constitucion.date=20111206
|
holiday.concepcion.name=Inmaculada Concepción
|
||||||
#holiday.concepcion.name=Inmaculada Concepción
|
holiday.concepcion.date=20111208
|
||||||
#holiday.concepcion.date=20111208
|
holiday.nochebuena.name=Noche Buena
|
||||||
#holiday.nochebuena.name=Noche Buena
|
holiday.nochebuena.date=20111224
|
||||||
#holiday.nochebuena.date=20111224
|
holiday.navidad.name=Navidad
|
||||||
#holiday.navidad.name=Navidad
|
holiday.navidad.date=20111225
|
||||||
#holiday.navidad.date=20111225
|
holiday.nochevieja.name=Noche Vieja
|
||||||
#holiday.nochevieja.name=Noche Vieja
|
holiday.nochevieja.date=20111231
|
||||||
#holiday.nochevieja.date=20111231
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
#
|
#
|
||||||
# taskwarrior - a command line task list manager.
|
# taskwarrior - a command line task list manager.
|
||||||
#
|
#
|
||||||
# Copyright 2010, Paul Beckingham.
|
# Copyright 2010 - 2011, Paul Beckingham, Federico Hernandez.
|
||||||
# All rights reserved.
|
# All rights reserved.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify it under
|
# This program is free software; you can redistribute it and/or modify it under
|
||||||
@@ -29,14 +29,6 @@
|
|||||||
|
|
||||||
calendar.holidays=sparse
|
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
|
# 2011
|
||||||
holiday.jourdelan.name=Jour de l'an
|
holiday.jourdelan.name=Jour de l'an
|
||||||
holiday.jourdelan.date=20110101
|
holiday.jourdelan.date=20110101
|
||||||
@@ -52,11 +44,10 @@ holiday.bastille.name=Fête nationale
|
|||||||
holiday.bastille.date=20110714
|
holiday.bastille.date=20110714
|
||||||
holiday.assomption.name=Assomption
|
holiday.assomption.name=Assomption
|
||||||
holiday.assomption.date=20110815
|
holiday.assomption.date=20110815
|
||||||
|
holiday.toussaint.name=La Toussaint
|
||||||
#holiday.toussaint.name=La Toussaint
|
holiday.toussaint.date=20111101
|
||||||
#holiday.toussaint.date=20111101
|
holiday.armistice.name=Jour d'armistice
|
||||||
#holiday.armistice.name=Jour d'armistice
|
holiday.armistice.date=20111111
|
||||||
#holiday.armistice.date=20111111
|
holiday.noël.name=Noël
|
||||||
#holiday.noël.name=Noël
|
holiday.noël.date=20111225
|
||||||
#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.
|
# taskwarrior - a command line task list manager.
|
||||||
#
|
#
|
||||||
# Copyright 2010, Charles T. Yun
|
# Copyright 2010 - 2011, Charles T. Yun
|
||||||
# All rights reserved.
|
# All rights reserved.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify it under
|
# This program is free software; you can redistribute it and/or modify it under
|
||||||
@@ -29,16 +29,6 @@
|
|||||||
|
|
||||||
calendar.holidays=sparse
|
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
|
# 2011
|
||||||
holiday.nieuwjaar.name=Nieuwjaar
|
holiday.nieuwjaar.name=Nieuwjaar
|
||||||
holiday.nieuwjaar.date=20110101
|
holiday.nieuwjaar.date=20110101
|
||||||
@@ -60,14 +50,14 @@ holiday.pinksteren.name= Pinksteren
|
|||||||
holiday.pinksteren.date=20110612
|
holiday.pinksteren.date=20110612
|
||||||
holiday.pinksteren.name=Tweede Pinksterdag
|
holiday.pinksteren.name=Tweede Pinksterdag
|
||||||
holiday.pinksteren.date=20110613
|
holiday.pinksteren.date=20110613
|
||||||
#holiday.sinterklaas.name=Sinterklaas
|
holiday.sinterklaas.name=Sinterklaas
|
||||||
#holiday.sinterklaas.date=20111205
|
holiday.sinterklaas.date=20111205
|
||||||
#holiday.koninkrijksdag.name=Koninkrijksdag
|
holiday.koninkrijksdag.name=Koninkrijksdag
|
||||||
#holiday.koninkrijksdag.date=20111215
|
holiday.koninkrijksdag.date=20111215
|
||||||
#holiday.kerstmis.name=Kerstmis
|
holiday.kerstmis.name=Kerstmis
|
||||||
#holiday.kerstmis.date=20111225
|
holiday.kerstmis.date=20111225
|
||||||
#holiday.kerstmis.name=Tweede Kerstdag
|
holiday.kerstmis.name=Tweede Kerstdag
|
||||||
#holiday.kerstmis.date=20111226
|
holiday.kerstmis.date=20111226
|
||||||
|
|
||||||
# 2012
|
# 2012
|
||||||
#holiday.nieuwjaar.name=Nieuwjaar
|
#holiday.nieuwjaar.name=Nieuwjaar
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
#
|
#
|
||||||
# taskwarrior - a command line task list manager.
|
# taskwarrior - a command line task list manager.
|
||||||
#
|
#
|
||||||
# Copyright 2010, Jostein Berntsen
|
# Copyright 2010 - 2011, Jostein Berntsen
|
||||||
# All rights reserved.
|
# All rights reserved.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify it under
|
# This program is free software; you can redistribute it and/or modify it under
|
||||||
@@ -29,16 +29,6 @@
|
|||||||
|
|
||||||
calendar.holidays=sparse
|
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
|
# 2011
|
||||||
holiday.nyttårsdag.name=Nyttårsdag
|
holiday.nyttårsdag.name=Nyttårsdag
|
||||||
holiday.nyttårsdag.date=20110101
|
holiday.nyttårsdag.date=20110101
|
||||||
@@ -66,14 +56,14 @@ holiday.pinsedag.name=Pinsedag
|
|||||||
holiday.pinsedag.date=20110612
|
holiday.pinsedag.date=20110612
|
||||||
holiday.pinsedag2.name=Pinsedag
|
holiday.pinsedag2.name=Pinsedag
|
||||||
holiday.pinsedag2.date=20110613
|
holiday.pinsedag2.date=20110613
|
||||||
#holiday.julaften.name=Julaften
|
holiday.julaften.name=Julaften
|
||||||
#holiday.julaften.date=20111224
|
holiday.julaften.date=20111224
|
||||||
#holiday.juledag.name=Juledag
|
holiday.juledag.name=Juledag
|
||||||
#holiday.juledag.date=20111225
|
holiday.juledag.date=20111225
|
||||||
#holiday.juledag2.name=Juledag
|
holiday.juledag2.name=Juledag
|
||||||
#holiday.juledag2.date=20111226
|
holiday.juledag2.date=20111226
|
||||||
#holiday.nyttårsaften.name=Nyttårsaften
|
holiday.nyttårsaften.name=Nyttårsaften
|
||||||
#holiday.nyttårsaften.date=20111231
|
holiday.nyttårsaften.date=20111231
|
||||||
|
|
||||||
# 2012
|
# 2012
|
||||||
#holiday.nyttårsdag.name=Nyttårsdag
|
#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.
|
# taskwarrior - a command line task list manager.
|
||||||
#
|
#
|
||||||
# Copyright 2010, Federico Hernandez.
|
# Copyright 2010 - 2011, Federico Hernandez.
|
||||||
# All rights reserved.
|
# All rights reserved.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify it under
|
# This program is free software; you can redistribute it and/or modify it under
|
||||||
@@ -29,18 +29,6 @@
|
|||||||
|
|
||||||
calendar.holidays=sparse
|
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
|
# 2011
|
||||||
holiday.nyårsdagen.name=Nyårsdagen
|
holiday.nyårsdagen.name=Nyårsdagen
|
||||||
holiday.nyårsdagen.date=20110101
|
holiday.nyårsdagen.date=20110101
|
||||||
@@ -66,14 +54,13 @@ holiday.midsommarafton.name=Midsommarafton
|
|||||||
holiday.midsommarafton.date=20110624
|
holiday.midsommarafton.date=20110624
|
||||||
holiday.midsommardagen.name=Midsommardagen
|
holiday.midsommardagen.name=Midsommardagen
|
||||||
holiday.midsommardagen.date=20110625
|
holiday.midsommardagen.date=20110625
|
||||||
|
holiday.allahelgonsdag.name=Alla Helgons Dag
|
||||||
# holiday.allahelgonsdag.name=Alla Helgons Dag
|
holiday.allahelgonsdag.date=20111105
|
||||||
# holiday.allahelgonsdag.date=20111105
|
holiday.julafton.name=Julafton
|
||||||
# holiday.julafton.name=Julafton
|
holiday.julafton.date=20111224
|
||||||
# holiday.julafton.date=20111224
|
holiday.juldagen.name=Juldagen
|
||||||
# holiday.juldagen.name=Juldagen
|
holiday.juldagen.date=20111225
|
||||||
# holiday.juldagen.date=20111225
|
holiday.annandagjul.name=Annandag jul
|
||||||
# holiday.annandagjul.name=Annandag jul
|
holiday.annandagjul.date=20111226
|
||||||
# holiday.annandagjul.date=20111226
|
holiday.nyårsafton.name=Nyårsafton
|
||||||
# holiday.nyårsafton.name=Nyårsafton
|
holiday.nyårsafton.date=20111231
|
||||||
# holiday.nyårsafton.date=20111231
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
#
|
#
|
||||||
# taskwarrior - a command line task list manager.
|
# taskwarrior - a command line task list manager.
|
||||||
#
|
#
|
||||||
# Copyright 2010, Federico Hernandez.
|
# Copyright 2010 - 2011, Federico Hernandez.
|
||||||
# All rights reserved.
|
# All rights reserved.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify it under
|
# This program is free software; you can redistribute it and/or modify it under
|
||||||
@@ -29,12 +29,6 @@
|
|||||||
|
|
||||||
calendar.holidays=sparse
|
calendar.holidays=sparse
|
||||||
|
|
||||||
# 2010
|
|
||||||
holiday.christmas.name=Christmas Day
|
|
||||||
holiday.christmas.date=20101225
|
|
||||||
holiday.boxingday.name=Boxing Day
|
|
||||||
holiday.boxingday.date=20101226
|
|
||||||
|
|
||||||
# 2011
|
# 2011
|
||||||
holiday.newyear.name=New Year's Day
|
holiday.newyear.name=New Year's Day
|
||||||
holiday.newyear.date=20110101
|
holiday.newyear.date=20110101
|
||||||
@@ -48,9 +42,8 @@ holiday.spring.name=Spring Bank Holiday
|
|||||||
holiday.spring.name=20110530
|
holiday.spring.name=20110530
|
||||||
holiday.august.name=August Bank Holiday
|
holiday.august.name=August Bank Holiday
|
||||||
holiday.august.name=20110829
|
holiday.august.name=20110829
|
||||||
|
holiday.christmas.name=Christmas Day
|
||||||
#holiday.christmas.name=Christmas Day
|
holiday.christmas.date=20111225
|
||||||
#holiday.christmas.date=20111225
|
holiday.boxingday.name=Boxing Day
|
||||||
#holiday.boxingday.name=Boxing Day
|
holiday.boxingday.date=20111226
|
||||||
#holiday.boxingday.date=20111226
|
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
#
|
#
|
||||||
# taskwarrior - a command line task list manager.
|
# taskwarrior - a command line task list manager.
|
||||||
#
|
#
|
||||||
# Copyright 2010, Federico Hernandez.
|
# Copyright 2010 - 2011, Federico Hernandez.
|
||||||
# All rights reserved.
|
# All rights reserved.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify it under
|
# This program is free software; you can redistribute it and/or modify it under
|
||||||
@@ -29,20 +29,6 @@
|
|||||||
|
|
||||||
calendar.holidays=sparse
|
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
|
# 2011
|
||||||
holiday.newyearsday.name=New Year's Day
|
holiday.newyearsday.name=New Year's Day
|
||||||
holiday.newyearsday.date=20110101
|
holiday.newyearsday.date=20110101
|
||||||
@@ -56,17 +42,16 @@ holiday.memorialday.name=Memorial Day
|
|||||||
holiday.memorialday.date=20110530
|
holiday.memorialday.date=20110530
|
||||||
holiday.independenceday.name=Independence Day
|
holiday.independenceday.name=Independence Day
|
||||||
holiday.independenceday.date=20110704
|
holiday.independenceday.date=20110704
|
||||||
|
holiday.laborday.name=Labor Day
|
||||||
# holiday.laborday.name=Labor Day
|
holiday.laborday.date=20110905
|
||||||
# holiday.laborday.date=20110905
|
holiday.columbusday.name=Columbus Day
|
||||||
# holiday.columbusday.name=Columbus Day
|
holiday.columbusday.date=20111010
|
||||||
# holiday.columbusday.date=20111010
|
holiday.veteransdays.name=Veterans Day
|
||||||
# holiday.veteransdays.name=Veterans Day
|
holiday.veteransdays.date=20111111
|
||||||
# holiday.veteransdays.date=20111111
|
holiday.thanksgiving.name=Thanksgiving Day
|
||||||
# holiday.thanksgiving.name=Thanksgiving Day
|
holiday.thanksgiving.date=20111124
|
||||||
# holiday.thanksgiving.date=20111124
|
holiday.christmasday.name=Christmas Day
|
||||||
# holiday.christmasday.name=Christmas Day
|
holiday.christmasday.date=20111225
|
||||||
# holiday.christmasday.date=20111225
|
holiday.newyearseve.name=New Year's Eve
|
||||||
# holiday.newyearseve.name=New Year's Eve
|
holiday.newyearseve.date=20111231
|
||||||
# holiday.newyearseve.date=20111231
|
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
#
|
#
|
||||||
# taskwarrior - a command line task list manager.
|
# taskwarrior - a command line task list manager.
|
||||||
#
|
#
|
||||||
# Copyright 2006 - 2010, Paul Beckingham.
|
# Copyright 2006 - 2011, Paul Beckingham, Federico Hernandez.
|
||||||
# All rights reserved.
|
# All rights reserved.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify it under
|
# 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.footnote=blue
|
||||||
color.debug=blue
|
color.debug=blue
|
||||||
|
|
||||||
color.summary.bar=on green
|
color.summary.bar=black on green
|
||||||
color.summary.background=on black
|
color.summary.background=white on black
|
||||||
|
|
||||||
color.history.add=black on red
|
color.history.add=black on red
|
||||||
color.history.done=black on green
|
color.history.done=black on green
|
||||||
color.history.delete=black on yellow
|
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.before=red
|
||||||
color.undo.after=green
|
color.undo.after=green
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
#
|
#
|
||||||
# taskwarrior - a command line task list manager.
|
# taskwarrior - a command line task list manager.
|
||||||
#
|
#
|
||||||
# Copyright 2006 - 2010, Paul Beckingham.
|
# Copyright 2006 - 2011, Paul Beckingham, Federico Hernandez.
|
||||||
# All rights reserved.
|
# All rights reserved.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify it under
|
# 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.footnote=color4
|
||||||
color.debug=color4
|
color.debug=color4
|
||||||
|
|
||||||
color.summary.bar=on rgb141
|
color.summary.bar=black on rgb141
|
||||||
color.summary.background=on color0
|
color.summary.background=white on color0
|
||||||
|
|
||||||
color.history.add=color0 on rgb500
|
color.history.add=color0 on rgb500
|
||||||
color.history.done=color0 on rgb050
|
color.history.done=color0 on rgb050
|
||||||
color.history.delete=color0 on rgb550
|
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.before=color1
|
||||||
color.undo.after=color2
|
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
|
105 Inverted sequence range high-low
|
||||||
106 ID Range too large
|
106 ID Range too large
|
||||||
107 Not a sequence.
|
107 Not a sequence.
|
||||||
108 Interactive mode is only available when built with ncurses support.
|
|
||||||
109 Empty record in input
|
109 Empty record in input
|
||||||
110 Unrecognized characters at end of line
|
110 Unrecognized characters at end of line
|
||||||
111 Record not recognized as format 4
|
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
|
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.
|
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
|
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...
|
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):
|
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:
|
and change it to:
|
||||||
|
|
||||||
LFLAGS = -L/usr/local/lib -lncurses
|
LFLAGS = -L/usr/local/lib
|
||||||
|
|
||||||
Now build the unit tests:
|
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
|
$ /usr/local/bin/task version
|
||||||
|
|
||||||
task 1.9.2 built for darwin-ncurses
|
task 1.9.4 built for darwin
|
||||||
Copyright (C) 2006 - 2010 P. Beckingham, F. Hernandez.
|
Copyright (C) 2006 - 2011 P. Beckingham, F. Hernandez.
|
||||||
|
|
||||||
Taskwarrior may be copied only under the terms of the GNU General Public
|
Taskwarrior may be copied only under the terms of the GNU General Public
|
||||||
License, which may be found in the taskwarrior source kit.
|
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
|
$ 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
|
The man page should list 1.9.2 as the version number, but the date will be
|
||||||
different.
|
different.
|
||||||
|
|||||||
@@ -32,10 +32,10 @@ Upstream Authors:
|
|||||||
|
|
||||||
Copyright:
|
Copyright:
|
||||||
|
|
||||||
Copyright 2006 - 2010, Paul Beckingham
|
Copyright 2006 - 2011, Paul Beckingham
|
||||||
Copyright 2009 - 2010 Federico Hernandez
|
Copyright 2009 - 2011 Federico Hernandez
|
||||||
Copyright 2006 - 2010, Paul Beckingham, Federico Hernandez
|
Copyright 2006 - 2011, Paul Beckingham, Federico Hernandez
|
||||||
Copyright 2009 - 2010 John Florian
|
Copyright 2009 - 2011 John Florian
|
||||||
Copyright 2009 P.C. Shyamshankar
|
Copyright 2009 P.C. Shyamshankar
|
||||||
Copyright © 1994–2008 Lua.org, PUC-Rio
|
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:
|
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.
|
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
|
# bash completion support for taskwarrior
|
||||||
#
|
#
|
||||||
# Copyright 2009-2010 Federico Hernandez
|
# Copyright 2009 - 2011 Federico Hernandez
|
||||||
# All rights reserved.
|
# All rights reserved.
|
||||||
#
|
#
|
||||||
# This script is part of the taskwarrior project.
|
# This script is part of the taskwarrior project.
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
# * Attribute names and modifiers
|
# * Attribute names and modifiers
|
||||||
#
|
#
|
||||||
# License:
|
# 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
|
# 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
|
# 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
|
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.
|
and are available under the GNU Public License version 2 or later.
|
||||||
For the full text of this license, see COPYING.
|
For the full text of this license, see COPYING.
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
" Maintainer: John Florian <jflorian@doubledog.org>
|
" Maintainer: John Florian <jflorian@doubledog.org>
|
||||||
" Updated: Thu Dec 10 18:28:26 EST 2009
|
" 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.
|
" This file is available under the GNU Public License version 2 or later.
|
||||||
" For the full text of this license, see COPYING.
|
" For the full text of this license, see COPYING.
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
" Maintainer: John Florian <jflorian@doubledog.org>
|
" Maintainer: John Florian <jflorian@doubledog.org>
|
||||||
" Updated: Wed Jul 8 19:46:20 EDT 2009
|
" 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.
|
" This file is available under the GNU Public License version 2 or later.
|
||||||
" For the full text of this license, see COPYING.
|
" For the full text of this license, see COPYING.
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
" Maintainer: John Florian <jflorian@doubledog.org>
|
" Maintainer: John Florian <jflorian@doubledog.org>
|
||||||
" Updated: Wed Jul 8 19:46:32 EDT 2009
|
" 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.
|
" This file is available under the GNU Public License version 2 or later.
|
||||||
" For the full text of this license, see COPYING.
|
" For the full text of this license, see COPYING.
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
" Maintainer: John Florian <jflorian@doubledog.org>
|
" Maintainer: John Florian <jflorian@doubledog.org>
|
||||||
" Updated: Sat Feb 20 14:14:44 EST 2010
|
" 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.
|
" This file is available under the GNU Public License version 2 or later.
|
||||||
" For the full text of this license, see COPYING.
|
" For the full text of this license, see COPYING.
|
||||||
|
|||||||
@@ -1,13 +1,8 @@
|
|||||||
#compdef task
|
#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
|
# zsh completion for taskwarrior
|
||||||
#
|
#
|
||||||
|
# Copyright 2010 - 2011 Johannes Schlatow
|
||||||
# Copyright 2009 P.C. Shyamshankar
|
# Copyright 2009 P.C. Shyamshankar
|
||||||
# All rights reserved.
|
# All rights reserved.
|
||||||
#
|
#
|
||||||
@@ -32,9 +27,54 @@
|
|||||||
# 02110-1301
|
# 02110-1301
|
||||||
# USA
|
# USA
|
||||||
#
|
#
|
||||||
|
typeset -g _task_cmds _task_projects _task_tags _task_config _task_modifiers
|
||||||
typeset -g _task_cmds
|
_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_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() {
|
_task() {
|
||||||
_arguments -s -S \
|
_arguments -s -S \
|
||||||
@@ -42,18 +82,196 @@ _task() {
|
|||||||
return 0
|
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] )) ||
|
(( $+functions[_task_commands] )) ||
|
||||||
_task_commands() {
|
_task_commands() {
|
||||||
local cmd ret=1
|
local cmd ret=1
|
||||||
if (( CURRENT == 1 )); then
|
if (( CURRENT == 1 )); then
|
||||||
_describe -t commands 'task command' _task_cmds
|
# update IDs
|
||||||
else
|
_task_zshids=( ${(f)"$(task _zshids)"} )
|
||||||
local curcontext="${curcontext}"
|
|
||||||
cmd="${_task_cmds[(r)$words[1]:*]%%:*}"
|
_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
|
if (( $#cmd )); then
|
||||||
curcontext="${curcontext%:*:*}:task-${cmd}"
|
# curcontext="${curcontext%:*:*}:task-${cmd}"
|
||||||
_call_function ret _task_${cmd} || _message "No command remaining."
|
|
||||||
|
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
|
else
|
||||||
_message "Unknown subcommand ${cmd}"
|
_message "Unknown subcommand ${cmd}"
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
// Taskwarrior Lua API
|
// Taskwarrior Lua API
|
||||||
//
|
//
|
||||||
// Copyright 2006 - 2010, Paul Beckingham.
|
// Copyright 2006 - 2011, Paul Beckingham, Federico Hernandez.
|
||||||
// All rights reserved.
|
// All rights reserved.
|
||||||
//
|
//
|
||||||
// This program is free software; you can redistribute it and/or modify it under
|
// 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
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (name == "ncurses")
|
|
||||||
{
|
|
||||||
#ifdef HAVE_NCURSES
|
|
||||||
value = true;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
else if (name == "lua")
|
else if (name == "lua")
|
||||||
value = true;
|
value = true;
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
// taskwarrior - a command line task list manager.
|
// taskwarrior - a command line task list manager.
|
||||||
//
|
//
|
||||||
// Copyright 2006 - 2010, Paul Beckingham.
|
// Copyright 2006 - 2011, Paul Beckingham, Federico Hernandez.
|
||||||
// All rights reserved.
|
// All rights reserved.
|
||||||
//
|
//
|
||||||
// This program is free software; you can redistribute it and/or modify it under
|
// This program is free software; you can redistribute it and/or modify it under
|
||||||
@@ -27,7 +27,7 @@
|
|||||||
#ifndef INCLUDED_API
|
#ifndef INCLUDED_API
|
||||||
#define INCLUDED_API
|
#define INCLUDED_API
|
||||||
|
|
||||||
#include "auto.h"
|
#include "../auto.h"
|
||||||
#ifdef HAVE_LIBLUA
|
#ifdef HAVE_LIBLUA
|
||||||
|
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|||||||
297
src/Att.cpp
297
src/Att.cpp
@@ -1,7 +1,7 @@
|
|||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
// taskwarrior - a command line task list manager.
|
// taskwarrior - a command line task list manager.
|
||||||
//
|
//
|
||||||
// Copyright 2006 - 2010, Paul Beckingham.
|
// Copyright 2006 - 2011, Paul Beckingham, Federico Hernandez.
|
||||||
// All rights reserved.
|
// All rights reserved.
|
||||||
//
|
//
|
||||||
// This program is free software; you can redistribute it and/or modify it under
|
// This program is free software; you can redistribute it and/or modify it under
|
||||||
@@ -29,13 +29,15 @@
|
|||||||
#include <sstream>
|
#include <sstream>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include "text.h"
|
#include <text.h>
|
||||||
#include "Color.h"
|
#include <rx.h>
|
||||||
#include "util.h"
|
#include <Color.h>
|
||||||
#include "Date.h"
|
#include <util.h>
|
||||||
#include "Duration.h"
|
#include <Date.h>
|
||||||
#include "Context.h"
|
#include <Duration.h>
|
||||||
#include "Att.h"
|
#include <Context.h>
|
||||||
|
#include <Att.h>
|
||||||
|
#include <main.h>
|
||||||
|
|
||||||
extern Context context;
|
extern Context context;
|
||||||
|
|
||||||
@@ -52,6 +54,7 @@ static const char* internalNames[] =
|
|||||||
"status",
|
"status",
|
||||||
"description",
|
"description",
|
||||||
"tags",
|
"tags",
|
||||||
|
"urgency",
|
||||||
// Note that annotations are not listed.
|
// 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_MODIFIABLE_NAMES (sizeof (modifiableNames) / sizeof (modifiableNames[0]))
|
||||||
#define NUM_MODIFIER_NAMES (sizeof (modifierNames) / sizeof (modifierNames[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 ()
|
Att::Att ()
|
||||||
: mName ("")
|
: mName ("")
|
||||||
@@ -186,14 +205,18 @@ bool Att::valid (const std::string& input) const
|
|||||||
if (!n.getUntilOneOf (".:", ignored))
|
if (!n.getUntilOneOf (".:", ignored))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (n.skip (':') &&
|
if (n.skip (':'))
|
||||||
(n.getQuoted ('"', ignored) ||
|
{
|
||||||
n.getUntil (' ', ignored) ||
|
if (input.find ('@') <= n.cursor () ||
|
||||||
n.getUntilEOS (ignored) ||
|
input.find ('/') <= n.cursor ())
|
||||||
n.depleted ()))
|
return false;
|
||||||
return true;
|
|
||||||
|
|
||||||
return false;
|
if (n.getQuoted ('"', ignored) ||
|
||||||
|
n.getUntil (' ', ignored) ||
|
||||||
|
n.getUntilEOS (ignored) ||
|
||||||
|
n.depleted ())
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
@@ -448,7 +471,8 @@ std::string Att::type (const std::string& name) const
|
|||||||
else if (name == "recur")
|
else if (name == "recur")
|
||||||
return "duration";
|
return "duration";
|
||||||
|
|
||||||
else if (name == "limit")
|
else if (name == "limit" ||
|
||||||
|
name == "urgency")
|
||||||
return "number";
|
return "number";
|
||||||
|
|
||||||
else if (name == "priority")
|
else if (name == "priority")
|
||||||
@@ -472,10 +496,12 @@ std::string Att::modType (const std::string& name) const
|
|||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
//
|
// ______________
|
||||||
|
// | |
|
||||||
|
// | v
|
||||||
// start --> name --> . --> mod --> : --> " --> value --> " --> end
|
// start --> name --> . --> mod --> : --> " --> value --> " --> end
|
||||||
// | ^
|
// | ^ | ^
|
||||||
// |_____________________|
|
// |_____________________| |_____________|
|
||||||
//
|
//
|
||||||
void Att::parse (const std::string& input)
|
void Att::parse (const std::string& input)
|
||||||
{
|
{
|
||||||
@@ -513,8 +539,8 @@ void Att::parse (Nibbler& n)
|
|||||||
{
|
{
|
||||||
// Both quoted and unquoted Att's are accepted.
|
// Both quoted and unquoted Att's are accepted.
|
||||||
// Consider removing this for a stricter parse.
|
// Consider removing this for a stricter parse.
|
||||||
if (n.getQuoted ('"', mValue) ||
|
if (n.getQuoted ('"', mValue) ||
|
||||||
n.getUntil (' ', mValue))
|
n.getUntilEOS (mValue))
|
||||||
{
|
{
|
||||||
decode (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
|
// "this" is the attribute that has modifiers. "other" is the attribute from a
|
||||||
// Record that does not have modifiers, but may have a value.
|
// 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
|
bool Att::match (const Att& other) const
|
||||||
{
|
{
|
||||||
// All matches are assumed to pass, any short-circuit on non-match.
|
// All matches are assumed to pass, any short-circuit on non-match.
|
||||||
bool case_sensitive = context.config.getBoolean ("search.case.sensitive");
|
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 there are no mods, just perform a straight compare on value.
|
||||||
if (mMod == "")
|
if (mMod == "")
|
||||||
{
|
{
|
||||||
@@ -557,30 +594,73 @@ bool Att::match (const Att& other) const
|
|||||||
}
|
}
|
||||||
else
|
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))
|
if (!compare (mValue, other.mValue, (bool) case_sensitive))
|
||||||
return false;
|
return false;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// has = contains as a substring.
|
// has = contains as a substring.
|
||||||
else if (mMod == "has" || mMod == "contains") // TODO i18n
|
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)
|
if (find (other.mValue, mValue, (bool) case_sensitive) == std::string::npos)
|
||||||
return false;
|
return false;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
// is = equal. Nop.
|
// is = equal. Nop.
|
||||||
else if (mMod == "is" || mMod == "equals") // TODO i18n
|
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))
|
if (!compare (mValue, other.mValue, (bool) case_sensitive))
|
||||||
return false;
|
return false;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
// isnt = not equal.
|
// isnt = not equal.
|
||||||
else if (mMod == "isnt" || mMod == "not") // TODO i18n
|
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))
|
if (compare (mValue, other.mValue, (bool) case_sensitive))
|
||||||
return false;
|
return false;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
// any = any value, but not empty value.
|
// any = any value, but not empty value.
|
||||||
@@ -600,30 +680,66 @@ bool Att::match (const Att& other) const
|
|||||||
// startswith = first characters must match.
|
// startswith = first characters must match.
|
||||||
else if (mMod == "startswith" || mMod == "left") // TODO i18n
|
else if (mMod == "startswith" || mMod == "left") // TODO i18n
|
||||||
{
|
{
|
||||||
if (other.mValue.length () < mValue.length ())
|
#ifdef FEATURE_REGEX
|
||||||
return false;
|
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))
|
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.
|
// endswith = last characters must match.
|
||||||
else if (mMod == "endswith" || mMod == "right") // TODO i18n
|
else if (mMod == "endswith" || mMod == "right") // TODO i18n
|
||||||
{
|
{
|
||||||
if (other.mValue.length () < mValue.length ())
|
#ifdef FEATURE_REGEX
|
||||||
return false;
|
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 (
|
if (!compare (mValue, other.mValue.substr (
|
||||||
other.mValue.length () - mValue.length (),
|
other.mValue.length () - mValue.length (),
|
||||||
std::string::npos), (bool) case_sensitive))
|
std::string::npos), (bool) case_sensitive))
|
||||||
return false;
|
return false;
|
||||||
|
#ifdef FEATURE_REGEX
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
// hasnt = does not contain as a substring.
|
// hasnt = does not contain as a substring.
|
||||||
else if (mMod == "hasnt") // TODO i18n
|
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)
|
if (find (other.mValue, mValue, (bool) case_sensitive) != std::string::npos)
|
||||||
return false;
|
return false;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
// before = under = below = <
|
// before = under = below = <
|
||||||
@@ -705,30 +821,66 @@ bool Att::match (const Att& other) const
|
|||||||
// word = contains as a substring, with word boundaries.
|
// word = contains as a substring, with word boundaries.
|
||||||
else if (mMod == "word") // TODO i18n
|
else if (mMod == "word") // TODO i18n
|
||||||
{
|
{
|
||||||
// Fail if the substring is not found.
|
#ifdef FEATURE_REGEX
|
||||||
std::string::size_type sub = find (other.mValue, mValue, (bool) case_sensitive);
|
if (regex && other.mName != "tags")
|
||||||
if (sub == std::string::npos)
|
{
|
||||||
return false;
|
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, start[0]))
|
||||||
if (!isWordStart (other.mValue, sub))
|
return false;
|
||||||
return false;
|
|
||||||
|
|
||||||
if (!isWordEnd (other.mValue, sub + mValue.length () - 1))
|
if (!isWordEnd (other.mValue, end[0]))
|
||||||
return false;
|
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.
|
// noword = does not contain as a substring, with word boundaries.
|
||||||
else if (mMod == "noword") // TODO i18n
|
else if (mMod == "noword") // TODO i18n
|
||||||
{
|
{
|
||||||
// Fail if the substring is not found.
|
#ifdef FEATURE_REGEX
|
||||||
std::string::size_type sub = find (other.mValue, mValue);
|
if (regex && other.mName != "tags")
|
||||||
if (sub != std::string::npos &&
|
|
||||||
isWordStart (other.mValue, sub) &&
|
|
||||||
isWordEnd (other.mValue, sub + mValue.length () - 1))
|
|
||||||
{
|
{
|
||||||
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;
|
return true;
|
||||||
@@ -831,9 +983,7 @@ void Att::enquote (std::string& value) const
|
|||||||
// that hand-editing the pending.data file could cause.
|
// that hand-editing the pending.data file could cause.
|
||||||
void Att::dequote (std::string& value) const
|
void Att::dequote (std::string& value) const
|
||||||
{
|
{
|
||||||
std::string::size_type quote;
|
str_replace (value, "\"", "");
|
||||||
while ((quote = value.find ('"')) != std::string::npos)
|
|
||||||
value.replace (quote, 1, "");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
@@ -842,21 +992,14 @@ void Att::dequote (std::string& value) const
|
|||||||
// " -> &dquot;
|
// " -> &dquot;
|
||||||
// [ -> &open;
|
// [ -> &open;
|
||||||
// ] -> &close;
|
// ] -> &close;
|
||||||
|
// \ -> \\ (extra chars to disambiguate multi-line comment)
|
||||||
void Att::encode (std::string& value) const
|
void Att::encode (std::string& value) const
|
||||||
{
|
{
|
||||||
std::string::size_type i;
|
str_replace (value, "\t", "&tab;");
|
||||||
|
str_replace (value, "\"", "&dquot;");
|
||||||
while ((i = value.find ('\t')) != std::string::npos)
|
str_replace (value, "[", "&open;");
|
||||||
value.replace (i, 1, "&tab;"); // no i18n
|
str_replace (value, "]", "&close;");
|
||||||
|
str_replace (value, "\\", "\\\\");
|
||||||
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
|
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
@@ -870,35 +1013,19 @@ void Att::encode (std::string& value) const
|
|||||||
// : <- :
|
// : <- :
|
||||||
void Att::decode (std::string& value) const
|
void Att::decode (std::string& value) const
|
||||||
{
|
{
|
||||||
std::string::size_type i;
|
|
||||||
|
|
||||||
// Supported encodings.
|
// Supported encodings.
|
||||||
while ((i = value.find ("&tab;")) != std::string::npos)
|
str_replace (value, "&tab;", "\t");
|
||||||
value.replace (i, 5, "\t");
|
str_replace (value, "&dquot;", "\"");
|
||||||
|
str_replace (value, """, "'");
|
||||||
while ((i = value.find ("&dquot;")) != std::string::npos)
|
str_replace (value, "&open;", "[");
|
||||||
value.replace (i, 7, "\"");
|
str_replace (value, "&close;", "]");
|
||||||
|
|
||||||
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, "]");
|
|
||||||
|
|
||||||
// Support for deprecated encodings. These cannot be removed or old files
|
// Support for deprecated encodings. These cannot be removed or old files
|
||||||
// will not be parsable. Not just old files - completed.data can contain
|
// will not be parsable. Not just old files - completed.data can contain
|
||||||
// tasks formatted/encoded using these.
|
// tasks formatted/encoded using these.
|
||||||
while ((i = value.find ("&squot;")) != std::string::npos)
|
str_replace (value, "&squot;", "'");
|
||||||
value.replace (i, 7, "'");
|
str_replace (value, ",", ",");
|
||||||
|
str_replace (value, ":", ":");
|
||||||
while ((i = value.find (",")) != std::string::npos)
|
|
||||||
value.replace (i, 7, ",");
|
|
||||||
|
|
||||||
while ((i = value.find (":")) != std::string::npos)
|
|
||||||
value.replace (i, 7, ":");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
// taskwarrior - a command line task list manager.
|
// taskwarrior - a command line task list manager.
|
||||||
//
|
//
|
||||||
// Copyright 2006 - 2010, Paul Beckingham.
|
// Copyright 2006 - 2011, Paul Beckingham, Federico Hernandez.
|
||||||
// All rights reserved.
|
// All rights reserved.
|
||||||
//
|
//
|
||||||
// This program is free software; you can redistribute it and/or modify it under
|
// 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.
|
// taskwarrior - a command line task list manager.
|
||||||
//
|
//
|
||||||
// Copyright 2006 - 2010, Paul Beckingham, Federico Hernandez.
|
// Copyright 2006 - 2011, Paul Beckingham, Federico Hernandez.
|
||||||
// All rights reserved.
|
// All rights reserved.
|
||||||
//
|
//
|
||||||
// This program is free software; you can redistribute it and/or modify it under
|
// 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 ("_config");
|
||||||
commands.push_back ("_version");
|
commands.push_back ("_version");
|
||||||
commands.push_back ("_urgency");
|
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.csv");
|
||||||
commands.push_back ("export.ical");
|
commands.push_back ("export.ical");
|
||||||
commands.push_back ("export.yaml");
|
commands.push_back ("export.yaml");
|
||||||
@@ -142,6 +145,10 @@ void Cmd::load ()
|
|||||||
commands.push_back ("history.annual");
|
commands.push_back ("history.annual");
|
||||||
commands.push_back ("ghistory.monthly");
|
commands.push_back ("ghistory.monthly");
|
||||||
commands.push_back ("ghistory.annual");
|
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 whose names are localized.
|
||||||
commands.push_back (context.stringtable.get (CMD_ADD, "add"));
|
commands.push_back (context.stringtable.get (CMD_ADD, "add"));
|
||||||
@@ -237,6 +244,9 @@ bool Cmd::isReadOnlyCommand ()
|
|||||||
command == "_config" ||
|
command == "_config" ||
|
||||||
command == "_version" ||
|
command == "_version" ||
|
||||||
command == "_urgency" ||
|
command == "_urgency" ||
|
||||||
|
command == "_query" ||
|
||||||
|
command == "_zshcommands" ||
|
||||||
|
command == "_zshids" ||
|
||||||
command == "export.csv" ||
|
command == "export.csv" ||
|
||||||
command == "export.ical" ||
|
command == "export.ical" ||
|
||||||
command == "export.yaml" ||
|
command == "export.yaml" ||
|
||||||
@@ -244,6 +254,10 @@ bool Cmd::isReadOnlyCommand ()
|
|||||||
command == "history.annual" ||
|
command == "history.annual" ||
|
||||||
command == "ghistory.monthly" ||
|
command == "ghistory.monthly" ||
|
||||||
command == "ghistory.annual" ||
|
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_CALENDAR, "calendar") ||
|
||||||
command == context.stringtable.get (CMD_COLORS, "colors") ||
|
command == context.stringtable.get (CMD_COLORS, "colors") ||
|
||||||
command == context.stringtable.get (CMD_DIAGNOSTICS, "diagnostics") ||
|
command == context.stringtable.get (CMD_DIAGNOSTICS, "diagnostics") ||
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
// taskwarrior - a command line task list manager.
|
// taskwarrior - a command line task list manager.
|
||||||
//
|
//
|
||||||
// Copyright 2006 - 2010, Paul Beckingham, Federico Hernandez.
|
// Copyright 2006 - 2011, Paul Beckingham, Federico Hernandez.
|
||||||
// All rights reserved.
|
// All rights reserved.
|
||||||
//
|
//
|
||||||
// This program is free software; you can redistribute it and/or modify it under
|
// 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.
|
// taskwarrior - a command line task list manager.
|
||||||
//
|
//
|
||||||
// Copyright 2006 - 2010, Paul Beckingham.
|
// Copyright 2006 - 2011, Paul Beckingham, Federico Hernandez.
|
||||||
// All rights reserved.
|
// All rights reserved.
|
||||||
//
|
//
|
||||||
// This program is free software; you can redistribute it and/or modify it under
|
// 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.
|
// taskwarrior - a command line task list manager.
|
||||||
//
|
//
|
||||||
// Copyright 2006 - 2010, Paul Beckingham.
|
// Copyright 2006 - 2011, Paul Beckingham, Federico Hernandez.
|
||||||
// All rights reserved.
|
// All rights reserved.
|
||||||
//
|
//
|
||||||
// This program is free software; you can redistribute it and/or modify it under
|
// 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.
|
// taskwarrior - a command line task list manager.
|
||||||
//
|
//
|
||||||
// Copyright 2006 - 2010, Paul Beckingham, Federico Hernandez.
|
// Copyright 2006 - 2011, Paul Beckingham, Federico Hernandez.
|
||||||
// All rights reserved.
|
// All rights reserved.
|
||||||
//
|
//
|
||||||
// This program is free software; you can redistribute it and/or modify it under
|
// 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.
|
// taskwarrior - a command line task list manager.
|
||||||
//
|
//
|
||||||
// Copyright 2006 - 2010, Paul Beckingham, Federico Hernandez.
|
// Copyright 2006 - 2011, Paul Beckingham, Federico Hernandez.
|
||||||
// All rights reserved.
|
// All rights reserved.
|
||||||
//
|
//
|
||||||
// This program is free software; you can redistribute it and/or modify it under
|
// 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.
|
// taskwarrior - a command line task list manager.
|
||||||
//
|
//
|
||||||
// Copyright 2006 - 2010, Paul Beckingham.
|
// Copyright 2006 - 2011, Paul Beckingham, Federico Hernandez.
|
||||||
// All rights reserved.
|
// All rights reserved.
|
||||||
//
|
//
|
||||||
// This program is free software; you can redistribute it and/or modify it under
|
// This program is free software; you can redistribute it and/or modify it under
|
||||||
@@ -48,7 +48,7 @@
|
|||||||
std::string Config::defaults =
|
std::string Config::defaults =
|
||||||
"# Taskwarrior program configuration file.\n"
|
"# Taskwarrior program configuration file.\n"
|
||||||
"# For more documentation, see http://taskwarrior.org or try 'man task', 'man task-faq',\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"
|
"\n"
|
||||||
"# Here is an example of entries that use the default, override and blank values\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"
|
"# variable=foo -- By specifying a value, this overrides the default\n"
|
||||||
@@ -60,11 +60,13 @@ std::string Config::defaults =
|
|||||||
"# Files\n"
|
"# Files\n"
|
||||||
"data.location=~/.task\n"
|
"data.location=~/.task\n"
|
||||||
"locking=on # Use file-level locking\n"
|
"locking=on # Use file-level locking\n"
|
||||||
|
"gc=on # Garbage-collect data files - DO NOT CHANGE unless you are sure\n"
|
||||||
"\n"
|
"\n"
|
||||||
"# Terminal\n"
|
"# Terminal\n"
|
||||||
"curses=on # Use ncurses library to determine terminal width\n"
|
"curses=on # Detects terminal width\n"
|
||||||
"defaultwidth=80 # Without ncurses, assumed width\n"
|
"defaultwidth=80 # Without detection, assumed width\n"
|
||||||
"#editor=vi # Preferred text editor\n"
|
"#editor=vi # Preferred text editor\n"
|
||||||
|
"edit.verbose=yes # Include comments in files created during task edit\n"
|
||||||
"\n"
|
"\n"
|
||||||
"# Miscellaneous\n"
|
"# Miscellaneous\n"
|
||||||
"verbose=yes # Provide extra feedback\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.indicator=R # What to show as a task recurrence indicator\n"
|
||||||
"recurrence.limit=1 # Number of future recurring pending tasks\n"
|
"recurrence.limit=1 # Number of future recurring pending tasks\n"
|
||||||
"undo.style=side # Undo style - can be 'side', or 'diff'\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"
|
"\n"
|
||||||
"# Dates\n"
|
"# Dates\n"
|
||||||
"dateformat=m/d/Y # Preferred input and display date format\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.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=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.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"
|
"calendar.holidays=none # Show public holidays on calendar:full, sparse or none\n"
|
||||||
"#monthsperline=3 # Number of calendar months on a line\n"
|
"#monthsperline=3 # Number of calendar months on a line\n"
|
||||||
"\n"
|
"\n"
|
||||||
@@ -101,6 +108,7 @@ std::string Config::defaults =
|
|||||||
"journal.time=no # Record start/stop commands as annotation\n"
|
"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.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.time.stop.annotation=Stopped task # Annotation description for the stop journal entry\n"
|
||||||
|
"journal.info=on # Display task journal with info command\n"
|
||||||
"\n"
|
"\n"
|
||||||
"# Dependency controls\n"
|
"# Dependency controls\n"
|
||||||
"dependency.reminder=on # Nags on dependency chain violations\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.debug=color3 # Color of diagnostic output\n"
|
||||||
"color.alternate=on color233 # Alternate color for line coloring\n"
|
"color.alternate=on color233 # Alternate color for line coloring\n"
|
||||||
"\n"
|
"\n"
|
||||||
"color.summary.bar=on rgb141 # Color of summary report progress bar\n"
|
"color.summary.bar=black on rgb141 # Color of summary report progress bar\n"
|
||||||
"color.summary.background=on color0 # Color of summary report background\n"
|
"color.summary.background=white on color0 # Color of summary report background\n"
|
||||||
"\n"
|
"\n"
|
||||||
"color.history.add=color0 on rgb500 # Color of added tasks in ghistory report\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.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"
|
"color.history.delete=color0 on rgb550 # Color of deleted tasks in ghistory report\n"
|
||||||
"\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.added=rgb005 # Color of added tasks in sync output\n"
|
||||||
"color.sync.changed=rgb550 # Color of changed 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"
|
"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.debug=yellow # Color of diagnostic output\n"
|
||||||
"color.alternate= # Alternate color for line coloring\n"
|
"color.alternate= # Alternate color for line coloring\n"
|
||||||
"\n"
|
"\n"
|
||||||
"color.summary.bar=on green # Color of summary report progress bar\n"
|
"color.summary.bar=black on green # Color of summary report progress bar\n"
|
||||||
"color.summary.background=on black # Color of summary report background\n"
|
"color.summary.background=white on black # Color of summary report background\n"
|
||||||
"\n"
|
"\n"
|
||||||
"color.history.add=black on red # Color of added tasks in ghistory report\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.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"
|
"color.history.delete=black on yellow # Color of deleted tasks in ghistory report\n"
|
||||||
"\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.added=green # Color of added tasks in sync output\n"
|
||||||
"color.sync.changed=yellow # Color of changed 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"
|
"color.sync.rejected=red # Color of rejected tasks in sync output\n"
|
||||||
@@ -227,6 +243,7 @@ std::string Config::defaults =
|
|||||||
"\n"
|
"\n"
|
||||||
"#default.project=foo # Default project for 'add' command\n"
|
"#default.project=foo # Default project for 'add' command\n"
|
||||||
"#default.priority=M # Default priority 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"
|
"default.command=list # When no arguments are specified\n"
|
||||||
"\n"
|
"\n"
|
||||||
"_forcecolor=no # Forces color to be on, even for non TTY output\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.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=export.yaml # Prefer YAML over CSV or iCal export\n"
|
||||||
"alias.export.vcalendar=export.ical # They are the same\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"
|
"\n"
|
||||||
"# Fields: id, uuid, project, priority, priority_long, entry, start, end,\n"
|
"# Fields: id, uuid, project, priority, priority_long, entry, start, end,\n"
|
||||||
"# due, countdown, countdown_compact, age, age_compact, active, tags,\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.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.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.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.filter=status:pending\n"
|
||||||
"#report.long.dateformat=m/d/Y\n"
|
"#report.long.dateformat=m/d/Y\n"
|
||||||
"#report.long.annotations=full\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.description=Lists all tasks matching the specified criteria\n"
|
||||||
"report.list.columns=id,project,priority,due,active,age,description\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.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.filter=status:pending\n"
|
||||||
"#report.list.dateformat=m/d/Y\n"
|
"#report.list.dateformat=m/d/Y\n"
|
||||||
"#report.list.annotations=full\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.description=Minimal listing of all tasks matching the specified criteria\n"
|
||||||
"report.ls.columns=id,project,priority,description\n"
|
"report.ls.columns=id,project,priority,description\n"
|
||||||
"report.ls.labels=ID,Project,Pri,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.filter=status:pending\n"
|
||||||
"#report.ls.dateformat=m/d/Y\n"
|
"#report.ls.dateformat=m/d/Y\n"
|
||||||
"#report.ls.annotations=full\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.description=Lists overdue tasks matching the specified criteria\n"
|
||||||
"report.overdue.columns=id,project,priority,due,active,age,description\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.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.filter=status:pending due.before:now\n"
|
||||||
"#report.overdue.dateformat=m/d/Y\n"
|
"#report.overdue.dateformat=m/d/Y\n"
|
||||||
"#report.overdue.annotations=full\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.description=Lists active tasks matching the specified criteria\n"
|
||||||
"report.active.columns=id,project,priority,due,active,age,description\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.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.filter=status:pending start.any:\n"
|
||||||
"#report.active.dateformat=m/d/Y\n"
|
"#report.active.dateformat=m/d/Y\n"
|
||||||
"#report.active.annotations=full\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.description=Lists completed tasks matching the specified criteria\n"
|
||||||
"report.completed.columns=end,project,priority,age,description\n"
|
"report.completed.columns=end,project,priority,age,description\n"
|
||||||
"report.completed.labels=Complete,Project,Pri,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.filter=status:completed\n"
|
||||||
"#report.completed.dateformat=m/d/Y\n"
|
"#report.completed.dateformat=m/d/Y\n"
|
||||||
"#report.completed.annotations=full\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.description=Lists recurring tasks matching the specified criteria\n"
|
||||||
"report.recurring.columns=id,project,priority,due,recur,active,age,description\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.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.filter=status:pending parent.any:\n"
|
||||||
"#report.recurring.dateformat=m/d/Y\n"
|
"#report.recurring.dateformat=m/d/Y\n"
|
||||||
"#report.recurring.annotations=full\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.description=Lists all waiting tasks matching the specified criteria\n"
|
||||||
"report.waiting.columns=id,project,priority,wait,age,description\n"
|
"report.waiting.columns=id,project,priority,wait,age,description\n"
|
||||||
"report.waiting.labels=ID,Project,Pri,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.filter=status:waiting\n"
|
||||||
"#report.waiting.dateformat=m/d/Y\n"
|
"#report.waiting.dateformat=m/d/Y\n"
|
||||||
"#report.waiting.annotations=full\n"
|
"#report.waiting.annotations=full\n"
|
||||||
"\n"
|
"\n"
|
||||||
"# task all\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.columns=id,project,priority,due,end,active,age,description\n"
|
||||||
"report.all.labels=ID,Project,Pri,Due,Completed,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"
|
"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.description=Lists the most urgent tasks\n"
|
||||||
"report.next.columns=id,project,priority,due,active,age,description\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.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.filter=status:pending limit:page depends.none:\n"
|
||||||
"#report.next.dateformat=m/d/Y\n"
|
"#report.next.dateformat=m/d/Y\n"
|
||||||
"#report.next.annotations=full\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.description=Lists all blocked tasks matching the specified criteria\n"
|
||||||
"report.blocked.columns=id,depends,project,priority,due,active,age,description\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.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.filter=status:pending depends.any:\n"
|
||||||
"#report.blocked.dateformat=m/d/Y\n"
|
"#report.blocked.dateformat=m/d/Y\n"
|
||||||
"\n"
|
"\n"
|
||||||
@@ -412,7 +431,7 @@ std::string Config::defaults =
|
|||||||
"report.unblocked.description=Lists all unblocked tasks matching the specified criteria\n"
|
"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.columns=id,depends,project,priority,due,active,age,description\n"
|
||||||
"report.unblocked.labels=ID,Deps,Project,Pri,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.filter=status:pending depends.none:\n"
|
||||||
"#report.unblocked.dateformat=m/d/Y\n"
|
"#report.unblocked.dateformat=m/d/Y\n"
|
||||||
"\n";
|
"\n";
|
||||||
@@ -624,17 +643,13 @@ const bool Config::getBoolean (const std::string& key)
|
|||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
void Config::set (const std::string& key, const int value)
|
void Config::set (const std::string& key, const int value)
|
||||||
{
|
{
|
||||||
char v[24];
|
(*this)[key] = format (value);
|
||||||
sprintf (v, "%d", value);
|
|
||||||
(*this)[key] = v;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
void Config::set (const std::string& key, const double value)
|
void Config::set (const std::string& key, const double value)
|
||||||
{
|
{
|
||||||
char v[32];
|
(*this)[key] = format (value, 1, 8);
|
||||||
sprintf (v, "%f", value);
|
|
||||||
(*this)[key] = v;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
@@ -645,23 +660,25 @@ void Config::set (const std::string& key, const std::string& value)
|
|||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
// Provide a vector of all configuration keys.
|
// 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)
|
std::map <std::string, std::string>::const_iterator it;
|
||||||
items.push_back (i->first);
|
for (it = this->begin (); it != this->end (); ++it)
|
||||||
|
items.push_back (it->first);
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
std::string Config::checkForDeprecatedColor ()
|
std::string Config::checkForDeprecatedColor ()
|
||||||
{
|
{
|
||||||
std::vector <std::string> deprecated;
|
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)
|
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 "
|
out << "Your .taskrc file contains color settings that use deprecated "
|
||||||
<< "underscores. Please check:\n";
|
<< "underscores. Please check:\n";
|
||||||
|
|
||||||
foreach (i, deprecated)
|
std::vector <std::string>::iterator it2;
|
||||||
out << " " << *i << "=" << get (*i) << "\n";
|
for (it2 = deprecated.begin (); it2 != deprecated.end (); ++it2)
|
||||||
|
out << " " << *it2 << "=" << get (*it2) << "\n";
|
||||||
|
|
||||||
out << "\n";
|
out << "\n";
|
||||||
}
|
}
|
||||||
@@ -684,15 +702,16 @@ std::string Config::checkForDeprecatedColor ()
|
|||||||
std::string Config::checkForDeprecatedColumns ()
|
std::string Config::checkForDeprecatedColumns ()
|
||||||
{
|
{
|
||||||
std::vector <std::string> deprecated;
|
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 ||
|
if (value.find ("entry_time") != std::string::npos ||
|
||||||
value.find ("start_time") != std::string::npos ||
|
value.find ("start_time") != std::string::npos ||
|
||||||
value.find ("end_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. "
|
out << "Your .taskrc file contains reports with deprecated columns. "
|
||||||
<< "Please check for entry_time, start_time or end_time in:\n";
|
<< "Please check for entry_time, start_time or end_time in:\n";
|
||||||
|
|
||||||
foreach (i, deprecated)
|
std::vector <std::string>::iterator it2;
|
||||||
out << " " << *i << "\n";
|
for (it2 = deprecated.begin (); it2 != deprecated.end (); ++it2)
|
||||||
|
out << " " << *it2 << "=" << get (*it2) << "\n";
|
||||||
|
|
||||||
out << "\n";
|
out << "\n";
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
// taskwarrior - a command line task list manager.
|
// taskwarrior - a command line task list manager.
|
||||||
//
|
//
|
||||||
// Copyright 2006 - 2010, Paul Beckingham.
|
// Copyright 2006 - 2011, Paul Beckingham, Federico Hernandez.
|
||||||
// All rights reserved.
|
// All rights reserved.
|
||||||
//
|
//
|
||||||
// This program is free software; you can redistribute it and/or modify it under
|
// 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 int);
|
||||||
void set (const std::string&, const double);
|
void set (const std::string&, const double);
|
||||||
void set (const std::string&, const std::string&);
|
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 checkForDeprecatedColor ();
|
||||||
std::string checkForDeprecatedColumns ();
|
std::string checkForDeprecatedColumns ();
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
// taskwarrior - a command line task list manager.
|
// taskwarrior - a command line task list manager.
|
||||||
//
|
//
|
||||||
// Copyright 2006 - 2010, Paul Beckingham, Federico Hernandez.
|
// Copyright 2006 - 2011, Paul Beckingham, Federico Hernandez.
|
||||||
// All rights reserved.
|
// All rights reserved.
|
||||||
//
|
//
|
||||||
// This program is free software; you can redistribute it and/or modify it under
|
// This program is free software; you can redistribute it and/or modify it under
|
||||||
@@ -56,6 +56,8 @@ Context::Context ()
|
|||||||
, var_overrides ("")
|
, var_overrides ("")
|
||||||
, cmd ()
|
, cmd ()
|
||||||
, inShadow (false)
|
, inShadow (false)
|
||||||
|
, terminal_width (0)
|
||||||
|
, terminal_height (0)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -204,6 +206,17 @@ int Context::dispatch (std::string &out)
|
|||||||
|
|
||||||
hooks.trigger ("pre-dispatch");
|
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.
|
// TODO Just look at this thing. It cries out for a dispatch table.
|
||||||
if (cmd.command == "projects") { rc = handleProjects (out); }
|
if (cmd.command == "projects") { rc = handleProjects (out); }
|
||||||
else if (cmd.command == "tags") { rc = handleTags (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 == "history.annual") { rc = handleReportHistoryAnnual (out); }
|
||||||
else if (cmd.command == "ghistory.monthly") { rc = handleReportGHistoryMonthly (out); }
|
else if (cmd.command == "ghistory.monthly") { rc = handleReportGHistoryMonthly (out); }
|
||||||
else if (cmd.command == "ghistory.annual") { rc = handleReportGHistoryAnnual (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 == "summary") { rc = handleReportSummary (out); }
|
||||||
else if (cmd.command == "calendar") { rc = handleReportCalendar (out); }
|
else if (cmd.command == "calendar") { rc = handleReportCalendar (out); }
|
||||||
else if (cmd.command == "timesheet") { rc = handleReportTimesheet (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 == "push") { handlePush (out); }
|
||||||
else if (cmd.command == "pull") { handlePull (out); }
|
else if (cmd.command == "pull") { handlePull (out); }
|
||||||
else if (cmd.command == "diagnostics") { handleDiagnostics (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 == "_projects") { rc = handleCompletionProjects (out); }
|
||||||
else if (cmd.command == "_tags") { rc = handleCompletionTags (out); }
|
else if (cmd.command == "_tags") { rc = handleCompletionTags (out); }
|
||||||
else if (cmd.command == "_commands") { rc = handleCompletionCommands (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 == "_config") { rc = handleCompletionConfig (out); }
|
||||||
else if (cmd.command == "_version") { rc = handleCompletionVersion (out); }
|
else if (cmd.command == "_version") { rc = handleCompletionVersion (out); }
|
||||||
else if (cmd.command == "_urgency") { rc = handleUrgency (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 == "" &&
|
else if (cmd.command == "" &&
|
||||||
sequence.size ()) { rc = handleModify (out); }
|
sequence.size ()) { rc = handleModify (out); }
|
||||||
|
|
||||||
@@ -292,6 +312,10 @@ void Context::shadow ()
|
|||||||
throw std::string ("Configuration variable 'shadow.file' is set to "
|
throw std::string ("Configuration variable 'shadow.file' is set to "
|
||||||
"overwrite your completed tasks. Please change it.");
|
"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 oldCurses = config.get ("curses");
|
||||||
std::string oldColor = config.get ("color");
|
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
|
// The limit attribute does not participate in filtering, and needs to be
|
||||||
// specifically handled in handleCustomReport.
|
// specifically handled in handleCustomReport.
|
||||||
else if (a.name () == "limit")
|
else if (a.name () == "limit")
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
// taskwarrior - a command line task list manager.
|
// taskwarrior - a command line task list manager.
|
||||||
//
|
//
|
||||||
// Copyright 2006 - 2010, Paul Beckingham.
|
// Copyright 2006 - 2011, Paul Beckingham, Federico Hernandez.
|
||||||
// All rights reserved.
|
// All rights reserved.
|
||||||
//
|
//
|
||||||
// This program is free software; you can redistribute it and/or modify it under
|
// 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> footnotes;
|
||||||
std::vector <std::string> debugMessages;
|
std::vector <std::string> debugMessages;
|
||||||
bool inShadow;
|
bool inShadow;
|
||||||
|
|
||||||
|
int terminal_width;
|
||||||
|
int terminal_height;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
128
src/Date.cpp
128
src/Date.cpp
@@ -1,7 +1,7 @@
|
|||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
// taskwarrior - a command line task list manager.
|
// taskwarrior - a command line task list manager.
|
||||||
//
|
//
|
||||||
// Copyright 2006 - 2010, Paul Beckingham, Federico Hernandez.
|
// Copyright 2006 - 2011, Paul Beckingham, Federico Hernandez.
|
||||||
// All rights reserved.
|
// All rights reserved.
|
||||||
//
|
//
|
||||||
// This program is free software; you can redistribute it and/or modify it under
|
// 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 () ||
|
if (i >= input.length () ||
|
||||||
! isdigit (input[i]))
|
! 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 () &&
|
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 () ||
|
if (i >= input.length () ||
|
||||||
! isdigit (input[i]))
|
! 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 () &&
|
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 + 0]) ||
|
||||||
! isdigit (input[i + 1]))
|
! 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;
|
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 + 0]) ||
|
||||||
! isdigit (input[i + 1]))
|
! 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 ());
|
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 + 0]) ||
|
||||||
! isdigit (input[i + 1]))
|
! 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 ());
|
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 + 0]) ||
|
||||||
! isdigit (input[i + 1]))
|
! 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;
|
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 + 2]) ||
|
||||||
! isdigit (input[i + 3]))
|
! 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 ());
|
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 + 1]) ||
|
||||||
isdigit (input[i + 2]))
|
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;
|
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 + 1]) ||
|
||||||
isdigit (input[i + 2]))
|
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());
|
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 + 1]) ||
|
||||||
isdigit (input[i + 2]))
|
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();
|
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 + 1]) ||
|
||||||
isdigit (input[i + 2]))
|
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());
|
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 () ||
|
if (i >= input.length () ||
|
||||||
! isdigit (input[i]))
|
! 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 () &&
|
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 + 0]) ||
|
||||||
! isdigit (input[i + 1]))
|
! 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 ());
|
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 + 0]) ||
|
||||||
! isdigit (input[i + 1]))
|
! 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 ());
|
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 + 0]) ||
|
||||||
! isdigit (input[i + 1]))
|
! 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 ());
|
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 () ||
|
if (i >= input.length () ||
|
||||||
input[i] != format[f])
|
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;
|
++i;
|
||||||
break;
|
break;
|
||||||
@@ -344,10 +344,10 @@ Date::Date (const std::string& input, const std::string& format /* = "m/d/Y" */)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (i < input.length ())
|
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))
|
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.
|
// Convert to epoch.
|
||||||
struct tm t = {0};
|
struct tm t = {0};
|
||||||
@@ -460,6 +460,32 @@ const std::string Date::toString (const std::string& format /*= "m/d/Y" */) cons
|
|||||||
return formatted;
|
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)
|
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;
|
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)
|
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 ("midsommar");
|
||||||
supported.push_back ("midsommarafton");
|
supported.push_back ("midsommarafton");
|
||||||
supported.push_back ("now");
|
supported.push_back ("now");
|
||||||
|
supported.push_back ("later");
|
||||||
|
supported.push_back ("someday");
|
||||||
|
|
||||||
std::vector <std::string> matches;
|
std::vector <std::string> matches;
|
||||||
if (autoComplete (in, supported, matches) == 1)
|
if (autoComplete (in, supported, matches) == 1)
|
||||||
@@ -1059,6 +1143,12 @@ bool Date::isRelativeDate (const std::string& input)
|
|||||||
mT = time (NULL);
|
mT = time (NULL);
|
||||||
return true;
|
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.
|
// 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.
|
// taskwarrior - a command line task list manager.
|
||||||
//
|
//
|
||||||
// Copyright 2006 - 2010, Paul Beckingham, Federico Hernandez.
|
// Copyright 2006 - 2011, Paul Beckingham, Federico Hernandez.
|
||||||
// All rights reserved.
|
// All rights reserved.
|
||||||
//
|
//
|
||||||
// This program is free software; you can redistribute it and/or modify it under
|
// This program is free software; you can redistribute it and/or modify it under
|
||||||
@@ -50,6 +50,12 @@ public:
|
|||||||
std::string toISO ();
|
std::string toISO ();
|
||||||
void toMDY (int&, int&, int&);
|
void toMDY (int&, int&, int&);
|
||||||
const std::string toString (const std::string& format = "m/d/Y") const;
|
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 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, const int, const int, const int);
|
||||||
static bool valid (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&);
|
time_t operator- (const Date&);
|
||||||
|
|
||||||
|
void operator-- (); // Prefix
|
||||||
|
void operator-- (int); // Postfix
|
||||||
|
void operator++ (); // Prefix
|
||||||
|
void operator++ (int); // Postfix
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool isEpoch (const std::string&);
|
bool isEpoch (const std::string&);
|
||||||
bool isRelativeDate (const std::string&);
|
bool isRelativeDate (const std::string&);
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
// taskwarrior - a command line task list manager.
|
// taskwarrior - a command line task list manager.
|
||||||
//
|
//
|
||||||
// Copyright 2006 - 2009, Paul Beckingham.
|
// Copyright 2006 - 2011, Paul Beckingham, Federico Hernandez.
|
||||||
// All rights reserved.
|
// All rights reserved.
|
||||||
//
|
//
|
||||||
// This program is free software; you can redistribute it and/or modify it under
|
// 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.
|
// taskwarrior - a command line task list manager.
|
||||||
//
|
//
|
||||||
// Copyright 2006 - 2009, Paul Beckingham.
|
// Copyright 2006 - 2011, Paul Beckingham, Federico Hernandez.
|
||||||
// All rights reserved.
|
// All rights reserved.
|
||||||
//
|
//
|
||||||
// This program is free software; you can redistribute it and/or modify it under
|
// 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.
|
// taskwarrior - a command line task list manager.
|
||||||
//
|
//
|
||||||
// Copyright 2006 - 2010, Paul Beckingham.
|
// Copyright 2006 - 2011, Paul Beckingham, Federico Hernandez.
|
||||||
// All rights reserved.
|
// All rights reserved.
|
||||||
//
|
//
|
||||||
// This program is free software; you can redistribute it and/or modify it under
|
// 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);
|
std::string lower_input = lowerCase (input);
|
||||||
|
|
||||||
// Assume the ordinal is 1, but look for an integer, just in case.
|
// Assume the ordinal is 1, but look for an integer, just in case.
|
||||||
int value = 1;
|
double value = 1;
|
||||||
Nibbler n (lower_input);
|
Nibbler n (lower_input);
|
||||||
n.skipAll (' ');
|
n.skipAll (' ');
|
||||||
n.getInt (value);
|
n.getNumber (value);
|
||||||
n.skipAll (' ');
|
n.skipAll (' ');
|
||||||
|
|
||||||
if (value < 0)
|
if (value < 0.0)
|
||||||
value = -value;
|
value = -value;
|
||||||
|
|
||||||
std::string units;
|
std::string units;
|
||||||
@@ -272,14 +272,14 @@ void Duration::parse (const std::string& input)
|
|||||||
std::string lower_input = lowerCase (input);
|
std::string lower_input = lowerCase (input);
|
||||||
|
|
||||||
// Assume the ordinal is 1, but look for an integer, just in case.
|
// Assume the ordinal is 1, but look for an integer, just in case.
|
||||||
int value = 1;
|
double value = 1;
|
||||||
Nibbler n (lower_input);
|
Nibbler n (lower_input);
|
||||||
n.skipAll (' ');
|
n.skipAll (' ');
|
||||||
n.getInt (value);
|
n.getNumber (value);
|
||||||
|
|
||||||
n.skipAll (' ');
|
n.skipAll (' ');
|
||||||
|
|
||||||
if (value < 0)
|
if (value < 0.0)
|
||||||
{
|
{
|
||||||
mNegative = true;
|
mNegative = true;
|
||||||
value = -value;
|
value = -value;
|
||||||
@@ -301,62 +301,62 @@ void Duration::parse (const std::string& input)
|
|||||||
{
|
{
|
||||||
std::string match = matches[0];
|
std::string match = matches[0];
|
||||||
|
|
||||||
if (match == "biannual") mSecs = value * 86400 * 730;
|
if (match == "biannual") mSecs = (int) (value * 86400 * 730);
|
||||||
else if (match == "biyearly") mSecs = value * 86400 * 730;
|
else if (match == "biyearly") mSecs = (int) (value * 86400 * 730);
|
||||||
|
|
||||||
else if (match == "yearly") mSecs = value * 86400 * 365;
|
else if (match == "yearly") mSecs = (int) (value * 86400 * 365);
|
||||||
else if (match == "annual") mSecs = value * 86400 * 365;
|
else if (match == "annual") mSecs = (int) (value * 86400 * 365);
|
||||||
else if (match == "years") mSecs = value * 86400 * 365;
|
else if (match == "years") mSecs = (int) (value * 86400 * 365);
|
||||||
else if (match == "yrs") mSecs = value * 86400 * 365;
|
else if (match == "yrs") mSecs = (int) (value * 86400 * 365);
|
||||||
else if (match == "y") mSecs = value * 86400 * 365;
|
else if (match == "y") mSecs = (int) (value * 86400 * 365);
|
||||||
else if (match == "yearly") mSecs = value * 86400 * 365;
|
else if (match == "yearly") mSecs = (int) (value * 86400 * 365);
|
||||||
else if (match == "annual") mSecs = 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 == "bimonthly") mSecs = (int) (value * 86400 * 61);
|
||||||
else if (match == "quarterly") mSecs = value * 86400 * 91;
|
else if (match == "quarterly") mSecs = (int) (value * 86400 * 91);
|
||||||
else if (match == "quarters") mSecs = value * 86400 * 91;
|
else if (match == "quarters") mSecs = (int) (value * 86400 * 91);
|
||||||
else if (match == "qrtrs") mSecs = value * 86400 * 91;
|
else if (match == "qrtrs") mSecs = (int) (value * 86400 * 91);
|
||||||
else if (match == "qtrs") mSecs = value * 86400 * 91;
|
else if (match == "qtrs") mSecs = (int) (value * 86400 * 91);
|
||||||
else if (match == "q") mSecs = value * 86400 * 91;
|
else if (match == "q") mSecs = (int) (value * 86400 * 91);
|
||||||
|
|
||||||
else if (match == "monthly") mSecs = value * 86400 * 30;
|
else if (match == "monthly") mSecs = (int) (value * 86400 * 30);
|
||||||
else if (match == "month") mSecs = value * 86400 * 30;
|
else if (match == "month") mSecs = (int) (value * 86400 * 30);
|
||||||
else if (match == "months") mSecs = value * 86400 * 30;
|
else if (match == "months") mSecs = (int) (value * 86400 * 30);
|
||||||
else if (match == "mnths") mSecs = value * 86400 * 30;
|
else if (match == "mnths") mSecs = (int) (value * 86400 * 30);
|
||||||
else if (match == "mos") mSecs = value * 86400 * 30;
|
else if (match == "mos") mSecs = (int) (value * 86400 * 30);
|
||||||
else if (match == "mo") mSecs = value * 86400 * 30;
|
else if (match == "mo") mSecs = (int) (value * 86400 * 30);
|
||||||
else if (match == "mths") mSecs = value * 86400 * 30;
|
else if (match == "mths") mSecs = (int) (value * 86400 * 30);
|
||||||
|
|
||||||
else if (match == "biweekly") mSecs = value * 86400 * 14;
|
else if (match == "biweekly") mSecs = (int) (value * 86400 * 14);
|
||||||
else if (match == "fortnight") mSecs = value * 86400 * 14;
|
else if (match == "fortnight") mSecs = (int) (value * 86400 * 14);
|
||||||
|
|
||||||
else if (match == "weekly") mSecs = value * 86400 * 7;
|
else if (match == "weekly") mSecs = (int) (value * 86400 * 7);
|
||||||
else if (match == "sennight") mSecs = value * 86400 * 7;
|
else if (match == "sennight") mSecs = (int) (value * 86400 * 7);
|
||||||
else if (match == "weeks") mSecs = value * 86400 * 7;
|
else if (match == "weeks") mSecs = (int) (value * 86400 * 7);
|
||||||
else if (match == "wks") mSecs = value * 86400 * 7;
|
else if (match == "wks") mSecs = (int) (value * 86400 * 7);
|
||||||
else if (match == "w") mSecs = value * 86400 * 7;
|
else if (match == "w") mSecs = (int) (value * 86400 * 7);
|
||||||
|
|
||||||
else if (match == "daily") mSecs = value * 86400 * 1;
|
else if (match == "daily") mSecs = (int) (value * 86400 * 1);
|
||||||
else if (match == "day") mSecs = value * 86400 * 1;
|
else if (match == "day") mSecs = (int) (value * 86400 * 1);
|
||||||
else if (match == "weekdays") mSecs = value * 86400 * 1;
|
else if (match == "weekdays") mSecs = (int) (value * 86400 * 1);
|
||||||
else if (match == "days") mSecs = value * 86400 * 1;
|
else if (match == "days") mSecs = (int) (value * 86400 * 1);
|
||||||
else if (match == "d") mSecs = value * 86400 * 1;
|
else if (match == "d") mSecs = (int) (value * 86400 * 1);
|
||||||
|
|
||||||
else if (match == "hours") mSecs = value * 3600;
|
else if (match == "hours") mSecs = (int) (value * 3600);
|
||||||
else if (match == "hrs") mSecs = value * 3600;
|
else if (match == "hrs") mSecs = (int) (value * 3600);
|
||||||
else if (match == "h") mSecs = value * 3600;
|
else if (match == "h") mSecs = (int) (value * 3600);
|
||||||
|
|
||||||
else if (match == "minutes") mSecs = value * 60;
|
else if (match == "minutes") mSecs = (int) (value * 60);
|
||||||
else if (match == "mins") mSecs = value * 60;
|
else if (match == "mins") mSecs = (int) (value * 60);
|
||||||
else if (match == "min") mSecs = value * 60;
|
else if (match == "min") mSecs = (int) (value * 60);
|
||||||
else if (match == "m") mSecs = value * 60;
|
else if (match == "m") mSecs = (int) (value * 60);
|
||||||
|
|
||||||
else if (match == "seconds") mSecs = value;
|
else if (match == "seconds") mSecs = (int) value;
|
||||||
else if (match == "secs") mSecs = value;
|
else if (match == "secs") mSecs = (int) value;
|
||||||
else if (match == "sec") mSecs = value;
|
else if (match == "sec") mSecs = (int) value;
|
||||||
else if (match == "s") mSecs = value;
|
else if (match == "s") mSecs = (int) value;
|
||||||
|
|
||||||
else if (match == "-") mSecs = 0;
|
else if (match == "-") mSecs = 0;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
// taskwarrior - a command line task list manager.
|
// taskwarrior - a command line task list manager.
|
||||||
//
|
//
|
||||||
// Copyright 2006 - 2010, Paul Beckingham.
|
// Copyright 2006 - 2011, Paul Beckingham, Federico Hernandez.
|
||||||
// All rights reserved.
|
// All rights reserved.
|
||||||
//
|
//
|
||||||
// This program is free software; you can redistribute it and/or modify it under
|
// 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.
|
// taskwarrior - a command line task list manager.
|
||||||
//
|
//
|
||||||
// Copyright 2006 - 2010, Paul Beckingham.
|
// Copyright 2006 - 2011, Paul Beckingham, Federico Hernandez.
|
||||||
// All rights reserved.
|
// All rights reserved.
|
||||||
//
|
//
|
||||||
// This program is free software; you can redistribute it and/or modify it under
|
// 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.
|
// taskwarrior - a command line task list manager.
|
||||||
//
|
//
|
||||||
// Copyright 2006 - 2010, Paul Beckingham.
|
// Copyright 2006 - 2011, Paul Beckingham, Federico Hernandez.
|
||||||
// All rights reserved.
|
// All rights reserved.
|
||||||
//
|
//
|
||||||
// This program is free software; you can redistribute it and/or modify it under
|
// 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.
|
// taskwarrior - a command line task list manager.
|
||||||
//
|
//
|
||||||
// Copyright 2006 - 2010, Paul Beckingham.
|
// Copyright 2006 - 2011, Paul Beckingham, Federico Hernandez.
|
||||||
// All rights reserved.
|
// All rights reserved.
|
||||||
//
|
//
|
||||||
// This program is free software; you can redistribute it and/or modify it under
|
// 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.
|
// taskwarrior - a command line task list manager.
|
||||||
//
|
//
|
||||||
// Copyright 2006 - 2010, Paul Beckingham.
|
// Copyright 2006 - 2011, Paul Beckingham, Federico Hernandez.
|
||||||
// All rights reserved.
|
// All rights reserved.
|
||||||
//
|
//
|
||||||
// This program is free software; you can redistribute it and/or modify it under
|
// 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.
|
// taskwarrior - a command line task list manager.
|
||||||
//
|
//
|
||||||
// Copyright 2006 - 2010, Paul Beckingham.
|
// Copyright 2006 - 2011, Paul Beckingham, Federico Hernandez.
|
||||||
// All rights reserved.
|
// All rights reserved.
|
||||||
//
|
//
|
||||||
// This program is free software; you can redistribute it and/or modify it under
|
// This program is free software; you can redistribute it and/or modify it under
|
||||||
@@ -61,6 +61,7 @@
|
|||||||
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
#include <text.h>
|
||||||
#include <Grid.h>
|
#include <Grid.h>
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
@@ -364,16 +365,14 @@ Grid::Cell::operator double () const
|
|||||||
|
|
||||||
Grid::Cell::operator std::string () const
|
Grid::Cell::operator std::string () const
|
||||||
{
|
{
|
||||||
char s[64] = {0};
|
|
||||||
|
|
||||||
switch (mType)
|
switch (mType)
|
||||||
{
|
{
|
||||||
case CELL_BOOL: return mBool ? "true" : "false"; // TODO i18n
|
case CELL_BOOL: return mBool ? "true" : "false"; // TODO i18n
|
||||||
case CELL_CHAR: sprintf (s, "%c", mChar); return std::string (s);
|
case CELL_CHAR: return format (mChar);
|
||||||
case CELL_INT: sprintf (s, "%d", mInt); return std::string (s);
|
case CELL_INT: return format (mInt);
|
||||||
case CELL_FLOAT: sprintf (s, "%f", mFloat); return std::string (s);
|
case CELL_FLOAT: return format (mFloat, 1, 6);
|
||||||
case CELL_DOUBLE: sprintf (s, "%f", mDouble); return std::string (s);
|
case CELL_DOUBLE: return format (mDouble, 1, 8);
|
||||||
case CELL_STRING: return mString;
|
case CELL_STRING: return mString;
|
||||||
}
|
}
|
||||||
|
|
||||||
return std::string ("");
|
return std::string ("");
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
// taskwarrior - a command line task list manager.
|
// taskwarrior - a command line task list manager.
|
||||||
//
|
//
|
||||||
// Copyright 2006 - 2010, Paul Beckingham.
|
// Copyright 2006 - 2011, Paul Beckingham, Federico Hernandez.
|
||||||
// All rights reserved.
|
// All rights reserved.
|
||||||
//
|
//
|
||||||
// This program is free software; you can redistribute it and/or modify it under
|
// 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.
|
// taskwarrior - a command line task list manager.
|
||||||
//
|
//
|
||||||
// Copyright 2006 - 2010, Paul Beckingham.
|
// Copyright 2006 - 2011, Paul Beckingham, Federico Hernandez.
|
||||||
// All rights reserved.
|
// All rights reserved.
|
||||||
//
|
//
|
||||||
// This program is free software; you can redistribute it and/or modify it under
|
// 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 ("post-done-command");
|
||||||
validProgramEvents.push_back ("pre-duplicate-command");
|
validProgramEvents.push_back ("pre-duplicate-command");
|
||||||
validProgramEvents.push_back ("post-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 ("pre-edit-command");
|
||||||
validProgramEvents.push_back ("post-edit-command");
|
validProgramEvents.push_back ("post-edit-command");
|
||||||
validProgramEvents.push_back ("pre-export-command");
|
validProgramEvents.push_back ("pre-export-command");
|
||||||
@@ -155,6 +157,8 @@ Hooks::Hooks ()
|
|||||||
validProgramEvents.push_back ("post-ghistory-command");
|
validProgramEvents.push_back ("post-ghistory-command");
|
||||||
validProgramEvents.push_back ("pre-history-command");
|
validProgramEvents.push_back ("pre-history-command");
|
||||||
validProgramEvents.push_back ("post-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 ("pre-import-command");
|
||||||
validProgramEvents.push_back ("post-import-command");
|
validProgramEvents.push_back ("post-import-command");
|
||||||
validProgramEvents.push_back ("pre-info-command");
|
validProgramEvents.push_back ("pre-info-command");
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
// taskwarrior - a command line task list manager.
|
// taskwarrior - a command line task list manager.
|
||||||
//
|
//
|
||||||
// Copyright 2006 - 2010, Paul Beckingham.
|
// Copyright 2006 - 2011, Paul Beckingham, Federico Hernandez.
|
||||||
// All rights reserved.
|
// All rights reserved.
|
||||||
//
|
//
|
||||||
// This program is free software; you can redistribute it and/or modify it under
|
// This program is free software; you can redistribute it and/or modify it under
|
||||||
@@ -30,7 +30,7 @@
|
|||||||
#include <vector>
|
#include <vector>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include "API.h"
|
#include "API.h"
|
||||||
#include "auto.h"
|
#include "../auto.h"
|
||||||
|
|
||||||
// Hook class representing a single hook, which is just a three-way map.
|
// Hook class representing a single hook, which is just a three-way map.
|
||||||
class Hook
|
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.
|
// taskwarrior - a command line task list manager.
|
||||||
//
|
//
|
||||||
// Copyright 2006 - 2010, Paul Beckingham.
|
// Copyright 2006 - 2011, Paul Beckingham, Federico Hernandez.
|
||||||
// All rights reserved.
|
// All rights reserved.
|
||||||
//
|
//
|
||||||
// This program is free software; you can redistribute it and/or modify it under
|
// 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.
|
// taskwarrior - a command line task list manager.
|
||||||
//
|
//
|
||||||
// Copyright 2006 - 2010, Paul Beckingham.
|
// Copyright 2006 - 2011, Paul Beckingham, Federico Hernandez.
|
||||||
// All rights reserved.
|
// All rights reserved.
|
||||||
//
|
//
|
||||||
// This program is free software; you can redistribute it and/or modify it under
|
// 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