Compare commits
502 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
bf36b47593 | ||
|
|
58b077df0e | ||
|
|
9c93fe7c88 | ||
|
|
73110ae033 | ||
|
|
08bbd38615 | ||
|
|
6cb5c7a104 | ||
|
|
b56b5bc29d | ||
|
|
558bf2ca50 | ||
|
|
5ba23a4ecd | ||
|
|
46c031c45c | ||
|
|
f553915b2f | ||
|
|
01bb76b3b6 | ||
|
|
f8d8d2f6b5 | ||
|
|
fe9eb9cacb | ||
|
|
50f23d4b75 | ||
|
|
62d2c6bb5f | ||
|
|
4a1edfb9be | ||
|
|
c20bfffbce | ||
|
|
cfdd7efea9 | ||
|
|
5bc1bfe331 | ||
|
|
9eed851fbb | ||
|
|
6dca4dd056 | ||
|
|
a5123dd2b7 | ||
|
|
488b23f42f | ||
|
|
ffa1bac193 | ||
|
|
2aac37dcb7 | ||
|
|
e6d47f233b | ||
|
|
191d8ef355 | ||
|
|
ca6bfeb2f2 | ||
|
|
0a5e380bbf | ||
|
|
79a4f666aa | ||
|
|
f74bed4355 | ||
|
|
18e9f6e8ec | ||
|
|
6e11267724 | ||
|
|
af490fb634 | ||
|
|
1e38cbd6a0 | ||
|
|
1e37d7a784 | ||
|
|
314f64f775 | ||
|
|
f285ae535f | ||
|
|
34f80d03e3 | ||
|
|
6de940acf1 | ||
|
|
837b89dd2d | ||
|
|
d177acfcbd | ||
|
|
354debcf96 | ||
|
|
12a90fb477 | ||
|
|
47b5586d45 | ||
|
|
12146a6f01 | ||
|
|
e9301257f8 | ||
|
|
bfb29998bf | ||
|
|
c5427c91fc | ||
|
|
9e5f1787d0 | ||
|
|
783867c512 | ||
|
|
bb6f456e04 | ||
|
|
6d653f720d | ||
|
|
4e62d8fddc | ||
|
|
c6bde0aaba | ||
|
|
d39d5af03b | ||
|
|
36800e0a35 | ||
|
|
a921ea4ed6 | ||
|
|
0159cfde2f | ||
|
|
2708b37ce5 | ||
|
|
98861d87d6 | ||
|
|
8823ba5bfa | ||
|
|
96d2acef42 | ||
|
|
0e1d12f5b1 | ||
|
|
1f8ae07b8e | ||
|
|
0bc7dd11a8 | ||
|
|
a288a19c16 | ||
|
|
fec2af34bc | ||
|
|
b609cdb8a0 | ||
|
|
bde1e0dd9a | ||
|
|
a75c018106 | ||
|
|
70306de6bd | ||
|
|
30f757ba13 | ||
|
|
6af7540fe7 | ||
|
|
533bbedd81 | ||
|
|
42521fea8b | ||
|
|
74dcdd897a | ||
|
|
4028a2fce4 | ||
|
|
1b5178c456 | ||
|
|
1a16b3ae6b | ||
|
|
042d7b40de | ||
|
|
b041e54be6 | ||
|
|
5c36013ddd | ||
|
|
b630138e8b | ||
|
|
9e9807a52a | ||
|
|
0aa87d04da | ||
|
|
cb14ed128e | ||
|
|
6fd876b8dd | ||
|
|
616e230920 | ||
|
|
a043b42373 | ||
|
|
952845b1b0 | ||
|
|
0e355b45e1 | ||
|
|
fc26eebea6 | ||
|
|
0c0cb7b0f5 | ||
|
|
84b609f518 | ||
|
|
dece0a8dca | ||
|
|
5d4cafb7a6 | ||
|
|
9e4786e4fe | ||
|
|
fa46fcf8ca | ||
|
|
59fa056c4b | ||
|
|
9f567aa3c6 | ||
|
|
70360cadec | ||
|
|
89f82847fb | ||
|
|
bf316974d9 | ||
|
|
7fdfcbacc6 | ||
|
|
dea7b72b70 | ||
|
|
d73601c0b2 | ||
|
|
adc7992608 | ||
|
|
68d5e3f296 | ||
|
|
0d364746c7 | ||
|
|
eb2cb99532 | ||
|
|
1d3aa891d6 | ||
|
|
dd86c2c875 | ||
|
|
0388bcf259 | ||
|
|
f351bf6dec | ||
|
|
1e7bebb3b2 | ||
|
|
77815c080f | ||
|
|
8a2e979726 | ||
|
|
895a86903e | ||
|
|
3be6ef4bfd | ||
|
|
1639d5952a | ||
|
|
f9f3ae720d | ||
|
|
34c21f5d43 | ||
|
|
7752b37139 | ||
|
|
22bd31059d | ||
|
|
ec3c1c4def | ||
|
|
975c2bbcb9 | ||
|
|
8904daf9e5 | ||
|
|
afbbc87ec4 | ||
|
|
347dda7fa7 | ||
|
|
084d104c2f | ||
|
|
9aedaba7f2 | ||
|
|
b1933c5d25 | ||
|
|
87158f505a | ||
|
|
0dd71612e4 | ||
|
|
73ff6ea973 | ||
|
|
3b7b7b5b23 | ||
|
|
7f54b89f24 | ||
|
|
0930f3c5f7 | ||
|
|
04c6c11175 | ||
|
|
8076a70225 | ||
|
|
e562fc8fd4 | ||
|
|
9d41d9046d | ||
|
|
9b46520ae1 | ||
|
|
3d5656fb57 | ||
|
|
f0a5c917c9 | ||
|
|
6e1a386ec8 | ||
|
|
d012fc9717 | ||
|
|
366c59e25d | ||
|
|
1cc67e9895 | ||
|
|
b32d731010 | ||
|
|
21c3d1ab80 | ||
|
|
ceb7a188bf | ||
|
|
db9333ec64 | ||
|
|
04ddf74a07 | ||
|
|
4d46be0767 | ||
|
|
2eaba55481 | ||
|
|
869655e818 | ||
|
|
d362088305 | ||
|
|
87ce13c8e0 | ||
|
|
4139f32acf | ||
|
|
d3ca5c04e3 | ||
|
|
d8913c2f15 | ||
|
|
808934483f | ||
|
|
d738f778ee | ||
|
|
3a566460a2 | ||
|
|
69ac9a4296 | ||
|
|
f2a5dde3a6 | ||
|
|
d85feef7ea | ||
|
|
4cd528661a | ||
|
|
c27097e286 | ||
|
|
e619f8c91d | ||
|
|
199114abcd | ||
|
|
0e2c090dc5 | ||
|
|
58d678f927 | ||
|
|
3cfcc9fb6b | ||
|
|
a1488d0504 | ||
|
|
547d3bfdbb | ||
|
|
7d048a8ef8 | ||
|
|
44fe227595 | ||
|
|
a9b18da214 | ||
|
|
5c235ce1ef | ||
|
|
d460e604ff | ||
|
|
612c613764 | ||
|
|
d9ec233d23 | ||
|
|
2c055157e6 | ||
|
|
91d5448a5a | ||
|
|
80f9af08e3 | ||
|
|
63384abd14 | ||
|
|
c7cd2d2619 | ||
|
|
d2fe093107 | ||
|
|
7c8793b146 | ||
|
|
ae56165c80 | ||
|
|
d1abda2561 | ||
|
|
d02eac07a9 | ||
|
|
2334911b34 | ||
|
|
36c3cad5a5 | ||
|
|
07e36e695d | ||
|
|
1093119f40 | ||
|
|
8789afb7da | ||
|
|
94bca5443a | ||
|
|
98042548dd | ||
|
|
5b8dbd8ff1 | ||
|
|
41f2520094 | ||
|
|
982ae87ec0 | ||
|
|
0fe75eeedf | ||
|
|
3ae5b6ddc5 | ||
|
|
a306892509 | ||
|
|
a8c8bf4671 | ||
|
|
6d5a03ac45 | ||
|
|
3bb7abf9c3 | ||
|
|
f83cc3f39a | ||
|
|
c95a55128a | ||
|
|
3302a30145 | ||
|
|
599a90ad58 | ||
|
|
5f8f8b51c4 | ||
|
|
7294869d07 | ||
|
|
b8a3c1b565 | ||
|
|
03c9b96955 | ||
|
|
80d1c03457 | ||
|
|
6dd4067167 | ||
|
|
2c858c6988 | ||
|
|
d8544181ce | ||
|
|
3ac627978c | ||
|
|
fce4633de6 | ||
|
|
f6cfa1dfa5 | ||
|
|
aa891401e4 | ||
|
|
c640e05049 | ||
|
|
3945ccf019 | ||
|
|
1687e85335 | ||
|
|
b050d67ba9 | ||
|
|
cade134f40 | ||
|
|
92ede80e4b | ||
|
|
448f865cf1 | ||
|
|
e26f29537a | ||
|
|
d85579d69f | ||
|
|
462c3e1c55 | ||
|
|
70bf3099ee | ||
|
|
db27328558 | ||
|
|
e090f556da | ||
|
|
f60205c704 | ||
|
|
233a6ae951 | ||
|
|
d890e05298 | ||
|
|
2f1c582d7d | ||
|
|
cddc2d5f10 | ||
|
|
44e7a24170 | ||
|
|
471571e493 | ||
|
|
6e1aa42d1a | ||
|
|
3939503377 | ||
|
|
fecdb930d4 | ||
|
|
d0db821298 | ||
|
|
1cf1e79e43 | ||
|
|
69c3ba6f59 | ||
|
|
9cab648d8a | ||
|
|
2ef30b1183 | ||
|
|
4d266412ee | ||
|
|
e44c4ffb82 | ||
|
|
bef7b9b655 | ||
|
|
209a7b8cee | ||
|
|
3952765de0 | ||
|
|
e886f7635b | ||
|
|
76fa56d3fb | ||
|
|
903b5b34d4 | ||
|
|
189fdaf9ac | ||
|
|
96bd3ff8db | ||
|
|
a6fbb40a12 | ||
|
|
78edb61c4c | ||
|
|
3846954c42 | ||
|
|
7468a2d81d | ||
|
|
123a46eef9 | ||
|
|
cb4fe4fffb | ||
|
|
031c4c484d | ||
|
|
43266a825f | ||
|
|
7dc55d831d | ||
|
|
6f67c0093d | ||
|
|
eeeff7d389 | ||
|
|
5cecc3d772 | ||
|
|
a3f1aba6f0 | ||
|
|
30cb5fa4f4 | ||
|
|
e8c0c8861b | ||
|
|
9906174547 | ||
|
|
fb2d08581e | ||
|
|
feeafb9b23 | ||
|
|
a345541ff7 | ||
|
|
9a973770d8 | ||
|
|
e0c60346dc | ||
|
|
faa96dbf6b | ||
|
|
f9e78142be | ||
|
|
da9985058b | ||
|
|
bdbe4ba78a | ||
|
|
3ec8d2fece | ||
|
|
1528fdc7e1 | ||
|
|
e34f278e1d | ||
|
|
455be5b8b7 | ||
|
|
9df86d9aab | ||
|
|
0e9ce4c85f | ||
|
|
4ca69b013f | ||
|
|
1a34a29b7a | ||
|
|
1bb21f9982 | ||
|
|
a57326a026 | ||
|
|
3f6358fea0 | ||
|
|
81a5461d92 | ||
|
|
af3f60cfeb | ||
|
|
445dc415d0 | ||
|
|
afb4d64a0c | ||
|
|
942f665d71 | ||
|
|
51c357af2e | ||
|
|
5ac0bd3800 | ||
|
|
bdaf403a1c | ||
|
|
1b2cfd427c | ||
|
|
9a50c0b963 | ||
|
|
6864ff91cd | ||
|
|
d6a2c1872c | ||
|
|
c43eb31374 | ||
|
|
89eb8371ba | ||
|
|
3dca0283f4 | ||
|
|
5776d608c0 | ||
|
|
63e42c6607 | ||
|
|
9385492114 | ||
|
|
beef03af13 | ||
|
|
10a8916eb1 | ||
|
|
45bb3dd583 | ||
|
|
64344d0328 | ||
|
|
bcd2a79a54 | ||
|
|
7233fcd05b | ||
|
|
54cf7e5471 | ||
|
|
19b803312f | ||
|
|
27a56d15db | ||
|
|
98cef98111 | ||
|
|
d87e7c6934 | ||
|
|
fdf7d2203f | ||
|
|
f814435939 | ||
|
|
5af7e3a7b7 | ||
|
|
8c3fd40c1b | ||
|
|
e9c8bcff63 | ||
|
|
7a23b67020 | ||
|
|
93e862b367 | ||
|
|
90c40dbebf | ||
|
|
7e5c0eb9a5 | ||
|
|
c6f6d405e3 | ||
|
|
b29f9969e5 | ||
|
|
254b418708 | ||
|
|
307027a1d9 | ||
|
|
2b48ae8e38 | ||
|
|
8b02d2bdeb | ||
|
|
28dd5152d7 | ||
|
|
9ed05fc1c8 | ||
|
|
a13989f18e | ||
|
|
97bb07a617 | ||
|
|
01d0d036a4 | ||
|
|
7de5b22f1c | ||
|
|
cb635c0d6f | ||
|
|
111e9f893d | ||
|
|
f96d2e6609 | ||
|
|
8a930653a4 | ||
|
|
bc46888bcd | ||
|
|
67fd7e2faa | ||
|
|
9f96ab28ce | ||
|
|
a66f59a7e1 | ||
|
|
24e1522e32 | ||
|
|
f5bc5dfd0f | ||
|
|
82702bffdc | ||
|
|
1a05224816 | ||
|
|
e4f7bda430 | ||
|
|
38ca8c8fb5 | ||
|
|
ad9c89b9fb | ||
|
|
25db00e97d | ||
|
|
b3f3261190 | ||
|
|
6efd3299fe | ||
|
|
844c980bce | ||
|
|
ce99cbf2d4 | ||
|
|
5fb349ca9b | ||
|
|
00041dce41 | ||
|
|
d6631767b5 | ||
|
|
0c4f83377a | ||
|
|
a45d6b459f | ||
|
|
d77a790f21 | ||
|
|
5ecbd85020 | ||
|
|
6428b026ba | ||
|
|
716ed39695 | ||
|
|
c650edd4f9 | ||
|
|
484c31f0e4 | ||
|
|
d00b57ec65 | ||
|
|
724e9b8113 | ||
|
|
356519e58f | ||
|
|
213a7a519b | ||
|
|
d7c446f010 | ||
|
|
14508742f1 | ||
|
|
6ea6c79375 | ||
|
|
426eac97aa | ||
|
|
7f99d39d19 | ||
|
|
623f8d869e | ||
|
|
b2eb9c3265 | ||
|
|
688233b3a4 | ||
|
|
12cdee9809 | ||
|
|
66fcdfe01f | ||
|
|
0f7cf1cd52 | ||
|
|
007c194c8c | ||
|
|
ff18241f6f | ||
|
|
9477660e02 | ||
|
|
1f8f4c631d | ||
|
|
05fd9278a6 | ||
|
|
f1a0b842dc | ||
|
|
cd59f7f510 | ||
|
|
6a1a1cd70f | ||
|
|
3c2987f53f | ||
|
|
2ab1df77df | ||
|
|
abf31a6b35 | ||
|
|
b6d320d311 | ||
|
|
cd648270ab | ||
|
|
2161ffac2c | ||
|
|
4f4a32b405 | ||
|
|
99bce308e6 | ||
|
|
916b8641b3 | ||
|
|
2f85941d37 | ||
|
|
f3f4ae15eb | ||
|
|
5e53226eb8 | ||
|
|
2c7552222a | ||
|
|
8572080677 | ||
|
|
ba87499eca | ||
|
|
fbe24b3fda | ||
|
|
5e55166617 | ||
|
|
bcd5524563 | ||
|
|
bb19361956 | ||
|
|
78d092c588 | ||
|
|
3da3d3f99d | ||
|
|
e2b240fd06 | ||
|
|
ee6ab69023 | ||
|
|
74e13670d0 | ||
|
|
d37c798dbc | ||
|
|
c93db168f3 | ||
|
|
52c029d4d9 | ||
|
|
c9360ad9c4 | ||
|
|
51e5a18384 | ||
|
|
f1368d6ac6 | ||
|
|
70e6f4f9f6 | ||
|
|
2bfd220714 | ||
|
|
3214c1f02a | ||
|
|
297f48a07c | ||
|
|
ea067acb52 | ||
|
|
8a70b78d71 | ||
|
|
e368043fb8 | ||
|
|
3ef6aa9f8e | ||
|
|
8cd8c4753b | ||
|
|
24085e0960 | ||
|
|
d92e80e289 | ||
|
|
fcbc8a2ee2 | ||
|
|
336a4dea01 | ||
|
|
67ffd07312 | ||
|
|
b2ad305f23 | ||
|
|
fa34f47f8a | ||
|
|
9a47e2b748 | ||
|
|
60d6cd62c8 | ||
|
|
60a99725b8 | ||
|
|
635c6432d4 | ||
|
|
eb1304ec41 | ||
|
|
a5b57ec2ac | ||
|
|
783225cd70 | ||
|
|
804b6a8cdb | ||
|
|
a31e9a5a3c | ||
|
|
8553811889 | ||
|
|
68ae9173ae | ||
|
|
72763f2a2b | ||
|
|
89267846ca | ||
|
|
38d82f6564 | ||
|
|
ac431ac5c9 | ||
|
|
fa7ea5cad5 | ||
|
|
17069843d9 | ||
|
|
d6251142a2 | ||
|
|
a3a941fd92 | ||
|
|
b6e9b84c80 | ||
|
|
2791578410 | ||
|
|
d3628c04db | ||
|
|
10450963cb | ||
|
|
fa8c33da45 | ||
|
|
e8942d11ee | ||
|
|
078e612de0 | ||
|
|
70da455f1a | ||
|
|
e5f7e18d56 | ||
|
|
98ebe8b7cc | ||
|
|
6304ca7c1f | ||
|
|
f6ff18e31d | ||
|
|
dbf8def7db | ||
|
|
df8eb7d5ef | ||
|
|
485734e107 | ||
|
|
f4dc5c3674 | ||
|
|
95e420bb15 | ||
|
|
409c6ee9b9 | ||
|
|
fa195a3cb2 | ||
|
|
cda959a658 | ||
|
|
a5d8ef524e | ||
|
|
cb1b1510a9 | ||
|
|
3f2c68377c | ||
|
|
846d9bfd83 | ||
|
|
eac6c3fca9 | ||
|
|
d082a6baad | ||
|
|
251f8e5704 | ||
|
|
0282e2be28 | ||
|
|
8229a96252 | ||
|
|
c34aeba5a4 | ||
|
|
816f0533be |
25
AUTHORS
25
AUTHORS
@@ -1,11 +1,15 @@
|
||||
The development of task was made possible by the significant contributions of the following people:
|
||||
The development of taskwarrior was made possible by the significant
|
||||
contributions of the following people:
|
||||
|
||||
Paul Beckingham (Principal Author)
|
||||
Federico Hernandez (Package Maintainer & Contributing Author)
|
||||
David J Patrick (Designer)
|
||||
John Florian (Contributing Author)
|
||||
Cory Donnelly (Contributing Author)
|
||||
Johannes Schlatow (Contributing Author)
|
||||
|
||||
The following submitted code, packages or analysis, and deserve special thanks:
|
||||
|
||||
Damian Glenny
|
||||
Andy Lester
|
||||
H. İbrahim Güngör
|
||||
@@ -20,15 +24,24 @@ The following submitted code, packages or analysis, and deserve special thanks:
|
||||
Steven de Brouwer
|
||||
Pietro Cerutti
|
||||
Alexander Neumann
|
||||
Emil Sköldberg
|
||||
Michal Josífko
|
||||
Ed Neville
|
||||
Kevin Owens
|
||||
Mick Koch
|
||||
Kathryn Andersen
|
||||
Alexander Schremmer
|
||||
Jostein Berntsen
|
||||
|
||||
Thanks to the following, who submitted detailed bug reports and excellent
|
||||
suggestions:
|
||||
|
||||
Thanks to the following, who submitted detailed bug reports and excellent suggestions:
|
||||
Eugene Kramer
|
||||
Srijith K
|
||||
Bruce Israel
|
||||
Thomas Engel
|
||||
Nishiishii
|
||||
galvanizd
|
||||
Stas Antons
|
||||
Vincent Fleuranceau
|
||||
ArchiMark
|
||||
Carlos Yoder
|
||||
@@ -44,3 +57,9 @@ Thanks to the following, who submitted detailed bug reports and excellent sugges
|
||||
Ivo Jimenez
|
||||
Joe Pulliam
|
||||
Juergen Daubert
|
||||
Rich Mintz
|
||||
Seneca Cunningham
|
||||
Dirk Deimeke
|
||||
Michelle Crane
|
||||
Elizabeth Maxson
|
||||
Peter De Poorter
|
||||
|
||||
188
ChangeLog
188
ChangeLog
@@ -1,7 +1,188 @@
|
||||
|
||||
------ current release ---------------------------
|
||||
|
||||
1.9.0 (2/22/2010)
|
||||
1.9.3 (11/08/2010)
|
||||
+ Added feature #43, now task supports relative dates like '3wks',
|
||||
'1 month', '4d' for 'due', 'wait' and 'until' dates. Essentially
|
||||
durations are now allowed where dates are expected, and are treated
|
||||
as relative to the current date/time.
|
||||
+ Added feature #189, that records the start and stop times as an
|
||||
annotation for a task.
|
||||
+ Added features #244, #272, #273, #274, #275 and #279, which support
|
||||
import and export of YAML 1.1. YAML is now the default export format
|
||||
for task.
|
||||
+ Added feature #391, now the 'task color legend' command will show
|
||||
samples of all the defined colors and color rules from your .taskrc
|
||||
and theme.
|
||||
+ Added feature #410, and now task supports dependencies between tasks
|
||||
with the syntax 'task 1 depends:2' to add a dependency, or 'task 1
|
||||
depends:-2' to remove a dependency.
|
||||
+ Added feature #421, and now task can sync data files from two sources
|
||||
via the 'merge' command.
|
||||
+ Added feature #423, now custom report filters allow rc overrides.
|
||||
+ Added feature #428, preparing the new structure for the NEWS file.
|
||||
+ Added feature #429, which improves the 'all' report to exclude deleted.
|
||||
tasks, provide a new sort order and include the 'end' column.
|
||||
+ Added feature #431, which improves feedback after running the 'log'
|
||||
command.
|
||||
+ Added feature #446, task supports now 'sow', 'som' and 'soy' as dates
|
||||
for 'due', 'wait' and 'until' (thanks to T. Charles Yun).
|
||||
Added as well synonyms soww/eoww plus new socw/eocw for calendar weeks.
|
||||
+ Fixed bug #467, where recurring tasks were not honoring wait values.
|
||||
+ Added feature #471, which makes greater use of projects by reporting
|
||||
changes to the completion percentage when it changes.
|
||||
+ Added feature #478, which uses the colorization rules in the 'info'
|
||||
report.
|
||||
+ Added feature #481, allowing for user control of the color rule order
|
||||
of precedence via the 'rule.precedence.color' configuration variable.
|
||||
+ Fixed bug #493, which made waiting, recurring tasks invisible (thanks to
|
||||
Alexander Schremmer).
|
||||
+ Added feature #499, giving an extra line in the message output when
|
||||
doing bulk done changes (thanks to T. Charles Yun).
|
||||
+ New 'depends' column for custom reports.
|
||||
+ New 'blocked' report for showing blocked tasks.
|
||||
+ New 'unblocked' report for showing tasks that are not blocked.
|
||||
+ Improved man pages (thanks to Andy Lester).
|
||||
+ Default .taskrc files are now largely empty, and rely almost completed
|
||||
on default values.
|
||||
+ Special tags 'nocal', 'nocolor' and 'nonag' are implemented.
|
||||
+ The 'tags' command highlights special tags.
|
||||
+ The 'stats' and 'info' reports not obey color.alternate.
|
||||
+ New fish shell tab completion script (thanks to Mick Koch).
|
||||
+ Color rules now obey the rc.search.case.sensitive configuration option.
|
||||
+ The color.keyword.XXX color rule now applies to annotations too.
|
||||
+ Importing the same YAML twice now generates an error.
|
||||
+ Two new color themes (thanks to Kathryn Andersen).
|
||||
+ More localized holiday files for US, CA, SE, DE, FR, UK, ES, NL and NO
|
||||
(thanks to T. Charles Yun, Jostein Berntsen).
|
||||
+ Added new 'diagnostics' command to help with bug submission, testing.
|
||||
+ Fixed bug #427, preventing the task edit command to parse annotation
|
||||
dates with spaces.
|
||||
+ Fixed bug #433, making task command output more consistent.
|
||||
+ Fixed bug #434, allowing users to complete tasks with status 'waiting'
|
||||
+ Fixed bug #438, correcting the sorting of the entry_time, start_time
|
||||
and end_time columns (thanks to Michelle Crane).
|
||||
+ Fixed bug #439, which ignored dateformat.annotation for sparse annotations.
|
||||
+ Fixed bug #440, which prevented simultaneous append/prepend and substitution.
|
||||
+ Fixed bug #441, which misparsed '/a/a:/' as an attribute, rather than a
|
||||
substitution (thanks to Michelle Crane).
|
||||
+ Fixed bug #444, which made task shell unusable after canceling out of an
|
||||
undo command.
|
||||
+ Fixed bug #445, which caused task to not notice that the command 'h' is
|
||||
ambiguous.
|
||||
+ Fixed bug #449, so the wait: attribute can be applied to a task at any
|
||||
time, not just on add.
|
||||
+ Fixed bug #452, which defines a higher resolution division between due
|
||||
and overdue.
|
||||
+ Fixed bug #459, which showed a confusing message when 'limit:page' was
|
||||
used, with few tasks.
|
||||
+ Fixed bug #461, in which the filter 'due:today' failed, but 'due.is:today'
|
||||
worked.
|
||||
+ Fixed bug #466, which gave the wrong error message when a custom report
|
||||
was missing a direction indicator for the sort order.
|
||||
+ Fixed bug #470, which caused task to not support the color 'none'.
|
||||
+ Fixed bug #476, so that task now issues a warning when a wait date falls
|
||||
after a due date (thanks to T. Charles Yun).
|
||||
+ Fixed bug #480, which didn't properly support @ characters in tags. This
|
||||
also now supports $ and #.
|
||||
+ Fixed bug #489, which caused the filter 'tags.none:' to fail.
|
||||
+ Fixed bug #494, causing imported text files to ultimately lack uuids
|
||||
(thanks to Elizabeth Maxson).
|
||||
+ Fixed problem with command line configuration overrides that had no
|
||||
values.
|
||||
+ Fixed problem with the 'undo' command not observing the rc.color or the
|
||||
rc._forcecolor settings.
|
||||
+ Fixed problem with extra blank line in the ghistory reports.
|
||||
+ Fixed a precision problem with average age on the summary report.
|
||||
+ Clarified the documentation regarding the project name (taskwarrior) and
|
||||
the program name (task).
|
||||
|
||||
------ old releases ------------------------------
|
||||
|
||||
1.9.2 (7/10/2010) a13989f18eb34b3363f433c965084b6491425b9f
|
||||
+ Added feature #320, so the command "task 123" is interpreted as an implicit
|
||||
"task info 123" command (thanks to John Florian).
|
||||
+ Added feature #326, allowing tasks to be added in the completed state, by
|
||||
using the 'log' command in place of 'add' (thanks to Cory Donnelly).
|
||||
+ Added features #36 and #37, providing annual versions of the 'history' and
|
||||
'ghistory' command as 'history.annual' and 'ghistory.annual'.
|
||||
+ Added feature #363 supporting iCalendar/vcalendar (RFC-2445, RFC-5545,
|
||||
RFC-5546) export via the 'export.ical' command.
|
||||
+ Added feature #390, an extra dateformat for annotations (thanks to Cory
|
||||
Donnelly).
|
||||
+ Added feature #407, a new 'task show' command to display the current
|
||||
configuration settings or just the ones matching a search string.
|
||||
'task config' is now only used to set new configuration values.
|
||||
+ Added feature #298, supporting a configurable number of future recurring
|
||||
tasks that are generated.
|
||||
+ Added feature #412, which allows the 'projects' and 'tags' commands to be
|
||||
list all used projects/tags, not just the ones used in current pending tasks.
|
||||
Controlled by the 'list.all.projects' and 'list.all.tags' configuration
|
||||
variables (thanks to Dirk Deimeke).
|
||||
+ Added feature #415, which supports displaying just a single page of tasks,
|
||||
by specifying either 'limit:page' to a command, or 'report.xxx.limit:page'
|
||||
in a report specification (thanks to T. Charles Yun).
|
||||
+ Improvements to the man pages (thanks to T. Charles Yun).
|
||||
+ Modified the 'next' report to only display one page, by default.
|
||||
+ Added feature #408, making it possible to delete annotations with the new
|
||||
denotate command and the provided description (thanks to Dirk Deimeke).
|
||||
+ Added support for more varied durations when specifying recurring tasks,
|
||||
such as '3 mths' or '24 hrs'.
|
||||
+ The ghistory graph bars can now be colored with 'color.history.add',
|
||||
'color.history.done' and 'color.history.delete' configuration variables.
|
||||
+ Added feature #156, so that task supports both a 'side' and 'diff' style
|
||||
of undo.
|
||||
+ Distribution now includes 7 theme files, for 16- and 256-color terminals.
|
||||
+ Task now defaults to using the equivalent to the dark-16.theme.
|
||||
+ Fixed bug #406 so that task now includes command aliases in the _commands
|
||||
helper command used by shell completion scripts.
|
||||
+ Fixed bug #211 - it was unclear which commands modify a task description.
|
||||
+ Fixed bug #411, clarifying that the 'projects' command only lists projects
|
||||
for which there are pending tasks (thanks to Dirk Deimeke).
|
||||
+ Fixed bug #414, that caused filtering on the presence or absence of tags
|
||||
containing Unicode characters to fail (thanks to Michal Josífko).
|
||||
+ Fixed bug #416, which caused sorting on a date to fail if the year was not
|
||||
included in the dateformat (thanks to Michelle Crane).
|
||||
+ Fixed bug #417, which caused sorting on countdown and age fields to be
|
||||
wrong (thanks to Michell Crane).
|
||||
+ Fixed bug #418, which caused the attribute modifier 'due.before' to fail
|
||||
if the year was not included in the dateformat (thanks to Michelle Crane).
|
||||
+ Fixed bug #132, which failed to set a sort order so that active tasks sort
|
||||
higher than inactive tasks, all things being equal.
|
||||
+ Fixed bug #405, which incorrectly compared dates on tasks created by
|
||||
versions earlier than 1.9.1 to those created by 1.9.1 or later (thanks to
|
||||
Ivo Jimenez).
|
||||
+ Fixed bug #420, missing 'ID' from help text (thanks to Ed Neville).
|
||||
+ Fixed bug that prevented 'task list priority.above:L' from working.
|
||||
+ Fixed bug that miscalculated terminal width for the ghistory.annual
|
||||
report.
|
||||
+ Fixed wording (support issue #383) when modifying a recurring task (thanks
|
||||
to T. Charles Yun).
|
||||
|
||||
1.9.1 (5/22/2010) 60a99725b858be134ad538cb7c1a32c98de70e67
|
||||
+ Summary report bar colors can now be specified with color.summary.bar
|
||||
and color.summary.background configuration variables.
|
||||
+ The 'edit' command now conveniently fills in the current date for new
|
||||
annotations.
|
||||
+ Deleting a task no longer clobbers any recorded end date (thanks to
|
||||
Seneca Cunningham).
|
||||
+ The following holidays are now computed automatically and can be used
|
||||
in the definitions for the calendar holidays:
|
||||
Good Friday (goodfriday), Easter (easter), Easter monday
|
||||
(eastermonday), Ascension (ascension), Pentecost (pentecost)
|
||||
The date is configured with the given keyword.
|
||||
+ The configure script is more portable (thanks to Emil Sköldberg).
|
||||
+ Updated task-faq.5 man page.
|
||||
+ Fixed bug #382 in which the annotate command didn't return an error
|
||||
message when called without an ID.
|
||||
+ Fixed bug #402 which failed compilation on Arch Linux (thanks to
|
||||
Johannes Schlatow).
|
||||
+ Fixed bug #401 that ignored the search.case.sensitive configuration
|
||||
setting when filtering on project names (thanks to John Florian).
|
||||
+ Fixed bug #395 that prevented the upgrade of a pending task to a
|
||||
recurring task (thanks to T. Charles Yun).
|
||||
|
||||
1.9.0 (2/22/2010) dd758f8b33de110a633e2ff3ebdac73232b8ff44
|
||||
+ Added feature #283 that makes it possible to control the verbosity
|
||||
of the output of annotations.
|
||||
+ Added feature #254 (#295) which gives task a second date format to be
|
||||
@@ -63,8 +244,7 @@
|
||||
+ Added a new 'task-color' man page detailing how to set up and use color in
|
||||
task.
|
||||
+ Added feature #176, which allows for configurable case-sensitivity for
|
||||
keyword
|
||||
searches and substitutions (thanks to John Florian).
|
||||
keyword searches and substitutions (thanks to John Florian).
|
||||
+ Task can now use an alternate tag indicator by setting the tag.indicator
|
||||
configuration variable to something other than the default of +.
|
||||
+ Task can now use an alternate active indicator by setting the
|
||||
@@ -103,8 +283,6 @@
|
||||
+ Fixed bug #372 which incorrectly mapped 16-color backgrounds into the
|
||||
256-color space.
|
||||
|
||||
------ old releases ------------------------------
|
||||
|
||||
1.8.5 (12/05/2009) a6c7236ff34e5eee3ef1693b97cb1367e6e3c607
|
||||
+ Added feature to allow the user to quit when asked to confirm multiple
|
||||
changes. Now task asks "Proceed with change? (Yes/no/all/quit)".
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
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
|
||||
dist_man_MANS = doc/man/task.1 doc/man/taskrc.5 doc/man/task-tutorial.5 doc/man/task-faq.5 doc/man/task-color.5 doc/man/task-sync.5
|
||||
|
||||
#docdir = $(datadir)/doc/${PACKAGE}-${VERSION}
|
||||
doc_DATA = AUTHORS ChangeLog COPYING NEWS README
|
||||
@@ -20,5 +20,5 @@ i18ndir = $(docdir)
|
||||
nobase_dist_i18n_DATA = i18n/strings.de-DE i18n/strings.en-US i18n/strings.es-ES i18n/strings.fr-FR i18n/strings.nl-NL i18n/strings.sv-SE i18n/tips.de-DE i18n/tips.en-US i18n/tips.sv-SE
|
||||
|
||||
rcfiledir = $(docdir)/rc
|
||||
dist_rcfile_DATA = doc/rc/holidays-US.rc doc/rc/holidays-SE.rc doc/rc/dark-16.theme doc/rc/dark-256.theme doc/rc/light-16.theme doc/rc/light-256.theme
|
||||
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
|
||||
|
||||
|
||||
95
NEWS
95
NEWS
@@ -1,44 +1,95 @@
|
||||
|
||||
New Features in task 1.9
|
||||
New Features in taskwarrior 1.9.3
|
||||
|
||||
- 256-color support
|
||||
- Support for coloring alternate lines of output. Remember that old green
|
||||
and white fan-fold printer paper?
|
||||
- Supports nested .taskrc files with the new "include" statement"
|
||||
- New columns that include the time as well as date
|
||||
- New attribute modifiers
|
||||
- New date format for reports
|
||||
- Improved .taskrc validation
|
||||
- Improved calendar report with custom coloring and optional task details output
|
||||
- Holidays are now supported in the calendar report
|
||||
- Ability to use multiple, similar filter terms, like:
|
||||
task list project.not:foo project.not:bar
|
||||
- Ability to do case-sensitive or case-insensitive search for keywords, and
|
||||
substitutions in the description and annotations.
|
||||
- Task is now part of Debian
|
||||
- Start and stop times for a task can now be recorded as annotations.
|
||||
- Special tags 'nocolor', 'nocal' and 'nonag'.
|
||||
- Now supports durations in dates, such as:
|
||||
$ task ... due:4d
|
||||
$ task ... due:3wks
|
||||
- 'sow', 'som' and 'soy' are now accepted in dates. 'soww' and 'eoww' are
|
||||
now synonyms for 'sow' and 'eow' (ww = working week) 'socw' and 'eocw'
|
||||
refer to the calendar week (starting Sunday/Monday and
|
||||
- Now supports the beginning of the week, month and year in dates.
|
||||
- Now supports 'now' as a date/time.
|
||||
- Now defines an overdue task as being one second after the due date,
|
||||
instead of the day after the due date.
|
||||
- Import and export of YAML 1.1, including round-trip capability, and
|
||||
detection of duplicate imports.
|
||||
- New merge capability for syncing task data files.
|
||||
- New push capability for distributing merged changes.
|
||||
- New pull capability for copying data files from a remote location.
|
||||
- When completing or modifying a task, the project status is displayed.
|
||||
- The 'info' report is now colorized.
|
||||
- Certain characters (#, $, @) are now supported for use in tags.
|
||||
- User-controlled color rule precedence.
|
||||
- Two new color themes.
|
||||
- New holiday files for US, SE, DE, CA, FR, UK, ES, NL and NO localizations.
|
||||
- Task dependencies, and new 'blocked' and 'unblocked' reports for list
|
||||
those tasks.
|
||||
|
||||
Please refer to the ChangeLog file for full details. There are too many to
|
||||
list here.
|
||||
|
||||
Task has been built and tested on the following configurations:
|
||||
New commands in taskwarrior 1.9.3
|
||||
|
||||
- New 'task color legend' command will show samples of all the defined colors
|
||||
and color rules from your .taskrc and theme.
|
||||
- New 'task export.yaml' command will export YAML 1.1, which can then be
|
||||
imported via 'task import <file>'.
|
||||
- New 'task merge <url>' command that can merge the local and an undo.data
|
||||
file from another taskwarrior user, to sync across machines, for example.
|
||||
- New 'task push <url>' command to distribute merged changes.
|
||||
- New 'task pull <url>' command to copy data files from a remote location.
|
||||
- New 'diagnostics' command to aid bug reporting.
|
||||
|
||||
New configuration options in taskwarrior 1.9.3
|
||||
|
||||
- journal.time, journal.time.start.annotation, journal.time.stop.annotation
|
||||
ending Saturday/Sunday).
|
||||
- Color rule precedence can now be explicitly set with the configuration
|
||||
variable rule.precedence.color. Try "task show rule.pre" to show the
|
||||
default settings.
|
||||
- merge.autopush to control whether pushing after merging is automated.
|
||||
- merge.*.uri to configure source locations for the merge command
|
||||
(e.g. merge.default.uri).
|
||||
- push.*.uri to configure target locations for the push command.
|
||||
- pull.*.uri to configure source locations for the pull command.
|
||||
- dependency.confirm controls whether dependency chain repair needs to be
|
||||
confirmed.
|
||||
- dependency.reminder controls whether the user is nagged about dependency
|
||||
chain violations.
|
||||
|
||||
Newly deprecated features in taskwarrior 1.9.3
|
||||
|
||||
- entry_time, start_time and end_time are now synonyms for the entry, start
|
||||
and end fields. Recent enhancements to date formatting render these fields
|
||||
obsolete. The 'task show' command warns of the use of these deprecated
|
||||
fields. The synonyms will be removed in a future version of taskwarrior.
|
||||
|
||||
---
|
||||
|
||||
Taskwarrior has been built and tested on the following configurations:
|
||||
|
||||
* OS X 10.6 Snow Leopard and 10.5 Leopard
|
||||
* Fedora 12 Constantine and 11 Leonidas
|
||||
* Ubuntu 9.10 Karmic Koala and 9.04 Jaunty Jackalope
|
||||
* Fedora 13 Goddard, 12 Constantine
|
||||
* Ubuntu 10.10 Maverick Meerkat, 10.04 Lucid Lynx
|
||||
* Debian Sid
|
||||
* Slackware 12.2
|
||||
* Arch Linux
|
||||
* Gentoo Linux
|
||||
* SliTaz Linux
|
||||
* CRUX Linux
|
||||
* SuSE 11.3
|
||||
* Solaris 10 and 8
|
||||
* OpenBSD 4.5
|
||||
* FreeBSD
|
||||
* Cygwin 1.7 and 1.5
|
||||
* Haiku R1/alpha1
|
||||
|
||||
While Task has undergone testing, bugs are sure to remain. If you encounter a
|
||||
bug, please enter a new issue at:
|
||||
---
|
||||
|
||||
While Taskwarrior has undergone testing, bugs are sure to remain. If you
|
||||
encounter a bug, please enter a new issue at:
|
||||
|
||||
http://taskwarrior.org/projects/taskwarrior/issues/new
|
||||
|
||||
@@ -51,5 +102,3 @@ Or just send a message to:
|
||||
support@taskwarrior.org
|
||||
|
||||
Thank you.
|
||||
|
||||
---
|
||||
|
||||
12
README
12
README
@@ -1,10 +1,10 @@
|
||||
|
||||
Thank you for taking a look at task!
|
||||
Thank you for taking a look at taskwarrior!
|
||||
|
||||
Task is a GTD, todo list, task management, command line utility with a multitude
|
||||
of features. It is a portable, well supported, very active project, and it is
|
||||
Open Source. Task has binary distributions, online documentation, demonstration
|
||||
movies, and you'll find all the details at:
|
||||
Taskwarrior is a GTD, todo list, task management, command line utility with a
|
||||
multitude of features. It is a portable, well supported, very active project,
|
||||
and it is Open Source. Taskwarrior has binary distributions, online
|
||||
documentation, demonstration movies, and you'll find all the details at:
|
||||
|
||||
http://taskwarrior.org
|
||||
|
||||
@@ -18,6 +18,6 @@ Please send your support questions and code patches to:
|
||||
|
||||
support@taskwarrior.org
|
||||
|
||||
Consider joining taskwarrior.org and participating in the future of task.
|
||||
Consider joining taskwarrior.org and participating in the future of taskwarrior.
|
||||
|
||||
---
|
||||
|
||||
28
README.build
28
README.build
@@ -1,14 +1,14 @@
|
||||
|
||||
Task Build Notes
|
||||
Taskwarrior Build Notes
|
||||
----------------
|
||||
|
||||
Task 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.
|
||||
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 task 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.
|
||||
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.
|
||||
|
||||
|
||||
|
||||
@@ -16,7 +16,7 @@ Operating System Notes
|
||||
----------------------
|
||||
|
||||
Cygwin 1.7
|
||||
Building task on Cygwin 1.7 requires a configure option:
|
||||
Building taskwarrior on Cygwin 1.7 requires a configure option:
|
||||
|
||||
./configure --with-ncurses-inc=/usr/include/ncurses
|
||||
|
||||
@@ -25,7 +25,7 @@ Cygwin 1.7
|
||||
|
||||
|
||||
Haiku Alpha/R1
|
||||
Task must be built with gcc version 4.x, so make sure you run:
|
||||
Taskwarrior must be built with gcc version 4.x, so make sure you run:
|
||||
|
||||
$ setgcc gcc4
|
||||
|
||||
@@ -84,15 +84,15 @@ locate and use the ncurses library. They are:
|
||||
|
||||
--without-ncurses
|
||||
|
||||
This disables ncurses support in task, and should really be used as a last
|
||||
resort. We know of no systems where this is needed.
|
||||
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 task 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.
|
||||
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.
|
||||
|
||||
---
|
||||
|
||||
12
configure.ac
12
configure.ac
@@ -2,7 +2,7 @@
|
||||
# Process this file with autoconf to produce a configure script.
|
||||
|
||||
AC_PREREQ(2.61)
|
||||
AC_INIT(task, 1.9.0, support@taskwarrior.org)
|
||||
AC_INIT(task, 1.9.3, support@taskwarrior.org)
|
||||
|
||||
|
||||
# Source type.
|
||||
@@ -80,7 +80,7 @@ AC_ARG_WITH([ncurses-lib],
|
||||
[ncurses_lib=$withval],
|
||||
[ncurses_lib=''])
|
||||
|
||||
if test "x$with_ncurses" == "xyes" ; then
|
||||
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"
|
||||
@@ -111,7 +111,7 @@ fi
|
||||
# [readline_lib=$withval],
|
||||
# [readline_lib=''])
|
||||
#
|
||||
#if test "x$with_readline" == "xyes" ; then
|
||||
#if test "x$with_readline" = "xyes" ; then
|
||||
# AC_DEFINE([HAVE_LIBREADLINE], [1], [Defined if you have libreadline])
|
||||
# if test -n "$readline_inc"; then
|
||||
# CFLAGS="$CFLAGS -I$readline_inc"
|
||||
@@ -142,7 +142,7 @@ AC_ARG_WITH([lua-lib],
|
||||
[lua_lib=$withval],
|
||||
[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])
|
||||
if test -n "$lua_inc"; then
|
||||
CFLAGS="$CFLAGS -I$lua_inc"
|
||||
@@ -169,6 +169,10 @@ AC_CONFIG_SRCDIR([src/main.cpp])
|
||||
AC_CONFIG_HEADER([auto.h])
|
||||
|
||||
|
||||
# Checks for libraries.
|
||||
AC_CHECK_LIB(pthread,pthread_create)
|
||||
|
||||
|
||||
# Checks for header files.
|
||||
AC_HEADER_STDC
|
||||
AC_CHECK_HEADERS([stdlib.h sys/file.h sys/stat.h sys/time.h unistd.h])
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
.TH task-color 5 2010-02-03 "task 1.9.0" "User Manuals"
|
||||
.TH task-color 5 2010-10-07 "task 1.9.3" "User Manuals"
|
||||
|
||||
.SH NAME
|
||||
task-color \- A color tutorial for the task(1) command line todo manager.
|
||||
@@ -18,8 +18,8 @@ which shell you use). If this is a new setting, you will need to either run
|
||||
that profile script, or close and reopen the terminal window (which does the
|
||||
same thing).
|
||||
|
||||
Now tell task that you want to use color. This is the default for task, so
|
||||
the following step may be unnecessary.
|
||||
Now tell taskwarrior that you want to use color. This is the default for
|
||||
taskwarrior, so the following step may be unnecessary.
|
||||
|
||||
$ task config color on
|
||||
|
||||
@@ -28,25 +28,25 @@ like:
|
||||
|
||||
color=on
|
||||
|
||||
Now task is ready.
|
||||
Now taskwarrior is ready.
|
||||
|
||||
.SH AUTOMATIC MONOCHROME
|
||||
It should be mentioned that task is aware of whether it's output is going to a
|
||||
terminal, or to a file or through a pipe. When task output goes to a terminal,
|
||||
color is desirable, but consider the following command:
|
||||
It should be mentioned that taskwarrior is aware of whether its output is going
|
||||
to a terminal, or to a file or through a pipe. When taskwarrior output goes to
|
||||
a terminal, color is desirable, but consider the following command:
|
||||
|
||||
$ task list > file.txt
|
||||
|
||||
Do we really want all those color control codes in the file? Task assumes that
|
||||
you do not, and temporarily sets color to 'off' while generating the output.
|
||||
This explains the output from the following command:
|
||||
Do we really want all those color control codes in the file? Taskwarrior
|
||||
assumes that you do not, and temporarily sets color to 'off' while generating
|
||||
the output. This explains the output from the following command:
|
||||
|
||||
$ task config | grep '^color '
|
||||
color off
|
||||
|
||||
it always returns 'off', no matter what the setting.
|
||||
|
||||
The reason is that the task output gets piped into grep, and the color is
|
||||
The reason is that the taskwarrior output gets piped into grep, and the color is
|
||||
disabled. If you wanted those color codes, you can override this behavior by
|
||||
setting the _forcecolor variable to on, like this:
|
||||
|
||||
@@ -60,7 +60,7 @@ or by temporarily overriding it like this:
|
||||
color on
|
||||
|
||||
.SH AVAILABLE COLORS
|
||||
Task has a 'color' command that will show all the colors it is capable of
|
||||
Taskwarrior has a 'color' command that will show all the colors it is capable of
|
||||
displaying. Try this:
|
||||
|
||||
$ task color
|
||||
@@ -106,7 +106,8 @@ There is an additional 'underline' attribute that may be used:
|
||||
|
||||
underline bright red on black
|
||||
|
||||
Task has a command that helps you visualize these color combinations. Try this:
|
||||
Taskwarrior has a command that helps you visualize these color combinations.
|
||||
Try this:
|
||||
|
||||
$ task color underline bright red on black
|
||||
|
||||
@@ -187,16 +188,25 @@ combination:
|
||||
|
||||
red on gray3
|
||||
|
||||
you are mixing a 16-color and 256-color specification. Task will map red to
|
||||
color1, and proceed. Note that red and color1 are not quite the same.
|
||||
you are mixing a 16-color and 256-color specification. Taskwarrior will map red
|
||||
to color1, and proceed. Note that red and color1 are not quite the same.
|
||||
|
||||
Note also that there is no bold or bright attributes when dealing with 256
|
||||
colors, but there is still underline available.
|
||||
|
||||
.SH LEGEND
|
||||
Taskwarrior will show examples of all defined colors used in your .taskrc, or
|
||||
theme, if you run this command:
|
||||
|
||||
$ task color legend
|
||||
|
||||
This gives you an example of each of the colors, so you can see the effect,
|
||||
without necessarily creating a set of tasks that meet each of the rule criteria.
|
||||
|
||||
.SH RULES
|
||||
Task supports colorization rules. These are configuration values that specify
|
||||
a color, and the conditions under which that color is used. By example, let's
|
||||
add a few tasks:
|
||||
Taskwarrior supports colorization rules. These are configuration values that
|
||||
specify a color, and the conditions under which that color is used. By example,
|
||||
let's add a few tasks:
|
||||
|
||||
$ task add project:Home priority:H pay the bills (1)
|
||||
$ task add project:Home clean the rug (2)
|
||||
@@ -226,35 +236,75 @@ It is possible to create a very colorful mix of rules. With 256-color support,
|
||||
those colors can be made subtle, and complementary, but without care, this can
|
||||
be a visual mess. Beware!
|
||||
|
||||
The precedence for the color rules is determined by the configuration variable
|
||||
'rule.precedence.color', which by default contains:
|
||||
|
||||
due.today,active,blocked,overdue,due,keyword,project,tag,recurring,pri,tagged
|
||||
|
||||
These are just the color rules with the 'color.' prefix removed. The rule
|
||||
'color.due.today' is the highest precedence, and 'color.tagged' is the lowest.
|
||||
|
||||
The keyword rule shown here as 'keyword' corresponds to a wildcard pattern,
|
||||
meaning 'color.keyword.*', or in other words all the keyword rules. Similarly
|
||||
for the 'color.tag.*' and 'color.project.*' rules.
|
||||
|
||||
There is also 'color.project.none', 'color.tag.none' and 'color.pri.none'.
|
||||
|
||||
.SH THEMES
|
||||
Task supports themes. What this really means is that with the ability to
|
||||
Taskwarrior supports themes. What this really means is that with the ability to
|
||||
include other files into the .taskrc file, different sets of color rules can
|
||||
be included.
|
||||
|
||||
To get a good idea of what a color theme looks like, try adding this entry to
|
||||
your .taskrc file:
|
||||
|
||||
include /usr/local/share/doc/task/themes/dark-256.theme
|
||||
.RS
|
||||
include /usr/local/share/doc/task/rc/dark-256.theme
|
||||
.RE
|
||||
|
||||
Better yet, create your own, and share it.
|
||||
You can use any of the standard taskwarrior themes:
|
||||
|
||||
.RS
|
||||
light-16.theme
|
||||
.br
|
||||
light-256.theme
|
||||
.br
|
||||
dark-16.theme
|
||||
.br
|
||||
dark-256.theme
|
||||
.br
|
||||
dark-red-256.theme
|
||||
.br
|
||||
dark-green-256.theme
|
||||
.br
|
||||
dark-blue-256.theme
|
||||
.RE
|
||||
|
||||
You can also see how the theme will color the various tasks with the command:
|
||||
|
||||
$ task color legend
|
||||
|
||||
Better yet, create your own, and share it. We will gladly host the theme file
|
||||
on <http://taskwarrior.org>.
|
||||
|
||||
.SH "CREDITS & COPYRIGHTS"
|
||||
task was written by P. Beckingham <paul@beckingham.net>.
|
||||
Taskwarrior was written by P. Beckingham <paul@beckingham.net>.
|
||||
.br
|
||||
Copyright (C) 2006 \- 2010 P. Beckingham
|
||||
|
||||
This man page was originally written by Paul Beckingham.
|
||||
|
||||
task is distributed under the GNU General Public License. See
|
||||
Taskwarrior is distributed under the GNU General Public License. See
|
||||
http://www.gnu.org/licenses/gpl-2.0.txt for more information.
|
||||
|
||||
.SH SEE ALSO
|
||||
.BR task(1),
|
||||
.BR taskrc(5),
|
||||
.BR task-faq(5)
|
||||
.BR task-tutorial(5)
|
||||
.BR task-faq(5),
|
||||
.BR task-tutorial(5),
|
||||
.BR task-sync(5)
|
||||
|
||||
For more information regarding task, the following may be referenced:
|
||||
For more information regarding taskwarrior, the following may be referenced:
|
||||
|
||||
.TP
|
||||
The official site at
|
||||
@@ -270,5 +320,5 @@ You can contact the project by writing an email to
|
||||
|
||||
.SH REPORTING BUGS
|
||||
.TP
|
||||
Bugs in task may be reported to the issue-tracker at
|
||||
Bugs in taskwarrior may be reported to the issue-tracker at
|
||||
<http://taskwarrior.org>
|
||||
|
||||
@@ -1,70 +1,198 @@
|
||||
.TH task-faq 5 2010-02-03 "task 1.9.0" "User Manuals"
|
||||
.TH task-faq 5 2010-10-07 "task 1.9.3" "User Manuals"
|
||||
|
||||
.SH NAME
|
||||
task-faq \- A FAQ for the task(1) command line todo manager.
|
||||
|
||||
.SH DESCRIPTION
|
||||
Task is a command line TODO list manager. It maintains a list of tasks that you
|
||||
want to do, allowing you to add/remove, and otherwise manipulate them. Task
|
||||
has a rich list of commands that allow you to do various things with it.
|
||||
Taskwarrior is a command line TODO list manager. It maintains a list of tasks
|
||||
that you want to do, allowing you to add/remove, and otherwise manipulate them.
|
||||
Taskwarrior has a rich list of commands that allow you to do various things with it.
|
||||
|
||||
.SH WELCOME
|
||||
Welcome to the task FAQ. If you have would like to see a question answered
|
||||
Welcome to the taskwarrior FAQ. If you have would like to see a question answered
|
||||
here, please send us a note at <support@taskwarrior.org>.
|
||||
|
||||
.TP
|
||||
.B Q: Where does task store the data?
|
||||
By default, task creates a .taskrc file in your home directory and populates it
|
||||
with defaults. Task also creates a .task directory in your home directory and
|
||||
puts data files there.
|
||||
.B Q: When I redirect the output to a file, I lose all the colors. How do I fix this?
|
||||
A: Taskwarrior knows (or thinks it knows) when the output is not going directly
|
||||
to a terminal, and strips out all the color control characters. This is based
|
||||
on the assumption that the color control codes are not wanted in the file.
|
||||
Prevent this with the following entry in your .taskrc file:
|
||||
|
||||
_forcecolor=on
|
||||
|
||||
.TP
|
||||
.B Q: How do I backup my taskwarrior data files? Where are they?
|
||||
A: Taskwarrior writes all pending tasks to the file
|
||||
|
||||
~/.task/pending.data
|
||||
|
||||
and all completed and deleted tasks to
|
||||
|
||||
~/.task/completed.data
|
||||
|
||||
They are text files, so they can just be copied to another location for
|
||||
safekeeping. Don't forget there is also the ~/.taskrc file that contains your
|
||||
taskwarrior configuration data. To be sure, and to future-proof your backup,
|
||||
consider backing up all the files in the ~/.task directory.
|
||||
|
||||
.TP
|
||||
.B Q: How can I separate my work tasks from my home tasks? Specifically, can I keep them completely separate?
|
||||
A: You can do this by creating an alternate .taskrc file, then using shell
|
||||
aliases. Here are example Bash commands to achieve this:
|
||||
|
||||
% cp ~/.taskrc ~/.taskrc_home
|
||||
% (now edit .taskrc_home to change the value of data.location)
|
||||
% alias wtask="task"
|
||||
% alias htask="task rc:~/.taskrc_home"
|
||||
|
||||
This gives you two commands, 'wtask' and 'htask' that operate using two
|
||||
different sets of task data files.
|
||||
|
||||
.TP
|
||||
.B Q: Can I revert to a previous version of taskwarrior? How?
|
||||
A: Yes, you can revert to a previous version of task, simply by downloading an
|
||||
older version and installing it. If you find a bug in task, then this may be the
|
||||
only way to work around the bug, until a patch release is made.
|
||||
|
||||
Note that it is possible that the taskwarrior file format will change. For
|
||||
example, the format changed between versions 1.5.0 and 1.6.0. Taskwarrior will
|
||||
automatically upgrade the file but if you need to revert to a previous version
|
||||
of taskwarrior, there is the file format to consider. This is yet another good
|
||||
reason to back up your task data files!
|
||||
|
||||
.TP
|
||||
.B Q: I'm using Ubuntu 9.04, and I want to word-wrap descriptions. How do I do this?
|
||||
A: You need to install ncurses, by doing this:
|
||||
|
||||
% sudo apt-get install libncurses5-dev
|
||||
|
||||
Then you need to rebuild taskwarrior from scratch, starting with
|
||||
|
||||
% cd task-X.X.X
|
||||
% ./configure
|
||||
...
|
||||
|
||||
The result should be a taskwarrior program that knows the width of the terminal
|
||||
window, and wraps accordingly.
|
||||
|
||||
Note that all the binary packages include this capability.
|
||||
|
||||
.TP
|
||||
.B Q: How do I build taskwarrior under Cygwin?
|
||||
A: Take a look at the README.build file, where the latest information on build
|
||||
issues is kept. Taskwarrior is built the same way everywhere. But under Cygwin,
|
||||
you'll need to make sure you have the following packages available first:
|
||||
|
||||
gcc
|
||||
make
|
||||
libncurses-devel
|
||||
libncurses8
|
||||
|
||||
The gcc and make packages allow you to compile the code, and are therefore
|
||||
required, but the ncurses packages are optional. Ncurses will allow taskwarrior
|
||||
to determine the width of the window, and therefore use the whole width and wrap
|
||||
text accordingly, for a more aesthetically pleasing display.
|
||||
|
||||
Note that there are binary packages that all include this capability.
|
||||
|
||||
.TP
|
||||
.B Q: Do colors work under Cygwin?
|
||||
A: They do, but only in a limited way. You can use regular foreground colors
|
||||
(black, red, green ...) and you can regular background colors (on_black, on_red,
|
||||
on_green ...), but underline and bold are not supported.
|
||||
|
||||
If you run the command:
|
||||
|
||||
% task colors
|
||||
|
||||
Taskwarrior will display all the colors it can use, and you will see which ones
|
||||
you can use.
|
||||
|
||||
Note that if you install the 'mintty' shell in Cygwin, then you can use 256
|
||||
colors.
|
||||
|
||||
See the 'man task-color' for more details on which colors can be used.
|
||||
|
||||
.TP
|
||||
.B Q: Where does taskwarrior store the data?
|
||||
By default, taskwarrior creates a .taskrc file in your home directory and
|
||||
populates it with defaults. Taskwarrior also creates a .task directory in your
|
||||
home directory and puts data files there.
|
||||
|
||||
.TP
|
||||
.B Q: Can I edit that data?
|
||||
Of course you can. It is a simple text file, and looks somewhat like the JSON
|
||||
format, and if you are careful not to break the format, there is no reason not
|
||||
to edit it. But task provides a rich command set to do that manipulation for
|
||||
you, so it is probably best to leave those files alone.
|
||||
to edit it. But taskwarrior provides a rich command set to do that manipulation
|
||||
for you, so it is probably best to leave those files alone.
|
||||
|
||||
.TP
|
||||
.B Q: How do I restore my .taskrc file to defaults?
|
||||
If you delete (or rename) your .taskrc file, task will offer to create a default
|
||||
one for you. Another way to do this is with the command:
|
||||
If you delete (or rename) your .taskrc file, taskwarrior will offer to create a
|
||||
default one for you. Another way to do this is with the command:
|
||||
|
||||
$ task rc:new-file version
|
||||
|
||||
Task will create 'new-file' if it doesn't already exist. Note that this is a
|
||||
good way to learn about new configuration settings, if your .taskrc file was
|
||||
created by an older version of task.
|
||||
Taskwarrior will create 'new-file' if it doesn't already exist. There will not
|
||||
be much in it though - taskwarrior relies heavily on default values, which can
|
||||
be seen with this command:
|
||||
|
||||
$ task show
|
||||
|
||||
which lists all the currently known settings. If you have just created
|
||||
new-file, then this command lists only the defaults.
|
||||
|
||||
Note that this is a good way to learn about new configuration settings,
|
||||
particularly if your .taskrc file was created by an older version.
|
||||
|
||||
.TP
|
||||
.B Q: Do I need to back up my task data?
|
||||
.B Q: Do I need to back up my taskwarrior data?
|
||||
Yes. You should back up your ~/.task directory, and probably your ~/.taskrc
|
||||
file too.
|
||||
|
||||
.TP
|
||||
.B Q: Can I share my tasks between different machines?
|
||||
Yes, you can. Most people have success with a DropBox - a free and secure file
|
||||
synching tool. Simply configure task to store it's data in a dropbox folder, by
|
||||
modifying the:
|
||||
synching tool. Simply configure taskwarrior to store it's data in a dropbox
|
||||
folder, by modifying the:
|
||||
|
||||
data.location=...
|
||||
|
||||
configuration variable. Check out DropBox at http://www.dropbox.com.
|
||||
|
||||
.TP
|
||||
.B Q: I don't like dropbox. Is there another way to synchronize my tasks?
|
||||
Of course. Especially if you want to modify tasks offline on both machines and
|
||||
synchronize them later on. For this purpose there is a 'merge' command which is
|
||||
is able to insert the modifications you made to one of your task databases into
|
||||
a second database.
|
||||
|
||||
Here is a basic example of the procedure:
|
||||
|
||||
$ task merge ssh://user@myremotehost/.task/
|
||||
$ task push ssh://user@myremotehost/.task/
|
||||
|
||||
The first command fetches the undo.data file from the remote system, reads the
|
||||
changes made and updates the local database. When this merge command completes,
|
||||
you should copy all the local .data files to the remote system either by using
|
||||
the push command explicitly or by activating the merge.autopush feature in the
|
||||
~/.taskrc file. This way you ensure that both systems are fully synchronized.
|
||||
|
||||
.TP
|
||||
.B Q: The undo.data file gets very large - do I need it?
|
||||
You need it if you want the undo capability. But if it gets large, you can
|
||||
certainly truncate it to save space, just be careful to delete lines from the
|
||||
top of the file, up to and including a separator '---'. The simplest way is to
|
||||
simply delete the undo.data file. Note that it does not slow down task, because
|
||||
task never reads it until you want to undo. Otherwise task only appends to the
|
||||
file.
|
||||
You need it if you want the undo capability, or the merge capability mentioned
|
||||
above. But if it gets large, you can certainly truncate it to save space, just
|
||||
be careful to delete lines from the top of the file, up to and including a
|
||||
separator '---'. The simplest way is to simply delete the undo.data file. Note
|
||||
that it does not slow down taskwarrior, because it is never read until you want
|
||||
to undo. Otherwise taskwarrior only appends to the file.
|
||||
|
||||
.TP
|
||||
.B Q: How do I know whether my terminal support 256 colors?
|
||||
You will need to make sure your TERM environment variable is set to xterm-color,
|
||||
otherwise the easiest way is to just try it! With task 1.9 or later, you simply
|
||||
run
|
||||
otherwise the easiest way is to just try it! With version 1.9 or later, you
|
||||
simply run
|
||||
|
||||
$ task color
|
||||
|
||||
@@ -75,17 +203,19 @@ See the task-color(5) man page for more details.
|
||||
|
||||
.TP
|
||||
.B Q: How do I make use of all these colors?
|
||||
See the task-color(5) man page for an in-depth explanation of the task color
|
||||
rules.
|
||||
Use one of our provided color themes, or create your own - after all, they are
|
||||
just collections of color settings.
|
||||
|
||||
See the task-color(5) man page for an in-depth explanation of the color rules.
|
||||
|
||||
.TP
|
||||
.B Q: How can I make task put the command in the terminal window title?
|
||||
.B Q: How can I make taskwarrior put the command in the terminal window title?
|
||||
You cannot. But you can make the shell do it, and you can make the shell
|
||||
call the task program. Here is a Bash script that does this:
|
||||
|
||||
#! /bin/bash
|
||||
|
||||
printf "\033]0;task $*\a"
|
||||
printf "\\033]0;task $*\a"
|
||||
/usr/local/bin/task $*
|
||||
|
||||
You just need to run the script, and let the script run task. Here is a Bash
|
||||
@@ -93,12 +223,12 @@ function that does the same thing:
|
||||
|
||||
t ()
|
||||
{
|
||||
printf "\033]0;task $*\a"
|
||||
printf "\\033]0;task $*\a"
|
||||
/usr/local/bin/task $*
|
||||
}
|
||||
|
||||
.TP
|
||||
.B Q: Task searches in a case-sensitive fashion - can I change that?
|
||||
.B Q: Taskwarrior searches in a case-sensitive fashion - can I change that?
|
||||
You can. Just set the following value in your .taskrc file:
|
||||
|
||||
search.case.sensitive=no
|
||||
@@ -107,24 +237,24 @@ This will affect searching for keywords:
|
||||
|
||||
$ task list Document
|
||||
|
||||
task will perform a caseless search in the description and any annotations for
|
||||
the keyword 'Document'. It also affects description and annotation
|
||||
substitutions:
|
||||
taskwarrior will perform a caseless search in the description and any
|
||||
annotations for the keyword 'Document'. It also affects description and
|
||||
annotation substitutions:
|
||||
|
||||
$ task 1 /teh/the/
|
||||
|
||||
The pattern on the left will now be a caseless search term.
|
||||
|
||||
.TP
|
||||
.B Q: Why do the task ID numbers change?
|
||||
Task does this to always show you the smallest numbers it can. The idea is that
|
||||
if your tasks are numbered 1 - 33, for example, those are easy to type in. If
|
||||
instead task kept a rolling sequence number, after a while your tasks might be
|
||||
numbered 481 - 513, which makes it more likely to enter one incorrectly, because
|
||||
there are more digits.
|
||||
.B Q: Why do the ID numbers change?
|
||||
Taskwarrior does this to always show you the smallest numbers it can. The idea
|
||||
is that if your tasks are numbered 1 - 33, for example, those are easy to type
|
||||
in. If instead task kept a rolling sequence number, after a while your tasks
|
||||
might be numbered 481 - 513, which makes it more likely to enter one
|
||||
incorrectly, because there are more digits.
|
||||
|
||||
When you run a report (such as "list"), task assigns the numbers before it
|
||||
displays them. For example, you can do this:
|
||||
When you run a report (such as "list"), the numbers are assigned before display.
|
||||
For example, you can do this:
|
||||
|
||||
$ task list
|
||||
$ task do 12
|
||||
@@ -132,28 +262,88 @@ displays them. For example, you can do this:
|
||||
$ task delete 31
|
||||
|
||||
Those id numbers are then good until the next report is run. This is because
|
||||
task performs a garbage-collect operation on the pending tasks file when a
|
||||
report is run, which moves the deleted and completed tasks from the pending.data
|
||||
file to the completed.data file. This keeps the pending tasks file small, and
|
||||
therefore keeps task fast. The completed data file is the one that grows
|
||||
unbounded with use, but that one isn't accessed as much, so it doesn't matter as
|
||||
much. So in all, the ID number resequencing is about efficiency.
|
||||
taskwarrior performs a garbage-collect operation on the pending tasks file when
|
||||
a report is run, which moves the deleted and completed tasks from the
|
||||
pending.data file to the completed.data file. This keeps the pending tasks file
|
||||
small, and therefore keeps taskwarrior fast. The completed data file is the one
|
||||
that grows unbounded with use, but that one isn't accessed as much, so it
|
||||
doesn't matter as much. So in all, the ID number resequencing is about
|
||||
efficiency.
|
||||
|
||||
.TP
|
||||
.B Q: How do I list tasks that are either priority 'H' or 'M', but not 'L'?
|
||||
Taskwarriors filters are all combined with and implicit logical AND operator, so
|
||||
if you were to try this:
|
||||
|
||||
$ task list priority:H priority:M
|
||||
|
||||
There would be no results, because the priority could not simultaneously be 'H'
|
||||
AND 'M'. What is required is some way to use OR instead of an AND operator. The
|
||||
solution is to invert the filter in this way:
|
||||
|
||||
$ task list priority.not:L priority.any:
|
||||
|
||||
This filter states that the priority must not be 'L', AND there must be a
|
||||
priority assigned. This filter then properly lists tasks that are 'H' or 'M',
|
||||
because the two logical restrictions are not mutually exclusive as in the
|
||||
original filter.
|
||||
|
||||
Some of you may be familiar with DeMorgan's laws of formal logic that relate
|
||||
the AND and OR operators in terms of each other via negation, which can be used
|
||||
to construct task filters.
|
||||
|
||||
.TP
|
||||
.B Q: How do I delete an annotation?
|
||||
Taskwarrior now has a 'denotate' command to remove annotations. Here is an
|
||||
example:
|
||||
|
||||
$ task add Original task
|
||||
$ task 1 annotate foo
|
||||
$ task 1 annotate bar
|
||||
$ task 1 annotate foo bar
|
||||
|
||||
Now to delete the first annotation, use:
|
||||
|
||||
$ task 1 denotate foo
|
||||
|
||||
This takes the fragment 'foo' and compares it to each of the annotations. In
|
||||
this example, it will remove the first annotation, not the third, because it is
|
||||
an exact match. If there are no exact matches, it will remove the first
|
||||
non-exact match:
|
||||
|
||||
$ task 1 denotate ar
|
||||
|
||||
This will remove the second annotation - the first non-exact match.
|
||||
|
||||
.TP
|
||||
.B Q: How can I help?
|
||||
There are lots of ways. Here are some:
|
||||
|
||||
- Provide feedback on what works, what does not
|
||||
- Tell us how task does or does not fit your workflow
|
||||
- Tell people about task
|
||||
- Report bugs when you see them
|
||||
- Contribute to our Wiki
|
||||
- Suggest features
|
||||
- Write unit tests
|
||||
- Fix bugs
|
||||
|
||||
.SH "CREDITS & COPYRIGHTS"
|
||||
task was written by P. Beckingham <paul@beckingham.net>.
|
||||
Taskwarrior was written by P. Beckingham <paul@beckingham.net>.
|
||||
.br
|
||||
Copyright (C) 2006 \- 2010 P. Beckingham
|
||||
|
||||
This man page was originally written by P. Beckingham.
|
||||
|
||||
task is distributed under the GNU General Public License. See
|
||||
Taskwarrior is distributed under the GNU General Public License. See
|
||||
http://www.gnu.org/licenses/gpl-2.0.txt for more information.
|
||||
|
||||
.SH SEE ALSO
|
||||
.BR task(1),
|
||||
.BR taskrc(5),
|
||||
.BR task-tutorial(5)
|
||||
.BR task-color(5)
|
||||
.BR task-tutorial(5),
|
||||
.BR task-color(5),
|
||||
.BR task-sync(5)
|
||||
|
||||
For more information regarding task, the following may be referenced:
|
||||
|
||||
@@ -171,5 +361,5 @@ You can contact the project by writing an email to
|
||||
|
||||
.SH REPORTING BUGS
|
||||
.TP
|
||||
Bugs in task may be reported to the issue-tracker at
|
||||
Bugs in taskwarrior may be reported to the issue-tracker at
|
||||
<http://taskwarrior.org>
|
||||
|
||||
346
doc/man/task-sync.5
Normal file
346
doc/man/task-sync.5
Normal file
@@ -0,0 +1,346 @@
|
||||
.TH task-sync 5 2010-10-07 "task 1.9.3" "User Manuals"
|
||||
|
||||
.SH NAME
|
||||
task-sync \- A tutorial for the task(1) data synchronization capabilities.
|
||||
|
||||
.SH DESCRIPTION
|
||||
Taskwarrior has built-in support for synchronization, which can be used to keep
|
||||
two task databases up to date, regardless of which one is used. This capability
|
||||
can also be used to keep a backup copy of your task database on another machine.
|
||||
|
||||
Taskwarrior can use various protocols for transferring the data.
|
||||
|
||||
.SH HOW IT WORKS
|
||||
If you were to manually attempt to keep two separate task databases up to date,
|
||||
you would need to inspect both databases, and detect changes that occurred in
|
||||
each one. Those changes would need to be migrated to the other database, while
|
||||
being careful not to miss a change, and not to confuse an 'add' in one with
|
||||
a 'delete' in the other.
|
||||
|
||||
The synchronization feature does just this. It can transfer task databases,
|
||||
compare tasks, and apply changes where necessary.
|
||||
|
||||
.SH NEW COMMANDS
|
||||
Taskwarrior has 'pull', 'push' and 'merge' commands which perform the steps
|
||||
necessary to move files around and combine them. In the common use case, you
|
||||
would only need to use the 'merge' command. These commands take an argument
|
||||
that is a URI, which indicates where the remote database resides.
|
||||
|
||||
To be clear, the local database always refers to your ~/.task directory (unless
|
||||
overridden), and the remote database is always specified by URI.
|
||||
|
||||
.SH MERGE
|
||||
The merge command will fetch task data via URI and combine it with the local
|
||||
task database. The syntax is:
|
||||
|
||||
.br
|
||||
.RS
|
||||
task merge [<URI>]
|
||||
.RE
|
||||
|
||||
The URI is optional if the
|
||||
.B merge.default.uri
|
||||
configuration variable is set. The URI may point to a different directory, or
|
||||
it may be a different computer. Here is an example of the merge command:
|
||||
|
||||
.br
|
||||
.RS
|
||||
$ task merge ~/work/
|
||||
.RE
|
||||
|
||||
This URI (~/work/) is a path name, which means the remote database is on the
|
||||
same computer. Taskwarrior will fetch the data from the URI, and merge it with
|
||||
your local data in ~/.task.
|
||||
|
||||
When complete, you will be asked whether you would like to push the combined
|
||||
data back to the remote location specified by the URI. This is useful if you
|
||||
are keeping two task databases synchronized, but it can be turned off. See
|
||||
CONFIGURATION.
|
||||
|
||||
Note that a merge operation is not atomically reversible. You could however
|
||||
run the 'task undo' command repeatedly to undo the effects.
|
||||
|
||||
.SH PUSH
|
||||
The push command will copy the local task database to the specified URI. The
|
||||
syntax is:
|
||||
|
||||
.br
|
||||
.RS
|
||||
task push [<URI>]
|
||||
.RE
|
||||
|
||||
The URI is optional if the
|
||||
.B push.default.uri
|
||||
configuration variable is set. This command is useful for making backup copies
|
||||
of your task database.
|
||||
|
||||
Note that the task files at the location specified by the URI are simply
|
||||
overwritten, so don't expect any merging to occur. Misused, push can be
|
||||
dangerous.
|
||||
|
||||
.SH PULL
|
||||
The pull command will copy a task database from a URI to the local task database
|
||||
(~/.task by default). The syntax is:
|
||||
|
||||
.br
|
||||
.RS
|
||||
task pull [<URI>]
|
||||
.RE
|
||||
|
||||
The URI is optional if the
|
||||
.B pull.default.uri
|
||||
configuration variable is set. This command is useful for restoring a backup
|
||||
copy of your task database.
|
||||
|
||||
Note that your local task database files will be simply overwritten by the files
|
||||
obtained from the location specified by the URI, so don't expect any merging to
|
||||
occur. Misused, pull can be dangerous.
|
||||
|
||||
.SH URI TYPES
|
||||
The most basic URI is a path name on the local machine. An example would be:
|
||||
|
||||
.br
|
||||
.RS
|
||||
/home/bob/.task/
|
||||
.RE
|
||||
|
||||
All the other URIs allow access to remote machines. The first uses SSH and scp
|
||||
(either form can be used):
|
||||
|
||||
.br
|
||||
.RS
|
||||
ssh://[user@]host[:port]:path/to/undo.data
|
||||
.br
|
||||
[user@]host[:port]:/path/
|
||||
.RE
|
||||
|
||||
Rsync is another supported protocol that minimizes network traffic, by a clever
|
||||
algorithm that doesn't copy files that have not changed:
|
||||
|
||||
.br
|
||||
.RS
|
||||
rsync://[user@]host.xz[:port]/path/to/undo.data
|
||||
.RE
|
||||
|
||||
Curl supports several protocols that can transfer data using HTTP, HTTPS and
|
||||
FTP:
|
||||
|
||||
.br
|
||||
.RS
|
||||
http://host[:port]/path/to/undo.data
|
||||
.br
|
||||
https://host[:port]/path/to/undo.data
|
||||
.br
|
||||
ftp://user@host[:port]/path/to/undo.data
|
||||
.RE
|
||||
|
||||
.SH CONFLICTS
|
||||
When modifications on the local and remote machine conflict, for example if
|
||||
both machines change the project name of the same task to different values,
|
||||
then Taskwarrior automatically selects the most recent change. Thus, there
|
||||
are no conflicts.
|
||||
|
||||
.SH EXAMPLE - Backup on another machine
|
||||
One very good use of 'push' is to make backup copies of your task database in
|
||||
another location. Suppose your task database is kept in the usual place, in
|
||||
the ~/.task directory, and you wanted to make a backup copy in ~/backup. You
|
||||
would use this command:
|
||||
|
||||
.br
|
||||
.RS
|
||||
$ task push ~/backup/
|
||||
.RE
|
||||
|
||||
This would copy the files in ~/.task to ~/backup, overwriting the files that
|
||||
were already in ~/backup. To backup your files to another machine, you could
|
||||
use:
|
||||
|
||||
.br
|
||||
.RS
|
||||
$ task push user@host:backup
|
||||
.RE
|
||||
|
||||
This could be improved by setting the
|
||||
.B push.default.uri
|
||||
configuration variable and then relying on the default, like this:
|
||||
|
||||
.br
|
||||
.RS
|
||||
$ task config push.default.uri user@host:backup
|
||||
.RE
|
||||
|
||||
and then you need only run the push command:
|
||||
|
||||
.br
|
||||
.RS
|
||||
$ task push
|
||||
.RE
|
||||
|
||||
and the default push URI will be used. If you wanted to restore a backup, you
|
||||
simply use the pull command instead:
|
||||
|
||||
.br
|
||||
.RS
|
||||
$ task pull user@host:backup
|
||||
.RE
|
||||
|
||||
This can be simplified by setting the
|
||||
.B pull.default.uri
|
||||
configuration variable and then relying on the default, like this:
|
||||
|
||||
.br
|
||||
.RS
|
||||
$ task config pull.default.uri user@host:backup
|
||||
.RE
|
||||
|
||||
Note that pull and push will blindly overwrite the task files without any
|
||||
merging. Be careful.
|
||||
|
||||
.SH EXAMPLE - Keeping two task databases synchronized
|
||||
The most common synchronization will be to keep two task databases synchronized
|
||||
on different machines. Here is a full example, including setup that illustrates
|
||||
this.
|
||||
|
||||
Suppose there are two machines, named 'local' and 'remote', for simplicity.
|
||||
Taskwarrior is installed on both machines. The different machines are
|
||||
indicated here by the prompt. Suppose Alice enters two tasks on her local
|
||||
machine:
|
||||
|
||||
.br
|
||||
.RS
|
||||
local> task add Deliver the new budget proposal due:tuesday
|
||||
.br
|
||||
local> task add Set up a meeting with Bob
|
||||
.RE
|
||||
|
||||
Then later adds a task on the remote machine:
|
||||
|
||||
.br
|
||||
.RS
|
||||
remote> task add Present the budget proposal at the big meeting due:thursday
|
||||
.RE
|
||||
|
||||
Now on the local machine, Alice merges the two task databases:
|
||||
|
||||
.br
|
||||
.RS
|
||||
local> task merge alice@remote:.task
|
||||
.br
|
||||
Would you like to push the changes to 'alice@remote:.task'? Y
|
||||
.RE
|
||||
|
||||
Taskwarrior has combined the two task databases on local, then pushed the
|
||||
changes back to remote. Now suppose Alice changes the due date for task 1
|
||||
on remote:
|
||||
|
||||
.br
|
||||
.RS
|
||||
remote> task 1 due:wednesday
|
||||
.RE
|
||||
|
||||
Now on the local machine, Alice sets up a default URI and autopush:
|
||||
|
||||
.br
|
||||
.RS
|
||||
local> task config merge.default.uri alice@remote:.task
|
||||
.br
|
||||
local> task config merge.autopush yes
|
||||
.RE
|
||||
|
||||
Now Alice can simply run merge to make sure that the new due date is copied to
|
||||
the local machine:
|
||||
|
||||
.br
|
||||
.RS
|
||||
local> task merge
|
||||
.RE
|
||||
|
||||
This time the URI is determined automatically, and after the merge the files are
|
||||
pushed back to the remote machine. In a similar way, the remote machine can
|
||||
also be configured to merge from the local machine and push back to it. Then it
|
||||
is just a matter of Alice remembering to merge now and then, from either
|
||||
machine, to have her data in two (or even more) places.
|
||||
|
||||
.SH CONFIGURATION
|
||||
By setting these configuration variables, it is possible to simplify the
|
||||
synchronization commands, by relying on the defaults or alias names.
|
||||
|
||||
.br
|
||||
.B merge.autopush=yes|no|ask
|
||||
.RS
|
||||
This controls whether the automatic push after a merge is performed, not
|
||||
performed, or whether the user is asked every time. The default value is 'ask'.
|
||||
.RE
|
||||
|
||||
.br
|
||||
.B merge.default.uri=<uri>
|
||||
.RS
|
||||
Sets a default URI so that just the 'task merge' command be run without the
|
||||
need to retype the URI every time. You can also use this configuration scheme
|
||||
to set alias names, e.g. set merge.desktop.uri and run 'task merge desktop'.
|
||||
.RE
|
||||
|
||||
.br
|
||||
.B push.default.uri=<uri>
|
||||
.RS
|
||||
Sets a default URI so that just the 'task push' command be run without the
|
||||
need to retype the URI every time. You can also use this configuration scheme
|
||||
to set alias names, e.g. set push.desktop.uri and run 'task push desktop'.
|
||||
.RE
|
||||
|
||||
.br
|
||||
.B pull.default.uri=<uri>
|
||||
.RS
|
||||
Sets a default URI so that just the 'task pull' command be run without the
|
||||
need to retype the URI every time. You can also use this configuration scheme
|
||||
to set alias names, e.g. set pull.desktop.uri and run 'task pull desktop'.
|
||||
.RE
|
||||
|
||||
Note that, when using SSH/scp, hostnames will be expanded due to the ssh
|
||||
configuration file ~/.ssh/config.
|
||||
|
||||
.SH EXTERNAL DEPENDENCIES
|
||||
Depending on the URI protocols used, the utilities 'scp', 'rsync' and 'curl'
|
||||
must be installed and accessible via the $PATH environment variable.
|
||||
|
||||
If you have deleted your ~/.task/undo.data file to save space, you will be
|
||||
unable to merge. The change transactions stored in the undo.data file are
|
||||
used for synchronization.
|
||||
|
||||
.SH "CREDITS & COPYRIGHTS"
|
||||
task was written by P. Beckingham <paul@beckingham.net>.
|
||||
.br
|
||||
Copyright (C) 2006 \- 2010 P. Beckingham, F. Hernandez.
|
||||
|
||||
The sync capabilities were written by J. Schlatow.
|
||||
Parts copyright (C) 2010 J. Schlatow.
|
||||
|
||||
task is distributed under the GNU General Public License. See
|
||||
http://www.gnu.org/licenses/gpl-2.0.txt for more information.
|
||||
|
||||
.SH SEE ALSO
|
||||
.BR task(1),
|
||||
.BR taskrc(5),
|
||||
.BR task-faq(5),
|
||||
.BR task-color(5),
|
||||
.BR task-tutorial(5),
|
||||
.BR ssh_config(5)
|
||||
|
||||
For more information regarding task, the following may be referenced:
|
||||
|
||||
.TP
|
||||
The official site at
|
||||
<http://taskwarrior.org>
|
||||
|
||||
.TP
|
||||
The official code repository at
|
||||
<git://tasktools.org/task.git/>
|
||||
|
||||
.TP
|
||||
You can contact the project by writing an email to
|
||||
<support@taskwarrior.org>
|
||||
|
||||
.SH REPORTING BUGS
|
||||
.TP
|
||||
Bugs in task may be reported to the issue-tracker at
|
||||
<http://taskwarrior.org>
|
||||
File diff suppressed because it is too large
Load Diff
389
doc/man/task.1
389
doc/man/task.1
@@ -1,4 +1,4 @@
|
||||
.TH task 1 2010-02-03 "task 1.9.0" "User Manuals"
|
||||
.TH task 1 2010-10-07 "task 1.9.3" "User Manuals"
|
||||
|
||||
.SH NAME
|
||||
task \- A command line todo manager.
|
||||
@@ -7,9 +7,17 @@ task \- A command line todo manager.
|
||||
.B task [subcommand] [args]
|
||||
|
||||
.SH DESCRIPTION
|
||||
Task is a command line todo list manager. It maintains a list of tasks that you
|
||||
want to do, allowing you to add/remove, and otherwise manipulate them. Task
|
||||
has a rich list of subcommands that allow you to do various things with it.
|
||||
Taskwarrior is a command line todo list manager. It maintains a list of tasks
|
||||
that you want to do, allowing you to add/remove, and otherwise manipulate them.
|
||||
Task has a rich list of subcommands that allow you to do various things with it.
|
||||
|
||||
At the core, taskwarrior is a list processing program. You add text and
|
||||
additional related parameters and redisplay the information in a nice way. It
|
||||
turns into a todo list program when you add due dates and recurrence. It turns
|
||||
into an organized todo list program when you add priorities, tags (one word
|
||||
descriptors), project groups, etc. Taskwarrior turns into an organized to do
|
||||
list program when you modify the configuration file to have the output displayed
|
||||
the way you want to see it.
|
||||
|
||||
.SH SUBCOMMANDS
|
||||
|
||||
@@ -18,17 +26,189 @@ has a rich list of subcommands that allow you to do various things with it.
|
||||
Adds a new task to the task list.
|
||||
|
||||
.TP
|
||||
.B append [tags] [attrs] description
|
||||
Appends information to an existing task.
|
||||
|
||||
.TP
|
||||
.B prepend [tags] [attrs] description
|
||||
Prepends information to an existing task.
|
||||
.B log [tags] [attrs] description
|
||||
Adds a new task that is already completed, to the task list.
|
||||
|
||||
.TP
|
||||
.B annotate ID description
|
||||
Adds an annotation to an existing task.
|
||||
|
||||
.TP
|
||||
.B denotate ID description
|
||||
Deletes an annotation for the specified task. If the provided description matches an
|
||||
annotation exactly, the corresponding annotation is deleted. If the provided description
|
||||
matches annotations partly, the first partly matched annotation is deleted.
|
||||
|
||||
.TP
|
||||
.B info ID
|
||||
Shows all data and metadata for the specified task.
|
||||
|
||||
.TP
|
||||
.B ID
|
||||
With an ID but no specific command, taskwarrior runs the "info" command.
|
||||
|
||||
.TP
|
||||
.B undo
|
||||
Reverts the most recent action.
|
||||
|
||||
.TP
|
||||
.B shell
|
||||
Launches an interactive shell with all the task commands available.
|
||||
|
||||
.TP
|
||||
.B duplicate ID [tags] [attrs] [description]
|
||||
Duplicates the specified task and allows modifications.
|
||||
|
||||
.TP
|
||||
.B delete ID
|
||||
Deletes the specified task from task list.
|
||||
|
||||
.TP
|
||||
.B start ID
|
||||
Marks the specified task as started.
|
||||
|
||||
.TP
|
||||
.B stop ID
|
||||
Removes the
|
||||
.I start
|
||||
time from the specified task.
|
||||
|
||||
.TP
|
||||
.B done ID [tags] [attrs] [description]
|
||||
Marks the specified task as done.
|
||||
|
||||
.TP
|
||||
.B projects
|
||||
Lists all project names that are currently used by pending tasks, and the
|
||||
number of tasks for each.
|
||||
|
||||
.TP
|
||||
.B tags
|
||||
Show a list of all tags used. Any special tags used are highlighted.
|
||||
|
||||
.TP
|
||||
.B summary
|
||||
Shows a report of task status by project.
|
||||
|
||||
.TP
|
||||
.B timesheet [weeks]
|
||||
Shows a weekly report of tasks completed and started.
|
||||
|
||||
.TP
|
||||
.B history
|
||||
Shows a report of task history by month. Alias to history.monthly.
|
||||
|
||||
.TP
|
||||
.B history.annual
|
||||
Shows a report of task history by year.
|
||||
|
||||
.TP
|
||||
.B ghistory
|
||||
Shows a graphical report of task status by month. Alias to ghistory.monthly.
|
||||
|
||||
.TP
|
||||
.B ghistory.annual
|
||||
Shows a graphical report of task status by year.
|
||||
|
||||
.TP
|
||||
.B calendar [ y | due [y] | month year [y] | year ]
|
||||
Shows a monthly calendar with due tasks marked.
|
||||
|
||||
.TP
|
||||
.B stats
|
||||
Shows task database statistics.
|
||||
|
||||
.TP
|
||||
.B import \fIfile
|
||||
Imports tasks from a variety of formats.
|
||||
|
||||
.TP
|
||||
.B export
|
||||
Exports all tasks in the default format. This is an alias to the command export.yaml.
|
||||
Redirect the output to a file, if you wish to save it, or pipe it to another command.
|
||||
|
||||
.TP
|
||||
.B export.csv
|
||||
Exports all tasks in CSV format.
|
||||
Redirect the output to a file, if you wish to save it, or pipe it to another command.
|
||||
|
||||
.TP
|
||||
.B export.ical
|
||||
Exports all tasks in iCalendar format.
|
||||
Redirect the output to a file, if you wish to save it, or pipe it to another command.
|
||||
|
||||
.TP
|
||||
.B export.yaml
|
||||
Exports all tasks in YAML 1.1 format.
|
||||
Redirect the output to a file, if you wish to save it, or pipe it to another command.
|
||||
|
||||
.TP
|
||||
.B merge URL
|
||||
Merges two task databases by comparing the modifications that are stored in the
|
||||
undo.data files. The location of the second undo.data file must be passed on as argument. URL may have the following syntaxes:
|
||||
|
||||
|
||||
ssh://[user@]host.xz[:port]/path/to/undo.data
|
||||
|
||||
rsync://[user@]host.xz[:port]/path/to/undo.data
|
||||
|
||||
[user@]host.xz:path/to/undo.data
|
||||
|
||||
/path/to/local/undo.data
|
||||
|
||||
You can set aliases for frequently used URLs in the .taskrc.
|
||||
|
||||
.TP
|
||||
.B push URL
|
||||
Pushes the task database to a remote another location for distributing the
|
||||
changes made by the merge command.
|
||||
|
||||
(See annotations above for valid URL syntaxes.)
|
||||
|
||||
.TP
|
||||
.B pull URL
|
||||
Overwrites the task database with those files found at the URL.
|
||||
|
||||
(See annotations above for valid URL syntaxes.)
|
||||
|
||||
.TP
|
||||
.B color [sample | legend]
|
||||
Displays all possible colors, a named sample, or a legend containing all
|
||||
currently defined colors.
|
||||
|
||||
.TP
|
||||
.B version
|
||||
Shows the taskwarrior version number
|
||||
|
||||
.TP
|
||||
.B help
|
||||
Shows the long usage text.
|
||||
|
||||
.TP
|
||||
.B show [all | substring]"
|
||||
Shows all the current settings in the taskwarrior configuration file. If a
|
||||
substring is specified just the settings containing that substring will be
|
||||
displayed.
|
||||
|
||||
.TP
|
||||
.B config [name [value | '']]
|
||||
Add, modify and remove settings directly in the taskwarrior configuration.
|
||||
This command either modifies the 'name' setting with a new value of 'value',
|
||||
or adds a new entry that is equivalent to 'name=value':
|
||||
|
||||
task config name value
|
||||
|
||||
This command sets a blank value. This has the effect of suppressing any
|
||||
default value:
|
||||
|
||||
task config name ''
|
||||
|
||||
Finally, this command removes any 'name=...' entry from the .taskrc file:
|
||||
|
||||
task config name
|
||||
|
||||
.SH MODIFYING SUBCOMMANDS
|
||||
|
||||
.TP
|
||||
.B ID [tags] [attrs] [description]
|
||||
Modifies the existing task with provided information.
|
||||
@@ -47,114 +227,19 @@ Launches an editor to let you modify all aspects of a task directly.
|
||||
Use carefully.
|
||||
|
||||
.TP
|
||||
.B undo
|
||||
Reverts the most recent action.
|
||||
.B append [tags] [attrs] description
|
||||
Appends information to an existing task.
|
||||
|
||||
.TP
|
||||
.B shell
|
||||
Launches an interactive shell with all the task commands available.
|
||||
|
||||
.TP
|
||||
.B duplicate ID [tags] [attrs] [description]
|
||||
Duplicates the specified task and allows modifications.
|
||||
|
||||
.TP
|
||||
.B delete ID
|
||||
Deletes the specified task from task list.
|
||||
|
||||
.TP
|
||||
.B info ID
|
||||
Shows all data and metadata for the specified task.
|
||||
|
||||
.TP
|
||||
.B start ID
|
||||
Marks the specified task as started.
|
||||
|
||||
.TP
|
||||
.B stop ID
|
||||
Removes the
|
||||
.I start
|
||||
time from the specified task.
|
||||
|
||||
.TP
|
||||
.B done ID [tags] [attrs] [description]
|
||||
Marks the specified task as done.
|
||||
|
||||
.TP
|
||||
.B projects
|
||||
Lists all project names used, and the number of tasks for each.
|
||||
|
||||
.TP
|
||||
.B tags
|
||||
Show a list of all tags used.
|
||||
|
||||
.TP
|
||||
.B summary
|
||||
Shows a report of task status by project.
|
||||
|
||||
.TP
|
||||
.B timesheet [weeks]
|
||||
Shows a weekly report of tasks completed and started.
|
||||
|
||||
.TP
|
||||
.B history
|
||||
Shows a report of task history by month.
|
||||
|
||||
.TP
|
||||
.B ghistory
|
||||
Shows a graphical report of task status by month.
|
||||
|
||||
.TP
|
||||
.B calendar [ y | due [y] | month year [y] | year ]
|
||||
Shows a monthly calendar with due tasks marked.
|
||||
|
||||
.TP
|
||||
.B stats
|
||||
Shows task database statistics.
|
||||
|
||||
.TP
|
||||
.B import \fIfile
|
||||
Imports tasks from a variety of formats.
|
||||
|
||||
.TP
|
||||
.B export \fIfile
|
||||
Exports all tasks as a CSV file.
|
||||
|
||||
.TP
|
||||
.B color [sample]
|
||||
Displays all possible colors, or a sample.
|
||||
|
||||
.TP
|
||||
.B version
|
||||
Shows the task version number
|
||||
|
||||
.TP
|
||||
.B config [name [value | '']]
|
||||
Shows the current settings in the task configuration file. Also supports
|
||||
directly modifying the .taskrc file. This command either modifies
|
||||
the 'name' setting with a new value of 'value', or adds a new entry that
|
||||
is equivalent to 'name=value':
|
||||
|
||||
task config name value
|
||||
|
||||
This command sets a blank value. This has the effect of suppressing any
|
||||
default value:
|
||||
|
||||
task config name ''
|
||||
|
||||
Finally, this command removes any 'name=...' entry from the .taskrc file:
|
||||
|
||||
task config name
|
||||
|
||||
.TP
|
||||
.B help
|
||||
Shows the long usage text.
|
||||
.B prepend [tags] [attrs] description
|
||||
Prepends information to an existing task.
|
||||
|
||||
.SH REPORT SUBCOMMANDS
|
||||
|
||||
A report is a listing of information from the task database. There are several
|
||||
reports currently predefined in task. The output and sort behavior of these
|
||||
reports can be configured in the configuration file. See also the man page taskrc(5).
|
||||
reports currently predefined in taskwarrior. The output and sort behavior of
|
||||
these reports can be configured in the configuration file. See also the man page
|
||||
taskrc(5).
|
||||
|
||||
.TP
|
||||
.B active [tags] [attrs] [description]
|
||||
@@ -207,6 +292,14 @@ Shows all recurring tasks matching the specified criteria.
|
||||
.B waiting [tags] [attrs] [description]
|
||||
Shows all waiting tasks matching the specified criteria.
|
||||
|
||||
.TP
|
||||
.B blocked [tags] [attrs] [description]
|
||||
Shows all blocked tasks, that are dependent on other tasks.
|
||||
|
||||
.TP
|
||||
.B unblocked [tags] [attrs] [description]
|
||||
Shows all tasks that are not blocked by dependencies.
|
||||
|
||||
.TP
|
||||
.B next [tags] [attrs] [description]
|
||||
Shows all tasks with upcoming due dates matching the specified criteria.
|
||||
@@ -226,7 +319,15 @@ task del 1,4-10,19
|
||||
.TP
|
||||
.B +tag|-tag
|
||||
Tags are arbitrary words associated with a task. Use + to add a tag and - to
|
||||
remove a tag from a task. A task can have any quantity of tags
|
||||
remove a tag from a task. A task can have any quantity of tags.
|
||||
|
||||
Certain tags (called 'special tags'), can be used to affect the way tasks are
|
||||
treated. For example, is a task has the special tag 'nocolor', then it is
|
||||
exempt from all color rules. The supported special tags are:
|
||||
|
||||
+nocolor Disable color rules processing for this task
|
||||
+nonag Completion of this task suppresses all nag messages
|
||||
+nocal This task will not appear on the calendar
|
||||
|
||||
.TP
|
||||
.B project:<project-name>
|
||||
@@ -258,7 +359,10 @@ Specifies background color.
|
||||
|
||||
.TP
|
||||
.B limit:<number-of-rows>
|
||||
Specifies the desired number of rows a report should have.
|
||||
Specifies the desired number of tasks a report should show, if a positive
|
||||
integer is given. The value 'page' may also be used, and will limit the
|
||||
report output to as many lines of text as will fit on screen. This defaults
|
||||
to 25 lines, if ncurses is not installed or enabled.
|
||||
|
||||
.TP
|
||||
.B wait:<wait-date>
|
||||
@@ -280,7 +384,7 @@ Attribute modifiers improve filters. Supported modifiers are:
|
||||
.br
|
||||
.B isnt (synonym not)
|
||||
.br
|
||||
.B has (synonym contain)
|
||||
.B has (synonym contains)
|
||||
.br
|
||||
.B hasnt
|
||||
.br
|
||||
@@ -302,11 +406,11 @@ task list due.before:eom priority.not:L
|
||||
.SH SPECIFYING DATES AND FREQUENCIES
|
||||
|
||||
.SS DATES
|
||||
Task reads dates from the command line and displays dates in the
|
||||
Taskwarrior reads dates from the command line and displays dates in the
|
||||
reports. The expected and desired date format is determined by the
|
||||
configuration variable
|
||||
.I dateformat
|
||||
in the task configuration file.
|
||||
in the taskwarrior configuration file.
|
||||
|
||||
.RS
|
||||
.TP
|
||||
@@ -319,16 +423,40 @@ task ... due:today
|
||||
.br
|
||||
task ... due:yesterday
|
||||
.br
|
||||
task ... due:tomorrow
|
||||
task ... due:tomorrow
|
||||
|
||||
.TP
|
||||
Day number with ordinal
|
||||
task ... due:23rd
|
||||
.br
|
||||
task ... due:3wks
|
||||
.br
|
||||
task ... due:1day
|
||||
.br
|
||||
task ... due:9hrs
|
||||
|
||||
.TP
|
||||
End of week (Friday), month and year
|
||||
Start of (work) week (Monday), calendar week (Sunday or Monday), month and year
|
||||
.br
|
||||
task ... due:sow
|
||||
.br
|
||||
task ... due:soww
|
||||
.br
|
||||
task ... due:socw
|
||||
.br
|
||||
task ... due:som
|
||||
.br
|
||||
task ... due:soy
|
||||
|
||||
.TP
|
||||
End of (work) week (Friday), calendar week (Saturday or Sunday), month and year
|
||||
.br
|
||||
task ... due:eow
|
||||
.br
|
||||
task ... due:eoww
|
||||
.br
|
||||
task ... due:eocw
|
||||
.br
|
||||
task ... due:eom
|
||||
.br
|
||||
task ... due:eoy
|
||||
@@ -339,7 +467,7 @@ task ... due:fri
|
||||
.RE
|
||||
|
||||
.SS FREQUENCIES
|
||||
Recurrence periods. Task supports several ways of specifying the
|
||||
Recurrence periods. Taskwarrior supports several ways of specifying the
|
||||
.I frequency
|
||||
of recurring tasks.
|
||||
|
||||
@@ -379,7 +507,7 @@ Every two years.
|
||||
|
||||
|
||||
.SH COMMAND ABBREVIATION
|
||||
All task 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. E.g.
|
||||
|
||||
.RS
|
||||
$ task li
|
||||
@@ -411,7 +539,7 @@ $ task add "quoted ' quote"
|
||||
$ task add escaped \\' quote
|
||||
.RE
|
||||
|
||||
The argument \-\- (a double dash) tells task to treat all other args
|
||||
The argument \-\- (a double dash) tells taskwarrior to treat all other args
|
||||
as description:
|
||||
|
||||
.RS
|
||||
@@ -419,7 +547,7 @@ $ task add -- project:Home needs scheduling
|
||||
.RE
|
||||
|
||||
.SH CONFIGURATION FILE AND OVERRIDE OPTIONS
|
||||
Task 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
|
||||
|
||||
.TP
|
||||
@@ -463,23 +591,26 @@ can be configured in the configuration file.
|
||||
~/.task/undo.data The file that contains the information to the "undo" command.
|
||||
|
||||
.SH "CREDITS & COPYRIGHTS"
|
||||
task was written by P. Beckingham <paul@beckingham.net>.
|
||||
Taskwarrior was written by P. Beckingham <paul@beckingham.net>.
|
||||
.br
|
||||
Copyright (C) 2006 \- 2010 P. Beckingham
|
||||
|
||||
This man page was originally written by P.C. Shyamshankar, and has been modified
|
||||
and supplemented by Federico Hernandez.
|
||||
|
||||
task is distributed under the GNU General Public License. See
|
||||
Thank also to T. Charles Yun.
|
||||
|
||||
Taskwarrior is distributed under the GNU General Public License. See
|
||||
http://www.gnu.org/licenses/gpl-2.0.txt for more information.
|
||||
|
||||
.SH SEE ALSO
|
||||
.BR taskrc(5),
|
||||
.BR task-tutorial(5),
|
||||
.BR task-faq(5)
|
||||
.BR task-color(5)
|
||||
.BR task-faq(5),
|
||||
.BR task-color(5),
|
||||
.BR task-sync(5)
|
||||
|
||||
For more information regarding task, the following may be referenced:
|
||||
For more information regarding taskwarrior, the following may be referenced:
|
||||
|
||||
.TP
|
||||
The official site at
|
||||
@@ -495,5 +626,5 @@ You can contact the project by writing an email to
|
||||
|
||||
.SH REPORTING BUGS
|
||||
.TP
|
||||
Bugs in task may be reported to the issue-tracker at
|
||||
Bugs in taskwarrior may be reported to the issue-tracker at
|
||||
<http://taskwarrior.org>
|
||||
|
||||
393
doc/man/taskrc.5
393
doc/man/taskrc.5
@@ -1,4 +1,4 @@
|
||||
.TH taskrc 5 2010-02-03 "task 1.9.0" "User Manuals"
|
||||
.TH taskrc 5 2010-10-07 "task 1.9.2" "User Manuals"
|
||||
|
||||
.SH NAME
|
||||
taskrc \- Configuration file for the task(1) command
|
||||
@@ -9,7 +9,7 @@ taskrc \- Configuration file for the task(1) command
|
||||
.B task rc:<directory-path>/.taskrc
|
||||
|
||||
.SH DESCRIPTION
|
||||
.B task
|
||||
.B taskwarrior
|
||||
obtains its configuration data from a file called
|
||||
.I .taskrc
|
||||
\&. This file is normally located in the user's home directory:
|
||||
@@ -27,7 +27,7 @@ $ task rc:<directory-path>/.taskrc
|
||||
.RE
|
||||
|
||||
Individual option can be overridden by using the
|
||||
.I rc.<name>:
|
||||
.I rc.<name>:
|
||||
attribute when running task:
|
||||
|
||||
.RS
|
||||
@@ -35,14 +35,14 @@ $ task rc.<name>:<value> ...
|
||||
.RE
|
||||
|
||||
If
|
||||
.B task
|
||||
.B taskwarrior
|
||||
is run without an existing configuration file it will ask if it should create a
|
||||
default, sample
|
||||
.I .taskrc
|
||||
file in the user's home directory.
|
||||
|
||||
The task configuration file consists of a series of "assignments" in each line.
|
||||
The "assignments" have the syntax:
|
||||
The taskwarrior configuration file consists of a series of "assignments" in each
|
||||
line. The "assignments" have the syntax:
|
||||
|
||||
.RS
|
||||
<name-of-configuration-variable>=<value-to-be-set>
|
||||
@@ -66,9 +66,9 @@ The hash mark, or pound sign ("#") is used as a "comment" character. It can be
|
||||
used to annotate the configuration file. All text after the character to the end
|
||||
of the line is ignored.
|
||||
|
||||
Note that task is flexible about the values used to represent Boolean items.
|
||||
You can use "on", "yes", "y", "1", "true", "t", "+", "enabled". Anything else
|
||||
means "off".
|
||||
Note that taskwarrior is flexible about the values used to represent Boolean
|
||||
items. You can use "on", "yes", "y", "1", "true", "t", "+", "enabled".
|
||||
Anything else means "off".
|
||||
|
||||
.SH EDITING
|
||||
You can edit your .taskrc file by hand if you wish, or you can use the 'config'
|
||||
@@ -84,14 +84,14 @@ To delete an entry, use this command:
|
||||
$ task config nag
|
||||
.RE
|
||||
|
||||
Task will then use the default value. To explicitly set a value to blank, and
|
||||
therefore avoid using the default value, use this command:
|
||||
Taskwarrior will then use the default value. To explicitly set a value to
|
||||
blank, and therefore avoid using the default value, use this command:
|
||||
|
||||
.RS
|
||||
$ task config nag ""
|
||||
.RE
|
||||
|
||||
Task will also display all your settings with this command:
|
||||
Taskwarrior will also display all your settings with this command:
|
||||
|
||||
.RS
|
||||
$ task config
|
||||
@@ -100,6 +100,30 @@ $ task config
|
||||
and in addition, will also perform a check of all the values in the file,
|
||||
warning you of anything it finds amiss.
|
||||
|
||||
.SH NESTING CONFIGURATION FILES
|
||||
The .taskrc can include other files containing configuration settings by using the
|
||||
.B include
|
||||
statement:
|
||||
|
||||
.RS
|
||||
include <path/to/the/configuration/file/to/be/included>
|
||||
.RE
|
||||
|
||||
By using include files you can divide your main configuration file into several
|
||||
ones containing just the relevant configuration data like colors, etc.
|
||||
|
||||
There are two excellent uses of includes in your .taskrc, shown here:
|
||||
|
||||
.RS
|
||||
include /usr/local/share/doc/task/rc/holidays-US.rc
|
||||
.br
|
||||
include /usr/local/share/doc/task/rc/dark-16.theme
|
||||
.RE
|
||||
|
||||
This includes two standard files that are distributed with taskwarrior, which
|
||||
define a set of US holidays, and set up a 16-color theme to use, to color the
|
||||
reports and calendar.
|
||||
|
||||
.SH CONFIGURATION VARIABLES
|
||||
Valid variable names and their default values are:
|
||||
|
||||
@@ -107,8 +131,8 @@ Valid variable names and their default values are:
|
||||
|
||||
.TP
|
||||
.B data.location=$HOME/.task
|
||||
This is a path to the directory containing all the task files. By default, it is
|
||||
set up to be ~/.task, for example: /home/paul/.task
|
||||
This is a path to the directory containing all the taskwarrior files. By
|
||||
default, it is set up to be ~/.task, for example: /home/paul/.task
|
||||
|
||||
Note that you can use the
|
||||
.B ~
|
||||
@@ -116,8 +140,8 @@ shell meta character, which will be properly expanded.
|
||||
|
||||
.TP
|
||||
.B locking=on
|
||||
Determines whether task uses file locking when accessing the pending.data and
|
||||
completed.data files. Defaults to "on". Solaris users who store the task data
|
||||
Determines whether to use file locking when accessing the pending.data and
|
||||
completed.data files. Defaults to "on". Solaris users who store the data
|
||||
files on an NFS mount may need to set locking to "off". Note that there is
|
||||
danger in setting this value to "off" - another program (or another instance of
|
||||
task) may write to the task.pending file at the same time.
|
||||
@@ -125,7 +149,7 @@ task) may write to the task.pending file at the same time.
|
||||
.SS TERMINAL
|
||||
.TP
|
||||
.B curses=on
|
||||
Determines whether task uses ncurses to establish the size of the window you are
|
||||
Determines whether to use ncurses to establish the size of the window you are
|
||||
using, for text wrapping.
|
||||
|
||||
.TP
|
||||
@@ -136,27 +160,32 @@ The width of tables used when ncurses support is not available. Defaults to 80.
|
||||
.B editor=vi
|
||||
Specifies which text editor you wish to use for when the
|
||||
.B task edit <ID>
|
||||
command is used. Task will first look for this configuration variable. If found,
|
||||
it is used. Otherwise task will look for the $VISUAL or $EDITOR environment
|
||||
variables, before it defaults to using "vi".
|
||||
command is used. Taskwarrior will first look for this configuration variable. If
|
||||
found, it is used. Otherwise it will look for the $VISUAL or $EDITOR
|
||||
environment variables, before it defaults to using "vi".
|
||||
|
||||
.SS MISCELLANEOUS
|
||||
|
||||
.TP
|
||||
.B locale=en-US
|
||||
The locale is a combination of ISO 639-1 language code and ISO 3166 country
|
||||
code. If not specified, task will assume en-US. If specified, task will locate
|
||||
the correct file of localized strings and proceed. It is an error to specify a
|
||||
locale for which there is no strings file.
|
||||
code. If not specified, will assume en-US. If specified, taskwarrior will
|
||||
locate the correct file of localized strings and proceed. It is an error to
|
||||
specify a locale for which there is no strings file.
|
||||
|
||||
.TP
|
||||
.B verbose=yes
|
||||
Controls some of the verbosity of taskwarrior.
|
||||
|
||||
.TP
|
||||
.B confirmation=yes
|
||||
May be "yes" or "no", and determines whether task will ask for confirmation
|
||||
before deleting a task or doing bulk changes. The default value is "yes".
|
||||
May be "yes" or "no", and determines whether taskwarrior will ask for
|
||||
confirmation before deleting a task or doing bulk changes. The default value
|
||||
is "yes".
|
||||
|
||||
.TP
|
||||
.B echo.command=yes
|
||||
May be "yes" or "no", and causes task to display the ID and description of any
|
||||
May be "yes" or "no", and causes the display of the ID and description of any
|
||||
task when you run the start, stop, do, undo or delete commands. The default
|
||||
value is "yes".
|
||||
|
||||
@@ -201,12 +230,24 @@ May be yes or no, and determines whether the tab completion scripts consider all
|
||||
the project names you have used, or just the ones used in active tasks. The
|
||||
default value is "no".
|
||||
|
||||
.TP
|
||||
.B list.all.projects=yes
|
||||
May be yes or no, and determines whether 'projects' command lists all the project
|
||||
names you have used, or just the ones used in active tasks. The default value is
|
||||
"no".
|
||||
|
||||
.TP
|
||||
.B complete.all.tags=yes
|
||||
May be yes or no, and determines whether the tab completion scripts consider all
|
||||
the tag names you have used, or just the ones used in active tasks. The default
|
||||
value is "no".
|
||||
|
||||
.TP
|
||||
.B list.all.tags=yes
|
||||
May be yes or no, and determines whether the 'tags' command lists all the tag
|
||||
names you have used, or just the ones used in active tasks. The default value is
|
||||
"no".
|
||||
|
||||
.TP
|
||||
.B search.case.sensitive=yes
|
||||
May be yes or no, and determines whether keyword lookup and substitutions on the
|
||||
@@ -214,8 +255,8 @@ description and annotations are done in a case sensitive way. Defaults to yes.
|
||||
|
||||
.TP
|
||||
.B _forcecolor=no
|
||||
Task shuts off color automatically when the output is not sent directly to a
|
||||
a TTY. For example, this command:
|
||||
Taskwarrior shuts off color automatically when the output is not sent directly
|
||||
to a TTY. For example, this command:
|
||||
|
||||
.RS
|
||||
.RS
|
||||
@@ -231,7 +272,8 @@ $ task rc._forcecolor=yes list > file
|
||||
|
||||
.TP
|
||||
.B blanklines=yes
|
||||
Turning this value off causes task to generate a more vertically compact output.
|
||||
Turning this value off causes taskwarrior to generate a more vertically compact
|
||||
output.
|
||||
|
||||
.TP
|
||||
.B shell.prompt=task>
|
||||
@@ -250,19 +292,34 @@ The character or string to show in the tag_indicator column. Defaults to +.
|
||||
.B recurrence.indicator=R
|
||||
The character or string to show in the recurrence_indicator column. Defaults to R.
|
||||
|
||||
.TP
|
||||
.B recurrence.limit=1
|
||||
The number of future recurring tasks to show. Defaults to 1. For example, if a
|
||||
weekly recurring task is added with a due date of tomorrow, and recurrence.limit
|
||||
is set to 2, then a report will list 2 pending recurring tasks, one for tomorrow,
|
||||
and one for a week from tomorrow.
|
||||
|
||||
.TP
|
||||
.B undo.style=side
|
||||
When the 'undo' command is run, taskwarrior presents a before and after
|
||||
comparison of the data. This can be in either the 'side' style, which compares
|
||||
values side-by-side in a table, or 'diff' style, which uses a format similar to
|
||||
the 'diff' command.
|
||||
|
||||
.TP
|
||||
.B debug=off
|
||||
Task has a debug mode that causes diagnostic output to be displayed. Typically
|
||||
this is not something anyone would want, but when reporting a bug, debug output
|
||||
can be useful. It can also help explain how the command line is being parsed,
|
||||
but the information is displayed in a developer-friendly, not a user-friendly
|
||||
way.
|
||||
Taskwarrior has a debug mode that causes diagnostic output to be displayed.
|
||||
Typically this is not something anyone would want, but when reporting a bug,
|
||||
debug output can be useful. It can also help explain how the command line is
|
||||
being parsed, but the information is displayed in a developer-friendly, not a
|
||||
user-friendly way.
|
||||
|
||||
.TP
|
||||
.B alias.rm=delete
|
||||
Task supports command aliases. This alias provides an alternate name (rm) for
|
||||
the delete command. You can use aliases to provide alternate names for any of
|
||||
task's commands.
|
||||
Taskwarrior supports command aliases. This alias provides an alternate name
|
||||
(rm) for the delete command. You can use aliases to provide alternate names for
|
||||
any of the commands. Several commands you may use are actually aliases -
|
||||
the 'history' report, for example, or 'export'.
|
||||
|
||||
.SS DATES
|
||||
|
||||
@@ -273,11 +330,13 @@ task's commands.
|
||||
.TP
|
||||
.B dateformat.holiday=YMD
|
||||
.TP
|
||||
.B dateformat.annotation=m/d/Y
|
||||
.TP
|
||||
.B report.X.dateformat=m/d/Y
|
||||
This is a string of characters that define how task formats date values. The
|
||||
precedence order for the configuration variable is report.X.dateformat then
|
||||
reportdateformat then dateformat. While report.X.dateformat only formats the
|
||||
due date in reports, reportdateformat formats the due date both in reports
|
||||
This is a string of characters that define how taskwarrior formats date values.
|
||||
The precedence order for the configuration variable is report.X.dateformat then
|
||||
dateformat.report then dateformat. While report.X.dateformat only formats the
|
||||
due date in reports, dateformat.report formats the due date both in reports
|
||||
and "task info". If both of these are not set then dateformat will be applied
|
||||
to the due date. Entered dates as well as all other displayed dates in reports
|
||||
are formatted according to dateformat.
|
||||
@@ -307,6 +366,12 @@ b short name of month, for example Jan or Aug
|
||||
B long name of month, for example January or August
|
||||
.br
|
||||
V weeknumber, for example 03 or 37
|
||||
.br
|
||||
H two-digit hour, for example 03 or 11
|
||||
.br
|
||||
N two-digit minutes, for example 05 or 42
|
||||
.br
|
||||
S two-digit seconds, for example 07 or 47
|
||||
.RE
|
||||
.RE
|
||||
|
||||
@@ -327,7 +392,7 @@ M-D-Y would use for input and output 07-24-2009
|
||||
.RE
|
||||
|
||||
.RS
|
||||
Examples for other values of reportdateformat:
|
||||
Examples for other values of dateformat.report:
|
||||
.RE
|
||||
|
||||
.RS
|
||||
@@ -337,7 +402,7 @@ a D b Y (V) would do an output as "Fri 24 Jul 2009 (30)"
|
||||
.br
|
||||
A, B D, Y would do an output as "Friday, July 24, 2009"
|
||||
.br
|
||||
vV a Y-M-D would do an output as "v30 Fri 2009-07.24"
|
||||
vV a Y-M-D would do an output as "v30 Fri 2009-07-24"
|
||||
.RE
|
||||
.RE
|
||||
|
||||
@@ -379,8 +444,23 @@ of the holidays is also shown. If set to sparse only the days are color-coded
|
||||
and no details on the holidays will be displayed. The displaying of holidays is
|
||||
turned off by setting the variable to none. The default value is "none".
|
||||
|
||||
.SS Journal entries
|
||||
|
||||
.TP
|
||||
.B Holidays
|
||||
.B journal.time=no
|
||||
May be yes or no, and determines whether the 'start' and 'stop' commands should
|
||||
record an annotation when being executed. The default value is "no". The text of
|
||||
the corresponding annotations is controlled by
|
||||
|
||||
.TP journal.time.start.annotation=Started task
|
||||
The text of the annotation that is recorded when executing the start command and
|
||||
having set journal.time.
|
||||
|
||||
.TP journal.time.stop.annotation=Stopped task
|
||||
The text of the annotation that is recorded when executing the stop command and
|
||||
having set journal.time.
|
||||
|
||||
.SS Holidays
|
||||
Holidays are entered either directly in the .taskrc file or via an include file
|
||||
that is specified in .taskrc. For each holiday the name and the date is
|
||||
required to be given:
|
||||
@@ -403,25 +483,61 @@ Dates are to be entered according to the setting in the dateformat.holiday
|
||||
variable.
|
||||
.RE
|
||||
|
||||
.RS
|
||||
The following holidays are computed automatically: Good Friday (goodfriday),
|
||||
Easter (easter), Easter monday (eastermonday), Ascension (ascension), Pentecost
|
||||
(pentecost). The date for these holidays is the given keyword:
|
||||
.RE
|
||||
|
||||
.RS
|
||||
.RS
|
||||
.br
|
||||
holiday.eastersunday.name=Easter
|
||||
.br
|
||||
holiday.eastersunday.date=easter
|
||||
.RE
|
||||
.RE
|
||||
|
||||
Note that the taskwarrior distribution contains example holiday files that can
|
||||
be included like this:
|
||||
|
||||
.RS
|
||||
.RS
|
||||
.br
|
||||
include /usr/local/share/doc/task/rc/holidays-US.rc
|
||||
.RE
|
||||
.RE
|
||||
|
||||
.TP
|
||||
.B monthsperline=3
|
||||
Determines how many months the "task calendar" command renders across the
|
||||
screen. Defaults to however many will fit. If more months than will fit are
|
||||
specified, task will only show as many that will fit.
|
||||
specified, taskwarrior will only show as many that will fit.
|
||||
|
||||
.SS DEPENDENCIES
|
||||
|
||||
.TP
|
||||
.B dependency.reminder=on
|
||||
Determines whether dependency chain violations generate reminders.
|
||||
|
||||
.TP
|
||||
.B dependency.confirm=yes
|
||||
Determines whether dependency chain repair requires confirmation.
|
||||
|
||||
.SS COLOR CONTROLS
|
||||
|
||||
.TP
|
||||
.B color=on
|
||||
May be "on" or "off". Determines whether task uses color. When "off", task will
|
||||
use dashes (-----) to underline column headings.
|
||||
May be "on" or "off". Determines whether taskwarrior uses color. When "off",
|
||||
will use dashes (-----) to underline column headings.
|
||||
|
||||
.TP
|
||||
.B fontunderline=on
|
||||
Determines if font underlines or ASCII dashes should be used to underline
|
||||
headers, even when color is enabled.
|
||||
.RE
|
||||
|
||||
Task has a number of coloration rules. They correspond to a particular
|
||||
Taskwarrior has a number of coloration rules. They correspond to a particular
|
||||
attribute of a task, such as it being due, or being active, and specifies the
|
||||
automatic coloring of that task. A list of valid colors, depending on your
|
||||
terminal, can be obtained by running the command:
|
||||
@@ -431,40 +547,50 @@ terminal, can be obtained by running the command:
|
||||
.RE
|
||||
|
||||
.RS
|
||||
The coloration rules and their defaults are:
|
||||
Note that no default values are listed here - the defaults now correspond to the
|
||||
dark-256.theme (Linux) and dark-16.theme (other) theme values.
|
||||
The coloration rules are as follows:
|
||||
.RE
|
||||
|
||||
.RS
|
||||
.RS
|
||||
.B color.overdue=bold red
|
||||
The color for overdue tasks.
|
||||
.B color.due.today
|
||||
Task is due today
|
||||
.br
|
||||
.B color.due.today=bold magenta
|
||||
The color of tasks due today.
|
||||
.B color.active
|
||||
Task is started, therefore active.
|
||||
.br
|
||||
.B color.due=bold yellow
|
||||
The color of due tasks.
|
||||
.B color.blocked
|
||||
Task is blocked by a dependency.
|
||||
.br
|
||||
.B color.pri.H=bold
|
||||
The color of priority:H tasks.
|
||||
.B color.overdue
|
||||
Task is overdue (due some time prior to now).
|
||||
.br
|
||||
.B color.pri.M=on yellow
|
||||
The color of priority:M tasks. No default value.
|
||||
.B color.due
|
||||
Task is coming due.
|
||||
.br
|
||||
.B color.pri.L=on green
|
||||
The color of priority:L tasks. No default value.
|
||||
.B color.project.none
|
||||
Task does not have an assigned project.
|
||||
.br
|
||||
.B color.pri.none=white on blue
|
||||
The color of priority: tasks. No default value.
|
||||
.B color.tag.none
|
||||
Task has no tags.
|
||||
.br
|
||||
.B color.active=bold cyan
|
||||
The color of active tasks.
|
||||
.B color.tagged
|
||||
Task has at least one tag.
|
||||
.br
|
||||
.B color.tagged=yellow
|
||||
The color of tagged tasks.
|
||||
.B color.recurring
|
||||
Task is recurring.
|
||||
.br
|
||||
.B color.recurring=on red
|
||||
The color for recurring tasks.
|
||||
.B color.pri.H
|
||||
Task has priority H.
|
||||
.br
|
||||
.B color.pri.M
|
||||
Task has priority M.
|
||||
.br
|
||||
.B color.pri.L
|
||||
Task has priority L.
|
||||
.br
|
||||
.B color.pri.none
|
||||
Task has no priority.
|
||||
.RE
|
||||
.RE
|
||||
|
||||
@@ -476,73 +602,134 @@ nothing, for example:
|
||||
.RE
|
||||
.RE
|
||||
|
||||
.RS
|
||||
See the task-color(5) man pages for color details.
|
||||
.RE
|
||||
|
||||
.RS
|
||||
Certain attributes like tags, projects and keywords can have their own
|
||||
coloration rules.
|
||||
.RE
|
||||
|
||||
.RS
|
||||
.TP
|
||||
.B color.tag.X=yellow
|
||||
Colors any task that has the tag X.
|
||||
.RE
|
||||
|
||||
.TP
|
||||
.B color.project.X=on green
|
||||
Colors any task assigned to project X.
|
||||
.RE
|
||||
|
||||
.TP
|
||||
.B color.keyword.X=on blue
|
||||
Colors any task where the description or any annotation contains X.
|
||||
.RE
|
||||
|
||||
.TP
|
||||
.B color.header=green
|
||||
Colors any of the messages printed prior to the report output.
|
||||
.RE
|
||||
|
||||
.TP
|
||||
.B color.footnote=green
|
||||
Colors any of the messages printed last.
|
||||
.RE
|
||||
|
||||
.TP
|
||||
.B color.summary.bar=on green
|
||||
Colors the summary progress bar. Should consist of a background color.
|
||||
.RE
|
||||
|
||||
.TP
|
||||
.B color.summary.background=on black
|
||||
Colors the summary progress bar. Should consist of a background color.
|
||||
.RE
|
||||
|
||||
.TP
|
||||
.B color.calendar.today=black on cyan
|
||||
Color of today in calendar.
|
||||
.RE
|
||||
|
||||
.TP
|
||||
.B color.calendar.due=black on green
|
||||
Color of days with due tasks in calendar.
|
||||
.RE
|
||||
|
||||
.TP
|
||||
.B color.calendar.due.today=black on magenta
|
||||
Color of today with due tasks in calendar.
|
||||
.RE
|
||||
|
||||
.TP
|
||||
.B color.calendar.overdue=black on red
|
||||
Color of days with overdue tasks in calendar.
|
||||
.RE
|
||||
|
||||
.TP
|
||||
.B color.calendar.weekend=bright white on black
|
||||
Color of weekend days in calendar.
|
||||
.RE
|
||||
|
||||
.TP
|
||||
.B color.calendar.holiday=black on bright yellow
|
||||
Color of holidays in calendar.
|
||||
.RE
|
||||
|
||||
.TP
|
||||
.B color.calendar.weeknumber=black on white
|
||||
Color of weeknumbers in calendar.
|
||||
.RE
|
||||
|
||||
.RS
|
||||
It is possible to apply a specific color to every other task in a report,
|
||||
which can make it easier to visually separate tasks. This is especially
|
||||
useful when tasks are displayed over multiple lines due to long descriptions
|
||||
or annotations.
|
||||
.TP
|
||||
.B color.alternate=on rgb253
|
||||
Color of alternate tasks.
|
||||
This is to apply a specific color to every other task in a report,
|
||||
which can make it easier to visually separate tasks. This is especially
|
||||
useful when tasks are displayed over multiple lines due to long descriptions
|
||||
or annotations.
|
||||
.RE
|
||||
|
||||
.TP
|
||||
.B color.history.add=on red
|
||||
.RE
|
||||
.br
|
||||
.B color.history.done=on green
|
||||
.RE
|
||||
.br
|
||||
.B color.history.delete=on yellow
|
||||
.RS
|
||||
Colors the bars on the ghistory report graphs. Defaults to red, green and
|
||||
yellow bars.
|
||||
.RE
|
||||
|
||||
.TP
|
||||
.B color.undo.before=red
|
||||
.RE
|
||||
.br
|
||||
.B color.undo.after=green
|
||||
.RS
|
||||
Colors used by the undo command, to indicate the values both before and after
|
||||
a change that is to be reverted.
|
||||
.RE
|
||||
|
||||
.TP
|
||||
.B color.sync.added=green
|
||||
.RE
|
||||
.br
|
||||
.B color.sync.changed=yellow
|
||||
.RE
|
||||
.br
|
||||
.B color.sync.rejected=red
|
||||
.RS
|
||||
Colors the output of the merge command.
|
||||
.RE
|
||||
|
||||
.TP
|
||||
.B rule.precedence.color=overdue,tag,project,keyword,active,...
|
||||
.RS
|
||||
This setting specifies the precedence of the color rules, from highest to
|
||||
lowest. Note that the prefix 'color.' is omitted (for brevity), and that any
|
||||
wildcard values (color.tag.XXX) is shortened to 'tag', which places all specific
|
||||
tag rules at the same precedence, again for brevity.
|
||||
.RE
|
||||
|
||||
.SS SHADOW FILE
|
||||
@@ -551,11 +738,11 @@ Color of alternate tasks.
|
||||
.B
|
||||
shadow.file=$HOME/.task/shadow.txt
|
||||
If specified, designates a file path that will be automatically written to by
|
||||
task, whenever the task database changes. In other words, it is automatically
|
||||
kept up to date. The shadow.command configuration variable is used to determine
|
||||
which report is written to the shadow file. There is no color used in the
|
||||
shadow file. This feature can be useful in maintaining a current file for use by
|
||||
programs like GeekTool, Conky or Samurize.
|
||||
taskwarrior, whenever the task database changes. In other words, it is
|
||||
automatically kept up to date. The shadow.command configuration variable is
|
||||
used to determine which report is written to the shadow file. There is no color
|
||||
used in the shadow file. This feature can be useful in maintaining a current
|
||||
file for use by programs like GeekTool, Conky or Samurize.
|
||||
|
||||
.TP
|
||||
.B
|
||||
@@ -569,8 +756,8 @@ configuration variable. The format is identical to that of
|
||||
.TP
|
||||
.B
|
||||
shadow.notify=on
|
||||
When this value is set to "on", task will display a message whenever the shadow
|
||||
file is updated by some task command.
|
||||
When this value is set to "on", taskwarrior will display a message whenever the
|
||||
shadow file is updated by some task command.
|
||||
|
||||
.SS DEFAULTS
|
||||
|
||||
@@ -591,7 +778,7 @@ command, if you don't specify one. The default is blank.
|
||||
.TP
|
||||
.B
|
||||
default.command=list
|
||||
Provides a default command that is run every time task is invoked with no
|
||||
Provides a default command that is run every time taskwarrior is invoked with no
|
||||
arguments. For example, if set to:
|
||||
|
||||
.RS
|
||||
@@ -601,8 +788,8 @@ default.command=list project:foo
|
||||
.RE
|
||||
|
||||
.RS
|
||||
then task will run the "list project:foo" command if no command is specified.
|
||||
This means that by merely typing
|
||||
then taskwarrior will run the "list project:foo" command if no command is
|
||||
specified. This means that by merely typing
|
||||
.RE
|
||||
|
||||
.RS
|
||||
@@ -636,9 +823,9 @@ The description for report X when running the "task help" command.
|
||||
.TP
|
||||
.B report.X.columns
|
||||
The columns that will be used when generating the report X. Valid columns are:
|
||||
id, uuid, project, priority, entry, start, due, recur, recur_indicator, age,
|
||||
age_compact, active, tags, tag_indicator, description, description_only,
|
||||
countdown, countdown_compact.
|
||||
id, uuid, project, priority, priority_long, entry, start, end, due, countdown,
|
||||
countdown_compact, age, age_compact, active, tags, depends, description_only,
|
||||
description, recur, recurrence_indicator, tag_indicator and wait.
|
||||
The IDs are separated by commas.
|
||||
|
||||
.TP
|
||||
@@ -650,7 +837,10 @@ labels are a comma separated list.
|
||||
.B report.X.sort
|
||||
The sort order of the tasks in the generated report X. The sort order is
|
||||
specified by using the column ids post-fixed by a "+" for ascending sort order
|
||||
or a "-" for descending sort order. The sort IDs are separated by commas
|
||||
or a "-" for descending sort order. The sort IDs are separated by commas.
|
||||
For example:
|
||||
|
||||
report.list.sort=due+,priority-,active-,project+
|
||||
|
||||
.TP
|
||||
.B report.X.filter
|
||||
@@ -660,7 +850,7 @@ criteria are displayed in the generated report.
|
||||
.TP
|
||||
.B report.X.dateformat
|
||||
This adds a dateformat to the report X that will be used by the "due date"
|
||||
column. If it is not set then reportdateformat and dateformat will be used in
|
||||
column. If it is not set then dateformat.report and dateformat will be used in
|
||||
this order. See the
|
||||
.B DATES
|
||||
section for details on the sequence placeholders.
|
||||
@@ -678,8 +868,8 @@ An optional value to a report limiting the number of displayed tasks in the
|
||||
generated report.
|
||||
|
||||
.TP
|
||||
Task comes with a number of predefined reports in its default configuration
|
||||
file. These reports are:
|
||||
Taskwarrior comes with a number of predefined reports in its default
|
||||
configuration file. These reports are:
|
||||
|
||||
.TP
|
||||
.B long
|
||||
@@ -734,22 +924,23 @@ Lists all tasks matching the specified criteria.
|
||||
Lists all tasks with upcoming due dates matching the specified criteria.
|
||||
|
||||
.SH "CREDITS & COPYRIGHTS"
|
||||
task was written by P. Beckingham <paul@beckingham.net>.
|
||||
Taskwarrior was written by P. Beckingham <paul@beckingham.net>.
|
||||
.br
|
||||
Copyright (C) 2006 \- 2010 P. Beckingham
|
||||
|
||||
This man page was originally written by Federico Hernandez.
|
||||
|
||||
task is distributed under the GNU General Public License. See
|
||||
Taskwarrior is distributed under the GNU General Public License. See
|
||||
http://www.gnu.org/licenses/gpl-2.0.txt for more information.
|
||||
|
||||
.SH SEE ALSO
|
||||
.BR task(1),
|
||||
.BR task-tutorial(5),
|
||||
.BR task-faq(5)
|
||||
.BR task-color(5)
|
||||
.BR task-faq(5),
|
||||
.BR task-color(5),
|
||||
.BR task-sync(5)
|
||||
|
||||
For more information regarding task, the following may be referenced:
|
||||
For more information regarding taskwarrior, the following may be referenced:
|
||||
|
||||
.TP
|
||||
The official site at
|
||||
@@ -765,5 +956,5 @@ You can contact the project by writing an email to
|
||||
|
||||
.SH REPORTING BUGS
|
||||
.TP
|
||||
Bugs in task may be reported to the issue-tracker at
|
||||
Bugs in taskwarrior may be reported to the issue-tracker at
|
||||
<http://taskwarrior.org>
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
|
||||
# This is a full BNF grammar for the task command line. It is intended that a
|
||||
# future release of task will incorporate a complete lexer/parser implementing
|
||||
# this grammar, which will allow for more sophisticated command lines, for
|
||||
# example:
|
||||
# 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 ///
|
||||
|
||||
533
doc/misc/run.193
Executable file
533
doc/misc/run.193
Executable file
@@ -0,0 +1,533 @@
|
||||
#! /bin/bash
|
||||
|
||||
rm -f /Users/paul/.task/pending.data /Users/paul/.task/completed.data /Users/paul/.task/undo.data
|
||||
|
||||
echo 'data.location=~/.task' > /Users/paul/.taskrc
|
||||
echo 'color=off' >> /Users/paul/.taskrc
|
||||
echo 'color.summary.background=on gray3' >> /Users/paul/.taskrc
|
||||
echo '#include /usr/local/share/doc/task/rc/dark-blue-256.theme' >> /Users/paul/.taskrc
|
||||
echo '#include /usr/local/share/doc/task/rc/dark-red-256.theme' >> /Users/paul/.taskrc
|
||||
echo '#include /usr/local/share/doc/task/rc/dark-256.theme' >> /Users/paul/.taskrc
|
||||
|
||||
# 1 Intro
|
||||
|
||||
# 2 Basic usage
|
||||
echo Basic usage --------------------------------------------------------------
|
||||
echo $ task add Select a free weekend in November
|
||||
task add Select a free weekend in November
|
||||
echo $ task add Select and book a venue
|
||||
task add Select and book a venue
|
||||
echo $ task add Come up with a guest list
|
||||
task add Come up with a guest list
|
||||
echo $ task add Mail invitations
|
||||
task add Mail invitations
|
||||
echo $ task add Select a caterer
|
||||
task add Select a caterer
|
||||
echo $ task list
|
||||
task list
|
||||
echo $ task log Order a special cake
|
||||
task log Order a special cake
|
||||
echo $ task 4 duplicate /Mail/Design/
|
||||
task 4 duplicate /Mail/Design/
|
||||
echo $ task 4 duplicate /Mail/Print/
|
||||
task 4 duplicate /Mail/Print/
|
||||
echo $ task list
|
||||
task list
|
||||
echo $ task 3 done
|
||||
task 3 done
|
||||
echo $ task list
|
||||
task list
|
||||
|
||||
# 3 Projects
|
||||
echo Projects --------------------------------------------------------------
|
||||
echo $ task add Pay teh rent on teh 31st
|
||||
task add Pay teh rent on teh 31st
|
||||
echo $ task 7 /teh/the/g
|
||||
task 7 /teh/the/g
|
||||
echo $ task list
|
||||
task list
|
||||
echo $ task 7 project:home
|
||||
task 7 project:home
|
||||
echo $ task 1-6 project:party
|
||||
echo 'All' | task 1-6 project:party
|
||||
echo $ task projects
|
||||
task projects
|
||||
echo $ task list project:home
|
||||
task list project:home
|
||||
echo $ task li pro:par
|
||||
task li pro:par
|
||||
|
||||
# 4 Priorities
|
||||
echo Priorities --------------------------------------------------------------
|
||||
echo $ task 1-3,5 priority:H
|
||||
echo 'All' | task 1-3,5 priority:H
|
||||
echo $ task list
|
||||
task list
|
||||
echo $ task 3 pri:
|
||||
task 3 pri:
|
||||
|
||||
# 5 Tags
|
||||
echo Tags --------------------------------------------------------------
|
||||
echo $ task list
|
||||
task list
|
||||
echo $ task 3,5,6 +mall
|
||||
echo 'All' | task 3,5,6 +mall
|
||||
echo $ task long
|
||||
task long
|
||||
echo $ task list +mall
|
||||
task list +mall
|
||||
echo $ task 3 -mall
|
||||
task 3 -mall
|
||||
|
||||
# 6 Modifications
|
||||
echo Modifications --------------------------------------------------------------
|
||||
echo $ task 7 Pay rent at the end of the month
|
||||
echo 'Yes' | task 7 Pay rent at the end of the month
|
||||
echo $ task add music
|
||||
task add music
|
||||
echo $ task 8 prepend Select some
|
||||
task 8 prepend Select some
|
||||
echo $ task 8 append for after dinner
|
||||
task 8 append for after dinner
|
||||
echo $ task list
|
||||
task list
|
||||
echo $ task edit
|
||||
#task edit
|
||||
echo $ task add Hire a band?
|
||||
#task add Hire a band?
|
||||
echo $ task add Hire a band\?
|
||||
#task add Hire a band\?
|
||||
echo $ task add "Hire a band?"
|
||||
#task add "Hire a band?"
|
||||
echo $ task add -- Hire a band\? +dj
|
||||
task add -- Hire a band\? +dj
|
||||
echo $ task undo
|
||||
echo 'y' | task undo
|
||||
echo $ task 1 delete
|
||||
echo 'y' | task 1 delete
|
||||
echo $ task undo
|
||||
echo 'y' | task undo
|
||||
|
||||
# 7 Info
|
||||
echo Info --------------------------------------------------------------
|
||||
echo $ task 1 info
|
||||
task 1 info
|
||||
echo $ task stats
|
||||
task stats
|
||||
|
||||
# 8 Annotations
|
||||
echo Annotations --------------------------------------------------------------
|
||||
echo $ task 1 annotate the 13 looks good
|
||||
task 1 annotate the 13 looks good
|
||||
sleep 1
|
||||
echo $ task 1 annotate or the 14th
|
||||
task 1 annotate or the 14th
|
||||
echo $ task list
|
||||
task list
|
||||
echo $ task list rc.annotations:full
|
||||
task list rc.annotations:full
|
||||
echo $ task list rc.annotations:sparse
|
||||
task list rc.annotations:sparse
|
||||
echo $ task list rc.annotations:none
|
||||
task list rc.annotations:none
|
||||
echo $ task 1 denotate 14th
|
||||
task 1 denotate 14th
|
||||
echo $ task list
|
||||
task list
|
||||
|
||||
# 9 Configuration
|
||||
echo Configuration --------------------------------------------------------------
|
||||
echo $ task show
|
||||
task show
|
||||
echo $ task config answer forty-two
|
||||
echo 'y' | task config answer forty-two
|
||||
echo $ task show answer
|
||||
task show answer
|
||||
echo $ task config answer
|
||||
echo 'y' | task config answer
|
||||
echo $ task rc.report.list.sort=description+ list
|
||||
task rc.report.list.sort=description+ list
|
||||
|
||||
# 10 Defaults
|
||||
echo Defaults --------------------------------------------------------------
|
||||
echo $ task config default.command list
|
||||
echo 'y' | task config default.command list
|
||||
echo $ task
|
||||
task
|
||||
echo $ task config default.priority H
|
||||
echo 'y' | task config default.priority H
|
||||
echo $ task config default.project Work
|
||||
echo 'y' | task config default.project Work
|
||||
echo $ task add New task
|
||||
task add New task
|
||||
echo $ task list
|
||||
task list
|
||||
echo $ task undo
|
||||
echo 'y' | task undo
|
||||
echo $ task config default.priority
|
||||
echo 'y' | task config default.priority
|
||||
echo $ task config default.project
|
||||
echo 'y' | task config default.project
|
||||
|
||||
# 11 Aliases
|
||||
echo Aliases --------------------------------------------------------------
|
||||
echo $ task config alias.zzz list
|
||||
echo 'y' | task config alias.zzz list
|
||||
echo $ task zzz
|
||||
task zzz
|
||||
echo $ task z
|
||||
task z
|
||||
|
||||
# 12 Color
|
||||
echo Color --------------------------------------------------------------
|
||||
echo $ task config color on
|
||||
echo 'y' | task config color on
|
||||
echo $ task list
|
||||
task list
|
||||
echo $ task 1 bg:on_red
|
||||
task 1 bg:on_red
|
||||
echo $ task list
|
||||
task list
|
||||
echo $ task 1 bg:
|
||||
task 1 bg:
|
||||
echo $ task color
|
||||
task color
|
||||
echo $ task color white on red
|
||||
task color white on red
|
||||
echo $ task color legend
|
||||
task color legend
|
||||
echo vi ~/.taskrc # include /usr/local/share/doc/task/rc/dark-blue-256.theme
|
||||
#vi ~/.taskrc # include /usr/local/share/doc/task/rc/dark-blue-256.theme
|
||||
echo 'include /usr/local/share/doc/task/rc/dark-blue-256.theme' >> x
|
||||
echo $ task color legend
|
||||
task color legend
|
||||
echo $ task list
|
||||
task list
|
||||
echo vi ~/.taskrc # include /usr/local/share/doc/task/rc/dark-red-256.theme
|
||||
#vi ~/.taskrc # include /usr/local/share/doc/task/rc/dark-red-256.theme
|
||||
sed 's/blue/red/' x >x2 && mv x2 x
|
||||
echo $ task color legend
|
||||
task color legend
|
||||
echo $ task list
|
||||
task list
|
||||
echo vi ~/.taskrc # include /usr/local/share/doc/task/rc/dark-256.theme
|
||||
#vi ~/.taskrc # include /usr/local/share/doc/task/rc/dark-256.theme
|
||||
sed 's/red-//' x >x2 && mv x2 x
|
||||
echo $ task list
|
||||
task list
|
||||
echo $ task "rc.color.project.party=on rgb001" rc.color.keyword.invit=bold list
|
||||
task "rc.color.project.party=on rgb001" rc.color.keyword.invit=bold list
|
||||
echo $ man task-color
|
||||
#man task-color
|
||||
|
||||
# 13 Active tasks
|
||||
echo Active tasks --------------------------------------------------------------
|
||||
echo $ task 2 start
|
||||
task 2 start
|
||||
echo $ task list
|
||||
task list
|
||||
echo $ task active
|
||||
task active
|
||||
echo $ task 2 stop
|
||||
task 2 stop
|
||||
|
||||
echo $ task config journal.time on
|
||||
task config journal.time on
|
||||
echo $ task config rc.dateformat.xxx xxx
|
||||
task config rc.dateformat.xxx xxx
|
||||
echo $ task config dateformat.annotation 'Y/m/d H:N'
|
||||
task config dateformat.annotation 'Y/m/d H:N'
|
||||
echo $ task 2 start
|
||||
task 2 start
|
||||
echo $ task list venue
|
||||
task list venue
|
||||
echo $ task 2 stop
|
||||
task 2 stop
|
||||
echo $ task list venue
|
||||
task list venue
|
||||
|
||||
# 14 Due dates
|
||||
echo Due dates --------------------------------------------------------------
|
||||
echo $ task 1 due:7/31/2010
|
||||
task 1 due:7/31/2010
|
||||
echo $ task 1 due:2wks
|
||||
task 1 due:2wks
|
||||
echo $ task 1 due:-2wks
|
||||
task 1 due:-2wks
|
||||
echo $ task 1 due:eom
|
||||
task 1 due:eom
|
||||
echo $ task 2 due:8th
|
||||
task 2 due:8th
|
||||
echo $ task 2 due:sunday
|
||||
task 2 due:sunday
|
||||
echo $ task 5 due:eow
|
||||
task 5 due:eow
|
||||
echo $ task list
|
||||
task list
|
||||
echo $ task overdue
|
||||
task overdue
|
||||
echo $ task rc.dateformat.report:Y-M-DTH:N:SZ list
|
||||
task rc.dateformat.report:Y-M-DTH:N:SZ list
|
||||
|
||||
# 15 Calendar
|
||||
echo Calendar --------------------------------------------------------------
|
||||
echo $ task calendar
|
||||
task calendar
|
||||
echo $ vi ~/.taskrc # include /usr/local/share/doc/task/rc/holidays-US.rc
|
||||
#vi ~/.taskrc # include /usr/local/share/doc/task/rc/holidays-US.rc
|
||||
echo 'include /usr/local/share/doc/task/rc/holidays-US.rc' >> x
|
||||
echo $ task calendar
|
||||
task calendar
|
||||
echo $ task cal 2010
|
||||
task cal 2010
|
||||
echo $ task rc.calendar.details:full cal
|
||||
task rc.calendar.details:full cal
|
||||
echo $ task rc.calendar.holidays:full cal
|
||||
task rc.calendar.holidays:full cal
|
||||
|
||||
# 16 Recurrence
|
||||
echo Recurrence --------------------------------------------------------------
|
||||
echo $ task 7 info
|
||||
task 7 info
|
||||
echo $ task 7 due:eom recur:monthly
|
||||
task 7 due:eom recur:monthly
|
||||
echo $ task 7
|
||||
task 7
|
||||
echo $ task 7 until:eoy
|
||||
task 7 until:eoy
|
||||
echo $ task recurring
|
||||
task recurring
|
||||
echo $ task add Pay taxes due:4/15/2007 recur:yearly
|
||||
task add Pay taxes due:4/15/2007 recur:yearly
|
||||
echo $ task long
|
||||
task long
|
||||
echo $ task 11 delete
|
||||
printf "y\ny\n" | task 11 delete # y, y
|
||||
echo $ task list
|
||||
task list
|
||||
|
||||
# 17 Shell
|
||||
echo Shell --------------------------------------------------------------
|
||||
echo $ task shell
|
||||
#task shell
|
||||
echo '> projects'
|
||||
#> projects
|
||||
echo '> tags'
|
||||
#> tags
|
||||
echo '> list'
|
||||
#> list
|
||||
echo '> quit'
|
||||
#> quit
|
||||
|
||||
# 18 Special tags
|
||||
echo Special tags --------------------------------------------------------------
|
||||
echo $ task 6 +nocolor
|
||||
task 6 +nocolor
|
||||
echo $ task list
|
||||
task list
|
||||
echo $ task tags
|
||||
task tags
|
||||
echo $ task 6 -nocolor
|
||||
task 6 -nocolor
|
||||
|
||||
# 19 Waiting
|
||||
echo Waiting --------------------------------------------------------------
|
||||
echo $ task add Look for new apartment due:eoy
|
||||
task add Look for new apartment due:eoy
|
||||
echo $ task list
|
||||
task list
|
||||
echo $ task 10 wait:12/1/2010
|
||||
task 10 wait:12/1/2010
|
||||
echo $ task list
|
||||
task list
|
||||
echo $ task waiting
|
||||
task waiting
|
||||
echo $ task add Do something in a few seconds
|
||||
task add Do something in a few seconds
|
||||
echo $ task 11 wait:5s
|
||||
task 11 wait:5s
|
||||
echo $ task list
|
||||
task list
|
||||
sleep 5
|
||||
echo $ task list
|
||||
task list
|
||||
echo $ task 11 rc.confirmation:no delete
|
||||
task 11 rc.confirmation:no delete
|
||||
|
||||
# 20 Dependencies
|
||||
echo Dependencies --------------------------------------------------------------
|
||||
echo $ task list pro:party
|
||||
task list pro:party
|
||||
echo $ task 3 depends:6
|
||||
task 3 depends:6
|
||||
echo $ task 6 dep:5
|
||||
task 6 dep:5
|
||||
echo $ task 2 dep:1
|
||||
task 2 dep:1
|
||||
echo $ task 5 dep:1,2
|
||||
task 5 dep:1,2
|
||||
echo $ task 4 dep:1
|
||||
task 4 dep:1
|
||||
echo $ task long pro:party
|
||||
task long pro:party
|
||||
echo $ task 5 dep:-1
|
||||
task 5 dep:-1
|
||||
echo $ task blocked
|
||||
task blocked
|
||||
echo $ task unblocked
|
||||
task unblocked
|
||||
echo $ task 1 info
|
||||
task 1 info
|
||||
echo $ task 2 info
|
||||
task 2 info
|
||||
echo $ task 2 done
|
||||
echo 'y' | task 2 done
|
||||
echo $ task 1 info
|
||||
task 1 info
|
||||
|
||||
# 21 Reports
|
||||
echo Reports --------------------------------------------------------------
|
||||
echo $ task minimal
|
||||
task minimal
|
||||
echo $ task ls
|
||||
task ls
|
||||
echo $ task list
|
||||
task list
|
||||
echo $ task long
|
||||
task long
|
||||
echo $ task all
|
||||
task all
|
||||
echo $ task completed
|
||||
task completed
|
||||
echo $ task recurring
|
||||
task recurring
|
||||
echo $ task waiting
|
||||
task waiting
|
||||
echo $ task blocked
|
||||
task blocked
|
||||
echo $ task oldest
|
||||
task oldest
|
||||
echo $ task newest
|
||||
task newest
|
||||
echo $ task timesheet
|
||||
task timesheet
|
||||
echo $ task next
|
||||
task next
|
||||
|
||||
# 22 Custom report
|
||||
echo Custom report --------------------------------------------------------------
|
||||
echo 'report.foo.description=My own report' >> x
|
||||
echo 'report.foo.columns=id,entry,description' >> x
|
||||
echo 'report.foo.labels=ID,Entered,Description' >> x
|
||||
echo 'report.foo.sort=entry+,description+' >> x
|
||||
echo 'report.foo.filter=status:pending' >> x
|
||||
echo 'task help | grep foo'
|
||||
task help | grep foo
|
||||
echo $ task show report.foo
|
||||
task show report.foo
|
||||
echo $ task foo
|
||||
task foo
|
||||
|
||||
# 23 Charts
|
||||
echo Charts --------------------------------------------------------------
|
||||
echo $ task history
|
||||
task history
|
||||
echo $ task history.annual
|
||||
task history.annual
|
||||
echo $ task ghistory
|
||||
task ghistory
|
||||
echo $ task ghistory.annual
|
||||
task ghistory.annual
|
||||
echo $ task summary
|
||||
task summary
|
||||
|
||||
# 24 Advanced filters
|
||||
echo Advanced filters --------------------------------------------------------------
|
||||
echo $ task list
|
||||
task list
|
||||
echo $ task list invit
|
||||
task list invit
|
||||
echo $ task list description.contains:invit
|
||||
task list description.contains:invit
|
||||
echo $ task list desc.word:the
|
||||
task list desc.word:the
|
||||
echo $ task list desc.noword:invitations
|
||||
task list desc.noword:invitations
|
||||
echo $ task list pro:party
|
||||
task list pro:party
|
||||
echo $ task list pro.is:party
|
||||
task list pro.is:party
|
||||
echo $ task list pro.not:party
|
||||
task list pro.not:party
|
||||
echo $ task list pro:party priority.over:L
|
||||
task list pro:party priority.over:L
|
||||
echo $ task list pro:party limit:2
|
||||
task list pro:party limit:2
|
||||
echo $ task list limit:page
|
||||
task list limit:page
|
||||
echo $ task all status:pending
|
||||
task all status:pending
|
||||
echo $ task all status:waiting
|
||||
task all status:waiting
|
||||
|
||||
# 25 Import/export
|
||||
echo Import/export --------------------------------------------------------------
|
||||
echo $ task export.csv
|
||||
task export.csv
|
||||
echo $ task export.csv venue
|
||||
task export.csv venue
|
||||
echo $ task export.vcalendar venue
|
||||
task export.vcalendar venue
|
||||
echo $ task export.yaml venue
|
||||
task export.yaml venue
|
||||
|
||||
cat <<EOF >file.text
|
||||
Remember to read the task man page
|
||||
EOF
|
||||
cat file.text
|
||||
echo $ task import file.text
|
||||
printf "y\n" | task import file.text
|
||||
|
||||
cat <<EOF >file.yaml
|
||||
%YAML 1.1
|
||||
---
|
||||
task:
|
||||
description: Visit http://taskwarrior.org
|
||||
due: 1281844800
|
||||
entry: 1281289630
|
||||
priority: H
|
||||
project: work
|
||||
status: pending
|
||||
uuid: 23afada0-a446-8d5a-c213-30d99d52c4b0
|
||||
...
|
||||
EOF
|
||||
cat file.yaml
|
||||
echo $ task import file.yaml
|
||||
printf "y\n" | task import file.yaml
|
||||
echo $ task new limit:2
|
||||
task new limit:2
|
||||
|
||||
# 26 Help
|
||||
echo Help --------------------------------------------------------------
|
||||
echo $ task help
|
||||
task help
|
||||
echo $ man task
|
||||
#man task
|
||||
echo $ man taskrc
|
||||
#man taskrc
|
||||
echo $ man task-color
|
||||
#man task-color
|
||||
echo $ man task-tutorial
|
||||
#man task-tutorial
|
||||
echo $ man task-faq
|
||||
#man task-faq
|
||||
echo $ man task-sync
|
||||
#man task-sync
|
||||
|
||||
# 27 Wrap up
|
||||
echo Wrap up --------------------------------------------------------------
|
||||
echo $ task version
|
||||
task version
|
||||
|
||||
exit
|
||||
|
||||
71
doc/misc/run.sample.annotate
Executable file
71
doc/misc/run.sample.annotate
Executable file
@@ -0,0 +1,71 @@
|
||||
#! /bin/bash
|
||||
|
||||
# Small script to create a fragment of output for display on the front page
|
||||
# of taskwarrior.org, as a teaser.
|
||||
|
||||
rm pending.data completed.data undo.data
|
||||
|
||||
echo 'data.location=.' > x
|
||||
echo '_forcecolor=on' >> x
|
||||
echo 'defaultwidth=120' >> x
|
||||
echo 'include /usr/local/share/doc/task/rc/dark-violets-256.theme' >> x
|
||||
echo 'include /usr/local/share/doc/task/rc/holidays-US.rc' >> x
|
||||
echo 'color.alternate=' >> x
|
||||
|
||||
echo 'report.list.columns=id,project,priority_long,start,due,recur,age_compact,tags,description' >> x
|
||||
echo 'report.list.labels=ID,Project,Pri,Started,Due,Recur,Age,Tags,Description' >> x
|
||||
echo 'report.list.sort=due+,priority_long-,project+' >> x
|
||||
|
||||
# Import tasks with old timestamps
|
||||
cat <<EOF >file.yaml
|
||||
%YAML 1.1
|
||||
---
|
||||
task:
|
||||
description: Try out the color themes
|
||||
entry: 1281914800
|
||||
start: 1282044800
|
||||
project: software
|
||||
status: pending
|
||||
uuid: 13afada0-a446-8d5a-c213-30d99d52c4b0
|
||||
task:
|
||||
description: Visit http://taskwarrior.org
|
||||
entry: 1281089630
|
||||
tags: www
|
||||
priority: H
|
||||
project: software
|
||||
status: pending
|
||||
uuid: 23afada0-a446-8d5a-c213-30d99d52c4b0
|
||||
task:
|
||||
description: Review task list
|
||||
entry: 1281289630
|
||||
due: 1282844800
|
||||
recur: weekly
|
||||
project: gtd
|
||||
status: pending
|
||||
uuid: 33afada0-a446-8d5a-c213-30d99d52c4b0
|
||||
task:
|
||||
description: Try out latest FireFox beta
|
||||
entry: 1281289630
|
||||
project: software
|
||||
status: pending
|
||||
uuid: 43afada0-a446-8d5a-c213-30d99d52c4b0
|
||||
...
|
||||
EOF
|
||||
|
||||
printf "y\n" | task rc:x import file.yaml
|
||||
|
||||
# Now the visible part.
|
||||
echo
|
||||
echo '$ task calendar sep 2010'
|
||||
task rc:x calendar sep 2010
|
||||
|
||||
echo
|
||||
echo '$ task calendar'
|
||||
task rc:x calendar
|
||||
|
||||
echo
|
||||
echo '$ task overdue'
|
||||
task rc:x 2 done
|
||||
|
||||
exit
|
||||
|
||||
71
doc/misc/run.sample.attmod
Executable file
71
doc/misc/run.sample.attmod
Executable file
@@ -0,0 +1,71 @@
|
||||
#! /bin/bash
|
||||
|
||||
# Small script to create a fragment of output for display on the front page
|
||||
# of taskwarrior.org, as a teaser.
|
||||
|
||||
rm pending.data completed.data undo.data
|
||||
|
||||
echo 'data.location=.' > x
|
||||
echo '_forcecolor=on' >> x
|
||||
echo 'defaultwidth=120' >> x
|
||||
echo 'include /usr/local/share/doc/task/rc/dark-violets-256.theme' >> x
|
||||
echo 'include /usr/local/share/doc/task/rc/holidays-US.rc' >> x
|
||||
echo 'color.alternate=' >> x
|
||||
|
||||
echo 'report.list.columns=id,project,priority_long,start,due,recur,age_compact,tags,description' >> x
|
||||
echo 'report.list.labels=ID,Project,Pri,Started,Due,Recur,Age,Tags,Description' >> x
|
||||
echo 'report.list.sort=due+,priority_long-,project+' >> x
|
||||
|
||||
# Import tasks with old timestamps
|
||||
cat <<EOF >file.yaml
|
||||
%YAML 1.1
|
||||
---
|
||||
task:
|
||||
description: Try out the color themes
|
||||
entry: 1281914800
|
||||
start: 1282044800
|
||||
project: software
|
||||
status: pending
|
||||
uuid: 13afada0-a446-8d5a-c213-30d99d52c4b0
|
||||
task:
|
||||
description: Visit http://taskwarrior.org
|
||||
entry: 1281089630
|
||||
tags: www
|
||||
priority: H
|
||||
project: software
|
||||
status: pending
|
||||
uuid: 23afada0-a446-8d5a-c213-30d99d52c4b0
|
||||
task:
|
||||
description: Review task list
|
||||
entry: 1281289630
|
||||
due: 1282844800
|
||||
recur: weekly
|
||||
project: gtd
|
||||
status: pending
|
||||
uuid: 33afada0-a446-8d5a-c213-30d99d52c4b0
|
||||
task:
|
||||
description: Try out latest FireFox beta
|
||||
entry: 1281289630
|
||||
project: software
|
||||
status: pending
|
||||
uuid: 43afada0-a446-8d5a-c213-30d99d52c4b0
|
||||
...
|
||||
EOF
|
||||
|
||||
printf "y\n" | task rc:x import file.yaml
|
||||
|
||||
# Now the visible part.
|
||||
echo
|
||||
echo '$ task calendar sep 2010'
|
||||
task rc:x calendar sep 2010
|
||||
|
||||
echo
|
||||
echo '$ task calendar'
|
||||
task rc:x calendar
|
||||
|
||||
echo
|
||||
echo '$ task overdue'
|
||||
task rc:x 2 done
|
||||
|
||||
exit
|
||||
|
||||
74
doc/misc/run.sample.blue
Executable file
74
doc/misc/run.sample.blue
Executable file
@@ -0,0 +1,74 @@
|
||||
#! /bin/bash
|
||||
|
||||
# Small script to create a fragment of output for display on the front page
|
||||
# of taskwarrior.org, as a teaser.
|
||||
|
||||
rm pending.data completed.data undo.data
|
||||
|
||||
echo 'data.location=.' > x
|
||||
echo '_forcecolor=on' >> x
|
||||
echo 'defaultwidth=120' >> x
|
||||
echo 'include /usr/local/share/doc/task/rc/dark-blue-256.theme' >> 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 1 annotate Try the blue one first'
|
||||
task rc:x 1 annotate Try the blue one first
|
||||
|
||||
echo
|
||||
echo '$ task list'
|
||||
task rc:x list
|
||||
|
||||
echo
|
||||
echo '$ task list due.before:eow'
|
||||
task rc:x list due.before:eow
|
||||
|
||||
echo
|
||||
echo '$ task 2 done'
|
||||
task rc:x 2 done
|
||||
|
||||
exit
|
||||
|
||||
71
doc/misc/run.sample.cal
Executable file
71
doc/misc/run.sample.cal
Executable file
@@ -0,0 +1,71 @@
|
||||
#! /bin/bash
|
||||
|
||||
# Small script to create a fragment of output for display on the front page
|
||||
# of taskwarrior.org, as a teaser.
|
||||
|
||||
rm pending.data completed.data undo.data
|
||||
|
||||
echo 'data.location=.' > x
|
||||
echo '_forcecolor=on' >> x
|
||||
echo 'defaultwidth=120' >> x
|
||||
echo 'include /usr/local/share/doc/task/rc/dark-violets-256.theme' >> x
|
||||
echo 'include /usr/local/share/doc/task/rc/holidays-US.rc' >> x
|
||||
echo 'color.alternate=' >> x
|
||||
|
||||
echo 'report.list.columns=id,project,priority_long,start,due,recur,age_compact,tags,description' >> x
|
||||
echo 'report.list.labels=ID,Project,Pri,Started,Due,Recur,Age,Tags,Description' >> x
|
||||
echo 'report.list.sort=due+,priority_long-,project+' >> x
|
||||
|
||||
# Import tasks with old timestamps
|
||||
cat <<EOF >file.yaml
|
||||
%YAML 1.1
|
||||
---
|
||||
task:
|
||||
description: Try out the color themes
|
||||
entry: 1281914800
|
||||
start: 1282044800
|
||||
project: software
|
||||
status: pending
|
||||
uuid: 13afada0-a446-8d5a-c213-30d99d52c4b0
|
||||
task:
|
||||
description: Visit http://taskwarrior.org
|
||||
entry: 1281089630
|
||||
tags: www
|
||||
priority: H
|
||||
project: software
|
||||
status: pending
|
||||
uuid: 23afada0-a446-8d5a-c213-30d99d52c4b0
|
||||
task:
|
||||
description: Review task list
|
||||
entry: 1281289630
|
||||
due: 1282844800
|
||||
recur: weekly
|
||||
project: gtd
|
||||
status: pending
|
||||
uuid: 33afada0-a446-8d5a-c213-30d99d52c4b0
|
||||
task:
|
||||
description: Try out latest FireFox beta
|
||||
entry: 1281289630
|
||||
project: software
|
||||
status: pending
|
||||
uuid: 43afada0-a446-8d5a-c213-30d99d52c4b0
|
||||
...
|
||||
EOF
|
||||
|
||||
printf "y\n" | task rc:x import file.yaml
|
||||
|
||||
# Now the visible part.
|
||||
echo
|
||||
echo '$ task calendar sep 2010'
|
||||
task rc:x calendar sep 2010
|
||||
|
||||
echo
|
||||
echo '$ task calendar'
|
||||
task rc:x calendar
|
||||
|
||||
echo
|
||||
echo '$ task overdue'
|
||||
task rc:x 2 done
|
||||
|
||||
exit
|
||||
|
||||
19
doc/misc/run.sample.color
Executable file
19
doc/misc/run.sample.color
Executable file
@@ -0,0 +1,19 @@
|
||||
#! /bin/bash
|
||||
|
||||
# Small script to create a fragment of output for display on the front page
|
||||
# of taskwarrior.org, as a teaser.
|
||||
|
||||
rm pending.data completed.data undo.data
|
||||
|
||||
echo 'data.location=.' > x
|
||||
echo '_forcecolor=on' >> x
|
||||
echo 'include /usr/local/share/doc/task/rc/dark-green-256.theme' >> x
|
||||
|
||||
|
||||
# Now the visible part.
|
||||
echo
|
||||
echo '$ task color'
|
||||
task rc:x color
|
||||
|
||||
exit
|
||||
|
||||
38
doc/misc/run.sample.deps
Executable file
38
doc/misc/run.sample.deps
Executable file
@@ -0,0 +1,38 @@
|
||||
#! /bin/bash
|
||||
|
||||
# Small script to create a fragment of output for display on the front page
|
||||
# of taskwarrior.org, as a teaser.
|
||||
|
||||
rm pending.data completed.data undo.data
|
||||
|
||||
echo 'data.location=.' > x
|
||||
echo '_forcecolor=on' >> x
|
||||
echo 'defaultwidth=120' >> x
|
||||
echo 'include /usr/local/share/doc/task/rc/dark-violets-256.theme' >> x
|
||||
echo 'include /usr/local/share/doc/task/rc/holidays-US.rc' >> x
|
||||
echo 'color.alternate=' >> x
|
||||
|
||||
echo 'report.list.columns=id,project,priority_long,start,due,recur,age_compact,tags,description' >> x
|
||||
echo 'report.list.labels=ID,Project,Pri,Started,Due,Recur,Age,Tags,Description' >> x
|
||||
echo 'report.list.sort=due+,priority_long-,project+' >> x
|
||||
|
||||
# Now the visible part.
|
||||
|
||||
echo
|
||||
echo $ task add project:Cake Mix the ingredients
|
||||
task rc:x add project:Cake Mix the ingredients
|
||||
|
||||
echo
|
||||
echo $ task add project:Cake Bake the cake depends:1
|
||||
task rc:x add project:Cake Bake the cake depends:1
|
||||
|
||||
echo
|
||||
echo $ task add project:Cake Eat the cake depends:2
|
||||
task rc:x add project:Cake Eat the cake depends:2
|
||||
|
||||
echo
|
||||
echo $ task 2 info
|
||||
task rc:x 2 info
|
||||
|
||||
exit
|
||||
|
||||
50
doc/misc/run.sample.format
Executable file
50
doc/misc/run.sample.format
Executable file
@@ -0,0 +1,50 @@
|
||||
#! /bin/bash
|
||||
|
||||
# Small script to create a fragment of output for display on the front page
|
||||
# of taskwarrior.org, as a teaser.
|
||||
|
||||
rm pending.data completed.data undo.data
|
||||
|
||||
echo 'data.location=.' > x
|
||||
echo '_forcecolor=on' >> x
|
||||
echo 'defaultwidth=95' >> x
|
||||
echo 'include /usr/local/share/doc/task/rc/dark-256.theme' >> x
|
||||
echo 'include /usr/local/share/doc/task/rc/holidays-US.rc' >> x
|
||||
echo 'color.alternate=' >> x
|
||||
echo 'due=6' >> x
|
||||
echo 'dateformat=YMD-H:N' >> x
|
||||
echo 'dateformat.report=YMD-H:N' >> x
|
||||
echo 'color.due=rgb530' >> x
|
||||
|
||||
echo 'report.list.columns=id,project,priority_long,due,recur,description' >> x
|
||||
echo 'report.list.labels=ID,Pro,Pri,Due,Recur,Description' >> x
|
||||
echo 'report.list.sort=due+,priority_long-,project+' >> x
|
||||
|
||||
# Now the visible part.
|
||||
echo
|
||||
echo '$ task config rc.dateformat YMD-H:N'
|
||||
echo "Are you sure you want to add 'dateformat' with a value of 'YMD-H:N'? (y/n) y"
|
||||
echo 'Config file .taskrc modified.'
|
||||
|
||||
echo
|
||||
echo '$ task add Spa appointment due:20100917-11:30'
|
||||
task rc:x add Lunch with Sue due:20100917-11:30
|
||||
|
||||
echo
|
||||
echo '$ task list'
|
||||
task rc:x list
|
||||
|
||||
echo
|
||||
echo '$ task list rc.dateformat.report=m-d-Y'
|
||||
task rc:x list rc.dateformat.report=m-d-Y
|
||||
|
||||
echo
|
||||
echo '$ task list rc.dateformat.report=YMDHNS'
|
||||
task rc:x list rc.dateformat.report=YMDHNS
|
||||
|
||||
echo
|
||||
echo '$ task list rc.dateformat.report="A, B D, Y (wkV)"'
|
||||
task rc:x list rc.dateformat.report="A, B D, Y (wkV)"
|
||||
|
||||
exit
|
||||
|
||||
71
doc/misc/run.sample.ghistory
Executable file
71
doc/misc/run.sample.ghistory
Executable file
@@ -0,0 +1,71 @@
|
||||
#! /bin/bash
|
||||
|
||||
# Small script to create a fragment of output for display on the front page
|
||||
# of taskwarrior.org, as a teaser.
|
||||
|
||||
rm pending.data completed.data undo.data
|
||||
|
||||
echo 'data.location=.' > x
|
||||
echo '_forcecolor=on' >> x
|
||||
echo 'defaultwidth=120' >> x
|
||||
echo 'include /usr/local/share/doc/task/rc/dark-violets-256.theme' >> x
|
||||
echo 'include /usr/local/share/doc/task/rc/holidays-US.rc' >> x
|
||||
echo 'color.alternate=' >> x
|
||||
|
||||
echo 'report.list.columns=id,project,priority_long,start,due,recur,age_compact,tags,description' >> x
|
||||
echo 'report.list.labels=ID,Project,Pri,Started,Due,Recur,Age,Tags,Description' >> x
|
||||
echo 'report.list.sort=due+,priority_long-,project+' >> x
|
||||
|
||||
# Import tasks with old timestamps
|
||||
cat <<EOF >file.yaml
|
||||
%YAML 1.1
|
||||
---
|
||||
task:
|
||||
description: Try out the color themes
|
||||
entry: 1281914800
|
||||
start: 1282044800
|
||||
project: software
|
||||
status: pending
|
||||
uuid: 13afada0-a446-8d5a-c213-30d99d52c4b0
|
||||
task:
|
||||
description: Visit http://taskwarrior.org
|
||||
entry: 1281089630
|
||||
tags: www
|
||||
priority: H
|
||||
project: software
|
||||
status: pending
|
||||
uuid: 23afada0-a446-8d5a-c213-30d99d52c4b0
|
||||
task:
|
||||
description: Review task list
|
||||
entry: 1281289630
|
||||
due: 1282844800
|
||||
recur: weekly
|
||||
project: gtd
|
||||
status: pending
|
||||
uuid: 33afada0-a446-8d5a-c213-30d99d52c4b0
|
||||
task:
|
||||
description: Try out latest FireFox beta
|
||||
entry: 1281289630
|
||||
project: software
|
||||
status: pending
|
||||
uuid: 43afada0-a446-8d5a-c213-30d99d52c4b0
|
||||
...
|
||||
EOF
|
||||
|
||||
printf "y\n" | task rc:x import file.yaml
|
||||
|
||||
# Now the visible part.
|
||||
echo
|
||||
echo '$ task calendar sep 2010'
|
||||
task rc:x calendar sep 2010
|
||||
|
||||
echo
|
||||
echo '$ task calendar'
|
||||
task rc:x calendar
|
||||
|
||||
echo
|
||||
echo '$ task overdue'
|
||||
task rc:x 2 done
|
||||
|
||||
exit
|
||||
|
||||
47
doc/misc/run.sample.holidays
Executable file
47
doc/misc/run.sample.holidays
Executable file
@@ -0,0 +1,47 @@
|
||||
#! /bin/bash
|
||||
|
||||
# Small script to create a fragment of output for display on the front page
|
||||
# of taskwarrior.org, as a teaser.
|
||||
|
||||
rm pending.data completed.data undo.data
|
||||
|
||||
echo 'data.location=.' > x
|
||||
echo '_forcecolor=on' >> x
|
||||
echo 'defaultwidth=95' >> x
|
||||
echo 'monthsperline=3' >> x
|
||||
echo 'calendar.details.report=list' >> x
|
||||
echo 'calendar.details=full' >> x
|
||||
echo 'calendar.holidays=full' >> x
|
||||
echo 'calendar.legend=yes' >> x
|
||||
echo 'include /usr/local/share/doc/task/rc/dark-green-256.theme' >> x
|
||||
echo 'include /usr/local/share/doc/task/rc/holidays-US.rc' >> x
|
||||
|
||||
# Import tasks with old timestamps
|
||||
cat <<EOF >file.yaml
|
||||
%YAML 1.1
|
||||
---
|
||||
task:
|
||||
description: Put some more sample screenshots on taskwarrior.org
|
||||
entry: 1283593511
|
||||
project: 1.9.3
|
||||
status: pending
|
||||
due: 1284647841
|
||||
uuid: 89295b14-9e15-4771-9dd9-7e82cf8b67b5
|
||||
annotation:
|
||||
entry: 1283593519
|
||||
description: Show the calendar with holidays
|
||||
annotation:
|
||||
entry: 1283693560
|
||||
description: Show a task that is due
|
||||
...
|
||||
EOF
|
||||
|
||||
printf "y\n" | task rc:x import file.yaml
|
||||
|
||||
# Now the visible part.
|
||||
echo
|
||||
echo '$ task calendar'
|
||||
task rc:x calendar
|
||||
|
||||
exit
|
||||
|
||||
39
doc/misc/run.sample.info
Executable file
39
doc/misc/run.sample.info
Executable file
@@ -0,0 +1,39 @@
|
||||
#! /bin/bash
|
||||
|
||||
# Small script to create a fragment of output for display on the front page
|
||||
# of taskwarrior.org, as a teaser.
|
||||
|
||||
rm pending.data completed.data undo.data
|
||||
|
||||
echo 'data.location=.' > x
|
||||
echo '_forcecolor=on' >> x
|
||||
echo 'defaultwidth=95' >> x
|
||||
echo 'include /usr/local/share/doc/task/rc/light-256.theme' >> x
|
||||
echo 'include /usr/local/share/doc/task/rc/holidays-US.rc' >> x
|
||||
echo 'color.alternate=on rgb253' >> x
|
||||
echo 'due=6' >> x
|
||||
echo 'color.due=color0' >> x
|
||||
echo 'color.tagged=color0' >> x
|
||||
|
||||
echo 'report.list.columns=id,project,priority_long,due,recur,description' >> x
|
||||
echo 'report.list.labels=ID,Pro,Pri,Due,Recur,Description' >> x
|
||||
echo 'report.list.sort=due+,priority_long-,project+' >> x
|
||||
|
||||
# Now the visible part.
|
||||
echo
|
||||
echo '$ task add Get stationery supplies proj:office pri:H due:sat +@mall +@weekend'
|
||||
task rc:x add Get stationery supplies proj:office pri:H due:sat +@mall +@weekend
|
||||
|
||||
echo
|
||||
echo '$ task annotate 1 Remember to get batteries'
|
||||
task rc:x annotate 1 Remember to get batteries
|
||||
sleep 2
|
||||
|
||||
echo
|
||||
echo '$ task annotate 1 I wonder if they have that antique fanfold computer paper'
|
||||
task rc:x annotate 1 I wonder if they have that antique fanfold computer paper
|
||||
|
||||
echo
|
||||
echo '$ task 1 info'
|
||||
task rc:x 1 info
|
||||
|
||||
42
doc/misc/run.sample.journal
Executable file
42
doc/misc/run.sample.journal
Executable file
@@ -0,0 +1,42 @@
|
||||
#! /bin/bash
|
||||
|
||||
# Small script to create a fragment of output for display on the front page
|
||||
# of taskwarrior.org, as a teaser.
|
||||
|
||||
rm pending.data completed.data undo.data
|
||||
|
||||
echo 'data.location=.' > x
|
||||
echo '_forcecolor=on' >> x
|
||||
echo 'defaultwidth=90' >> x
|
||||
echo 'journal.time=yes' >> x
|
||||
echo 'dateformat.annotation=Y/m/d H:N' >> x
|
||||
#echo 'include /usr/local/share/doc/task/rc/dark-256.theme' >> x
|
||||
#echo 'include /usr/local/share/doc/task/rc/dark-green-256.theme' >> x
|
||||
echo 'include /usr/local/share/doc/task/rc/dark-yellow-green.theme' >> x
|
||||
|
||||
# Now the visible part.
|
||||
echo
|
||||
echo '$ task add Complete the client report due:friday +@work'
|
||||
task rc:x add Complete the client report due:friday +@work
|
||||
echo
|
||||
echo '$ task config journal.time on'
|
||||
echo "Are you sure you want to add 'journal.time' with a value of 'on'? (y/n) y"
|
||||
echo 'Config file .taskrc modified.'
|
||||
echo
|
||||
echo '$ task start 1'
|
||||
task rc:x start 1
|
||||
echo
|
||||
echo '(some work happens)'
|
||||
sleep 2
|
||||
echo
|
||||
echo '$ task list'
|
||||
task rc:x list
|
||||
echo
|
||||
echo '$ task stop 1'
|
||||
task rc:x stop 1
|
||||
echo
|
||||
echo '$ task list'
|
||||
task rc:x list
|
||||
|
||||
exit
|
||||
|
||||
35
doc/misc/run.sample.recur
Executable file
35
doc/misc/run.sample.recur
Executable file
@@ -0,0 +1,35 @@
|
||||
#! /bin/bash
|
||||
|
||||
# Small script to create a fragment of output for display on the front page
|
||||
# of taskwarrior.org, as a teaser.
|
||||
|
||||
rm pending.data completed.data undo.data
|
||||
|
||||
echo 'data.location=.' > x
|
||||
echo '_forcecolor=on' >> x
|
||||
echo 'defaultwidth=95' >> x
|
||||
echo 'monthsperline=3' >> x
|
||||
echo 'include /usr/local/share/doc/task/rc/dark-violets-256.theme' >> x
|
||||
echo 'include /usr/local/share/doc/task/rc/holidays-US.rc' >> x
|
||||
echo 'color.alternate=' >> x
|
||||
echo 'due=3' >> x
|
||||
|
||||
echo 'report.list.columns=id,project,priority_long,start,due,recur,age_compact,description' >> x
|
||||
echo 'report.list.labels=ID,Project,Pri,Started,Due,Recur,Age,Description' >> x
|
||||
echo 'report.list.sort=due+,priority_long-,project+' >> x
|
||||
|
||||
# Now the visible part.
|
||||
echo
|
||||
echo '$ task add Deposit paycheck due:friday recur:14days +@bank'
|
||||
task rc:x add Deposit paycheck due:friday recur:14days
|
||||
|
||||
echo
|
||||
echo '$ task calendar rc.recurrence.limit=6'
|
||||
task rc:x calendar rc.recurrence.limit=6
|
||||
|
||||
echo
|
||||
echo '$ task list'
|
||||
task rc:x list
|
||||
|
||||
exit
|
||||
|
||||
74
doc/misc/run.sample.red
Executable file
74
doc/misc/run.sample.red
Executable file
@@ -0,0 +1,74 @@
|
||||
#! /bin/bash
|
||||
|
||||
# Small script to create a fragment of output for display on the front page
|
||||
# of taskwarrior.org, as a teaser.
|
||||
|
||||
rm pending.data completed.data undo.data
|
||||
|
||||
echo 'data.location=.' > x
|
||||
echo '_forcecolor=on' >> x
|
||||
echo 'defaultwidth=120' >> x
|
||||
echo 'include /usr/local/share/doc/task/rc/dark-red-256.theme' >> 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 1 annotate Try the red one next'
|
||||
task rc:x 1 annotate Try the red one next
|
||||
|
||||
echo
|
||||
echo '$ task list'
|
||||
task rc:x list
|
||||
|
||||
echo
|
||||
echo '$ task 2 done'
|
||||
task rc:x 2 done
|
||||
|
||||
echo
|
||||
echo '$ task summary'
|
||||
task rc:x summary
|
||||
|
||||
exit
|
||||
|
||||
71
doc/misc/run.sample.summary
Executable file
71
doc/misc/run.sample.summary
Executable file
@@ -0,0 +1,71 @@
|
||||
#! /bin/bash
|
||||
|
||||
# Small script to create a fragment of output for display on the front page
|
||||
# of taskwarrior.org, as a teaser.
|
||||
|
||||
rm pending.data completed.data undo.data
|
||||
|
||||
echo 'data.location=.' > x
|
||||
echo '_forcecolor=on' >> x
|
||||
echo 'defaultwidth=120' >> x
|
||||
echo 'include /usr/local/share/doc/task/rc/dark-violets-256.theme' >> x
|
||||
echo 'include /usr/local/share/doc/task/rc/holidays-US.rc' >> x
|
||||
echo 'color.alternate=' >> x
|
||||
|
||||
echo 'report.list.columns=id,project,priority_long,start,due,recur,age_compact,tags,description' >> x
|
||||
echo 'report.list.labels=ID,Project,Pri,Started,Due,Recur,Age,Tags,Description' >> x
|
||||
echo 'report.list.sort=due+,priority_long-,project+' >> x
|
||||
|
||||
# Import tasks with old timestamps
|
||||
cat <<EOF >file.yaml
|
||||
%YAML 1.1
|
||||
---
|
||||
task:
|
||||
description: Try out the color themes
|
||||
entry: 1281914800
|
||||
start: 1282044800
|
||||
project: software
|
||||
status: pending
|
||||
uuid: 13afada0-a446-8d5a-c213-30d99d52c4b0
|
||||
task:
|
||||
description: Visit http://taskwarrior.org
|
||||
entry: 1281089630
|
||||
tags: www
|
||||
priority: H
|
||||
project: software
|
||||
status: pending
|
||||
uuid: 23afada0-a446-8d5a-c213-30d99d52c4b0
|
||||
task:
|
||||
description: Review task list
|
||||
entry: 1281289630
|
||||
due: 1282844800
|
||||
recur: weekly
|
||||
project: gtd
|
||||
status: pending
|
||||
uuid: 33afada0-a446-8d5a-c213-30d99d52c4b0
|
||||
task:
|
||||
description: Try out latest FireFox beta
|
||||
entry: 1281289630
|
||||
project: software
|
||||
status: pending
|
||||
uuid: 43afada0-a446-8d5a-c213-30d99d52c4b0
|
||||
...
|
||||
EOF
|
||||
|
||||
printf "y\n" | task rc:x import file.yaml
|
||||
|
||||
# Now the visible part.
|
||||
echo
|
||||
echo '$ task calendar sep 2010'
|
||||
task rc:x calendar sep 2010
|
||||
|
||||
echo
|
||||
echo '$ task calendar'
|
||||
task rc:x calendar
|
||||
|
||||
echo
|
||||
echo '$ task overdue'
|
||||
task rc:x 2 done
|
||||
|
||||
exit
|
||||
|
||||
63
doc/misc/run.sample.timesheet
Executable file
63
doc/misc/run.sample.timesheet
Executable file
@@ -0,0 +1,63 @@
|
||||
#! /bin/bash
|
||||
|
||||
# Small script to create a fragment of output for display on the front page
|
||||
# of taskwarrior.org, as a teaser.
|
||||
|
||||
rm pending.data completed.data undo.data
|
||||
|
||||
echo 'data.location=.' > x
|
||||
echo '_forcecolor=on' >> x
|
||||
echo 'defaultwidth=120' >> x
|
||||
echo 'include /usr/local/share/doc/task/rc/dark-violets-256.theme' >> x
|
||||
echo 'include /usr/local/share/doc/task/rc/holidays-US.rc' >> x
|
||||
echo 'color.alternate=' >> x
|
||||
|
||||
echo 'report.list.columns=id,project,priority_long,start,due,recur,age_compact,tags,description' >> x
|
||||
echo 'report.list.labels=ID,Project,Pri,Started,Due,Recur,Age,Tags,Description' >> x
|
||||
echo 'report.list.sort=due+,priority_long-,project+' >> x
|
||||
|
||||
# Import tasks with old timestamps
|
||||
cat <<EOF >file.yaml
|
||||
%YAML 1.1
|
||||
---
|
||||
task:
|
||||
description: Try out the color themes
|
||||
entry: 1281914800
|
||||
start: 1282044800
|
||||
project: software
|
||||
status: pending
|
||||
uuid: 13afada0-a446-8d5a-c213-30d99d52c4b0
|
||||
task:
|
||||
description: Visit http://taskwarrior.org
|
||||
entry: 1281089630
|
||||
tags: www
|
||||
priority: H
|
||||
project: software
|
||||
status: pending
|
||||
uuid: 23afada0-a446-8d5a-c213-30d99d52c4b0
|
||||
task:
|
||||
description: Review task list
|
||||
entry: 1281289630
|
||||
due: 1282844800
|
||||
recur: weekly
|
||||
project: gtd
|
||||
status: pending
|
||||
uuid: 33afada0-a446-8d5a-c213-30d99d52c4b0
|
||||
task:
|
||||
description: Try out latest FireFox beta
|
||||
entry: 1281289630
|
||||
project: software
|
||||
status: pending
|
||||
uuid: 43afada0-a446-8d5a-c213-30d99d52c4b0
|
||||
...
|
||||
EOF
|
||||
|
||||
printf "y\n" | task rc:x import file.yaml
|
||||
|
||||
# Now the visible part.
|
||||
echo
|
||||
echo '$ task timesheet 2'
|
||||
task rc:x timesheet 2
|
||||
|
||||
exit
|
||||
|
||||
534
doc/misc/script-193.txt
Normal file
534
doc/misc/script-193.txt
Normal file
@@ -0,0 +1,534 @@
|
||||
[Make window 116x32 for movie recording, light text, dark background]
|
||||
|
||||
This is the script from which a 1.9.3-specific movie will be made. On the left
|
||||
are the typed commands, and on the right is the voice track.
|
||||
|
||||
It is intended that the left and right be combined and the result will be a new
|
||||
task-tutorial.5 man page.
|
||||
|
||||
|
||||
|
||||
---------------------------------------- Intro -----------------------------------------------------
|
||||
|
||||
http://taskwarrior.org Hello, and welcome to this taskwarrior version 1.9.3 demo.
|
||||
I'm going to show you over 100 features, so don't blink, or
|
||||
you'll miss some. Even experienced users are going to learn
|
||||
*something*.
|
||||
|
||||
I will start off with basic usage, and proceed to more
|
||||
sophisticated commands as we go along.
|
||||
|
||||
---------------------------------------- Basic Usage -----------------------------------------------
|
||||
|
||||
Let's get started. We're planning a party, and there is a
|
||||
lot of work to do, so let's capture these tasks.
|
||||
task add Select a free weekend in August First decide 'when'.
|
||||
task add Select and book a venue Then decide 'where'.
|
||||
task add Come up with a guest list Then decide 'who'.
|
||||
task add Mail invitations Let's send out nice invitations.
|
||||
task add Select a caterer And a caterer.
|
||||
|
||||
task list Let's take a look. Good.
|
||||
|
||||
task log Order a special cake Now I've already ordered a cake, so rather than 'add' this,
|
||||
I'm going to 'log' it. This just means that I want to keep
|
||||
track of the task, but I've already done it. It saves me a
|
||||
step.
|
||||
|
||||
task 4 duplicate /Mail/Design/ As for those invitations, I'm going to need to design them
|
||||
task 4 dup /Mail/Print/ first. And I'm also going to need print them. Here we are
|
||||
task list duplicating a task and making a substitution. Notice how
|
||||
the commands can be abbreviated, provided they are still
|
||||
unique.
|
||||
|
||||
task 3 done That looks good - but now I think of it, I already have my
|
||||
task list guest list, so I can mark that one as done.
|
||||
|
||||
And that's basic usage, and you already know enough to be
|
||||
productive using taskwarrior. If you stopped here, you
|
||||
would be perfectly able to manage your task list.
|
||||
|
||||
But if you want to see what it can really do, keep watching...
|
||||
|
||||
---------------------------------------- Projects --------------------------------------------------
|
||||
|
||||
task add Pay teh rent on teh 31st Remember to pay the rent at the end of the month. Oh,
|
||||
task 7 /teh/teh/g that was sloppy, but it can be fixed with a global
|
||||
task list substitution.
|
||||
|
||||
task 7 project:home We can now use projects to separate home chores from the
|
||||
party preparation. Let's assign that last task to the
|
||||
'home' project. Note that a task may only belong to one
|
||||
project.
|
||||
|
||||
task 1-6 project:party And we will put those first six tasks in the 'party'
|
||||
project. See how we specify a range of tasks? Taskwarrior
|
||||
will want to confirm bulk changes like this, but we'll
|
||||
accept all changes here.
|
||||
|
||||
task projects Now that we have multiple projects, as shown here, we can
|
||||
task list project:home use project as a filter for the list report. You can see
|
||||
task li pro:par again that we can abbreviate 'list' and 'project', but when
|
||||
we abbreviate 'party', we are filtering all the projects
|
||||
that begin with 'par'.
|
||||
|
||||
---------------------------------------- Priorities ------------------------------------------------
|
||||
|
||||
task 1-3,5 priority:H Priorities are another way to organize tasks. You can use
|
||||
task list priority values of high, medium and low, and taskwarrior
|
||||
knows these as H, M or L.
|
||||
|
||||
task 3 pri: You can remove priorities by specifying a blank value.
|
||||
|
||||
---------------------------------------- Tags ------------------------------------------------------
|
||||
|
||||
task list A task may only have one project, but it may have any number
|
||||
of tags, which are just single words associated with the task.
|
||||
|
||||
task 3,5,6 +mall I can go to the print shop at the mall, and do all the
|
||||
invitation tasks, so let's tag them all.
|
||||
|
||||
task long The long report shows tags, too,
|
||||
|
||||
task list +mall and I can use tags as a filter to any report too.
|
||||
|
||||
task 3 -mall I made a mistake - I can't mail out the invitations at the
|
||||
mall, so let's remove that tag.
|
||||
|
||||
---------------------------------------- Modifications ---------------------------------------------
|
||||
|
||||
task 7 Pay rent at the end of the month Task 7 is not worded correctly, so I can modify that by
|
||||
specifying a task ID and a new description. This is also
|
||||
considered a bulk change, and so requires confirmation.
|
||||
|
||||
task add music We'll need music.
|
||||
task 8 prepend Select some I can prepend to that.
|
||||
task 8 append for after dinner I can append to that.
|
||||
task list
|
||||
|
||||
task edit I can also go straight into an editor and modify anything.
|
||||
|
||||
task add Hire a band? <--- Sometimes the command will confuse the shell. In this case,
|
||||
what would happen if there was a file named 'bands' in the
|
||||
current directory? The shell would expand that wildcard,
|
||||
so to avoid that, you can...
|
||||
task add Hire a band\? <--- escape the wildcard...
|
||||
task add "Hire a band?" <--- or quote the whole description...
|
||||
|
||||
task add -- Hire a band\? +dj You can also use the minus minus operator which tells
|
||||
taskwarrior to stop being clever and interpret the rest
|
||||
of the arguments as a task description. Otherwise, that
|
||||
+dj would be interpreted as a tag.
|
||||
|
||||
task undo We don't need a band, so the easiest way to get rid of that
|
||||
task is to undo the last change. Taskwarrior has a
|
||||
complete undo stack, so you can undo all the way back to
|
||||
the beginning.
|
||||
task 1 delete The undo operation gets rid of the task completely, but I
|
||||
task undo could also have just deleted the task, then the deletion
|
||||
itself would be tracked, and also undoable.
|
||||
|
||||
---------------------------------------- Info ------------------------------------------------------
|
||||
|
||||
task 1 info During that undo operation, taskwarrior displayed metadata
|
||||
task 1 that is associated with the task. You can display this
|
||||
with the info command, and its shortcut.
|
||||
|
||||
task stats There are also statistics that taskwarrior gathers, which
|
||||
I can display.
|
||||
|
||||
---------------------------------------- Annotations -----------------------------------------------
|
||||
|
||||
task 1 annotate the 12th looks good Annotations are little notes that can be added to a task.
|
||||
task 1 annotate or the 13th There can be any number, and each has a time stamp.
|
||||
task list
|
||||
task list rc.annotations:full You can choose to display annotations in different ways.
|
||||
task list rc.annotations:sparse
|
||||
task list rc.annotations:none
|
||||
|
||||
task 1 denotate 13th Annotations can be removed by providing a matching pattern.
|
||||
task list
|
||||
|
||||
---------------------------------------- Configuration ---------------------------------------------
|
||||
|
||||
task show There is a 'show' command, that is used to display the
|
||||
active configuration. There are hundreds of settings that
|
||||
can be changed, and every one has a sensible default.
|
||||
|
||||
man taskrc If you want a complete list of all the settings and their
|
||||
meanings, read the man page.
|
||||
|
||||
task config answer 42 The 'config' command is used to modify the settings, and in
|
||||
this case the configuration variable 'answer' is given the
|
||||
value of 42.
|
||||
|
||||
task show answer The 'show' command indicates that the value was changed,
|
||||
task config answer and also that the variable is unrecognized. The show
|
||||
command performs a detailed check on your configuration, and
|
||||
alerts you to several kinds of problem. The config command
|
||||
can also remove a value.
|
||||
|
||||
task rc.report.list.sort=description+ list
|
||||
A very powerful feature is the ability to override the
|
||||
configuration variables temporarily. Here I am requesting
|
||||
an ascending sort on the description field only.
|
||||
|
||||
---------------------------------------- Defaults --------------------------------------------------
|
||||
|
||||
task config default.command list There is a default command, which can be set to anything,
|
||||
task in this case it is set to the 'list' report. Then running
|
||||
taskwarrior with no command name runs the default command.
|
||||
|
||||
task config default.priority H I can also specify a default priority and project, which
|
||||
task config default.project Work means that any tasks added will use them, unless an
|
||||
task add New task alternative is provided.
|
||||
task list
|
||||
|
||||
task undo Let's just revert those changes, to clean up.
|
||||
task config default.priority
|
||||
task config default.project
|
||||
|
||||
---------------------------------------- Aliases ---------------------------------------------------
|
||||
|
||||
task config alias.zzz list You can create aliases to effectively rename commands.
|
||||
task zzz
|
||||
|
||||
task z You can abbreviate those, too.
|
||||
|
||||
---------------------------------------- Color -----------------------------------------------------
|
||||
|
||||
task config color on All the examples so far have been shown with color turned
|
||||
task list off. How about some color?
|
||||
|
||||
What you see is the result of a set of color rules being
|
||||
applied to the tasks. There is a hierarchy of color rules
|
||||
that colorize a task based on the metadata
|
||||
|
||||
task 1 "bg:on red" Here is an example of an explicit override to the color
|
||||
task list rules where a specific task is given a red background.
|
||||
task 1 bg: Note that the quotes are necessary, otherwise the shell
|
||||
will consider "bg:on" and "red" to be separate arugments.
|
||||
|
||||
task color Taskwarrior supports 256 colors on certain terminal
|
||||
emulators, and this shows the range of colors available.
|
||||
|
||||
task color white on red This is how to show a color sample.
|
||||
|
||||
task color legend Or samples of all the active color settings.
|
||||
|
||||
Themes are a simple way to use coordinated color schemes
|
||||
so by including a color theme into the configuration file,
|
||||
you can see some striking effects.
|
||||
|
||||
A blue theme.
|
||||
|
||||
# include /usr/local/share/doc/task/rc/dark-blue-256.theme
|
||||
vi ~/.taskrc
|
||||
task color legend
|
||||
task list
|
||||
A red theme.
|
||||
|
||||
# include /usr/local/share/doc/task/rc/dark-red-256.theme
|
||||
vi ~/.taskrc
|
||||
task color legend
|
||||
task list
|
||||
A general dark theme.
|
||||
|
||||
# include /usr/local/share/doc/task/rc/dark-256.theme
|
||||
vi ~/.taskrc
|
||||
task list
|
||||
|
||||
Here is are two color rules that specify a dark blue
|
||||
background for all tasks that are part of the 'party'
|
||||
project, and uses bold to identify any tasks with the
|
||||
keyword 'invitations' in the description.
|
||||
|
||||
task "rc.color.project.party=on rgb001" rc.color.keyword.invit=bold list
|
||||
|
||||
man task-color There is a man page with a writeup of all the color
|
||||
capabilities.
|
||||
|
||||
---------------------------------------- Active tasks ----------------------------------------------
|
||||
|
||||
task 2 start I'm selecting a venue, so let's indicate that task 2 is
|
||||
task list active by starting it. See how active tasks are affected
|
||||
by the color rules.
|
||||
|
||||
task active There is an active report that shows only active tasks, and
|
||||
task 2 stop you can mark any active task as inactive, by stopping it.
|
||||
|
||||
task config journal.time on (y) There is a journalling feature that records the start and
|
||||
|
||||
task config dateformat.annotation 'Y/m/d H:N' (y)
|
||||
|
||||
task 2 start stop times as annotations. We'll turn that on, and add
|
||||
task list venue the time to the annotation date format.
|
||||
task 2 stop
|
||||
task list venue
|
||||
|
||||
---------------------------------------- Due dates -------------------------------------------------
|
||||
|
||||
task 1 due:7/31/2010 Due dates can be specified as dates...
|
||||
task 1 due:2wks as some distance into the future...
|
||||
task 1 due:-2wks or past...
|
||||
task 1 due:eom or by mnemonic (end of month)...
|
||||
task 2 due:8th or by ordinal...
|
||||
task 2 due:sunday or by day of week...
|
||||
task 5 due:eow
|
||||
task list Some of these dates are in the past, so now you see there
|
||||
task overdue are overdue tasks. Due dates have different colors for
|
||||
due, imminent, today and overdue values.
|
||||
|
||||
task rc.dateformat.report:Y-M-DTH:N:SZ list
|
||||
You can also choose the format - for input and output.
|
||||
|
||||
---------------------------------------- Calendar --------------------------------------------------
|
||||
|
||||
task calendar When tasks have due dates, you can see them on the calendar.
|
||||
|
||||
vi ~/.taskrc
|
||||
# include /usr/local/share/doc/task/rc/holidays-US.rc
|
||||
task calendar
|
||||
Taskwarrior provides sample holiday files. You can create
|
||||
your own, or use one of the samples to show holidays on the
|
||||
calendar.
|
||||
|
||||
task cal 2010 You can see the whole year.
|
||||
task rc.calendar.details:full cal You can see the tasks with due dates also.
|
||||
task rc.calendar.holidays:full cal And you can see the holidays.
|
||||
|
||||
---------------------------------------- Recurrence ------------------------------------------------
|
||||
|
||||
task 7 info Remember the task we added to pay the rent? We're going to
|
||||
task 7 due:eom recur:monthly need to do that every month. Recurring tasks allow us to
|
||||
task 7 set up a single task that keeps coming back, just as you'd
|
||||
expect.
|
||||
|
||||
task 7 until:eoy You can also limit the extent of the recurrence. Let's make
|
||||
sure the task doesn't recur after the lease ends.
|
||||
|
||||
task recurring And there is a recurring report that shows you only the
|
||||
recurring tasks.
|
||||
|
||||
To illustrate a point, let's set up a recurring annual task
|
||||
as a reminder to pay taxes, and put the due date in the past.
|
||||
This will cause task to fill in the gaps, and create a series
|
||||
of severely overdue tasks.
|
||||
|
||||
task add Pay taxes due:4/15/2007 recur:yearly
|
||||
task long
|
||||
|
||||
task 11 delete # y y Deletions to recurring tasks can be escalated to include all
|
||||
task list the recurrences of a task.
|
||||
|
||||
---------------------------------------- Shell -----------------------------------------------------
|
||||
|
||||
task shell You can use the shell command to create a more immersive
|
||||
task> projects environment. Any task command you run outside the shell
|
||||
task> tags can also be run inside the shell, without the need to prefix
|
||||
task> list every command with "task".
|
||||
task> quit
|
||||
|
||||
---------------------------------------- Special Tags ----------------------------------------------
|
||||
|
||||
task 6 +nocolor You've seen tags, but there are also 'special tags' that
|
||||
task list have effects on individual tasks. The 'nocolor' special
|
||||
tag causes the color rules to be bypassed.
|
||||
|
||||
task tags Special tags are highlighted by the 'tags' command.
|
||||
|
||||
task 6 -nocolor There are others - the 'nonag' special tag prevents the
|
||||
generation of nag messages when you work on low priority
|
||||
tasks when there are more important ones.
|
||||
|
||||
The 'nocal' special tag will prevent a task from appearing
|
||||
on the calendar.
|
||||
|
||||
---------------------------------------- Waiting ---------------------------------------------------
|
||||
|
||||
task add Look for new apartment due:eoy When you have a task with a due date that is far out into
|
||||
task list the future, you may want to hide that task for a while.
|
||||
|
||||
task 10 wait:12/1/2010 You can provide a wait date for a task, and it will remain
|
||||
task list hidden until that date. It will no longer be cluttering
|
||||
task waiting your task list, but it is still there, and visible using
|
||||
the 'waiting' report. When the wait date comes, the task
|
||||
will just pop back into the list.
|
||||
|
||||
task add Do something in a few seconds To illustrate this, let's set up a task with a very short
|
||||
task 11 wait:5s wait time of five seconds.
|
||||
|
||||
task list It's gone.
|
||||
(sleep 5) We wait for 5 seconds...
|
||||
task list And it's back.
|
||||
task 11 rc.confirmation:no delete And now it's deleted.
|
||||
|
||||
---------------------------------------- Dependencies ----------------------------------------------
|
||||
|
||||
task list pro:party Taskwarrior supports dependencies. Let's take a look at the
|
||||
party planning tasks, and assign dependencies.
|
||||
|
||||
task 3 depends:6 Let's see. I can't mail invitations until they are printed.
|
||||
task 6 dep:5 I can't print them until I design them.
|
||||
task 2 dep:1 I need to select a weekend before a location.
|
||||
task 5 dep:1,2 Design depends on location and weekend.
|
||||
task 4 dep:1 And the caterer needs to know where.
|
||||
|
||||
task long pro:party All my tasks are blocked except task 1. That makes sense.
|
||||
|
||||
task 5 dep:-1 Hmm, that double dependency isn't right.
|
||||
|
||||
task blocked Here are the blocked tasks.
|
||||
task unblocked and the opposite, the unblocked tasks.
|
||||
|
||||
task 1 info If we look at task 1 closely, we can see that it is blocking
|
||||
task 2 info 2 and 4. And if we look at task 2, we see that it is
|
||||
blocked by 1, and blocking 5.
|
||||
|
||||
This is called a dependency chain, which is a string of tasks
|
||||
that are all connected not only by their project, but by
|
||||
dependencies.
|
||||
|
||||
Now we understand that task 1 should be done first, but you
|
||||
may still violate the laws of physics if you wish. Let's
|
||||
complete task 2 and see what happens.
|
||||
|
||||
task 2 done (y) Taskwarrior realizes what you are doing, and offers to fix
|
||||
task 1 info the dependency chain to reflect what you have done.
|
||||
|
||||
---------------------------------------- Reports ---------------------------------------------------
|
||||
|
||||
task minimal Taskwarrior has a good many reports. There is the bare minimum.
|
||||
task ls The simple.
|
||||
task list The standard.
|
||||
task long The kitchen sink.
|
||||
task all The packrat.
|
||||
task completed Nostalgia.
|
||||
task recurring Groundhog day.
|
||||
task waiting Surprises.
|
||||
task blocked Wedged.
|
||||
task unblocked Unencumbered.
|
||||
task oldest Ancient history.
|
||||
task newest Contemporary.
|
||||
task timesheet Corporate.
|
||||
task next And "what should I work on next?" This one can be useful
|
||||
because it pulls a few of the highest priority tasks from
|
||||
all the projects. It's the report we should all be using.
|
||||
|
||||
---------------------------------------- Custom Report ---------------------------------------------
|
||||
|
||||
You can even define your own custom report. Let's quickly
|
||||
create a custom report - we'll call it foo - and I can
|
||||
choose from a long list of fields to include in the report,
|
||||
but I want to see the ID, the date when I entered the task,
|
||||
and the description. I can specify the labels for those
|
||||
columns, the sort order of the report, and I can filter.
|
||||
|
||||
cat >> ~/.taskrc
|
||||
report.foo.description=My own report
|
||||
report.foo.columns=id,entry,description
|
||||
report.foo.labels=ID,Entered,Description
|
||||
report.foo.sort=entry+,description+
|
||||
report.foo.filter=status:pending
|
||||
|
||||
task help | grep foo Custom reports also show up on the help output.
|
||||
|
||||
task show report.foo I can inspect the configuration.
|
||||
|
||||
task foo And they can be run just like the other reports.
|
||||
|
||||
---------------------------------------- Charts ----------------------------------------------------
|
||||
|
||||
task history The history report gives monthly totals of tasks added,
|
||||
task history.annual completed and deleted. There is also an annual version.
|
||||
|
||||
task ghistory There is a graphical monthly...
|
||||
task ghistory.annual and annual version.
|
||||
|
||||
task summary There is a project summary report that shows progress in
|
||||
all the projects.
|
||||
|
||||
---------------------------------------- Advanced Filters ------------------------------------------
|
||||
|
||||
task list Filters are a very powerful tool. First here is an
|
||||
task list invit unfiltered list, which shows all tasks. Now again, but with
|
||||
the text 'invit', which acts as a filter on the description
|
||||
field.
|
||||
|
||||
task list description.contains:invit This is the equivalent form using attribute modifiers. In
|
||||
this example we are filtering on descriptions that contain
|
||||
the word fragment. Here we are using the 'contains'
|
||||
modifier, but there are many others.
|
||||
|
||||
task list desc.word:the All tasks containing the whole word 'the'. See how
|
||||
annotations are also searched?
|
||||
|
||||
task list desc.noword:invitations Here is a list of all tasks that do not contain the whole
|
||||
word 'invitations'.
|
||||
|
||||
task list pro:party Here list all tasks in the 'party' project.
|
||||
task list pro.is:party And the full equivalent.
|
||||
task list pro.not:party Here list tasks that are not in the 'party' project. I
|
||||
could have also used 'isnt' here - there are several
|
||||
synonyms for modifiers, so that the filter can be written
|
||||
so that it reads naturally.
|
||||
|
||||
task list pro:party pri.over:L Here the 'over' modifier is filtering on priorities that
|
||||
sort higher than 'Low', and also filtering on the 'party'
|
||||
project. There are two terms in this filter.
|
||||
|
||||
task list pro:party limit:2 Same again, but only show me the first two tasks.
|
||||
task list limit:page Now all tasks, but just show the first page of tasks. I
|
||||
don't have a page full of tasks here, but you get the idea.
|
||||
|
||||
task all status:pending Now you can see how some of the built-in reports work. The
|
||||
'list' report is just all tasks, filtered so that only the
|
||||
pending tasks are shown.
|
||||
|
||||
task all status:waiting The 'waiting' report is similarly defined.
|
||||
|
||||
---------------------------------------- Import/Export ---------------------------------------------
|
||||
|
||||
task export.csv You can export your tasks. Here you see all tasks being
|
||||
exported in CSV format.
|
||||
|
||||
task export.csv venue Let's just export one task in CSV format...
|
||||
task export.vcalendar venue Or in VCalendar format...
|
||||
task export.yaml venue Or YAML.
|
||||
|
||||
cat file.text I can also import. Here I am importing simple lines of
|
||||
task import file.text text. Taskwarrior recognizes the format and confirms.
|
||||
|
||||
cat file.yaml Here is a YAML example. Taskwarrior can read several
|
||||
task import file.yaml formats, including old versions of its data files. Using
|
||||
YAML, you can round-trip the data without loss.
|
||||
|
||||
task new limit:2 Here are the imported tasks.
|
||||
|
||||
---------------------------------------- Help ------------------------------------------------------
|
||||
|
||||
task help You'll find a quick reference page built in, with the 'help'
|
||||
man task command, or perhaps you'll want to take a look at the several
|
||||
man taskrc man pages installed. This demo has superficially shown
|
||||
man task-color many features which have more capability and depth which you
|
||||
can find in the man pages, and online.
|
||||
|
||||
man task-tutorial This screencast is actually just a recording of me going
|
||||
through the tutorial.
|
||||
|
||||
man task-faq Some frequently asked questions are answered here.
|
||||
|
||||
man task-sync You've patiently watched this whole movie, so here's your
|
||||
reward - taskwarrior 1.9.3 has network synchronization
|
||||
features, for sharing tasks across computers. But this is
|
||||
just a teaser - synch will be shown in the next movie.
|
||||
|
||||
---------------------------------------- Wrap up ---------------------------------------------------
|
||||
|
||||
task version And that's it. Don't forget to take a look at
|
||||
taskwarrior.org.
|
||||
|
||||
Thank you for watching.
|
||||
|
||||
---------------------------------------- End -------------------------------------------------------
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
Hello. This is a demonstration of the
|
||||
task program color capabilities coming
|
||||
taskwarrior color capabilities coming
|
||||
in version 1.9.
|
||||
|
||||
task color The color command shows the various
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
$ # Q: What is a formatting hook?
|
||||
$ # A: Lua code that modifies task output at run time.
|
||||
$ # A: Lua code that modifies taskwarrior output at run time.
|
||||
$
|
||||
$ cat > hooks.lua
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
$
|
||||
$ # Task now has Lua 5.1.4 built in.
|
||||
$ # Taskwarrior now has Lua 5.1.4 built in.
|
||||
$
|
||||
$ task version
|
||||
$ cat > hooks.lua
|
||||
@@ -9,18 +9,18 @@ function foo ()
|
||||
end
|
||||
^D
|
||||
$
|
||||
$ # Task can call into Lua at many points during execution.
|
||||
$ # This one is called immediately before task quits.
|
||||
$ # Taskwarrior can call into Lua at many points during execution.
|
||||
$ # This one is called immediately before taskwarrior quits.
|
||||
$
|
||||
$ task rc.hook.pre-exit=~/hooks.lua:foo version
|
||||
$
|
||||
$ # While task is calling Lua code, the Lua can also call
|
||||
$ # back into a task API, for information.
|
||||
$ # While taskwarrior is calling Lua code, the Lua can also call
|
||||
$ # back into a taskwarrior API, for information.
|
||||
$
|
||||
$ cat > hooks.lua
|
||||
function foo ()
|
||||
print "Lua version is " .. task_lua_version ())
|
||||
print "Task version is " .. task_version ())
|
||||
print "Taskwarrior version is " .. task_version ())
|
||||
return 0, nil
|
||||
end
|
||||
^D
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
Hello, and welcome to this quick demo of the task program.
|
||||
Hello, and welcome to this quick demo of the
|
||||
taskwarrior program.
|
||||
|
||||
task add do laundry Let's add some tasks
|
||||
I need to do laundry
|
||||
@@ -68,7 +69,6 @@ task 3 fg:
|
||||
|
||||
task colors There are many combinations to choose from
|
||||
|
||||
(Slashes!!!)
|
||||
task 1 due:6/8/2008 Let's add a due date
|
||||
date
|
||||
|
||||
|
||||
@@ -1 +1,67 @@
|
||||
# Sample task 1.9 (or later) color theme
|
||||
################################################################################
|
||||
# Sample taskwarrior 1.9 (or later) dark 16-color theme
|
||||
#
|
||||
# taskwarrior - a command line task list manager.
|
||||
#
|
||||
# Copyright 2006 - 2010, Paul Beckingham.
|
||||
# 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=yellow
|
||||
color.footnote=yellow
|
||||
color.debug=yellow
|
||||
|
||||
color.summary.bar=on green
|
||||
color.summary.background=on black
|
||||
|
||||
color.history.add=black on red
|
||||
color.history.done=black on green
|
||||
color.history.delete=black on yellow
|
||||
|
||||
color.undo.before=red
|
||||
color.undo.after=green
|
||||
|
||||
color.calendar.today=bold white on bright blue
|
||||
color.calendar.due=white on red
|
||||
color.calendar.due.today=bold white on red
|
||||
color.calendar.overdue=black on bright red
|
||||
color.calendar.weekend=white on bright black
|
||||
color.calendar.holiday=black on bright yellow
|
||||
color.calendar.weeknumber=bold blue
|
||||
|
||||
color.recurring=magenta
|
||||
color.overdue=bold red
|
||||
color.due.today=red
|
||||
color.due=red
|
||||
color.active=black on bright green
|
||||
color.pri.none=
|
||||
color.pri.H=bold white
|
||||
color.pri.M=white
|
||||
color.pri.L=
|
||||
color.tagged=green
|
||||
color.blocked=black on white
|
||||
color.project.none=
|
||||
color.tag.none=
|
||||
color.alternate=
|
||||
|
||||
|
||||
@@ -1 +1,67 @@
|
||||
# Sample task 1.9 (or later) color theme
|
||||
###############################################################################
|
||||
# Sample taskwarrior 1.9 (or later) dark 256-color theme
|
||||
#
|
||||
# taskwarrior - a command line task list manager.
|
||||
#
|
||||
# Copyright 2006 - 2010, Paul Beckingham.
|
||||
# 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=color3
|
||||
color.footnote=color3
|
||||
color.debug=color3
|
||||
|
||||
color.summary.bar=on rgb141
|
||||
color.summary.background=on color0
|
||||
|
||||
color.history.add=color0 on rgb500
|
||||
color.history.done=color0 on rgb050
|
||||
color.history.delete=color0 on rgb550
|
||||
|
||||
color.undo.before=color1
|
||||
color.undo.after=color2
|
||||
|
||||
color.calendar.today=color15 on rgb013
|
||||
color.calendar.due=color0 on color1
|
||||
color.calendar.due.today=color15 on color1
|
||||
color.calendar.overdue=color0 on color9
|
||||
color.calendar.weekend=on color235
|
||||
color.calendar.holiday=color0 on color11
|
||||
color.calendar.weeknumber=rgb013
|
||||
|
||||
color.recurring=rgb013
|
||||
color.overdue=color9
|
||||
color.due.today=rgb400
|
||||
color.due=color1
|
||||
color.active=rgb555 on rgb410
|
||||
color.pri.none=
|
||||
color.pri.H=color255
|
||||
color.pri.M=color250
|
||||
color.pri.L=color245
|
||||
color.tagged=rgb031
|
||||
color.blocked=white on color8
|
||||
color.project.none=
|
||||
color.tag.none=
|
||||
color.alternate=on color233
|
||||
|
||||
|
||||
67
doc/rc/dark-blue-256.theme
Normal file
67
doc/rc/dark-blue-256.theme
Normal file
@@ -0,0 +1,67 @@
|
||||
###############################################################################
|
||||
# Sample taskwarrior 1.9 (or later) dark 256-color theme, featuring blue.
|
||||
#
|
||||
# taskwarrior - a command line task list manager.
|
||||
#
|
||||
# Copyright 2006 - 2010, Paul Beckingham.
|
||||
# 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=rgb013
|
||||
color.footnote=rgb013
|
||||
color.debug=rgb013
|
||||
|
||||
color.summary.bar=on rgb003
|
||||
color.summary.background=on color0
|
||||
|
||||
color.history.add=color0 on rgb015
|
||||
color.history.done=color0 on rgb025
|
||||
color.history.delete=color0 on rgb035
|
||||
|
||||
color.undo.before=rgb013
|
||||
color.undo.after=rgb035
|
||||
|
||||
color.calendar.today=color0 on rgb115
|
||||
color.calendar.due=color0 on color249
|
||||
color.calendar.due.today=color0 on color252
|
||||
color.calendar.overdue=color0 on color255
|
||||
color.calendar.weekend=on color235
|
||||
color.calendar.holiday=color255 on rgb013
|
||||
color.calendar.weeknumber=rgb015
|
||||
|
||||
color.recurring=rgb115
|
||||
color.overdue=color255
|
||||
color.due.today=color252
|
||||
color.due=color249
|
||||
color.active=rgb045 on rgb015
|
||||
color.pri.none=
|
||||
color.pri.H=rgb035
|
||||
color.pri.M=rgb025
|
||||
color.pri.L=rgb015
|
||||
color.tagged=color246
|
||||
color.blocked=white on rgb001
|
||||
color.project.none=
|
||||
color.tag.none=
|
||||
color.alternate=on color233
|
||||
|
||||
67
doc/rc/dark-green-256.theme
Normal file
67
doc/rc/dark-green-256.theme
Normal file
@@ -0,0 +1,67 @@
|
||||
###############################################################################
|
||||
# Sample taskwarrior 1.9 (or later) dark 256-color theme, featuring green.
|
||||
#
|
||||
# taskwarrior - a command line task list manager.
|
||||
#
|
||||
# Copyright 2006 - 2010, Paul Beckingham.
|
||||
# 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=rgb031
|
||||
color.footnote=rgb031
|
||||
color.debug=rgb031
|
||||
|
||||
color.summary.bar=on rgb030
|
||||
color.summary.background=on color0
|
||||
|
||||
color.history.add=color0 on rgb010
|
||||
color.history.done=color0 on rgb030
|
||||
color.history.delete=color0 on rgb050
|
||||
|
||||
color.undo.before=rgb031
|
||||
color.undo.after=rgb053
|
||||
|
||||
color.calendar.today=color0 on rgb151
|
||||
color.calendar.due=color0 on color249
|
||||
color.calendar.due.today=color0 on color225
|
||||
color.calendar.overdue=color0 on color255
|
||||
color.calendar.weekend=on color235
|
||||
color.calendar.holiday=rgb151 on rgb020
|
||||
color.calendar.weeknumber=rgb010
|
||||
|
||||
color.recurring=rgb151
|
||||
color.overdue=color255
|
||||
color.due.today=color252
|
||||
color.due=color249
|
||||
color.active=rgb050 on rgb010
|
||||
color.pri.none=
|
||||
color.pri.H=rgb050
|
||||
color.pri.M=rgb030
|
||||
color.pri.L=rgb010
|
||||
color.tagged=color246
|
||||
color.blocked=white on rgb010
|
||||
color.project.none=
|
||||
color.tag.none=
|
||||
color.alternate=on color233
|
||||
|
||||
67
doc/rc/dark-red-256.theme
Normal file
67
doc/rc/dark-red-256.theme
Normal file
@@ -0,0 +1,67 @@
|
||||
###############################################################################
|
||||
# Sample taskwarrior 1.9 (or later) dark 256-color theme, featuring red.
|
||||
#
|
||||
# taskwarrior - a command line task list manager.
|
||||
#
|
||||
# Copyright 2006 - 2010, Paul Beckingham.
|
||||
# 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=rgb100
|
||||
color.footnote=rgb100
|
||||
color.debug=rgb100
|
||||
|
||||
color.summary.bar=on rgb300
|
||||
color.summary.background=on color0
|
||||
|
||||
color.history.add=color0 on rgb100
|
||||
color.history.done=color0 on rgb300
|
||||
color.history.delete=color0 on rgb500
|
||||
|
||||
color.undo.before=rgb301
|
||||
color.undo.after=rgb503
|
||||
|
||||
color.calendar.today=color0 on rgb511
|
||||
color.calendar.due=color0 on color249
|
||||
color.calendar.due.today=color0 on color252
|
||||
color.calendar.overdue=color0 on color255
|
||||
color.calendar.weekend=on color235
|
||||
color.calendar.holiday=rgb522 on rgb300
|
||||
color.calendar.weeknumber=rgb100
|
||||
|
||||
color.recurring=rgb511
|
||||
color.overdue=color255
|
||||
color.due.today=color252
|
||||
color.due=color249
|
||||
color.active=rgb500 on rgb100
|
||||
color.pri.none=
|
||||
color.pri.H=rgb500
|
||||
color.pri.M=rgb400
|
||||
color.pri.L=rgb300
|
||||
color.tagged=color246
|
||||
color.blocked=white on rgb100
|
||||
color.project.none=
|
||||
color.tag.none=
|
||||
color.alternate=on color233
|
||||
|
||||
67
doc/rc/dark-violets-256.theme
Normal file
67
doc/rc/dark-violets-256.theme
Normal file
@@ -0,0 +1,67 @@
|
||||
################################################################################
|
||||
# Sample taskwarrior 1.9 (or later) dark violet 256-color theme
|
||||
#
|
||||
# taskwarrior - a command line task list manager.
|
||||
#
|
||||
# Copyright 2010, Kathryn Andersen
|
||||
# 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=rgb013
|
||||
color.footnote=rgb013
|
||||
color.debug=rgb013
|
||||
|
||||
color.summary.bar=on rgb103
|
||||
color.summary.background=on color0
|
||||
|
||||
color.history.add=color0 on rgb105
|
||||
color.history.done=color0 on rgb205
|
||||
color.history.delete=color0 on rgb305
|
||||
|
||||
color.undo.before=rgb103
|
||||
color.undo.after=rgb305
|
||||
|
||||
color.calendar.today=color15 on rgb103
|
||||
color.calendar.due=color0 on rgb325
|
||||
color.calendar.due.today=color0 on rgb404
|
||||
color.calendar.overdue=color0 on color9
|
||||
color.calendar.weekend=gray12 on gray3
|
||||
color.calendar.holiday=color15 on rgb022
|
||||
color.calendar.weeknumber=rgb104
|
||||
|
||||
color.recurring=rgb115
|
||||
color.overdue=color9
|
||||
color.due.today=rgb533
|
||||
color.due=rgb055
|
||||
color.active=rgb445 on rgb213
|
||||
color.pri.none=
|
||||
color.pri.H=rgb404
|
||||
color.pri.M=rgb304
|
||||
color.pri.L=rgb325
|
||||
color.tagged=rgb334
|
||||
color.blocked=white on rgb101
|
||||
color.project.none=
|
||||
color.tag.none=
|
||||
color.alternate=on gray2
|
||||
|
||||
67
doc/rc/dark-yellow-green.theme
Normal file
67
doc/rc/dark-yellow-green.theme
Normal file
@@ -0,0 +1,67 @@
|
||||
################################################################################
|
||||
# Sample taskwarrior 1.9 (or later) dark-yellow-green 256-color theme
|
||||
#
|
||||
# taskwarrior - a command line task list manager.
|
||||
#
|
||||
# Copyright 2010, Kathryn Andersen
|
||||
# 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=rgb031
|
||||
color.footnote=rgb031
|
||||
color.debug=rgb031
|
||||
|
||||
color.summary.bar=on rgb030
|
||||
color.summary.background=on color0
|
||||
|
||||
color.history.add=color0 on rgb010
|
||||
color.history.done=color0 on rgb030
|
||||
color.history.delete=color0 on rgb050
|
||||
|
||||
color.undo.before=rgb031
|
||||
color.undo.after=rgb053
|
||||
|
||||
color.calendar.today=color15 on rgb110
|
||||
color.calendar.due=color0 on rgb430
|
||||
color.calendar.due.today=color0 on rgb410
|
||||
color.calendar.overdue=color0 on rgb400
|
||||
color.calendar.weekend=on color235
|
||||
color.calendar.holiday=rgb151 on rgb020
|
||||
color.calendar.weeknumber=rgb110
|
||||
|
||||
color.recurring=rgb343
|
||||
color.overdue=rgb400
|
||||
color.due.today=rgb410
|
||||
color.due=rgb420
|
||||
color.active=rgb451 on rgb310
|
||||
color.pri.none=
|
||||
color.pri.H=rgb450
|
||||
color.pri.M=rgb030
|
||||
color.pri.L=rgb010
|
||||
color.tagged=rgb342
|
||||
color.blocked=white on rgb110
|
||||
color.project.none=
|
||||
color.tag.none=
|
||||
color.alternate=on gray0
|
||||
|
||||
76
doc/rc/holidays-CA.rc
Normal file
76
doc/rc/holidays-CA.rc
Normal file
@@ -0,0 +1,76 @@
|
||||
################################################################################
|
||||
# Sample calendar for Canada
|
||||
#
|
||||
# taskwarrior - a command line task list manager.
|
||||
#
|
||||
# Copyright 2010, Cory Donnelly.
|
||||
# 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
|
||||
|
||||
# 2010
|
||||
holiday.labourday.name=Labour Day
|
||||
holiday.labourday.date=20100906
|
||||
holiday.thanksgiving.name=Thanksgiving Day
|
||||
holiday.thanksgiving.date=20101011
|
||||
holiday.remembranceday.name=Remembrance Day
|
||||
holiday.remembranceday.date=20101111
|
||||
holiday.christmasday.name=Christmas Day
|
||||
holiday.christmasday.date=20101225
|
||||
holiday.boxingday.name=Boxing Day
|
||||
holiday.boxingday.date=20101226
|
||||
holiday.newyearseve.name=New Year's Eve
|
||||
holiday.newyearseve.date=20101231
|
||||
|
||||
# 2011
|
||||
holiday.newyearsday.name=New Year's Day
|
||||
holiday.newyearsday.date=20110101
|
||||
holiday.familyday.name=Family Day
|
||||
holiday.familyday.date=20110117
|
||||
holiday.goodfriday.name=Good Friday
|
||||
holiday.goodfriday.date=20110422
|
||||
holiday.eastermonday.name=Easter Monday
|
||||
holiday.eastermonday.date=20110425
|
||||
holiday.victoriaday.name=Victoria Day
|
||||
holiday.victoriaday.date=20110524
|
||||
holiday.canadaday.name=Canada Day
|
||||
holiday.canadaday.date=20110701
|
||||
holiday.firstmondayofaugust.name=First Monday of August
|
||||
holiday.firstmondayofaugust.date=20110801
|
||||
|
||||
# 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
|
||||
87
doc/rc/holidays-DE.rc
Normal file
87
doc/rc/holidays-DE.rc
Normal file
@@ -0,0 +1,87 @@
|
||||
################################################################################
|
||||
# Sample calendar for Germany
|
||||
#
|
||||
# taskwarrior - a command line task list manager.
|
||||
#
|
||||
# Copyright 2010, 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
|
||||
#
|
||||
################################################################################
|
||||
|
||||
calendar.holidays=sparse
|
||||
|
||||
# 2010
|
||||
holiday.reformationstag.name=Reformationstag (BB,MV,SN,ST,TH)
|
||||
holiday.reformationstag.date=20101031
|
||||
holiday.allerheiligen.name=Allerheiligen (BW,BY,NRW,RP,SL)
|
||||
holiday.allerheiligen.date=20101101
|
||||
holiday.bussundbettag.name=Buss und Bettag (SN)
|
||||
holiday.bussundbettag.date=20101117
|
||||
holiday.heiligabend.name=Heilig Abend
|
||||
holiday.heiligabend.date=20101224
|
||||
holiday.weihnachtstag.name=Weihnachtstag
|
||||
holiday.weihnachtstag.date=20101225
|
||||
holiday.zweiterweihnachtstag.name=Zweiter Weihnachtstag
|
||||
holiday.zweiterweihnachtstag.date=20101226
|
||||
holiday.sylvester.name=Sylvester
|
||||
holiday.sylvester.date=20101231
|
||||
|
||||
# 2011
|
||||
holiday.neujahr.name=Neujahr
|
||||
holiday.neujahr.date=20110101
|
||||
holiday.heiligedreikonige.name=Heilige drei Könige (BW,BY,ST)
|
||||
holiday.heiligedreikonige.date=20110106
|
||||
holiday.karfreitag.name=Karfreitag
|
||||
holiday.karfreitag.date=20110422
|
||||
holiday.ostern.name=Ostern
|
||||
holiday.ostern.date=20110424
|
||||
holiday.ostermontag.name=Ostermontag
|
||||
holiday.ostermontag.date=20110425
|
||||
holiday.maifeiertag.name=Erster Maifeiertag
|
||||
holiday.maifeiertag.date=20110501
|
||||
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 (BW,BY,HE,NRW,RP,SL,(SN,TH))
|
||||
holiday.fronleichnam.date=20110623
|
||||
holiday.mariahimmelfahrt.name=Mariä Himmelfahrt (SL)
|
||||
holiday.mariahimmelfahrt.date=20110815
|
||||
holiday.einheit.name=Tag der Deutschen Einheit
|
||||
holiday.einheit.date=20111003
|
||||
|
||||
#holiday.reformationstag.name=Reformationstag (BB,MV,SN,ST,TH)
|
||||
#holiday.reformationstag.date=20111031
|
||||
#holiday.allerheiligen.name=Allerheiligen (BW,BY,NRW,RP,SL)
|
||||
#holiday.allerheiligen.date=20111101
|
||||
#holiday.bussundbettag.name=Buss und Bettag (SN)
|
||||
#holiday.bussundbettag.date=20111116
|
||||
#holiday.heiligabend.name=Heilig Abend
|
||||
#holiday.heiligabend.date=20111224
|
||||
#holiday.weihnachtstag.name=Weihnachtstag
|
||||
#holiday.weihnachtstag.date=20111225
|
||||
#holiday.zweiterweihnachtstag.name=Zweiter Weihnachtstag
|
||||
#holiday.zweiterweihnachtstag.date=20111226
|
||||
#holiday.sylvester.name=Sylvester
|
||||
#holiday.sylvester.date=20111231
|
||||
73
doc/rc/holidays-ES.rc
Normal file
73
doc/rc/holidays-ES.rc
Normal file
@@ -0,0 +1,73 @@
|
||||
################################################################################
|
||||
# Sample calendar for Spain
|
||||
#
|
||||
# taskwarrior - a command line task list manager.
|
||||
#
|
||||
# Copyright 2010, 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
|
||||
#
|
||||
################################################################################
|
||||
|
||||
calendar.holidays=sparse
|
||||
|
||||
# 2010
|
||||
holiday.fiestanacional.name=Fiesta Nacional de España
|
||||
holiday.fiestanacional.date=20101012
|
||||
holiday.santos.name=Dia de todos los Santos
|
||||
holiday.santos.date=20101101
|
||||
holiday.constitucion.name=Dia de la Constitución
|
||||
holiday.constitucion.date=20101206
|
||||
holiday.concepcion.name=Inmaculada Concepción
|
||||
holiday.concepcion.date=20101208
|
||||
holiday.nochebuena.name=Noche Buena
|
||||
holiday.nochebuena.date=20101224
|
||||
holiday.navidad.name=Navidad
|
||||
holiday.navidad.date=20101225
|
||||
holiday.nochevieja.name=Noche Vieja
|
||||
holiday.nochevieja.date=20101231
|
||||
|
||||
# 2011
|
||||
holiday.anonuevo.name=Año Nuevo
|
||||
holiday.anonuevo.date=20110101
|
||||
holiday.reyes.name=Día de los Reyes
|
||||
holiday.reyes.date=20110106
|
||||
holiday.viernessanto.name=Viernes Santo
|
||||
holiday.viernessanto.date=20110422
|
||||
holiday.trabajo.name=Fiesta del Trabajo
|
||||
holiday.trabajo.date=20110501
|
||||
holiday.virgen.name=Asunción de la Virgen
|
||||
holiday.virgen.date=20110815
|
||||
|
||||
#holiday.fiestanacional.name=Fiesta Nacional de España
|
||||
#holiday.fiestanacional.date=20111012
|
||||
#holiday.santos.name=Dia de todos los Santos
|
||||
#holiday.santos.date=20111101
|
||||
#holiday.constitucion.name=Dia de la Constitución
|
||||
#holiday.constitucion.date=20111206
|
||||
#holiday.concepcion.name=Inmaculada Concepción
|
||||
#holiday.concepcion.date=20111208
|
||||
#holiday.nochebuena.name=Noche Buena
|
||||
#holiday.nochebuena.date=20111224
|
||||
#holiday.navidad.name=Navidad
|
||||
#holiday.navidad.date=20111225
|
||||
#holiday.nochevieja.name=Noche Vieja
|
||||
#holiday.nochevieja.date=20111231
|
||||
62
doc/rc/holidays-FR.rc
Normal file
62
doc/rc/holidays-FR.rc
Normal file
@@ -0,0 +1,62 @@
|
||||
################################################################################
|
||||
# Sample calendar for France
|
||||
#
|
||||
# taskwarrior - a command line task list manager.
|
||||
#
|
||||
# Copyright 2010, Paul Beckingham.
|
||||
# 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
|
||||
|
||||
# 2010
|
||||
holiday.toussaint.name=La Toussaint
|
||||
holiday.toussaint.date=20101101
|
||||
holiday.armistice.name=Jour d'armistice
|
||||
holiday.armistice.date=20101111
|
||||
holiday.noël.name=Noël
|
||||
holiday.noël.date=20101225
|
||||
|
||||
# 2011
|
||||
holiday.jourdelan.name=Jour de l'an
|
||||
holiday.jourdelan.date=20110101
|
||||
holiday.travail.name=Fête du premier mai
|
||||
holiday.travail.date=20110501
|
||||
holiday.victoire.name=la Fête de Victoire 45
|
||||
holiday.victoire.date=20110508
|
||||
holiday.ascencion.name=l'Ascencion
|
||||
holiday.ascencion.date=20110602
|
||||
holiday.pentecôte.name=la Pentecôte
|
||||
holiday.pentecôte.date=20110612
|
||||
holiday.bastille.name=Fête nationale
|
||||
holiday.bastille.date=20110714
|
||||
holiday.assomption.name=Assomption
|
||||
holiday.assomption.date=20110815
|
||||
|
||||
#holiday.toussaint.name=La Toussaint
|
||||
#holiday.toussaint.date=20111101
|
||||
#holiday.armistice.name=Jour d'armistice
|
||||
#holiday.armistice.date=20111111
|
||||
#holiday.noël.name=Noël
|
||||
#holiday.noël.date=20111225
|
||||
|
||||
101
doc/rc/holidays-NL.rc
Normal file
101
doc/rc/holidays-NL.rc
Normal file
@@ -0,0 +1,101 @@
|
||||
################################################################################
|
||||
# Sample calendar for the Netherlands
|
||||
#
|
||||
# taskwarrior - a command line task list manager.
|
||||
#
|
||||
# Copyright 2010, Charles T. Yun
|
||||
# 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
|
||||
|
||||
# 2010
|
||||
holiday.sinterklaas.name=Sinterklaas
|
||||
holiday.sinterklaas.date=20101205
|
||||
holiday.koninkrijksdag.name=Koninkrijksdag
|
||||
holiday.koninkrijksdag.date=20101215
|
||||
holiday.kerstmis.name=Kerstmis
|
||||
holiday.kerstmis.date=20101225
|
||||
holiday.kerstmis.name=Tweede Kerstdag
|
||||
holiday.kerstmis.date=20101226
|
||||
|
||||
# 2011
|
||||
holiday.nieuwjaar.name=Nieuwjaar
|
||||
holiday.nieuwjaar.date=20110101
|
||||
holiday.goedevrijdag.name=Goede Vrijdag
|
||||
holiday.goedevrijdag.date=20110422
|
||||
holiday.pasen.name=Pasen
|
||||
holiday.pasen.date=20110424
|
||||
holiday.pasen.name=Tweede Paasdag
|
||||
holiday.pasen.date=20100425
|
||||
holiday.koninginnedag.name=Koninginnedag
|
||||
holiday.koninginnedag.date=20110430
|
||||
holiday.dodenherdenking.name=Dodenherdenking
|
||||
holiday.dodenherdenking.date=20110504
|
||||
holiday.bevrijdingsdag.name=Bevrijdingsdag
|
||||
holiday.bevrijdingsdag.date=20110505
|
||||
holiday.hemelvaartsdag.name=Hemelvaartsdag
|
||||
holiday.hemelvaartsdag.date=20110602
|
||||
holiday.pinksteren.name= Pinksteren
|
||||
holiday.pinksteren.date=20110612
|
||||
holiday.pinksteren.name=Tweede Pinksterdag
|
||||
holiday.pinksteren.date=20110613
|
||||
#holiday.sinterklaas.name=Sinterklaas
|
||||
#holiday.sinterklaas.date=20111205
|
||||
#holiday.koninkrijksdag.name=Koninkrijksdag
|
||||
#holiday.koninkrijksdag.date=20111215
|
||||
#holiday.kerstmis.name=Kerstmis
|
||||
#holiday.kerstmis.date=20111225
|
||||
#holiday.kerstmis.name=Tweede Kerstdag
|
||||
#holiday.kerstmis.date=20111226
|
||||
|
||||
# 2012
|
||||
#holiday.nieuwjaar.name=Nieuwjaar
|
||||
#holiday.nieuwjaar.date=20120101
|
||||
#holiday.goedevrijdag.name=Goede Vrijdag
|
||||
#holiday.goedevrijdag.date=20120406
|
||||
#holiday.pasen.name=Pasen
|
||||
#holiday.pasen.date=20120408
|
||||
#holiday.pasen.name=Tweede Pasdag
|
||||
#holiday.pasen.date=20120409
|
||||
#holiday.koninginnedag.name=Koninginnedag
|
||||
#holiday.koninginnedag.date=20120430
|
||||
#holiday.dodenherdenking.name=Dodenherdenking
|
||||
#holiday.dodenherdenking.date=20120504
|
||||
#holiday.bevrijdingsdag.name=Bevrijdingsdag
|
||||
#holiday.bevrijdingsdag.date=20120505
|
||||
#holiday.hemelvaartsdag.name=Hemelvaartsdag
|
||||
#holiday.hemelvaartsdag.date=20120617
|
||||
#holiday.pinksteren.name= Pinksteren
|
||||
#holiday.pinksteren.date=20120627
|
||||
#holiday.pinksteren.name=Tweede Pinksterdag
|
||||
#holiday.pinksteren.date=20120628
|
||||
#holiday.sinterklaas.name=Sinterklaas
|
||||
#holiday.sinterklaas.date=20121205
|
||||
#holiday.koninkrijksdag.name=Koninkrijksdag
|
||||
#holiday.koninkrijksdag.date=20121215
|
||||
#holiday.kerstmis.name=Kerstmis
|
||||
#holiday.kerstmis.date=20121225
|
||||
#holiday.kerstmis.name=Tweede Kerstdag
|
||||
#holiday.kerstmis.date=20121226
|
||||
|
||||
113
doc/rc/holidays-NO.rc
Normal file
113
doc/rc/holidays-NO.rc
Normal file
@@ -0,0 +1,113 @@
|
||||
################################################################################
|
||||
# Sample calendar for Norway
|
||||
#
|
||||
# taskwarrior - a command line task list manager.
|
||||
#
|
||||
# Copyright 2010, Jostein Berntsen
|
||||
# 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
|
||||
|
||||
# 2010
|
||||
holiday.julaften.name=Julaften
|
||||
holiday.julaften.date=20101224
|
||||
holiday.juledag.name=Juledag
|
||||
holiday.juledag.date=20101225
|
||||
holiday.juledag2.name=Juledag
|
||||
holiday.juledag2.date=20101226
|
||||
holiday.nyttårsaften.name=Nyttårsaften
|
||||
holiday.nyttårsaften.date=20101231
|
||||
|
||||
# 2011
|
||||
holiday.nyttårsdag.name=Nyttårsdag
|
||||
holiday.nyttårsdag.date=20110101
|
||||
holiday.fastelavn.name=Fastelavn
|
||||
holiday.fastelavn.date=20110306
|
||||
holiday.palmesøndag.name=Palmesøndag
|
||||
holiday.palmesøndag.date=20110417
|
||||
holiday.skjærtorsdag.name=Skjærtorsdag
|
||||
holiday.skjærtorsdag.date=20110421
|
||||
holiday.langfredag.name=Langfredag
|
||||
holiday.langfredag.date=20110422
|
||||
holiday.påskedag.name=Påskedag
|
||||
holiday.påskedag.date=20110424
|
||||
holiday.påskedag2.name=Påskedag
|
||||
holiday.påskedag2.date=20110425
|
||||
holiday.offentlighøytidsdag.name=Offentlig Høytidsdag
|
||||
holiday.offentlighøytidsdag.date=20110501
|
||||
holiday.frigjøringsdag.name=Frigjøringsdag 1945
|
||||
holiday.frigjøringsdag.date=20110508
|
||||
holiday.grunnlovsdag.name=Grunnlovsdag
|
||||
holiday.grunnlovsdag.date=20110517
|
||||
holiday.KristiHimmelfartsdag.name=Kristi Himmelfartsdag
|
||||
holiday.KristiHimmelfartsdag.date=20110602
|
||||
holiday.pinsedag.name=Pinsedag
|
||||
holiday.pinsedag.date=20110612
|
||||
holiday.pinsedag2.name=Pinsedag
|
||||
holiday.pinsedag2.date=20110613
|
||||
#holiday.julaften.name=Julaften
|
||||
#holiday.julaften.date=20111224
|
||||
#holiday.juledag.name=Juledag
|
||||
#holiday.juledag.date=20111225
|
||||
#holiday.juledag2.name=Juledag
|
||||
#holiday.juledag2.date=20111226
|
||||
#holiday.nyttårsaften.name=Nyttårsaften
|
||||
#holiday.nyttårsaften.date=20111231
|
||||
|
||||
# 2012
|
||||
#holiday.nyttårsdag.name=Nyttårsdag
|
||||
#holiday.nyttårsdag.date=20120101
|
||||
#holiday.fastelavn.name=Fastelavn
|
||||
#holiday.fastelavn.date=20120219
|
||||
#holiday.palmesøndag.name=Palmesøndag
|
||||
#holiday.palmesøndag.date=20120401
|
||||
#holiday.skjærtorsdag.name=Skjærtorsdag
|
||||
#holiday.skjærtorsdag.date=20120405
|
||||
#holiday.langfredag.name=Langfredag
|
||||
#holiday.langfredag.date=20120406
|
||||
#holiday.påskedag.name=Påskedag
|
||||
#holiday.påskedag.date=20120408
|
||||
#holiday.påskedag2.name=Påskedag
|
||||
#holiday.påskedag2.date=20120409
|
||||
#holiday.offentlighøytidsdag.name=Offentlig Høytidsdag
|
||||
#holiday.offentlighøytidsdag.date=20120501
|
||||
#holiday.frigjøringsdag.name=Frigjøringsdag 1945
|
||||
#holiday.frigjøringsdag.date=20120508
|
||||
#holiday.grunnlovsdag.name=Grunnlovsdag
|
||||
#holiday.grunnlovsdag.date=20120517
|
||||
#holiday.KristiHimmelfartsdag.name=Kristi Himmelfartsdag
|
||||
#holiday.KristiHimmelfartsdag.date=20120517
|
||||
#holiday.pinsedag.name=Pinsedag
|
||||
#holiday.pinsedag.date=20120527
|
||||
#holiday.pinsedag2.name=Pinsedag
|
||||
#holiday.pinsedag2.date=20120528
|
||||
#holiday.julaften.name=Julaften
|
||||
#holiday.julaften.date=20121224
|
||||
#holiday.juledag.name=Juledag
|
||||
#holiday.juledag.date=20121225
|
||||
#holiday.juledag2.name=Juledag
|
||||
#holiday.juledag2.date=20121226
|
||||
#holiday.nyttårsaften.name=Nyttårsaften
|
||||
#holiday.nyttårsaften.date=20121231
|
||||
|
||||
@@ -1,27 +1,35 @@
|
||||
holiday.nyårsdagen.name=Nyårsdagen
|
||||
holiday.nyårsdagen.date=20100101
|
||||
holiday.trettondedagjul.name=Trettondedag jul
|
||||
holiday.trettondedagjul.date=20100106
|
||||
holiday.långfredagen.name=Långfredagen
|
||||
holiday.långfredagen.date=20100402
|
||||
holiday.påskdagen.name=Påskdagen
|
||||
holiday.påskdagen.date=20100404
|
||||
holiday.annandagpåsk.name=Annandag påsk
|
||||
holiday.annandagpåsk.date=20100405
|
||||
holiday.valborgmässoafton.name=Valborgmässoafton
|
||||
holiday.valborgmässoafton.date=20100430
|
||||
holiday.förstamaj.name=Första maj
|
||||
holiday.förstamaj.date=20100501
|
||||
holiday.kristihimmelfärdsdag.name=Kristi Himmelsfärdsdag
|
||||
holiday.kristihimmelfärdsdag.date=20100513
|
||||
holiday.pingstdagen.name=Pingstdagen
|
||||
holiday.pingstdagen.date=20100523
|
||||
holiday.nationaldagen.name=Nationaldagen
|
||||
holiday.nationaldagen.date=20100606
|
||||
holiday.midsommarafton.name=Midsommarafton
|
||||
holiday.midsommarafton.date=20100625
|
||||
holiday.midsommardagen.name=Midsommardagen
|
||||
holiday.midsommardagen.date=20100626
|
||||
################################################################################
|
||||
# Sample calendar for Sweden
|
||||
#
|
||||
# taskwarrior - a command line task list manager.
|
||||
#
|
||||
# Copyright 2010, 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
|
||||
#
|
||||
################################################################################
|
||||
|
||||
calendar.holidays=sparse
|
||||
|
||||
# 2010
|
||||
holiday.allahelgonsdag.name=Alla Helgons Dag
|
||||
holiday.allahelgonsdag.date=20101106
|
||||
holiday.julafton.name=Julafton
|
||||
@@ -32,3 +40,40 @@ holiday.annandagjul.name=Annandag jul
|
||||
holiday.annandagjul.date=20101226
|
||||
holiday.nyårsafton.name=Nyårsafton
|
||||
holiday.nyårsafton.date=20101231
|
||||
|
||||
# 2011
|
||||
holiday.nyårsdagen.name=Nyårsdagen
|
||||
holiday.nyårsdagen.date=20110101
|
||||
holiday.trettondedagjul.name=Trettondedag jul
|
||||
holiday.trettondedagjul.date=20110106
|
||||
holiday.långfredagen.name=Långfredagen
|
||||
holiday.långfredagen.date=20110422
|
||||
holiday.påskdagen.name=Påskdagen
|
||||
holiday.påskdagen.date=20110424
|
||||
holiday.annandagpåsk.name=Annandag påsk
|
||||
holiday.annandagpåsk.date=20110425
|
||||
holiday.valborgmässoafton.name=Valborgmässoafton
|
||||
holiday.valborgmässoafton.date=20110430
|
||||
holiday.förstamaj.name=Första maj
|
||||
holiday.förstamaj.date=20110501
|
||||
holiday.kristihimmelfärdsdag.name=Kristi Himmelsfärdsdag
|
||||
holiday.kristihimmelfärdsdag.date=20110602
|
||||
holiday.nationaldagen.name=Nationaldagen
|
||||
holiday.nationaldagen.date=20110606
|
||||
holiday.pingstdagen.name=Pingstdagen
|
||||
holiday.pingstdagen.date=20110612
|
||||
holiday.midsommarafton.name=Midsommarafton
|
||||
holiday.midsommarafton.date=20110624
|
||||
holiday.midsommardagen.name=Midsommardagen
|
||||
holiday.midsommardagen.date=20110625
|
||||
|
||||
# holiday.allahelgonsdag.name=Alla Helgons Dag
|
||||
# holiday.allahelgonsdag.date=20111105
|
||||
# holiday.julafton.name=Julafton
|
||||
# holiday.julafton.date=20111224
|
||||
# holiday.juldagen.name=Juldagen
|
||||
# holiday.juldagen.date=20111225
|
||||
# holiday.annandagjul.name=Annandag jul
|
||||
# holiday.annandagjul.date=20111226
|
||||
# holiday.nyårsafton.name=Nyårsafton
|
||||
# holiday.nyårsafton.date=20111231
|
||||
|
||||
56
doc/rc/holidays-UK.rc
Normal file
56
doc/rc/holidays-UK.rc
Normal file
@@ -0,0 +1,56 @@
|
||||
################################################################################
|
||||
# Sample calendar for the UK
|
||||
#
|
||||
# taskwarrior - a command line task list manager.
|
||||
#
|
||||
# Copyright 2010, 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
|
||||
#
|
||||
################################################################################
|
||||
|
||||
calendar.holidays=sparse
|
||||
|
||||
# 2010
|
||||
holiday.christmas.name=Christmas Day
|
||||
holiday.christmas.date=20101225
|
||||
holiday.boxingday.name=Boxing Day
|
||||
holiday.boxingday.date=20101226
|
||||
|
||||
# 2011
|
||||
holiday.newyear.name=New Year's Day
|
||||
holiday.newyear.date=20110101
|
||||
holiday.goodfriday.name=Good Friday
|
||||
holiday.goodfriday.date=20110422
|
||||
holiday.eastermonday.name=Easter Monday
|
||||
holiday.eastermonday.date=20110425
|
||||
holiday.may.name=Early May Bank Holiday
|
||||
holiday.may.name=20110502
|
||||
holiday.spring.name=Spring Bank Holiday
|
||||
holiday.spring.name=20110530
|
||||
holiday.august.name=August Bank Holiday
|
||||
holiday.august.name=20110829
|
||||
|
||||
#holiday.christmas.name=Christmas Day
|
||||
#holiday.christmas.date=20111225
|
||||
#holiday.boxingday.name=Boxing Day
|
||||
#holiday.boxingday.date=20111226
|
||||
|
||||
@@ -1,17 +1,35 @@
|
||||
holiday.newyearsday.name=New Years Day
|
||||
holiday.newyearsday.date=20100101
|
||||
holiday.martinlutherkingday.name=Martin Luther King Day
|
||||
holiday.martinlutherkingday.date=20100118
|
||||
holiday.presidentsday.name=Presidents Day
|
||||
holiday.presidentsday.date=20100215
|
||||
holiday.patriotsday.name=Patriots Day
|
||||
holiday.patriotsday.date=20100419
|
||||
holiday.memorialday.name=Memorial Day
|
||||
holiday.memorialday.date=20100531
|
||||
holiday.independenceday.name=Independence Day
|
||||
holiday.independenceday.date=20100704
|
||||
holiday.independenceday2.name=Independence Day observed
|
||||
holiday.independenceday2.date=20100705
|
||||
################################################################################
|
||||
# Sample calendar for the US
|
||||
#
|
||||
# taskwarrior - a command line task list manager.
|
||||
#
|
||||
# Copyright 2010, 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
|
||||
#
|
||||
################################################################################
|
||||
|
||||
calendar.holidays=sparse
|
||||
|
||||
# 2010
|
||||
holiday.laborday.name=Labor Day
|
||||
holiday.laborday.date=20100906
|
||||
holiday.columbusday.name=Columbus Day
|
||||
@@ -20,9 +38,35 @@ holiday.veteransdays.name=Veterans Day
|
||||
holiday.veteransdays.date=20101111
|
||||
holiday.thanksgiving.name=Thanksgiving Day
|
||||
holiday.thanksgiving.date=20101125
|
||||
holiday.christmaseve.name=Christmas Eve
|
||||
holiday.christmaseve.date=20101224
|
||||
holiday.christmasday.name=Christmas Day
|
||||
holiday.christmasday.date=20101225
|
||||
holiday.newyearseve.name=New Years Eve
|
||||
holiday.newyearseve.name=New Year's Eve
|
||||
holiday.newyearseve.date=20101231
|
||||
|
||||
# 2011
|
||||
holiday.newyearsday.name=New Year's Day
|
||||
holiday.newyearsday.date=20110101
|
||||
holiday.martinlutherkingday.name=Birthday of Martin Luther King, Jr.
|
||||
holiday.martinlutherkingday.date=20110117
|
||||
holiday.presidentsday.name=Washington's Birthday
|
||||
holiday.presidentsday.date=20110221
|
||||
holiday.patriotsday.name=Patriots' Day
|
||||
holiday.patriotsday.date=20110419
|
||||
holiday.memorialday.name=Memorial Day
|
||||
holiday.memorialday.date=20110530
|
||||
holiday.independenceday.name=Independence Day
|
||||
holiday.independenceday.date=20110704
|
||||
|
||||
# holiday.laborday.name=Labor Day
|
||||
# holiday.laborday.date=20110905
|
||||
# holiday.columbusday.name=Columbus Day
|
||||
# holiday.columbusday.date=20111010
|
||||
# holiday.veteransdays.name=Veterans Day
|
||||
# holiday.veteransdays.date=20111111
|
||||
# holiday.thanksgiving.name=Thanksgiving Day
|
||||
# holiday.thanksgiving.date=20111124
|
||||
# holiday.christmasday.name=Christmas Day
|
||||
# holiday.christmasday.date=20111225
|
||||
# holiday.newyearseve.name=New Year's Eve
|
||||
# holiday.newyearseve.date=20111231
|
||||
|
||||
|
||||
@@ -1 +1,67 @@
|
||||
# Sample task 1.9 (or later) color theme
|
||||
###############################################################################
|
||||
# Sample taskwarrior 1.9 (or later) light 16-color theme
|
||||
#
|
||||
# taskwarrior - a command line task list manager.
|
||||
#
|
||||
# Copyright 2006 - 2010, Paul Beckingham.
|
||||
# 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=blue
|
||||
color.footnote=blue
|
||||
color.debug=blue
|
||||
|
||||
color.summary.bar=on green
|
||||
color.summary.background=on black
|
||||
|
||||
color.history.add=black on red
|
||||
color.history.done=black on green
|
||||
color.history.delete=black on yellow
|
||||
|
||||
color.undo.before=red
|
||||
color.undo.after=green
|
||||
|
||||
color.calendar.today=black on bright blue
|
||||
color.calendar.due=white on red
|
||||
color.calendar.due.today=bold white on red
|
||||
color.calendar.overdue=black on bright red
|
||||
color.calendar.weekend=white on bright black
|
||||
color.calendar.holiday=black on yellow
|
||||
color.calendar.weeknumber=bold blue
|
||||
|
||||
color.recurring=blue
|
||||
color.overdue=bold red
|
||||
color.due.today=red
|
||||
color.due=red
|
||||
color.active=black on green
|
||||
color.pri.none=
|
||||
color.pri.H=bold black
|
||||
color.pri.M=black
|
||||
color.pri.L=
|
||||
color.tagged=green
|
||||
color.blocked=white on black
|
||||
color.project.none=
|
||||
color.tag.none=
|
||||
color.alternate=
|
||||
|
||||
|
||||
@@ -1 +1,66 @@
|
||||
# Sample task 1.9 (or later) color theme
|
||||
###############################################################################
|
||||
# Sample taskwarrior 1.9 (or later) light 256-color theme
|
||||
#
|
||||
# taskwarrior - a command line task list manager.
|
||||
#
|
||||
# Copyright 2006 - 2010, Paul Beckingham.
|
||||
# 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=color4
|
||||
color.footnote=color4
|
||||
color.debug=color4
|
||||
|
||||
color.summary.bar=on rgb141
|
||||
color.summary.background=on color0
|
||||
|
||||
color.history.add=color0 on rgb500
|
||||
color.history.done=color0 on rgb050
|
||||
color.history.delete=color0 on rgb550
|
||||
|
||||
color.undo.before=color1
|
||||
color.undo.after=color2
|
||||
|
||||
color.calendar.today=color15 on rgb013
|
||||
color.calendar.due=color0 on color9
|
||||
color.calendar.due.today=color15 on color1
|
||||
color.calendar.overdue=color0 on color1
|
||||
color.calendar.weekend=on color253
|
||||
color.calendar.holiday=color0 on color3
|
||||
color.calendar.weeknumber=rgb013
|
||||
|
||||
color.recurring=rgb013
|
||||
color.overdue=color1
|
||||
color.due.today=rgb400
|
||||
color.due=color9
|
||||
color.active=rgb555 on rgb520
|
||||
color.pri.none=
|
||||
color.pri.H=color232
|
||||
color.pri.M=color237
|
||||
color.pri.L=color242
|
||||
color.tagged=rgb020
|
||||
color.blocked=gray12 on gray4
|
||||
color.project.none=
|
||||
color.tag.none=
|
||||
color.alternate=on color254
|
||||
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
# This is an example strings.en-US file.
|
||||
#
|
||||
# The task program has a built-in set of default strings, which are UTF8 encoded
|
||||
# for the en-US locale. A file such as this is used to override those defaults.
|
||||
# This means that a strings file is merely a delta applied to the built-in
|
||||
# strings, so an empty string file means you get en-US.
|
||||
# The taskwarrior program has a built-in set of default strings, which are UTF8
|
||||
# encoded for the en-US locale. A file such as this is used to override those
|
||||
# defaults. This means that a strings file is merely a delta applied to the
|
||||
# built-in strings, so an empty string file means you get en-US.
|
||||
#
|
||||
# To use another string file, add the following entry to your .taskrc file:
|
||||
#
|
||||
@@ -18,7 +18,7 @@
|
||||
105 Inverted sequence range high-low
|
||||
106 ID Range too large
|
||||
107 Not a sequence.
|
||||
108 Interactive task is only available when built with ncurses support.
|
||||
108 Interactive mode is only available when built with ncurses support.
|
||||
109 Empty record in input
|
||||
110 Unrecognized characters at end of line
|
||||
111 Record not recognized as format 4
|
||||
@@ -40,10 +40,9 @@
|
||||
208 done
|
||||
209 duplicate
|
||||
210 edit
|
||||
211 export
|
||||
|
||||
212 help
|
||||
213 history
|
||||
214 ghistory
|
||||
|
||||
215 import
|
||||
216 info
|
||||
217 prepend
|
||||
@@ -55,10 +54,14 @@
|
||||
223 summary
|
||||
224 tags
|
||||
225 timesheet
|
||||
|
||||
226 log
|
||||
227 undo
|
||||
228 version
|
||||
229 shell
|
||||
230 config
|
||||
231 show
|
||||
|
||||
235 diagnostics
|
||||
|
||||
# 3xx Attributes - must be sequential
|
||||
300 project
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
# This is an example strings.en-US file.
|
||||
#
|
||||
# The task program has a built-in set of default strings, which are UTF8 encoded
|
||||
# for the en-US locale. A file such as this is used to override those defaults.
|
||||
# This means that a strings file is merely a delta applied to the built-in
|
||||
# strings, so an empty string file means you get en-US.
|
||||
# The taskwarrior program has a built-in set of default strings, which are UTF8
|
||||
# encoded for the en-US locale. A file such as this is used to override those
|
||||
# default. This means that a strings file is merely a delta applied to the
|
||||
# built-in strings, so an empty string file means you get en-US.
|
||||
#
|
||||
# To use another string file, add the following entry to your .taskrc file:
|
||||
#
|
||||
|
||||
@@ -1,5 +1,72 @@
|
||||
%
|
||||
first tip
|
||||
For bash users, try 'alias t=task' to save some keystrokes.
|
||||
%
|
||||
second tip
|
||||
Have you tried 'task edit 1' to use your text editor to modify all aspects of
|
||||
task 1?
|
||||
%
|
||||
Did you know that 'task 1 wait:eom' will hide task 1 until the end of the
|
||||
month? You can then see all waiting tasks with 'task waiting'.
|
||||
%
|
||||
Did you know that 'task 1 wait:' will restore a waiting task to pending status?
|
||||
%
|
||||
If you put 'default.command=list project:home' in your .taskrc file, then just
|
||||
running 'task' will automatically run 'task list project:home' for you. Save
|
||||
some keystrokes!
|
||||
%
|
||||
If you edit your pending.data file, make sure that your text editor doesn't
|
||||
strip the trailing \n characters from the end of the file.
|
||||
%
|
||||
If you must edit your pending.data file, make sure that your text editor doesn't
|
||||
convert from a Unix to a DOS file encoding.
|
||||
%
|
||||
Did you build task from source? If you didn't have ncurses installed at the
|
||||
time, then you're missing out on text wrapping and task cannot take advantage of
|
||||
the full terminal width. Consider rebuilding with ncurses installed, or install
|
||||
from a pre-built package for your OS.
|
||||
%
|
||||
Do you have the latest version of task installed? Check http://taskwarrior.org
|
||||
periodically for news of updates. That feature you wanted might be ready...
|
||||
%
|
||||
Don't forget the online docs at http://taskwarrior.org/wiki/taskwarrior, and if
|
||||
you find errors, please let us know. Then again, it is a wiki, so feel free to
|
||||
correct them yourself.
|
||||
%
|
||||
Don't forget the online docs at http://taskwarrior.org/wiki/taskwarrior, but if
|
||||
you cannot find documentation on a particular topic, either create a ticket
|
||||
requesting it, email support@taskwarrior.org asking for it, or start it
|
||||
yourself.
|
||||
%
|
||||
Did you know there are man pages for task? Try 'man task', 'man taskrc',
|
||||
'man task-tutorial', 'man task-color' and 'man task-faq'.
|
||||
%
|
||||
Did you know there are several 256-color themes available for task?
|
||||
%
|
||||
Did you know that running 'task show' will perform various checks on your
|
||||
.taskrc file, looking for errors?
|
||||
%
|
||||
Are you making the most of color? Try 'task color' to see what colors your
|
||||
system supports.
|
||||
%
|
||||
Are you using projects? If you do, taskwarrior will keep track of the project
|
||||
completion percentage and report it to you whenever it changes.
|
||||
%
|
||||
Did you know you can list tasks that have priorities like 'task list
|
||||
priority.above:L'?
|
||||
%
|
||||
The http://tasktools.org/latest URL can tell you which is the latest version.
|
||||
%
|
||||
To make your task list clear and actionable, always describe it starting with a
|
||||
verb, like "call" or "clean" or "get".
|
||||
%
|
||||
Don't like the name of a command? Create an alias.
|
||||
%
|
||||
You can choose whether your searches are case sensitive or not, by running
|
||||
'task config search.case.sensitive yes'
|
||||
%
|
||||
Back up your data files by making copies of the ~/.taskrc file and ~/.task
|
||||
directory.
|
||||
%
|
||||
Accidentally changed a task? The undo command makes it a breeze to recover from
|
||||
any inadvertent change -- even a deletion!
|
||||
%
|
||||
|
||||
|
||||
@@ -1,5 +1,14 @@
|
||||
%
|
||||
första tips
|
||||
För bash användare, med 'alias t=task' kan du spara på nedslagningar på tangentbordet.
|
||||
%
|
||||
andra tips
|
||||
Har du försökt att använda 'task edit 1' för att ändra alla aspekter av task 1 i din texteditor?
|
||||
%
|
||||
Med 'task 1 wait:eom' kan du göma task 1 fram till slutet av månaden. För att se
|
||||
alla task som väntar kan du använda 'task waiting'.
|
||||
%
|
||||
Visste du att 'task 1 wait:' återställa en väntande task till "peding" igen?
|
||||
%
|
||||
Skriv 'default.command=list project:home' i din .taskrc fil. När du sen använder
|
||||
'task' körs det en 'task list project:home' istäälet för dig. Spara på nedslagningar
|
||||
på tangetbordet.
|
||||
%
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
Name: task
|
||||
Version: 1.8.1
|
||||
Version: 1.9.1
|
||||
Release: 1%{?dist}
|
||||
Summary: A command-line to do list manager
|
||||
|
||||
@@ -17,7 +17,7 @@ support for GTD functionality and includes the
|
||||
following features: tags, colorful tabular output,
|
||||
reports and graphs, lots of manipulation commands,
|
||||
low-level API, abbreviations for all commands and
|
||||
options, multiuser file locking, recurring tasks.
|
||||
options, multi-user file locking, recurring tasks.
|
||||
|
||||
%prep
|
||||
%setup -q
|
||||
@@ -40,15 +40,37 @@ rm -rf $RPM_BUILD_ROOT
|
||||
|
||||
%files
|
||||
%defattr(-,root,root,-)
|
||||
%doc AUTHORS ChangeLog COPYING NEWS README scripts i18n
|
||||
%doc AUTHORS ChangeLog COPYING NEWS README scripts i18n doc/rc
|
||||
%{_bindir}/task
|
||||
%{_mandir}/man1/task.1.gz
|
||||
%{_mandir}/man5/taskrc.5.gz
|
||||
%{_mandir}/man5/task-tutorial.5.gz
|
||||
%{_mandir}/man5/task-color.5.gz
|
||||
%{_mandir}/man5/task-faq.5.gz
|
||||
%config(noreplace) %{_sysconfdir}/bash_completion.d
|
||||
|
||||
|
||||
%changelog
|
||||
* Mon May 22 2010 Federico Hernandez <ultrafredde@gmail.com> - 1.9.1-1
|
||||
Intial RPM for task beta release 1.9.1
|
||||
* Mon Feb 22 2010 Federico Hernandez <ultrafredde@gmail.com> - 1.9.0-1
|
||||
Intial RPM for task beta release 1.9.0
|
||||
* Mon Feb 15 2010 Federico Hernandez <ultrafredde@gmail.com> - 1.9.0.beta3-1
|
||||
Intial RPM for task beta release 1.9.0.beta3
|
||||
* Mon Feb 08 2010 Federico Hernandez <ultrafredde@gmail.com> - 1.9.0.beta2-1
|
||||
Intial RPM for task beta release 1.9.0.beta2
|
||||
* Wed Feb 03 2010 Federico Hernandez <ultrafredde@gmail.com> - 1.9.0.beta1-1
|
||||
Intial RPM for task beta release 1.9.0.beta1
|
||||
* Sat Dec 05 2009 Federico Hernandez <ultrafredde@gmail.com> - 1.8.5-2
|
||||
Fixed wrong ChangeLog file
|
||||
* Sat Dec 05 2009 Federico Hernandez <ultrafredde@gmail.com> - 1.8.5-1
|
||||
Intial RPM for task bugfix release 1.8.5
|
||||
* Tue Nov 17 2009 Federico Hernandez <ultrafredde@gmail.com> - 1.8.4-1
|
||||
Intial RPM for task bugfix release 1.8.4
|
||||
* Wed Oct 21 2009 Federico Hernandez <ultrafredde@gmail.com> - 1.8.3-1
|
||||
Intial RPM for task bugfix release 1.8.3
|
||||
* Mon Sep 07 2009 Federico Hernandez <ultrafredde@gmail.com> - 1.8.2-1
|
||||
Intial RPM for task bugfix release 1.8.2
|
||||
* Thu Aug 20 2009 Federico Hernandez <ultrafredde@gmail.com> - 1.8.1-1
|
||||
Intial RPM for task bugfix release 1.8.1
|
||||
* Tue Jul 21 2009 Federico Hernandez <ultrafredde@gmail.com> - 1.8.0-1
|
||||
@@ -60,12 +82,12 @@ rm -rf $RPM_BUILD_ROOT
|
||||
* Tue Jul 07 2009 Federico Hernandez <ultrafredde@gmail.com> - 1.8.0.beta1-1
|
||||
Intial RPM for task beta release 1.8.0.beta1
|
||||
* Tue Jun 08 2009 Federico Hernandez <ultrafredde@gmail.com> - 1.7.1-2
|
||||
- Fixed inclusion of manpages.
|
||||
Fixed inclusion of manpages.
|
||||
* Tue Jun 08 2009 Federico Hernandez <ultrafredde@gmail.com> - 1.7.1-1
|
||||
- Initial RPM for bugfix release 1.7.1.
|
||||
- Updated references to new project homepage in spec file.
|
||||
Initial RPM for bugfix release 1.7.1.
|
||||
Updated references to new project homepage in spec file.
|
||||
* Tue May 19 2009 Federico Hernandez <ultrafredde@gmail.com> - 1.7.0-2
|
||||
- Changed license to GPLv2+ and removed Requires macro.
|
||||
- See https://bugzilla.redhat.com/show_bug.cgi?id=501498
|
||||
Changed license to GPLv2+ and removed Requires macro.
|
||||
See https://bugzilla.redhat.com/show_bug.cgi?id=501498
|
||||
* Tue May 19 2009 Federico Hernandez <ultrafredde@gmail.com> - 1.7.0-1
|
||||
- Initial RPM.
|
||||
Initial RPM.
|
||||
|
||||
BIN
package-config/osx/OSX-packaging.pdf
Normal file
BIN
package-config/osx/OSX-packaging.pdf
Normal file
Binary file not shown.
280
package-config/osx/README
Normal file
280
package-config/osx/README
Normal file
@@ -0,0 +1,280 @@
|
||||
How to make an OSX package
|
||||
--------------------------
|
||||
|
||||
Note: This is being written from the OSX 10.6 perspective, and may therefore
|
||||
contain steps that are different for 10.5, although I don't recall any
|
||||
actual differences.
|
||||
|
||||
|
||||
0. Philosophy
|
||||
|
||||
Only Fredde tags releases. We only make builds from tagged commits. We
|
||||
only release builds that build cleanly without errors or warnings. We only
|
||||
release builds that pass 100% of the unit tests.
|
||||
|
||||
|
||||
1. Prerequisites
|
||||
|
||||
You will need an Intel Mac, running OSX 10.5 or later.
|
||||
You will need to install the Developer Tools, which are found on your OSX DVD.
|
||||
You will need git installed, version 1.5 or later. See http://git-scm.com
|
||||
You will need autotools installed. See http://www.gnu.org/software/autoconf
|
||||
|
||||
2. Get the code
|
||||
|
||||
2.1 Clone the task git repository. It is important that this is a throwaway
|
||||
clone of the repository, because we will do (locally) destructive things
|
||||
to it.
|
||||
|
||||
$ git clone git://tasktools.org/task.git ~/task-package.git
|
||||
...
|
||||
$ cd ~/task-package.git
|
||||
|
||||
2.2 Making sure you have the right version of the code. This assumes you are
|
||||
building taskwarrior 1.9.2, but any version number is interchangeable.
|
||||
Check out the correct branch, and make sure it is sitting at the correct
|
||||
commit, via a tag. Note that while 1.9.2 is a branch name, v1.9.2 is a tag
|
||||
name.
|
||||
|
||||
$ git checkout 1.9.2
|
||||
$ git reset --hard v1.9.2
|
||||
|
||||
If there is an error in this step, stop, capture the output, and report the
|
||||
errors.
|
||||
|
||||
3. Build taskwarrior
|
||||
|
||||
3.1 First build the task binary. Note the "-j 2" tells make to use both cores
|
||||
in your dual-core Intel CPU, which means faster compiles. If you own a quad
|
||||
core Mac, use "-j 4". If you own a single core Mac, just type "make".
|
||||
|
||||
$ autoreconf -f
|
||||
$ ./configure
|
||||
...
|
||||
|
||||
If any errors are reported, stop, capture the output, and report the errors.
|
||||
|
||||
$ make -j 2
|
||||
|
||||
If there are any errors, or there are any warnings generated by the compiler
|
||||
stop, capture the output, and report the problem. You'll need to watch as
|
||||
it builds.
|
||||
|
||||
4. Build the test suite
|
||||
|
||||
4.1 The test suite exists to prove that we do not break taskwarrior features
|
||||
from one release to the next. While this is not a perfect solution, it has
|
||||
saved us many times from releasing code that is inferior.
|
||||
|
||||
The first step is to modify the test suite Makefile to remove the Lua line.
|
||||
This is because we do not yet have dynamic detection of the Lua library for
|
||||
the unit tests.
|
||||
|
||||
$ cd ~/task-package.git/src/tests
|
||||
$ vi Makefile
|
||||
|
||||
Any text editor will do, but look for this line (line 5):
|
||||
|
||||
LFLAGS = -L/usr/local/lib -lncurses -llua
|
||||
|
||||
and change it to:
|
||||
|
||||
LFLAGS = -L/usr/local/lib -lncurses
|
||||
|
||||
Now build the unit tests:
|
||||
|
||||
$ make -j 2
|
||||
...
|
||||
|
||||
4.2 Run all the unit tests.
|
||||
|
||||
$ ./run_all
|
||||
Skipping benchmarks
|
||||
|
||||
Pass: 4241
|
||||
Fail: 0
|
||||
Skipped: 0
|
||||
Runtime: 86
|
||||
|
||||
The output should look something like this, with 0 failed, and 0 skipped
|
||||
tests. If there are any failures or skips, stop and mailed the log file,
|
||||
named 'all.log' to Paul & Fredde.
|
||||
|
||||
5. Assemble the parts
|
||||
|
||||
5.1 There is a script that copies all the necessary files (binary, man pages
|
||||
etc) in the right place, ready for packaging. Run this:
|
||||
|
||||
$ cd ~/task-package.git/package-config/osx
|
||||
$ ./update
|
||||
|
||||
6. Adjust the package details
|
||||
|
||||
6.1 Launch the package manager.
|
||||
|
||||
$ open -a /Developer/Applications/Utilities/PackageManager.app
|
||||
|
||||
6.2 Close the 'Untitled' window that opens - we will be using a different
|
||||
file. Note that PackageManager is still running - it just has no windows.
|
||||
|
||||
6.3 Using the File -> Open menu, open the file
|
||||
|
||||
~/task-package.git/package-config/osx/task.pmdoc
|
||||
|
||||
<figure 1>
|
||||
|
||||
This is the file from the last time a package was created. It needs some
|
||||
adjustments. Start by clicking on the "Taskwarrior x.x.x Distribution" with
|
||||
a package icon in the top left part of the window.
|
||||
|
||||
6.4 Click on the "Configuration" button/tab.
|
||||
|
||||
- Change the "Title" to "Taskwarrior 1.9.2"
|
||||
- Change the "Description" to "Taskwarrior 1.9.2 install for Snow Leopard"
|
||||
|
||||
<figure 2>
|
||||
|
||||
6.5 Click on "Edit Interface..."
|
||||
|
||||
There are 5 radio buttons on the left hand side - we will visit each and
|
||||
make changes. Click on "Background", make sure it matches the figure.
|
||||
|
||||
<figure 3>
|
||||
|
||||
Click on "Introduction", make sure it matches the figure.
|
||||
|
||||
<figure 4>
|
||||
|
||||
Click on "Read Me", and on the right hand side, under "Read Me Panel", click
|
||||
on "File" and select the file:
|
||||
|
||||
/Users/<your-account>/task-package.git/package-config/osx/README.txt
|
||||
|
||||
<figure 5>
|
||||
|
||||
Click on "License", and on the right hand side, under "License Panel", click
|
||||
on "File" and select the file:
|
||||
|
||||
/Users/<your-account>/task-package.git/package-config/osx/COPYING.txt
|
||||
|
||||
<figure 6>
|
||||
|
||||
Click on "Finish Up", and make sure it matches the figure.
|
||||
|
||||
<figure 7>
|
||||
|
||||
Close the Interface Editor window (it saves automatically).
|
||||
|
||||
6.6 Back in the "task.pmdoc" window, click on the "Requirements" tab/button,
|
||||
then click on the "+" button, and add a requirement rule as shown in the
|
||||
figure. The minimum system should be 10.5.0 or 10.6.0, depending on which
|
||||
package is being built.
|
||||
|
||||
<figure 8>
|
||||
|
||||
6.7 Click on the "Actions" tab/button and make sure it matches the figure.
|
||||
|
||||
<figure 9>
|
||||
|
||||
6.8 Click on the triangle next to the "local" item in the "Contents" vertical
|
||||
bar on the left to expand and show a folder called "local", with the path
|
||||
"/usr/local", but click on the "local" next to the blue radio button, not
|
||||
the one next to the folder. Then click on the "Configuration" tab/button.
|
||||
|
||||
- Change the "Choice Name" to "local"
|
||||
- Leave the "Identifier" alone - it is automatic
|
||||
- Make sure "Selected" and "Enabled" are checked, but "Hidden" is not
|
||||
|
||||
<figure 10>
|
||||
|
||||
6.9 Click on the "Requirements" tab/button and make sure it is all blank.
|
||||
|
||||
<figure 11>
|
||||
|
||||
6.10 Click on the blue folder on the left, which is labelled "local", and has
|
||||
a path of "/usr/local". Click on the "Configuration" tab/button.
|
||||
|
||||
- Change the "Install" to /Users/<your-account>/task-package.git/package-config/osx/local
|
||||
- Make sure the "Destination" is "/usr/local"
|
||||
- Make sure "Allow custom location" is checked
|
||||
- Make sure the "Package Identifier is "com.beckingham.task192.local.pkg"
|
||||
- Make sure the "Package Version" is 1.0. If you needed to make a
|
||||
subsequent OSX package, *for the same version of task*, then this number
|
||||
would be increased to show OSX that this package supersedes the earlier
|
||||
one
|
||||
- Make sure "Restart Action" is "None"
|
||||
- Make sure "Require admin authentication" is checked
|
||||
- Make sure "Package Location" is "Self-Contained"
|
||||
|
||||
<figure 12>
|
||||
|
||||
6.11 Click on the "Contents" tab/button.
|
||||
|
||||
- Click on all the triangles in the "local" folder to expand all directories
|
||||
- Make sure "Include root in package is not checked"
|
||||
- Click on the "Apply Recommendations" button
|
||||
|
||||
Make sure it matches the figure.
|
||||
|
||||
<figure 13>
|
||||
|
||||
6.12 Click on the "Components" tab/button, make sure it is all blank.
|
||||
|
||||
6.13 Click on the "Scripts" tab/button, make sure it is all blank.
|
||||
|
||||
7. Building the package
|
||||
|
||||
7.1 Click on the "Build" hammer icon to build the package.
|
||||
|
||||
Provide a filename of "task-1.9.1-sl.pkg" for Snow Leopard (10.6), or
|
||||
"task-1.9.2.pkg" for Leopard (10.5), and save it somewhere, for example the
|
||||
Desktop.
|
||||
|
||||
All should succeed. You can click on the "Return" button to end the build
|
||||
phase, and you can quit PackageManager, but make sure you save the changes
|
||||
you made, because you may need to go through the whole process again, if there
|
||||
is an emergency change, or the package is somehow corrupt.
|
||||
|
||||
<figure 14>
|
||||
|
||||
8. Test the package
|
||||
|
||||
8.1 Double-click on the package you just created, and install taskwarrior.
|
||||
You should see the README file in the UI, and the COPYING file on another
|
||||
page. It should succeed.
|
||||
|
||||
<figure 14>
|
||||
<figure 15>
|
||||
<figure 16>
|
||||
<figure 17>
|
||||
<figure 18>
|
||||
<figure 19>
|
||||
<figure 20>
|
||||
<figure 21>
|
||||
|
||||
8.2 Run the following commands to test the installation
|
||||
|
||||
$ /usr/local/bin/task version
|
||||
|
||||
task 1.9.2 built for darwin-ncurses
|
||||
Copyright (C) 2006 - 2010 P. Beckingham, F. Hernandez.
|
||||
|
||||
Taskwarrior may be copied only under the terms of the GNU General Public
|
||||
License, which may be found in the taskwarrior source kit.
|
||||
|
||||
Documentation for taskwarrior can be found using 'man task', 'man taskrc',
|
||||
'man task-tutorial', 'man task-color', 'man task-faq' or at
|
||||
http://taskwarrior.org
|
||||
|
||||
$ man task
|
||||
...
|
||||
...
|
||||
task 1.9.2 2010-05-22 task 1.9.2
|
||||
|
||||
The man page should list 1.9.2 as the version number, but the date will be
|
||||
different.
|
||||
|
||||
9. Email the package to Fredde.
|
||||
|
||||
---
|
||||
|
||||
@@ -1 +1 @@
|
||||
<pkg-contents spec="1.12"><f n="local" o="root" g="staff" p="16877" pt="/Users/paul/task-1.9.0.git/package-config/osx/local" m="false" t="file"><f n="bin" o="root" g="wheel" p="16877"><f n="task" o="root" g="wheel" p="33261"><mod>mode</mod><mod>owner</mod></f><mod>owner</mod></f><f n="share" o="root" g="wheel" p="16877"><f n="doc" o="root" g="wheel" p="16877"><f n="task" o="root" g="wheel" p="16877"><f n="AUTHORS" o="root" g="wheel" p="33188"><mod>mode</mod><mod>owner</mod></f><f n="ChangeLog" o="root" g="wheel" p="33188"><mod>mode</mod><mod>owner</mod></f><f n="COPYING" o="root" g="wheel" p="33188"><mod>mode</mod><mod>owner</mod></f><f n="NEWS" o="root" g="wheel" p="33188"><mod>mode</mod><mod>owner</mod></f><f n="README" o="root" g="wheel" p="33188"><mod>mode</mod><mod>owner</mod></f><f n="scripts" o="root" g="wheel" p="16877"><f n="bash" o="root" g="wheel" p="16877"><f n="task_completion.sh" o="root" g="wheel" p="33188"><mod>mode</mod><mod>group</mod><mod>owner</mod></f><mod>mode</mod><mod>owner</mod></f><f n="vim" o="root" g="wheel" p="16877"><f n="ftdetect" o="root" g="wheel" p="16877"><f n="task.vim" o="root" g="wheel" p="33188"><mod>mode</mod></f><mod>mode</mod></f><f n="README" o="root" g="wheel" p="33188"><mod>mode</mod></f><f n="syntax" o="root" g="wheel" p="16877"><f n="taskdata.vim" o="root" g="wheel" p="33188"><mod>mode</mod></f><f n="taskedit.vim" o="root" g="wheel" p="33188"><mod>mode</mod></f><f n="taskrc.vim" o="root" g="wheel" p="33188"><mod>mode</mod></f><mod>mode</mod></f><mod>mode</mod></f><f n="zsh" o="root" g="wheel" p="16877"><f n="_task" o="root" g="wheel" p="33188"><mod>mode</mod></f><mod>mode</mod></f><mod>mode</mod><mod>owner</mod></f><mod>mode</mod><mod>owner</mod></f><mod>mode</mod><mod>owner</mod></f><f n="man" o="root" g="wheel" p="16877"><f n="man1" o="root" g="wheel" p="16877"><f n="task.1" o="root" g="wheel" p="33188"><mod>mode</mod></f><mod>mode</mod></f><f n="man5" o="root" g="wheel" p="16877"><f n="task-color.5" o="root" g="wheel" p="33188"><mod>mode</mod></f><f n="task-faq.5" o="root" g="wheel" p="33188"><mod>mode</mod></f><f n="task-tutorial.5" o="root" g="wheel" p="33188"><mod>mode</mod></f><f n="taskrc.5" o="root" g="wheel" p="33188"><mod>mode</mod></f><mod>mode</mod></f><mod>mode</mod></f><mod>mode</mod><mod>owner</mod></f><mod>owner</mod></f></pkg-contents>
|
||||
<pkg-contents spec="1.12"><f n="local" o="root" g="wheel" p="16877" pt="/Users/paul/task-1.9.1.git/package-config/osx/local" m="false" t="file"><f n="bin" o="root" g="wheel" p="16877"><f n="task" o="root" g="wheel" p="33261"/></f><f n="share" o="root" g="wheel" p="16877"><f n="doc" o="root" g="wheel" p="16877"><f n="task" o="root" g="wheel" p="16877"><f n="AUTHORS" o="root" g="wheel" p="33188"/><f n="ChangeLog" o="root" g="wheel" p="33188"/><f n="COPYING" o="root" g="wheel" p="33188"/><f n="NEWS" o="root" g="wheel" p="33188"/><f n="README" o="root" g="wheel" p="33188"/><f n="scripts" o="root" g="wheel" p="16877"><f n="bash" o="root" g="wheel" p="16877"><f n="task_completion.sh" o="root" g="wheel" p="33188"/></f><f n="vim" o="root" g="wheel" p="16877"><f n="ftdetect" o="root" g="wheel" p="16877"><f n="task.vim" o="root" g="wheel" p="33188"/></f><f n="README" o="root" g="wheel" p="33188"/><f n="syntax" o="root" g="wheel" p="16877"><f n="taskdata.vim" o="root" g="wheel" p="33188"/><f n="taskedit.vim" o="root" g="wheel" p="33188"/><f n="taskrc.vim" o="root" g="wheel" p="33188"/></f></f><f n="zsh" o="root" g="wheel" p="16877"><f n="_task" o="root" g="wheel" p="33188"/></f></f></f></f><f n="man" o="root" g="wheel" p="17917"><f n="man1" o="root" g="wheel" p="17901"><f n="task.1" o="root" g="wheel" p="33188"/><mod>group</mod><mod>owner</mod></f><f n="man5" o="root" g="wheel" p="17901"><f n="task-color.5" o="root" g="wheel" p="33188"/><f n="task-faq.5" o="root" g="wheel" p="33188"/><f n="task-tutorial.5" o="root" g="wheel" p="33188"/><f n="taskrc.5" o="root" g="wheel" p="33188"/><mod>group</mod><mod>owner</mod></f><mod>group</mod><mod>owner</mod></f></f><mod>group</mod><mod>owner</mod></f></pkg-contents>
|
||||
@@ -1 +1 @@
|
||||
<pkgref spec="1.12" uuid="3BCF9CAB-ED33-4182-AC52-29B9F8FF9B87"><config><identifier>com.beckingham.task190Beta3.local.pkg</identifier><version>1.0</version><description/><post-install type="none"/><requireAuthorization/><installFrom>/Users/paul/task-1.9.0.git/package-config/osx/local</installFrom><installTo mod="true">/usr/local</installTo><flags><followSymbolicLinks/></flags><packageStore type="internal"/><mod>installTo</mod><mod>installTo.path</mod><mod>parent</mod></config><contents><file-list>01local-contents.xml</file-list><filter>/CVS$</filter><filter>/\.svn$</filter><filter>/\.cvsignore$</filter><filter>/\.cvspass$</filter><filter>/\.DS_Store$</filter></contents></pkgref>
|
||||
<pkgref spec="1.12" uuid="B93940C5-2C4F-47D6-8038-3D24062FBC85"><config><identifier>com.beckingham.task191.local.pkg</identifier><version>1.0</version><description/><post-install type="none"/><requireAuthorization/><installFrom>/Users/paul/task-1.9.1.git/package-config/osx/local</installFrom><installTo mod="true" relocatable="true">/usr/local</installTo><flags><followSymbolicLinks/></flags><packageStore type="internal"/><mod>installTo.path</mod><mod>identifier</mod><mod>parent</mod><mod>installTo</mod><mod>relocatable</mod></config><contents><file-list>01local-contents.xml</file-list><filter>/CVS$</filter><filter>/\.svn$</filter><filter>/\.cvsignore$</filter><filter>/\.cvspass$</filter><filter>/\.DS_Store$</filter></contents></pkgref>
|
||||
@@ -1 +1 @@
|
||||
<pkmkdoc spec="1.12"><properties><title>Task 1.9.0 beta3</title><build>/Users/paul/Desktop/task-1.9.0.beta3-sl.pkg</build><organization>com.beckingham</organization><userSees ui="easy"/><min-target os="3"/><domain anywhere="true" system="true"/></properties><distribution><versions min-spec="1.000000"/><scripts></scripts></distribution><description>Task 1.9.0 beta 3 install for Snow Leopard.</description><contents><choice title="local" id="choice36" starts_selected="true" starts_enabled="true" starts_hidden="false"><pkgref id="com.beckingham.task190Beta3.local.pkg"/></choice></contents><resources bg-scale="proportional" bg-align="center"><locale lang="en"><resource mod="true" type="license">/Users/paul/task-1.9.0.git/package-config/osx/COPYING.txt</resource><resource mod="true" type="welcome">/Users/paul/task-1.9.0.git/package-config/osx/README.txt</resource></locale></resources><requirements><requirement id="tosv" operator="ge" value="'10.6.0'"><message>Task requires Mac OSX 10.6.0 (Snow Leopard) or later.</message></requirement></requirements><flags/><item type="file">01local.xml</item><mod>properties.title</mod><mod>properties.customizeOption</mod><mod>description</mod><mod>properties.anywhereDomain</mod><mod>properties.systemDomain</mod></pkmkdoc>
|
||||
<pkmkdoc spec="1.12"><properties><title>Task 1.9.1</title><build>/Users/paul/Desktop/task-1.9.1-sl.pkg</build><organization>com.beckingham</organization><userSees ui="both"/><min-target os="3"/><domain anywhere="true" system="true"/></properties><distribution><versions min-spec="1.000000"/><scripts></scripts></distribution><description>Task 1.9.1 install for Snow Leopard.</description><contents><choice title="local" id="choice37" starts_selected="true" starts_enabled="true" starts_hidden="false"><pkgref id="com.beckingham.task191.local.pkg"/></choice></contents><resources bg-scale="proportional" bg-align="center"><locale lang="en"><resource mod="true" type="license">/Users/paul/task-1.9.1.git/package-config/osx/COPYING.txt</resource><resource mod="true" type="readme">/Users/paul/task-1.9.1.git/package-config/osx/README.txt</resource></locale></resources><requirements><requirement id="tosv" operator="ge" value="'10.6.0'"><message>Task requires Mac OSX 10.6.0 (Snow Leopard) or later.</message></requirement></requirements><flags/><item type="file">01local.xml</item><mod>properties.title</mod><mod>properties.customizeOption</mod><mod>description</mod><mod>properties.anywhereDomain</mod><mod>properties.systemDomain</mod></pkmkdoc>
|
||||
@@ -5,6 +5,8 @@ mkdir -p local/share/doc/task/scripts/bash
|
||||
mkdir -p local/share/doc/task/scripts/vim/ftdetect
|
||||
mkdir -p local/share/doc/task/scripts/vim/syntax
|
||||
mkdir -p local/share/doc/task/scripts/zsh
|
||||
mkdir -p local/share/doc/task/scripts/fish
|
||||
mkdir -p local/share/doc/task/rc
|
||||
mkdir -p local/share/man/man1
|
||||
mkdir -p local/share/man/man5
|
||||
|
||||
@@ -24,6 +26,10 @@ cp ../../scripts/vim/README local/share/doc/task/scripts/vim
|
||||
cp ../../scripts/vim/ftdetect/* local/share/doc/task/scripts/vim/ftdetect
|
||||
cp ../../scripts/vim/syntax/* local/share/doc/task/scripts/vim/syntax
|
||||
cp ../../scripts/zsh/* local/share/doc/task/scripts/zsh
|
||||
cp ../../scripts/fish/* local/share/doc/task/scripts/fish
|
||||
|
||||
cp ../../doc/rc/*.theme local/share/doc/task/rc
|
||||
cp ../../doc/rc/holidays* local/share/doc/task/rc
|
||||
|
||||
cp ../../doc/man/*.1 local/share/man/man1
|
||||
cp ../../doc/man/*.5 local/share/man/man5
|
||||
|
||||
@@ -1,3 +1,39 @@
|
||||
task (1.9.1-2ubuntu1) lucid; urgency=low
|
||||
|
||||
* Initial deb package for task release 1.9.1 on lucid lynx
|
||||
|
||||
-- Federico Hernandez <ultrafredde@gmail.com> Sun, 23 May 2010 00:24:42 +0200
|
||||
|
||||
task (1.9.0-2ubuntu1) lucid; urgency=low
|
||||
|
||||
* Initial deb package for task release 1.9.0 on lucid lynx
|
||||
|
||||
-- Federico Hernandez <ultrafredde@gmail.com> Sat, 15 May 2010 11:02:17 +0200
|
||||
|
||||
task (1.9.0-1ubuntu1) karmic; urgency=low
|
||||
|
||||
* Initial deb package for task beta release 1.9.0 on karmic koala
|
||||
|
||||
-- Federico Hernandez <ultrafredde@gmail.com> Mon, 22 Feb 2010 22:08:41 +0100
|
||||
|
||||
task (1.9.0-1ubuntu1~beta3) karmic; urgency=low
|
||||
|
||||
* Initial deb package for task beta release 1.9.0.beta3 on karmic koala
|
||||
|
||||
-- Federico Hernandez <ultrafredde@gmail.com> Tue, 16 Feb 2010 00:29:31 +0100
|
||||
|
||||
task (1.9.0-1ubuntu1~beta2) karmic; urgency=low
|
||||
|
||||
* Initial deb package for task beta release 1.9.0.beta2 on karmic koala
|
||||
|
||||
-- Federico Hernandez <ultrafredde@gmail.com> Mon, 08 Feb 2010 22:09:41 +0100
|
||||
|
||||
task (1.9.0-1ubuntu1~beta1) karmic; urgency=low
|
||||
|
||||
* Initial deb package for task beta release 1.9.0.beta1 on karmic koala
|
||||
|
||||
-- Federico Hernandez <ultrafredde@gmail.com> Wed, 03 Feb 2010 23:51:08 +0100
|
||||
|
||||
task (1.8.5-1ubuntu2) karmic; urgency=low
|
||||
|
||||
* Fixed wrong ChangeLog file
|
||||
|
||||
@@ -3,13 +3,13 @@ Section: utils
|
||||
Priority: optional
|
||||
Maintainer: Federico Hernandez <ultrafredde@gmail.com>
|
||||
XSBC-Original-Maintainer: Federico Hernandez <ultrafredde@gmail.com>
|
||||
Build-Depends: debhelper (>= 7), autotools-dev, libncurses5-dev
|
||||
Standards-Version: 3.8.3
|
||||
Build-Depends: cdbs, debhelper (>= 7), autotools-dev, libncurses5-dev
|
||||
Standards-Version: 3.8.4
|
||||
Homepage: http://taskwarrior.org
|
||||
|
||||
Package: task
|
||||
Architecture: any
|
||||
Depends: ${shlibs:Depends}
|
||||
Depends: ${shlibs:Depends}, ${misc:Depends}
|
||||
Description: A command-line to do list manager
|
||||
Task is a command-line to do list manager. It has
|
||||
support for GTD functionality and includes the
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
This package was debianized by:
|
||||
|
||||
Federico Hernandez <ultrafredde@gmail.com> on Sat, 05 Dec 2009 23:58:36 +0100
|
||||
Federico Hernandez <ultrafredde@gmail.com> on Sun, 23 May 2010 00:24:42 +0200
|
||||
|
||||
It was downloaded from:
|
||||
|
||||
@@ -26,13 +26,18 @@ Upstream Authors:
|
||||
Steven de Brouwer
|
||||
Pietro Cerutti
|
||||
Cory Donnelly
|
||||
Alexander Neumann
|
||||
Emil Sköldberg
|
||||
Johannes Schlatow
|
||||
|
||||
Copyright:
|
||||
|
||||
Copyright 2006 - 2010, Paul Beckingham
|
||||
Copyright 2009 - 2010 Federico Hernandez
|
||||
Copyright 2006 - 2010, Paul Beckingham, Federico Hernandez
|
||||
Copyright 2009 - 2010 John Florian
|
||||
Copyright 2009 P.C. Shyamshankar
|
||||
Copyright © 1994–2008 Lua.org, PUC-Rio
|
||||
|
||||
License:
|
||||
|
||||
|
||||
@@ -1,2 +0,0 @@
|
||||
scripts
|
||||
i18n
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
config.status: configure
|
||||
dh_testdir
|
||||
./configure $(CROSS) --prefix=/usr --docdir=$(DATADIR)/doc/task
|
||||
./configure $(CROSS) --prefix=/usr
|
||||
|
||||
build: build-stamp
|
||||
|
||||
@@ -31,9 +31,7 @@ binary-arch: install
|
||||
dh_installchangelogs
|
||||
dh_installdocs
|
||||
dh_installman
|
||||
dh_installexamples
|
||||
install -D -m644 scripts/bash/task_completion.sh $(CURDIR)/debian/task/etc/bash_completion.d/task
|
||||
rm -rf $(CURDIR)/debian/task/usr/share/doc/task-1.8.5
|
||||
dh_strip
|
||||
dh_compress
|
||||
dh_fixperms
|
||||
|
||||
1
package-config/ubuntu/debian/source/format
Normal file
1
package-config/ubuntu/debian/source/format
Normal file
@@ -0,0 +1 @@
|
||||
1.0
|
||||
@@ -1,3 +1,5 @@
|
||||
# Compulsory line, this is a version 3 file
|
||||
version=3
|
||||
|
||||
http://taskwarrior.org/download/task-(.*)\.tar\.gz
|
||||
|
||||
# the main taskwarrior download website
|
||||
http://taskwarrior.org/wiki/taskwarrior/Download http://www.taskwarrior.org/download/task-(.*)\.tar\.gz
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
# bash completion support for task
|
||||
# bash completion support for taskwarrior
|
||||
#
|
||||
# Copyright 2009-2010 Federico Hernandez
|
||||
# All rights reserved.
|
||||
#
|
||||
# This script is part of the task project.
|
||||
# This script is part of the taskwarrior project.
|
||||
#
|
||||
# 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
|
||||
@@ -117,6 +117,32 @@ _task()
|
||||
COMPREPLY=( $(compgen -W "${config}" -- ${cur}) )
|
||||
return 0
|
||||
;;
|
||||
*)
|
||||
case "${prev}" in
|
||||
merge)
|
||||
local servers=$(_task_get_config | grep merge | grep uri | sed 's/^merge\.\(.*\)\.uri/\1/')
|
||||
COMPREPLY=( $(compgen -W "${servers}" -- ${cur}) )
|
||||
_known_hosts_real -a "$cur"
|
||||
return 0
|
||||
;;
|
||||
push)
|
||||
local servers=$(_task_get_config | grep push | grep uri | sed 's/^push\.\(.*\)\.uri/\1/')
|
||||
COMPREPLY=( $(compgen -W "${servers}" -- ${cur}) )
|
||||
_known_hosts_real -a "$cur"
|
||||
return 0
|
||||
;;
|
||||
pull)
|
||||
local servers=$(_task_get_config | grep pull | grep uri | sed 's/^pull\.\(.*\)\.uri/\1/')
|
||||
COMPREPLY=( $(compgen -W "${servers}" -- ${cur}) )
|
||||
_known_hosts_real -a "$cur"
|
||||
return 0
|
||||
;;
|
||||
import)
|
||||
COMPREPLY=( $(compgen -o "default" -- ${cur}) )
|
||||
return 0
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
esac
|
||||
|
||||
138
scripts/fish/task.fish
Normal file
138
scripts/fish/task.fish
Normal file
@@ -0,0 +1,138 @@
|
||||
# Taskwarrior <http://taskwarrior.org> tab completions for the Fish shell
|
||||
# <http://fishshell.org>.
|
||||
#
|
||||
# Copy this script to ~/.config/fish/completions/task.fish, open a new shell,
|
||||
# and enjoy.
|
||||
#
|
||||
# Objects completed:
|
||||
# * Commands
|
||||
# * Projects
|
||||
# * Priorities
|
||||
# * Tags
|
||||
# * Attribute names and modifiers
|
||||
#
|
||||
# License:
|
||||
# Copyright 2009 Mick Koch <kchmck@gmail.com>
|
||||
#
|
||||
# This script is free software. It comes without any warranty, to the extent
|
||||
# permitted by applicable law. You can redistribute it and/or modify it under
|
||||
# the terms of the Do What The Fuck You Want To Public License, Version 2, as
|
||||
# published by Sam Hocevar. See http://sam.zoy.org/wtfpl/COPYING for more
|
||||
# details.
|
||||
|
||||
function __fish.task.bare
|
||||
test (count (commandline -c -o)) -eq 1
|
||||
end
|
||||
|
||||
function __fish.task.complete
|
||||
complete -c task -u $argv
|
||||
end
|
||||
|
||||
function __fish.task.head
|
||||
task _ids
|
||||
task _commands
|
||||
end
|
||||
|
||||
function __fish.task.attrs
|
||||
echo project
|
||||
echo priority
|
||||
echo due
|
||||
echo recur
|
||||
echo until
|
||||
echo limit
|
||||
echo wait
|
||||
echo rc
|
||||
end
|
||||
|
||||
function __fish.task.mods
|
||||
echo before
|
||||
echo after
|
||||
echo over
|
||||
echo under
|
||||
echo none
|
||||
echo is
|
||||
echo isnt
|
||||
echo has
|
||||
echo hasnt
|
||||
echo startswith
|
||||
echo endswith
|
||||
echo word
|
||||
echo noword
|
||||
end
|
||||
|
||||
function __fish.task.combos
|
||||
echo $argv[1]:$argv[2]
|
||||
|
||||
for mod in (__fish.task.mods)
|
||||
echo $argv[1].$mod:$argv[2]
|
||||
end
|
||||
end
|
||||
|
||||
function __fish.task.combos.simple
|
||||
__fish.task.combos $argv ""
|
||||
end
|
||||
|
||||
function __fish.task.projects
|
||||
__fish.task.combos.simple project
|
||||
|
||||
for project in (task _projects)
|
||||
__fish.task.combos project $project
|
||||
end
|
||||
end
|
||||
|
||||
function __fish.task.priorities
|
||||
__fish.task.combos.simple priority
|
||||
|
||||
for priority in H M L
|
||||
__fish.task.combos priority $priority
|
||||
end
|
||||
end
|
||||
|
||||
function __fish.task.rc
|
||||
echo rc:
|
||||
|
||||
for value in (task _config)
|
||||
echo rc.$value:
|
||||
end
|
||||
end
|
||||
|
||||
function __fish.task.tags
|
||||
for tag in (task _tags)
|
||||
echo +$tag
|
||||
echo -$tag
|
||||
end
|
||||
end
|
||||
|
||||
function __fish.task.match
|
||||
__fish.task.attrs | grep \^(echo $argv | sed -E "s/(\w+).+/\1/")
|
||||
end
|
||||
|
||||
function __fish.task.attr
|
||||
for attr in (__fish.task.match $argv)
|
||||
switch $attr
|
||||
case project
|
||||
__fish.task.projects
|
||||
case priority
|
||||
__fish.task.priorities
|
||||
case rc
|
||||
__fish.task.rc
|
||||
case "*"
|
||||
__fish.task.combos.simple $attr
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function __fish.task.body
|
||||
set token (commandline -ct)
|
||||
|
||||
if test -n $token
|
||||
__fish.task.attr $token
|
||||
else
|
||||
__fish.task.attrs
|
||||
end
|
||||
|
||||
__fish.task.tags
|
||||
end
|
||||
|
||||
__fish.task.complete -f -n __fish.task.bare -a "(__fish.task.head)"
|
||||
__fish.task.complete -f -n "not __fish.task.bare" -a "(__fish.task.body)"
|
||||
@@ -1,5 +1,5 @@
|
||||
|
||||
Configure VIM for Syntax Highlighting of Task Data
|
||||
Configure VIM for Syntax Highlighting of Taskwarrior Data
|
||||
|
||||
|
||||
The task data files (pending.data, completed.data and undo.data),
|
||||
@@ -24,12 +24,12 @@ You may prefer instead to read the help online at:
|
||||
http://vimdoc.sourceforge.net/htmldoc/syntax.html#syntax
|
||||
|
||||
|
||||
Configuring VIM to Understand Task Data
|
||||
Configuring VIM to Understand Taskwarrior Data
|
||||
|
||||
Once you have VIM's syntax highlighting enabled and working with other file
|
||||
types properly, configuring it for use with task is simple. You simply need
|
||||
to copy some files that came with task into your home directory so that you
|
||||
have:
|
||||
types properly, configuring it for use with taskwarrior is simple. You simply
|
||||
need to copy some files that came with taskwarrior into your home directory so
|
||||
that you have:
|
||||
|
||||
~/.vim/ftdetect/task.vim
|
||||
~/.vim/syntax/taskdata.vim
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
" Vim support file to detect Task Warrior data and configuration files and
|
||||
" Vim support file to detect Taskwarrior data and configuration files and
|
||||
" single task edits
|
||||
"
|
||||
" Maintainer: John Florian <jflorian@doubledog.org>
|
||||
@@ -10,13 +10,13 @@
|
||||
" For the full text of this license, see COPYING.
|
||||
|
||||
|
||||
" Task Warrior data files
|
||||
" Taskwarrior data files
|
||||
au BufRead,BufNewFile {pending,completed,undo}.data set filetype=taskdata
|
||||
|
||||
" Task Warrior configuration file
|
||||
" Taskwarrior configuration file
|
||||
au BufRead,BufNewFile .taskrc set filetype=taskrc
|
||||
|
||||
" Task Warrior handling of 'task 42 edit'
|
||||
" Taskwarrior handling of 'task 42 edit'
|
||||
au BufRead,BufNewFile *.task set filetype=taskedit
|
||||
|
||||
" vim:noexpandtab
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
" Vim syntax file
|
||||
" Language: task data
|
||||
" Language: taskwarrior data
|
||||
" Maintainer: John Florian <jflorian@doubledog.org>
|
||||
" Updated: Wed Jul 8 19:46:20 EDT 2009
|
||||
"
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
" Vim syntax file
|
||||
" Language: support for editing task configuration file
|
||||
" Language: support for editing taskwarrior configuration file
|
||||
" Maintainer: John Florian <jflorian@doubledog.org>
|
||||
" Updated: Sat Feb 20 14:14:44 EST 2010
|
||||
"
|
||||
|
||||
@@ -1,17 +1,17 @@
|
||||
#compdef task
|
||||
#
|
||||
# This script is currently unmaintained and was released for an earlier version
|
||||
# of task. We welcome any zsh user that wants to contribute to task 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 task.
|
||||
# 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 task
|
||||
# zsh completion for taskwarrior
|
||||
#
|
||||
# Copyright 2009 P.C. Shyamshankar
|
||||
# All rights reserved.
|
||||
#
|
||||
# This script is part of the task project.
|
||||
# This script is part of the taskwarrior project.
|
||||
#
|
||||
# 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
|
||||
|
||||
1
src/.gitignore
vendored
1
src/.gitignore
vendored
@@ -1,2 +1,3 @@
|
||||
*.o
|
||||
Makefile.in
|
||||
*_test
|
||||
|
||||
203
src/API.cpp
203
src/API.cpp
@@ -1,5 +1,5 @@
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// Task Lua API
|
||||
// Taskwarrior Lua API
|
||||
//
|
||||
// Copyright 2006 - 2010, Paul Beckingham.
|
||||
// All rights reserved.
|
||||
@@ -47,8 +47,8 @@
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include <iostream> // TODO Remove
|
||||
#include <algorithm>
|
||||
#include <iostream>
|
||||
#include "Context.h"
|
||||
#include "API.h"
|
||||
|
||||
@@ -58,7 +58,8 @@ Task* the_task = NULL;
|
||||
#ifdef HAVE_LIBLUA
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// Returns a string representing the task version number, such as '1.9.0'.
|
||||
// Returns a string representing the taskwarrior version number, such as
|
||||
// '1.9.0'.
|
||||
static int api_task_version (lua_State* L)
|
||||
{
|
||||
lua_pushstring (L, PACKAGE_VERSION);
|
||||
@@ -188,35 +189,43 @@ static int api_task_get_footnote_messages ()
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
static int api_task_get_debug_messages ()
|
||||
{
|
||||
return {}
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
-- Records additional messages, for subsequent display.
|
||||
static int api_task_header_message (text)
|
||||
{
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
static int api_task_footnote_message (text)
|
||||
{
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
static int api_task_debug_message (text)
|
||||
static int api_task_get_debug_messages (lua_State* L)
|
||||
{
|
||||
}
|
||||
*/
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
static int api_task_header_message (lua_State* L)
|
||||
{
|
||||
std::string message = luaL_checkstring (L, 1);
|
||||
context.header (message);
|
||||
return 0;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
static int api_task_footnote_message (lua_State* L)
|
||||
{
|
||||
std::string message = luaL_checkstring (L, 1);
|
||||
context.footnote (message);
|
||||
return 0;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
static int api_task_debug_message (lua_State* L)
|
||||
{
|
||||
std::string message = luaL_checkstring (L, 1);
|
||||
context.debug (message);
|
||||
return 0;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// Causes the shell or interactive mode task to exit. Ordinarily this does not
|
||||
// occur.
|
||||
static int api_task_exit (lua_State* L)
|
||||
{
|
||||
// TODO Is this the correct exception? How does the shell handle this?
|
||||
throw std::string ("Exiting.");
|
||||
std::cout << "Exiting." << std::endl;
|
||||
exit (0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -321,49 +330,117 @@ static int api_task_get_status (lua_State* L)
|
||||
return 1;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
static int api_task_get_due (lua_State* L)
|
||||
{
|
||||
if (the_task != NULL)
|
||||
{
|
||||
unsigned int value = (unsigned int) the_task->get_ulong ("due");
|
||||
if (value)
|
||||
{
|
||||
lua_pushinteger (L, value);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
lua_pushnil (L);
|
||||
return 1;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
static int api_task_get_entry (lua_State* L)
|
||||
{
|
||||
if (the_task != NULL)
|
||||
{
|
||||
unsigned int value = (unsigned int) the_task->get_ulong ("entry");
|
||||
if (value)
|
||||
{
|
||||
lua_pushinteger (L, value);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
lua_pushnil (L);
|
||||
return 1;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
static int api_task_get_start (lua_State* L)
|
||||
{
|
||||
if (the_task != NULL)
|
||||
{
|
||||
unsigned int value = (unsigned int) the_task->get_ulong ("start");
|
||||
if (value)
|
||||
{
|
||||
lua_pushinteger (L, value);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
lua_pushnil (L);
|
||||
return 1;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
static int api_task_get_end (lua_State* L)
|
||||
{
|
||||
if (the_task != NULL)
|
||||
{
|
||||
unsigned int value = (unsigned int) the_task->get_ulong ("end");
|
||||
if (value)
|
||||
{
|
||||
lua_pushinteger (L, value);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
lua_pushnil (L);
|
||||
return 1;
|
||||
}
|
||||
|
||||
/*
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
static int api_task_get_due (id)
|
||||
{
|
||||
return task.due_date
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
static int api_task_get_entry (id)
|
||||
{
|
||||
return task.entry_date
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
static int api_task_get_start (id)
|
||||
{
|
||||
return task.start_date
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
static int api_task_get_end (id)
|
||||
{
|
||||
return task.end_date
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
static int api_task_get_recur (id)
|
||||
{
|
||||
return task.recur
|
||||
}
|
||||
*/
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
static int api_task_get_until (id)
|
||||
static int api_task_get_until (lua_State* L)
|
||||
{
|
||||
return task.until_date
|
||||
if (the_task != NULL)
|
||||
{
|
||||
unsigned int value = (unsigned int) the_task->get_ulong ("until");
|
||||
if (value)
|
||||
{
|
||||
lua_pushinteger (L, value);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
lua_pushnil (L);
|
||||
return 1;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
static int api_task_get_wait (id)
|
||||
static int api_task_get_wait (lua_State* L)
|
||||
{
|
||||
return task.wait_date
|
||||
if (the_task != NULL)
|
||||
{
|
||||
unsigned int value = (unsigned int) the_task->get_ulong ("wait");
|
||||
if (value)
|
||||
{
|
||||
lua_pushinteger (L, value);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
lua_pushnil (L);
|
||||
return 1;
|
||||
}
|
||||
|
||||
/*
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
-- 'id' is the task id passed to the hook function. Date attributes are
|
||||
-- expected as numeric epoch offsets. Tags and annotations are expected
|
||||
@@ -474,10 +551,10 @@ void API::initialize ()
|
||||
lua_pushcfunction (L, api_task_get_header_messages); lua_setglobal (L, "task_get_header_messages");
|
||||
lua_pushcfunction (L, api_task_get_footnote_messages); lua_setglobal (L, "task_get_footnote_messages");
|
||||
lua_pushcfunction (L, api_task_get_debug_messages); lua_setglobal (L, "task_get_debug_messages");
|
||||
*/
|
||||
lua_pushcfunction (L, api_task_header_message); lua_setglobal (L, "task_header_message");
|
||||
lua_pushcfunction (L, api_task_footnote_message); lua_setglobal (L, "task_footnote_message");
|
||||
lua_pushcfunction (L, api_task_debug_message); lua_setglobal (L, "task_debug_message");
|
||||
*/
|
||||
lua_pushcfunction (L, api_task_exit); lua_setglobal (L, "task_exit");
|
||||
/*
|
||||
lua_pushcfunction (L, api_task_inhibit_further_hooks); lua_setglobal (L, "task_inhibit_further_hooks");
|
||||
@@ -496,14 +573,16 @@ void API::initialize ()
|
||||
lua_pushcfunction (L, api_task_get_tags); lua_setglobal (L, "task_get_tags");
|
||||
*/
|
||||
lua_pushcfunction (L, api_task_get_status); lua_setglobal (L, "task_get_status");
|
||||
/*
|
||||
lua_pushcfunction (L, api_task_get_due); lua_setglobal (L, "task_get_due");
|
||||
lua_pushcfunction (L, api_task_get_entry); lua_setglobal (L, "task_get_entry");
|
||||
lua_pushcfunction (L, api_task_get_start); lua_setglobal (L, "task_get_start");
|
||||
lua_pushcfunction (L, api_task_get_end); lua_setglobal (L, "task_get_end");
|
||||
/*
|
||||
lua_pushcfunction (L, api_task_get_recur); lua_setglobal (L, "task_get_recur");
|
||||
*/
|
||||
lua_pushcfunction (L, api_task_get_until); lua_setglobal (L, "task_get_until");
|
||||
lua_pushcfunction (L, api_task_get_wait); lua_setglobal (L, "task_get_wait");
|
||||
/*
|
||||
lua_pushcfunction (L, api_task_set_description); lua_setglobal (L, "task_set_description");
|
||||
lua_pushcfunction (L, api_task_set_annotations); lua_setglobal (L, "task_set_annotations");
|
||||
lua_pushcfunction (L, api_task_set_project); lua_setglobal (L, "task_set_project");
|
||||
@@ -535,14 +614,14 @@ bool API::callProgramHook (
|
||||
|
||||
// Make call.
|
||||
if (lua_pcall (L, 0, 2, 0) != 0)
|
||||
throw std::string ("Error calling '") + function + "' - " + lua_tostring (L, -1);
|
||||
throw std::string ("Error calling '") + function + "' - " + lua_tostring (L, -1) + ".";
|
||||
|
||||
// Call successful - get return values.
|
||||
if (!lua_isnumber (L, -2))
|
||||
throw std::string ("Error: '") + function + "' did not return a success indicator";
|
||||
throw std::string ("Error: '") + function + "' did not return a success indicator.";
|
||||
|
||||
if (!lua_isstring (L, -1) && !lua_isnil (L, -1))
|
||||
throw std::string ("Error: '") + function + "' did not return a message or nil";
|
||||
throw std::string ("Error: '") + function + "' did not return a message or nil.";
|
||||
|
||||
int rc = lua_tointeger (L, -2);
|
||||
const char* message = lua_tostring (L, -1);
|
||||
@@ -607,17 +686,17 @@ bool API::callTaskHook (
|
||||
|
||||
// Make call.
|
||||
if (lua_pcall (L, 1, 2, 0) != 0)
|
||||
throw std::string ("Error calling '") + function + "' - " + lua_tostring (L, -1);
|
||||
throw std::string ("Error calling '") + function + "' - " + lua_tostring (L, -1) + ".";
|
||||
|
||||
// Hide the task.
|
||||
the_task = NULL;
|
||||
|
||||
// Call successful - get return values.
|
||||
if (!lua_isnumber (L, -2))
|
||||
throw std::string ("Error: '") + function + "' did not return a success indicator";
|
||||
throw std::string ("Error: '") + function + "' did not return a success indicator.";
|
||||
|
||||
if (!lua_isstring (L, -1) && !lua_isnil (L, -1))
|
||||
throw std::string ("Error: '") + function + "' did not return a message or nil";
|
||||
throw std::string ("Error: '") + function + "' did not return a message or nil.";
|
||||
|
||||
int rc = lua_tointeger (L, -2);
|
||||
const char* message = lua_tostring (L, -1);
|
||||
@@ -660,17 +739,17 @@ bool API::callFieldHook (
|
||||
|
||||
// Make call.
|
||||
if (lua_pcall (L, 2, 3, 0) != 0)
|
||||
throw std::string ("Error calling '") + function + "' - " + lua_tostring (L, -1);
|
||||
throw std::string ("Error calling '") + function + "' - " + lua_tostring (L, -1) + ".";
|
||||
|
||||
// Call successful - get return values.
|
||||
if (!lua_isstring (L, -3))
|
||||
throw std::string ("Error: '") + function + "' did not return a modified value";
|
||||
throw std::string ("Error: '") + function + "' did not return a modified value.";
|
||||
|
||||
if (!lua_isnumber (L, -2))
|
||||
throw std::string ("Error: '") + function + "' did not return a success indicator";
|
||||
throw std::string ("Error: '") + function + "' did not return a success indicator.";
|
||||
|
||||
if (!lua_isstring (L, -1) && !lua_isnil (L, -1))
|
||||
throw std::string ("Error: '") + function + "' did not return a message or nil";
|
||||
throw std::string ("Error: '") + function + "' did not return a message or nil.";
|
||||
|
||||
const char* new_value = lua_tostring (L, -3);
|
||||
int rc = lua_tointeger (L, -2);
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// task - a command line task list manager.
|
||||
// taskwarrior - a command line task list manager.
|
||||
//
|
||||
// Copyright 2006 - 2010, Paul Beckingham.
|
||||
// All rights reserved.
|
||||
|
||||
171
src/Att.cpp
171
src/Att.cpp
@@ -1,5 +1,5 @@
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// task - a command line task list manager.
|
||||
// taskwarrior - a command line task list manager.
|
||||
//
|
||||
// Copyright 2006 - 2010, Paul Beckingham.
|
||||
// All rights reserved.
|
||||
@@ -25,6 +25,7 @@
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include <algorithm>
|
||||
#include <sstream>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
@@ -50,6 +51,8 @@ static const char* internalNames[] =
|
||||
"limit",
|
||||
"status",
|
||||
"description",
|
||||
"tags",
|
||||
// Note that annotations are not listed.
|
||||
};
|
||||
|
||||
static const char* modifiableNames[] =
|
||||
@@ -62,6 +65,7 @@ static const char* modifiableNames[] =
|
||||
"recur",
|
||||
"until",
|
||||
"wait",
|
||||
"depends",
|
||||
};
|
||||
|
||||
// Synonyms on the same line.
|
||||
@@ -154,6 +158,14 @@ Att& Att::operator= (const Att& other)
|
||||
return *this;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
bool Att::operator== (const Att& other) const
|
||||
{
|
||||
return mName == other.mName &&
|
||||
mMod == other.mMod &&
|
||||
mValue == other.mValue;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
Att::~Att ()
|
||||
{
|
||||
@@ -243,10 +255,11 @@ bool Att::validNameValue (
|
||||
{
|
||||
std::string error = "Ambiguous attribute '" + name + "' - could be either of "; // TODO i18n
|
||||
|
||||
std::sort (matches.begin (), matches.end ());
|
||||
std::string combined;
|
||||
join (combined, ", ", matches);
|
||||
|
||||
throw error + combined;
|
||||
throw error + combined + ".";
|
||||
}
|
||||
|
||||
name = matches[0];
|
||||
@@ -262,17 +275,18 @@ bool Att::validNameValue (
|
||||
autoComplete (mod, candidates, matches);
|
||||
|
||||
if (matches.size () == 0)
|
||||
throw std::string ("Unrecognized modifier '") + mod + "'";
|
||||
throw std::string ("Unrecognized modifier '") + mod + "'.";
|
||||
|
||||
else if (matches.size () != 1)
|
||||
{
|
||||
std::string error = "Ambiguous modifier '" + mod + "' - could be either of "; // TODO i18n
|
||||
|
||||
std::sort (matches.begin (), matches.end ());
|
||||
std::string combined;
|
||||
join (combined, ", ", matches);
|
||||
error += combined;
|
||||
|
||||
throw error + combined;
|
||||
throw error + combined + ".";
|
||||
}
|
||||
|
||||
mod = matches[0];
|
||||
@@ -325,13 +339,45 @@ bool Att::validNameValue (
|
||||
// modify 'value' here accordingly.
|
||||
}
|
||||
|
||||
// Dates can now be either a date, or a duration that is added as an offset
|
||||
// to the current date.
|
||||
else if (name == "due" ||
|
||||
name == "until" ||
|
||||
name == "wait")
|
||||
{
|
||||
// Validate and convert to epoch.
|
||||
if (value != "")
|
||||
value = Date (value, context.config.get ("dateformat")).toEpochString ();
|
||||
{
|
||||
// Try parsing as a duration. If unsuccessful, try again, as a date.
|
||||
try
|
||||
{
|
||||
Date now;
|
||||
Duration dur (value);
|
||||
|
||||
if (dur.negative ())
|
||||
value = (now - (time_t)dur).toEpochString ();
|
||||
else
|
||||
value = (now + (time_t)dur).toEpochString ();
|
||||
}
|
||||
|
||||
// If the date parsing failed, try parsing as a duration. If successful,
|
||||
// add the duration to the current date. If unsuccessful, propagate the
|
||||
// original date parse error.
|
||||
|
||||
// Try parsing as a date. If unsuccessfull, throw.
|
||||
catch (...)
|
||||
{
|
||||
try
|
||||
{
|
||||
value = Date (value, context.config.get ("dateformat")).toEpochString ();
|
||||
}
|
||||
|
||||
catch (std::string& e)
|
||||
{
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
else if (name == "recur")
|
||||
@@ -344,8 +390,8 @@ bool Att::validNameValue (
|
||||
|
||||
else if (name == "limit")
|
||||
{
|
||||
if (value == "" || !digitsOnly (value))
|
||||
throw std::string ("The '") + name + "' attribute must be an integer.";
|
||||
if (value == "" || (value != "page" && !digitsOnly (value)))
|
||||
throw std::string ("The '") + name + "' attribute must be an integer, or the value 'page'.";
|
||||
}
|
||||
|
||||
else if (name == "status")
|
||||
@@ -369,7 +415,7 @@ bool Att::validNameValue (
|
||||
"\" is not a valid status. Use 'pending', 'completed', 'deleted', 'recurring' or 'waiting'.";
|
||||
}
|
||||
|
||||
else if (! validInternalName (name) &&
|
||||
else if (! validInternalName (name) &&
|
||||
! validModifiableName (name))
|
||||
throw std::string ("'") + name + "' is not a recognized attribute.";
|
||||
|
||||
@@ -392,11 +438,11 @@ bool Att::validMod (const std::string& mod)
|
||||
std::string Att::type (const std::string& name) const
|
||||
{
|
||||
if (name == "due" ||
|
||||
name == "wait" ||
|
||||
name == "until" ||
|
||||
name == "start" ||
|
||||
name == "entry" ||
|
||||
name == "end" ||
|
||||
name == "wait")
|
||||
name == "end")
|
||||
return "date";
|
||||
|
||||
else if (name == "recur")
|
||||
@@ -405,6 +451,9 @@ std::string Att::type (const std::string& name) const
|
||||
else if (name == "limit")
|
||||
return "number";
|
||||
|
||||
else if (name == "priority")
|
||||
return "priority";
|
||||
|
||||
else
|
||||
return "text";
|
||||
}
|
||||
@@ -454,10 +503,10 @@ void Att::parse (Nibbler& n)
|
||||
if (validMod (mod))
|
||||
mMod = mod;
|
||||
else
|
||||
throw std::string ("The name '") + mod + "' is not a valid modifier"; // TODO i18n
|
||||
throw std::string ("The name '") + mod + "' is not a valid modifier."; // TODO i18n
|
||||
}
|
||||
else
|
||||
throw std::string ("Missing . or : after modifier"); // TODO i18n
|
||||
throw std::string ("Missing . or : after modifier."); // TODO i18n
|
||||
}
|
||||
|
||||
if (n.skip (':'))
|
||||
@@ -471,10 +520,10 @@ void Att::parse (Nibbler& n)
|
||||
}
|
||||
}
|
||||
else
|
||||
throw std::string ("Missing : after attribute name"); // TODO i18n
|
||||
throw std::string ("Missing : after attribute name."); // TODO i18n
|
||||
}
|
||||
else
|
||||
throw std::string ("Missing : after attribute name"); // TODO i18n
|
||||
throw std::string ("Missing : after attribute name."); // TODO i18n
|
||||
|
||||
/* TODO This might be too slow to include. Test this assumption.
|
||||
validNameValue (mName, mMod, mValue);
|
||||
@@ -492,8 +541,25 @@ bool Att::match (const Att& other) const
|
||||
// If there are no mods, just perform a straight compare on value.
|
||||
if (mMod == "")
|
||||
{
|
||||
if (!compare (mValue, other.mValue, (bool) case_sensitive))
|
||||
return false;
|
||||
// Exact matches on dates should only compare m/d/y, not h:m:s. This allows
|
||||
// comparisons like "task list due:today" (bug #405).
|
||||
std::string which = type (mName);
|
||||
if (which == "date")
|
||||
{
|
||||
if (other.mValue == "")
|
||||
return false;
|
||||
|
||||
Date left (mValue);
|
||||
Date right (other.mValue);
|
||||
|
||||
if (! left.sameDay (right))
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!compare (mValue, other.mValue, (bool) case_sensitive))
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// has = contains as a substring.
|
||||
@@ -537,7 +603,7 @@ bool Att::match (const Att& other) const
|
||||
if (other.mValue.length () < mValue.length ())
|
||||
return false;
|
||||
|
||||
if (!compare (mValue, other.mValue.substr (0, mValue.length ())))
|
||||
if (!compare (mValue, other.mValue.substr (0, mValue.length ()), (bool) case_sensitive))
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -588,6 +654,14 @@ bool Att::match (const Att& other) const
|
||||
if (mValue <= other.mValue)
|
||||
return false;
|
||||
}
|
||||
else if (which == "priority")
|
||||
{
|
||||
if (mValue == "" ||
|
||||
other.mValue == "H" ||
|
||||
mValue == other.mValue ||
|
||||
(mValue == "L" && other.mValue == "M"))
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// after = over = above = >
|
||||
@@ -618,6 +692,14 @@ bool Att::match (const Att& other) const
|
||||
if (mValue >= other.mValue)
|
||||
return false;
|
||||
}
|
||||
else if (which == "priority")
|
||||
{
|
||||
if (mValue == "H" ||
|
||||
other.mValue == "" ||
|
||||
mValue == other.mValue ||
|
||||
(mValue == "M" && other.mValue == "L"))
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// word = contains as a substring, with word boundaries.
|
||||
@@ -674,7 +756,7 @@ std::string Att::composeF4 () const
|
||||
void Att::mod (const std::string& input)
|
||||
{
|
||||
if (input != "" && !validMod (input))
|
||||
throw std::string ("The name '") + input + "' is not a valid modifier"; // TODO i18n
|
||||
throw std::string ("The name '") + input + "' is not a valid modifier."; // TODO i18n
|
||||
|
||||
mMod = input;
|
||||
}
|
||||
@@ -715,6 +797,19 @@ int Att::value_int () const
|
||||
return atoi (mValue.c_str ());
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
void Att::allNames (std::vector <std::string>& all)
|
||||
{
|
||||
all.clear ();
|
||||
|
||||
unsigned int i;
|
||||
for (i = 0; i < NUM_INTERNAL_NAMES; ++i)
|
||||
all.push_back (internalNames[i]);
|
||||
|
||||
for (i = 0; i < NUM_MODIFIABLE_NAMES; ++i)
|
||||
all.push_back (modifiableNames[i]);
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
void Att::value_int (int value)
|
||||
{
|
||||
@@ -744,12 +839,9 @@ void Att::dequote (std::string& value) const
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// Encode values prior to serialization.
|
||||
// \t -> &tab;
|
||||
// ' -> &squot;
|
||||
// " -> &dquot;
|
||||
// , -> ,
|
||||
// [ -> &open;
|
||||
// ] -> &close;
|
||||
// : -> :
|
||||
void Att::encode (std::string& value) const
|
||||
{
|
||||
std::string::size_type i;
|
||||
@@ -757,23 +849,14 @@ void Att::encode (std::string& value) const
|
||||
while ((i = value.find ('\t')) != std::string::npos)
|
||||
value.replace (i, 1, "&tab;"); // no i18n
|
||||
|
||||
while ((i = value.find ('\'')) != std::string::npos)
|
||||
value.replace (i, 1, "&squot;"); // no i18n
|
||||
|
||||
while ((i = value.find ('"')) != std::string::npos)
|
||||
value.replace (i, 1, "&dquot;"); // no i18n
|
||||
|
||||
while ((i = value.find (',')) != std::string::npos)
|
||||
value.replace (i, 1, ","); // 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
|
||||
|
||||
while ((i = value.find (':')) != std::string::npos)
|
||||
value.replace (i, 1, ":"); // no i18n
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
@@ -789,28 +872,32 @@ void Att::decode (std::string& value) const
|
||||
{
|
||||
std::string::size_type i;
|
||||
|
||||
while ((i = value.find ("&tab;")) != std::string::npos) // no i18n
|
||||
// Supported encodings.
|
||||
while ((i = value.find ("&tab;")) != std::string::npos)
|
||||
value.replace (i, 5, "\t");
|
||||
|
||||
while ((i = value.find ("&dquot;")) != std::string::npos) // no i18n
|
||||
while ((i = value.find ("&dquot;")) != std::string::npos)
|
||||
value.replace (i, 7, "\"");
|
||||
|
||||
while ((i = value.find ("&squot;")) != std::string::npos) // no i18n
|
||||
value.replace (i, 7, "'");
|
||||
|
||||
while ((i = value.find (""")) != std::string::npos) // no i18n
|
||||
while ((i = value.find (""")) != std::string::npos)
|
||||
value.replace (i, 6, "\"");
|
||||
|
||||
while ((i = value.find (",")) != std::string::npos) // no i18n
|
||||
value.replace (i, 7, ",");
|
||||
|
||||
while ((i = value.find ("&open;")) != std::string::npos) // no i18n
|
||||
while ((i = value.find ("&open;")) != std::string::npos)
|
||||
value.replace (i, 6, "[");
|
||||
|
||||
while ((i = value.find ("&close;")) != std::string::npos) // no i18n
|
||||
while ((i = value.find ("&close;")) != std::string::npos)
|
||||
value.replace (i, 7, "]");
|
||||
|
||||
while ((i = value.find (":")) != std::string::npos) // no i18n
|
||||
// Support for deprecated encodings. These cannot be removed or old files
|
||||
// will not be parsable. Not just old files - completed.data can contain
|
||||
// tasks formatted/encoded using these.
|
||||
while ((i = value.find ("&squot;")) != std::string::npos)
|
||||
value.replace (i, 7, "'");
|
||||
|
||||
while ((i = value.find (",")) != std::string::npos)
|
||||
value.replace (i, 7, ",");
|
||||
|
||||
while ((i = value.find (":")) != std::string::npos)
|
||||
value.replace (i, 7, ":");
|
||||
}
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// task - a command line task list manager.
|
||||
// taskwarrior - a command line task list manager.
|
||||
//
|
||||
// Copyright 2006 - 2010, Paul Beckingham.
|
||||
// All rights reserved.
|
||||
@@ -41,6 +41,7 @@ public:
|
||||
Att (const std::string&, int);
|
||||
Att (const Att&);
|
||||
Att& operator= (const Att&);
|
||||
bool operator== (const Att&) const;
|
||||
~Att ();
|
||||
|
||||
bool valid (const std::string&) const;
|
||||
@@ -69,6 +70,8 @@ public:
|
||||
int value_int () const;
|
||||
void value_int (int);
|
||||
|
||||
static void allNames (std::vector <std::string>&);
|
||||
|
||||
private:
|
||||
void enquote (std::string&) const;
|
||||
void dequote (std::string&) const;
|
||||
|
||||
185
src/Cmd.cpp
185
src/Cmd.cpp
@@ -1,7 +1,7 @@
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// task - a command line task list manager.
|
||||
// taskwarrior - a command line task list manager.
|
||||
//
|
||||
// Copyright 2006 - 2010, Paul Beckingham.
|
||||
// Copyright 2006 - 2010, Paul Beckingham, Federico Hernandez.
|
||||
// All rights reserved.
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or modify it under
|
||||
@@ -26,12 +26,12 @@
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include <algorithm>
|
||||
#include "Cmd.h"
|
||||
#include "Context.h"
|
||||
#include "util.h"
|
||||
#include "text.h"
|
||||
#include "i18n.h"
|
||||
#include "main.h"
|
||||
#include <Cmd.h>
|
||||
#include <Context.h>
|
||||
#include <util.h>
|
||||
#include <text.h>
|
||||
#include <i18n.h>
|
||||
#include <main.h>
|
||||
|
||||
extern Context context;
|
||||
|
||||
@@ -55,45 +55,67 @@ Cmd::~Cmd ()
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// Determines whether the string represents a unique command name or custom
|
||||
// report name.
|
||||
//
|
||||
// To be a valid command:
|
||||
// 1. 'input' should autocomplete to one of 'commands'.
|
||||
bool Cmd::valid (const std::string& input)
|
||||
{
|
||||
load ();
|
||||
|
||||
std::vector <std::string> matches;
|
||||
autoComplete (lowerCase (context.canonicalize (input)), commands, matches);
|
||||
return matches.size () == 1 ? true : false;
|
||||
autoComplete (lowerCase (input), commands, matches);
|
||||
if (matches.size () == 1)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// Determines whether the string represents a valid custom report name.
|
||||
//
|
||||
// To be a valid custom command:
|
||||
// 1. 'input' should autocomplete to one of 'commands'.
|
||||
// 2. the result, canonicalized, should autocomplete to one of
|
||||
// 'customreports'.
|
||||
bool Cmd::validCustom (const std::string& input)
|
||||
{
|
||||
load ();
|
||||
|
||||
std::vector <std::string> matches;
|
||||
autoComplete (lowerCase (context.canonicalize (input)), customReports, matches);
|
||||
return matches.size () == 1 ? true : false;
|
||||
autoComplete (lowerCase (input), commands, matches);
|
||||
if (matches.size () == 1)
|
||||
{
|
||||
std::string canonical = context.canonicalize (matches[0]);
|
||||
matches.clear ();
|
||||
autoComplete (canonical, customReports, matches);
|
||||
if (matches.size () == 1)
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// To be a valid custom command:
|
||||
// 1. 'input' should autocomplete to one of 'commands'.
|
||||
// 2. the result may then canonicalize to another command.
|
||||
void Cmd::parse (const std::string& input)
|
||||
{
|
||||
load ();
|
||||
|
||||
std::string candidate = lowerCase (context.canonicalize (input));
|
||||
|
||||
std::vector <std::string> matches;
|
||||
autoComplete (candidate, commands, matches);
|
||||
autoComplete (input, commands, matches);
|
||||
if (1 == matches.size ())
|
||||
command = matches[0];
|
||||
command = context.canonicalize (matches[0]);
|
||||
|
||||
else if (0 == matches.size ())
|
||||
command = "";
|
||||
|
||||
else
|
||||
{
|
||||
std::string error = "Ambiguous command '" + candidate + "' - could be either of "; // TODO i18n
|
||||
std::string error = "Ambiguous command '" + input + "' - could be either of "; // TODO i18n
|
||||
|
||||
std::sort (matches.begin (), matches.end ());
|
||||
std::string combined;
|
||||
join (combined, ", ", matches);
|
||||
throw error + combined;
|
||||
@@ -105,41 +127,56 @@ void Cmd::load ()
|
||||
{
|
||||
if (commands.size () == 0)
|
||||
{
|
||||
// Commands whose names are not localized.
|
||||
commands.push_back ("_projects");
|
||||
commands.push_back ("_tags");
|
||||
commands.push_back ("_commands");
|
||||
commands.push_back ("_ids");
|
||||
commands.push_back ("_config");
|
||||
commands.push_back ("_version");
|
||||
commands.push_back (context.stringtable.get (CMD_ADD, "add"));
|
||||
commands.push_back (context.stringtable.get (CMD_APPEND, "append"));
|
||||
commands.push_back (context.stringtable.get (CMD_ANNOTATE, "annotate"));
|
||||
commands.push_back (context.stringtable.get (CMD_CALENDAR, "calendar"));
|
||||
commands.push_back (context.stringtable.get (CMD_COLORS, "colors"));
|
||||
commands.push_back (context.stringtable.get (CMD_CONFIG, "config"));
|
||||
commands.push_back (context.stringtable.get (CMD_DELETE, "delete"));
|
||||
commands.push_back (context.stringtable.get (CMD_DONE, "done"));
|
||||
commands.push_back (context.stringtable.get (CMD_DUPLICATE, "duplicate"));
|
||||
commands.push_back (context.stringtable.get (CMD_EDIT, "edit"));
|
||||
commands.push_back (context.stringtable.get (CMD_EXPORT, "export"));
|
||||
commands.push_back (context.stringtable.get (CMD_HELP, "help"));
|
||||
commands.push_back (context.stringtable.get (CMD_HISTORY, "history"));
|
||||
commands.push_back (context.stringtable.get (CMD_GHISTORY, "ghistory"));
|
||||
commands.push_back (context.stringtable.get (CMD_IMPORT, "import"));
|
||||
commands.push_back (context.stringtable.get (CMD_INFO, "info"));
|
||||
commands.push_back (context.stringtable.get (CMD_PREPEND, "prepend"));
|
||||
commands.push_back (context.stringtable.get (CMD_PROJECTS, "projects"));
|
||||
commands.push_back ("_urgency");
|
||||
commands.push_back ("export.csv");
|
||||
commands.push_back ("export.ical");
|
||||
commands.push_back ("export.yaml");
|
||||
commands.push_back ("history.monthly");
|
||||
commands.push_back ("history.annual");
|
||||
commands.push_back ("ghistory.monthly");
|
||||
commands.push_back ("ghistory.annual");
|
||||
|
||||
// Commands whose names are localized.
|
||||
commands.push_back (context.stringtable.get (CMD_ADD, "add"));
|
||||
commands.push_back (context.stringtable.get (CMD_APPEND, "append"));
|
||||
commands.push_back (context.stringtable.get (CMD_ANNOTATE, "annotate"));
|
||||
commands.push_back (context.stringtable.get (CMD_DENOTATE, "denotate"));
|
||||
commands.push_back (context.stringtable.get (CMD_CALENDAR, "calendar"));
|
||||
commands.push_back (context.stringtable.get (CMD_COLORS, "colors"));
|
||||
commands.push_back (context.stringtable.get (CMD_CONFIG, "config"));
|
||||
commands.push_back (context.stringtable.get (CMD_SHOW, "show"));
|
||||
commands.push_back (context.stringtable.get (CMD_DELETE, "delete"));
|
||||
commands.push_back (context.stringtable.get (CMD_DIAGNOSTICS, "diagnostics"));
|
||||
commands.push_back (context.stringtable.get (CMD_DONE, "done"));
|
||||
commands.push_back (context.stringtable.get (CMD_DUPLICATE, "duplicate"));
|
||||
commands.push_back (context.stringtable.get (CMD_EDIT, "edit"));
|
||||
commands.push_back (context.stringtable.get (CMD_HELP, "help"));
|
||||
commands.push_back (context.stringtable.get (CMD_IMPORT, "import"));
|
||||
commands.push_back (context.stringtable.get (CMD_INFO, "info"));
|
||||
commands.push_back (context.stringtable.get (CMD_LOG, "log"));
|
||||
commands.push_back (context.stringtable.get (CMD_PREPEND, "prepend"));
|
||||
commands.push_back (context.stringtable.get (CMD_PROJECTS, "projects"));
|
||||
#ifdef FEATURE_SHELL
|
||||
commands.push_back (context.stringtable.get (CMD_SHELL, "shell"));
|
||||
commands.push_back (context.stringtable.get (CMD_SHELL, "shell"));
|
||||
#endif
|
||||
commands.push_back (context.stringtable.get (CMD_START, "start"));
|
||||
commands.push_back (context.stringtable.get (CMD_STATS, "stats"));
|
||||
commands.push_back (context.stringtable.get (CMD_STOP, "stop"));
|
||||
commands.push_back (context.stringtable.get (CMD_SUMMARY, "summary"));
|
||||
commands.push_back (context.stringtable.get (CMD_TAGS, "tags"));
|
||||
commands.push_back (context.stringtable.get (CMD_TIMESHEET, "timesheet"));
|
||||
commands.push_back (context.stringtable.get (CMD_UNDO, "undo"));
|
||||
commands.push_back (context.stringtable.get (CMD_VERSION, "version"));
|
||||
commands.push_back (context.stringtable.get (CMD_START, "start"));
|
||||
commands.push_back (context.stringtable.get (CMD_STATS, "stats"));
|
||||
commands.push_back (context.stringtable.get (CMD_STOP, "stop"));
|
||||
commands.push_back (context.stringtable.get (CMD_SUMMARY, "summary"));
|
||||
commands.push_back (context.stringtable.get (CMD_TAGS, "tags"));
|
||||
commands.push_back (context.stringtable.get (CMD_TIMESHEET, "timesheet"));
|
||||
commands.push_back (context.stringtable.get (CMD_UNDO, "undo"));
|
||||
commands.push_back (context.stringtable.get (CMD_VERSION, "version"));
|
||||
commands.push_back (context.stringtable.get (CMD_MERGE, "merge"));
|
||||
commands.push_back (context.stringtable.get (CMD_PUSH, "push"));
|
||||
commands.push_back (context.stringtable.get (CMD_PULL, "pull"));
|
||||
|
||||
// Now load the custom reports.
|
||||
std::vector <std::string> all;
|
||||
@@ -167,6 +204,10 @@ void Cmd::load ()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Now load the aliases.
|
||||
foreach (i, context.aliases)
|
||||
commands.push_back (i->first);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -189,27 +230,35 @@ void Cmd::allCommands (std::vector <std::string>& all) const
|
||||
// Commands that do not directly modify the data files.
|
||||
bool Cmd::isReadOnlyCommand ()
|
||||
{
|
||||
if (command == "_projects" ||
|
||||
command == "_tags" ||
|
||||
command == "_commands" ||
|
||||
command == "_ids" ||
|
||||
command == "_config" ||
|
||||
command == "_version" ||
|
||||
command == context.stringtable.get (CMD_CALENDAR, "calendar") ||
|
||||
command == context.stringtable.get (CMD_COLORS, "colors") ||
|
||||
command == context.stringtable.get (CMD_CONFIG, "config") ||
|
||||
command == context.stringtable.get (CMD_EXPORT, "export") ||
|
||||
command == context.stringtable.get (CMD_HELP, "help") ||
|
||||
command == context.stringtable.get (CMD_HISTORY, "history") ||
|
||||
command == context.stringtable.get (CMD_GHISTORY, "ghistory") ||
|
||||
command == context.stringtable.get (CMD_INFO, "info") ||
|
||||
command == context.stringtable.get (CMD_PROJECTS, "projects") ||
|
||||
command == context.stringtable.get (CMD_SHELL, "shell") ||
|
||||
command == context.stringtable.get (CMD_STATS, "stats") ||
|
||||
command == context.stringtable.get (CMD_SUMMARY, "summary") ||
|
||||
command == context.stringtable.get (CMD_TAGS, "tags") ||
|
||||
command == context.stringtable.get (CMD_TIMESHEET, "timesheet") ||
|
||||
command == context.stringtable.get (CMD_VERSION, "version") ||
|
||||
if (command == "_projects" ||
|
||||
command == "_tags" ||
|
||||
command == "_commands" ||
|
||||
command == "_ids" ||
|
||||
command == "_config" ||
|
||||
command == "_version" ||
|
||||
command == "_urgency" ||
|
||||
command == "export.csv" ||
|
||||
command == "export.ical" ||
|
||||
command == "export.yaml" ||
|
||||
command == "history.monthly" ||
|
||||
command == "history.annual" ||
|
||||
command == "ghistory.monthly" ||
|
||||
command == "ghistory.annual" ||
|
||||
command == context.stringtable.get (CMD_CALENDAR, "calendar") ||
|
||||
command == context.stringtable.get (CMD_COLORS, "colors") ||
|
||||
command == context.stringtable.get (CMD_DIAGNOSTICS, "diagnostics") ||
|
||||
command == context.stringtable.get (CMD_CONFIG, "config") ||
|
||||
command == context.stringtable.get (CMD_SHOW, "show") ||
|
||||
command == context.stringtable.get (CMD_HELP, "help") ||
|
||||
command == context.stringtable.get (CMD_INFO, "info") ||
|
||||
command == context.stringtable.get (CMD_PROJECTS, "projects") ||
|
||||
command == context.stringtable.get (CMD_PUSH, "push") ||
|
||||
command == context.stringtable.get (CMD_SHELL, "shell") ||
|
||||
command == context.stringtable.get (CMD_STATS, "stats") ||
|
||||
command == context.stringtable.get (CMD_SUMMARY, "summary") ||
|
||||
command == context.stringtable.get (CMD_TAGS, "tags") ||
|
||||
command == context.stringtable.get (CMD_TIMESHEET, "timesheet") ||
|
||||
command == context.stringtable.get (CMD_VERSION, "version") ||
|
||||
validCustom (command))
|
||||
return true;
|
||||
|
||||
@@ -220,15 +269,19 @@ bool Cmd::isReadOnlyCommand ()
|
||||
// Commands that directly modify the data files.
|
||||
bool Cmd::isWriteCommand ()
|
||||
{
|
||||
if (command == context.stringtable.get (CMD_ADD, "add") ||
|
||||
if (command == context.stringtable.get (CMD_MERGE, "merge") ||
|
||||
command == context.stringtable.get (CMD_ADD, "add") ||
|
||||
command == context.stringtable.get (CMD_APPEND, "append") ||
|
||||
command == context.stringtable.get (CMD_ANNOTATE, "annotate") ||
|
||||
command == context.stringtable.get (CMD_DENOTATE, "denotate") ||
|
||||
command == context.stringtable.get (CMD_DELETE, "delete") ||
|
||||
command == context.stringtable.get (CMD_DONE, "done") ||
|
||||
command == context.stringtable.get (CMD_DUPLICATE, "duplicate") ||
|
||||
command == context.stringtable.get (CMD_EDIT, "edit") ||
|
||||
command == context.stringtable.get (CMD_IMPORT, "import") ||
|
||||
command == context.stringtable.get (CMD_LOG, "log") ||
|
||||
command == context.stringtable.get (CMD_PREPEND, "prepend") ||
|
||||
command == context.stringtable.get (CMD_PULL, "pull") ||
|
||||
command == context.stringtable.get (CMD_START, "start") ||
|
||||
command == context.stringtable.get (CMD_STOP, "stop") ||
|
||||
command == context.stringtable.get (CMD_UNDO, "undo"))
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// task - a command line task list manager.
|
||||
// taskwarrior - a command line task list manager.
|
||||
//
|
||||
// Copyright 2006 - 2010, Paul Beckingham.
|
||||
// Copyright 2006 - 2010, Paul Beckingham, Federico Hernandez.
|
||||
// All rights reserved.
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or modify it under
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// task - a command line task list manager.
|
||||
// taskwarrior - a command line task list manager.
|
||||
//
|
||||
// Copyright 2006 - 2010, Paul Beckingham.
|
||||
// All rights reserved.
|
||||
@@ -127,15 +127,18 @@ Color::Color (const std::string& spec)
|
||||
// X where X is one of black, red, blue ...
|
||||
else if ((index = find (word)) != -1)
|
||||
{
|
||||
if (bg)
|
||||
if (index)
|
||||
{
|
||||
bg_value |= _COLOR_HASBG;
|
||||
bg_value |= index << 8;
|
||||
}
|
||||
else
|
||||
{
|
||||
fg_value |= _COLOR_HASFG;
|
||||
fg_value |= index;
|
||||
if (bg)
|
||||
{
|
||||
bg_value |= _COLOR_HASBG;
|
||||
bg_value |= index << 8;
|
||||
}
|
||||
else
|
||||
{
|
||||
fg_value |= _COLOR_HASFG;
|
||||
fg_value |= index;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -349,24 +352,26 @@ void Color::blend (const Color& other)
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
// Upgrade either color, if necessary.
|
||||
if (!(value & _COLOR_256)) upgrade ();
|
||||
if (!(c.value & _COLOR_256)) c.upgrade ();
|
||||
|
||||
// 256 <-- 256.
|
||||
if (c.value & _COLOR_HASFG)
|
||||
else
|
||||
{
|
||||
value |= _COLOR_HASFG; // There is now a color.
|
||||
value &= ~_COLOR_FG; // Remove previous color.
|
||||
value |= (c.value & _COLOR_FG); // Apply other color.
|
||||
}
|
||||
// Upgrade either color, if necessary.
|
||||
if (!(value & _COLOR_256)) upgrade ();
|
||||
if (!(c.value & _COLOR_256)) c.upgrade ();
|
||||
|
||||
if (c.value & _COLOR_HASBG)
|
||||
{
|
||||
value |= _COLOR_HASBG; // There is now a color.
|
||||
value &= ~_COLOR_BG; // Remove previous color.
|
||||
value |= (c.value & _COLOR_BG); // Apply other color.
|
||||
// 256 <-- 256.
|
||||
if (c.value & _COLOR_HASFG)
|
||||
{
|
||||
value |= _COLOR_HASFG; // There is now a color.
|
||||
value &= ~_COLOR_FG; // Remove previous color.
|
||||
value |= (c.value & _COLOR_FG); // Apply other color.
|
||||
}
|
||||
|
||||
if (c.value & _COLOR_HASBG)
|
||||
{
|
||||
value |= _COLOR_HASBG; // There is now a color.
|
||||
value &= ~_COLOR_BG; // Remove previous color.
|
||||
value |= (c.value & _COLOR_BG); // Apply other color.
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// task - a command line task list manager.
|
||||
// taskwarrior - a command line task list manager.
|
||||
//
|
||||
// Copyright 2006 - 2010, Paul Beckingham.
|
||||
// All rights reserved.
|
||||
|
||||
102
src/Column.cpp
Normal file
102
src/Column.cpp
Normal file
@@ -0,0 +1,102 @@
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// taskwarrior - a command line task list manager.
|
||||
//
|
||||
// Copyright 2006 - 2010, 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 <Column.h>
|
||||
|
||||
extern Context context;
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
static Column* Column::factory (const std::string& name)
|
||||
{
|
||||
if (name == "description") return new ColumnDescription ();
|
||||
|
||||
throw std::string ("Unrecognized column type '") + name + "'";
|
||||
return NULL;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
Column::Column ()
|
||||
: _name ("")
|
||||
, _minimum (0)
|
||||
, _maximum (0)
|
||||
, _wrap (false)
|
||||
, _just (left)
|
||||
, _sizing (minimal)
|
||||
{
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
Column::Column (const Column& other)
|
||||
{
|
||||
_name = other._name;
|
||||
_minimum = other._minimum;
|
||||
_maximum = other._maximum;
|
||||
_wrap = other._wrap;
|
||||
_just = other._just;
|
||||
_sizing = other._sizing;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
Column& Column::operator= (const Column& other)
|
||||
{
|
||||
if (this != &other)
|
||||
{
|
||||
_name = other._name;
|
||||
_minimum = other._minimum;
|
||||
_maximum = other._maximum;
|
||||
_wrap = other._wrap;
|
||||
_just = other._just;
|
||||
_sizing = other._sizing;
|
||||
}
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
bool Column::operator== (const Column& other) const
|
||||
{
|
||||
return _name == other._name &&
|
||||
_minimum == other._minimum &&
|
||||
_maximum == other._maximum &&
|
||||
_wrap == other._wrap &&
|
||||
_just == other._just &&
|
||||
_sizing == other._sizing;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
Column::~Column ()
|
||||
{
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
void Column::setName (const std::string& name)
|
||||
{
|
||||
_name = name;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
66
src/Column.h
Normal file
66
src/Column.h
Normal file
@@ -0,0 +1,66 @@
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// taskwarrior - a command line task list manager.
|
||||
//
|
||||
// Copyright 2006 - 2010, 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_COLUMN
|
||||
#define INCLUDED_COLUMN
|
||||
|
||||
#include <string>
|
||||
|
||||
class Column
|
||||
{
|
||||
public:
|
||||
enum just {right = 0, left, center};
|
||||
enum sizing {minimal = 0, fixed, proportional, maximal};
|
||||
|
||||
static Column* factory (const std::string&);
|
||||
|
||||
Column ();
|
||||
Column (const Column&);
|
||||
Column& operator= (const Column&);
|
||||
bool operator== (const Column&) const; // TODO Is this necessary?
|
||||
~Column ();
|
||||
|
||||
void setName (const std::string&);
|
||||
std::string render (Task*, int, int, const std::string style = "default");
|
||||
std::string type () const;
|
||||
|
||||
private:
|
||||
std::string _name;
|
||||
int _minimum;
|
||||
int _maximum;
|
||||
bool _wrap;
|
||||
just _just;
|
||||
sizing _sizing;
|
||||
};
|
||||
|
||||
class ColumnDescription : public Column
|
||||
{
|
||||
public:
|
||||
private:
|
||||
};
|
||||
|
||||
#endif
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
387
src/Config.cpp
387
src/Config.cpp
@@ -1,5 +1,5 @@
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// task - a command line task list manager.
|
||||
// taskwarrior - a command line task list manager.
|
||||
//
|
||||
// Copyright 2006 - 2010, Paul Beckingham.
|
||||
// All rights reserved.
|
||||
@@ -34,111 +34,220 @@
|
||||
#include <stdlib.h>
|
||||
#include <pwd.h>
|
||||
#include "Directory.h"
|
||||
#include "Date.h"
|
||||
#include "File.h"
|
||||
#include "Config.h"
|
||||
#include "text.h"
|
||||
#include "util.h"
|
||||
#include "../auto.h"
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// This string is used in two ways:
|
||||
// 1) It is used to create a new .taskrc file, by copying it directly to disk.
|
||||
// 2) It is parsed and used as default values for all Config.get calls.
|
||||
std::string Config::defaults =
|
||||
"# Task program configuration file.\n"
|
||||
"# Taskwarrior program configuration file.\n"
|
||||
"# For more documentation, see http://taskwarrior.org or try 'man task', 'man task-faq',\n"
|
||||
"# 'man task-tutorial', 'man task-color' or 'man taskrc'\n"
|
||||
"\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= -- By specifying no value, this means no default\n"
|
||||
"# #variable=foo -- By commenting out the line, this uses the default\n"
|
||||
"# #variable=foo -- By commenting out the line, or deleting it, this uses the default\n"
|
||||
"\n"
|
||||
"# Use the command 'task show' to see all defaults and overrides\n"
|
||||
"\n"
|
||||
"# Files\n"
|
||||
"data.location=~/.task\n"
|
||||
"locking=on # Use file-level locking\n"
|
||||
"locking=on # Use file-level locking\n"
|
||||
"\n"
|
||||
"# Terminal\n"
|
||||
"curses=on # Use ncurses library to determine terminal width\n"
|
||||
"defaultwidth=80 # Without ncurses, assumed width\n"
|
||||
"#editor=vi # Preferred text editor\n"
|
||||
"curses=on # Use ncurses library to determine terminal width\n"
|
||||
"defaultwidth=80 # Without ncurses, assumed width\n"
|
||||
"#editor=vi # Preferred text editor\n"
|
||||
"\n"
|
||||
"# Miscellaneous\n"
|
||||
"confirmation=yes # Confirmation on delete, big changes\n"
|
||||
"echo.command=yes # Details on command just run\n"
|
||||
"annotations=full # Level of verbosity for annotations: full, sparse or none\n"
|
||||
"next=2 # How many tasks per project in next report\n"
|
||||
"bulk=2 # > 2 tasks considered 'a lot', for confirmation\n"
|
||||
"nag=You have higher priority tasks. # Nag message to keep you honest\n" // TODO
|
||||
"search.case.sensitive=yes # Setting to no allows case insensitive searches\n"
|
||||
"active.indicator=* # What to show as an active task indicator\n"
|
||||
"tag.indicator=+ # What to show as a tag indicator\n"
|
||||
"recurrence.indicator=R # What to show as a task recurrence indicator\n"
|
||||
"verbose=yes # Provide extra feedback\n"
|
||||
"confirmation=yes # Confirmation on delete, big changes\n"
|
||||
"echo.command=yes # Details on command just run\n"
|
||||
"annotations=full # Level of verbosity for annotations: full, sparse or none\n"
|
||||
"next=2 # How many tasks per project in next report\n"
|
||||
"bulk=2 # > 2 tasks considered 'a lot', for confirmation\n"
|
||||
"nag=You have higher priority tasks. # Nag message to keep you honest\n" // TODO
|
||||
"search.case.sensitive=yes # Setting to no allows case insensitive searches\n"
|
||||
"active.indicator=* # What to show as an active task indicator\n"
|
||||
"tag.indicator=+ # What to show as a tag indicator\n"
|
||||
"recurrence.indicator=R # What to show as a task recurrence indicator\n"
|
||||
"recurrence.limit=1 # Number of future recurring pending tasks\n"
|
||||
"undo.style=side # Undo style - can be 'side', or 'diff'\n"
|
||||
"\n"
|
||||
"# Dates\n"
|
||||
"dateformat=m/d/Y # Preferred input and display date format\n"
|
||||
"dateformat.holiday=YMD # Preferred input date format for holidays\n"
|
||||
"dateformat.report=m/d/Y # Preferred display date format for repors\n"
|
||||
"weekstart=Sunday # Sunday or Monday only\n"
|
||||
"displayweeknumber=yes # Show week numbers on calendar\n"
|
||||
"due=7 # Task is considered due in 7 days\n"
|
||||
"dateformat=m/d/Y # Preferred input and display date format\n"
|
||||
"dateformat.holiday=YMD # Preferred input date format for holidays\n"
|
||||
"dateformat.report=m/d/Y # Preferred display date format for reports\n"
|
||||
"dateformat.annotation=m/d/Y # Preferred display date format for annotations\n"
|
||||
"weekstart=Sunday # Sunday or Monday only\n"
|
||||
"displayweeknumber=yes # Show week numbers on calendar\n"
|
||||
"due=7 # Task is considered due in 7 days\n"
|
||||
"\n"
|
||||
"# Calendar controls\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.report=list # Report to use when showing task information in cal\n"
|
||||
"calendar.holidays=none # Show public holidays on calendar:full, sparse or none\n"
|
||||
"#monthsperline=3 # Number of calendar months on a line\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.report=list # Report to use when showing task information in cal\n"
|
||||
"calendar.holidays=none # Show public holidays on calendar:full, sparse or none\n"
|
||||
"#monthsperline=3 # Number of calendar months on a line\n"
|
||||
"\n"
|
||||
"# Journal controls\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.stop.annotation=Stopped task # Annotation description for the stop journal entry\n"
|
||||
"\n"
|
||||
"# Dependency controls\n"
|
||||
"dependency.reminder=on # Nags on dependency chain violations\n"
|
||||
"dependency.confirmation=on # Should dependency chain repair be confirmed?\n"
|
||||
"\n"
|
||||
"# Urgency Coefficients\n"
|
||||
"urgency.next.coefficient=10.0 # Urgency coefficients for 'next' special tag\n"
|
||||
"urgency.blocking.coefficient=9.0 # Urgency coefficients for blocking tasks\n"
|
||||
"urgency.blocked.coefficient=8.0 # Urgency coefficients for blocked tasks\n"
|
||||
"urgency.due.coefficient=7.0 # Urgency coefficients for due dates\n"
|
||||
"urgency.priority.coefficient=6.0 # Urgency coefficients for priorities\n"
|
||||
"urgency.waiting.coefficient=5.0 # Urgency coefficients for waiting status\n"
|
||||
"urgency.active.coefficient=4.0 # Urgency coefficients for active tasks\n"
|
||||
"urgency.project.coefficient=3.0 # Urgency coefficients for projects\n"
|
||||
"urgency.tags.coefficient=2.0 # Urgency coefficients for tags\n"
|
||||
"urgency.annotations.coefficient=1.0 # Urgency coefficients for annotations\n"
|
||||
"\n"
|
||||
"#urgency.user.project.foo.coefficient=5.0 # Urgency coefficients for 'foo' project\n"
|
||||
"#urgency.user.tag.foo.coefficient=5.0 # Urgency coefficients for 'foo' tag\n"
|
||||
"\n"
|
||||
"# Color controls.\n"
|
||||
"color=on # Enable color\n"
|
||||
"#color.header=bold green # Color of header messages\n"
|
||||
"#color.footnote=bold green # Color of footnote messages\n"
|
||||
"color.calendar.today=black on cyan # Color of today in calendar\n"
|
||||
"color.calendar.due=black on green # Color of days with due tasks in calendar\n"
|
||||
"color.calendar.due.today=black on magenta # Color of today with due tasks in calendar\n"
|
||||
"color.calendar.overdue=black on red # Color of days with overdue tasks in calendar\n"
|
||||
"color.calendar.weekend=bright white on black # Color of weekend days in calendar\n"
|
||||
"color.calendar.holiday=black on bright yellow # Color of public holidays in calendar\n"
|
||||
"color.calendar.weeknumber=black on white # Color of the weeknumbers in calendar\n"
|
||||
"#color.debug=magenta # Color of diagnostic output\n"
|
||||
"color=on # Enable color\n"
|
||||
#ifdef LINUX
|
||||
"color.header=color3 # Color of header messages\n"
|
||||
"color.footnote=color3 # Color of footnote messages\n"
|
||||
"color.debug=color3 # Color of diagnostic output\n"
|
||||
"color.alternate=on color233 # Alternate color for line coloring\n"
|
||||
"\n"
|
||||
"# The following rules are presented in their order of precedence.\n"
|
||||
"# The higher the color rule is up this list, the higher precedence\n"
|
||||
"# it has in determining the color for the task. Precedence is shown\n"
|
||||
"# in brackets [1]\n"
|
||||
"#color.recurring=on red # [1] Color of recur.any: tasks\n"
|
||||
"color.overdue=bold red # [2] Color of overdue tasks\n"
|
||||
"color.due.today=bold magenta # [3] Color of tasks due today\n"
|
||||
"color.due=bold yellow # [4] Color of due tasks\n"
|
||||
"#color.keyword.car=on blue # [5] Color of description.contains:car tasks\n"
|
||||
"#color.project.garden=on green # [6] Color of project:garden tasks\n"
|
||||
"#color.tag.bug=yellow # [7] Color of +bug tasks\n"
|
||||
"color.active=bold cyan # [8] Color of active tasks\n"
|
||||
"#color.pri.none=white on blue # [9] Color of priority: tasks\n"
|
||||
"color.pri.H=bold # [9] Color of priority:H tasks\n"
|
||||
"#color.pri.M=on yellow # [9] Color of priority:M tasks\n"
|
||||
"#color.pri.L=on green # [9] Color of priority:L tasks\n"
|
||||
"color.tagged=yellow # [10] Color of tagged tasks\n"
|
||||
"#color.alternate=on rgb253 # [11] Alternate color for line coloring\n"
|
||||
"color.summary.bar=on rgb141 # Color of summary report progress bar\n"
|
||||
"color.summary.background=on color0 # Color of summary report background\n"
|
||||
"\n"
|
||||
"color.history.add=color0 on rgb500 # Color of added tasks in ghistory report\n"
|
||||
"color.history.done=color0 on rgb050 # Color of completed tasks in ghistory report\n"
|
||||
"color.history.delete=color0 on rgb550 # Color of deleted tasks in ghistory report\n"
|
||||
"\n"
|
||||
"color.sync.added=rgb005 # Color of added tasks in sync output\n"
|
||||
"color.sync.changed=rgb550 # Color of changed tasks in sync output\n"
|
||||
"color.sync.rejected=rgb500 # Color of rejected tasks in sync output\n"
|
||||
"\n"
|
||||
"color.undo.before=color1 # Color of values before a change\n"
|
||||
"color.undo.after=color2 # Color of values after a change\n"
|
||||
"\n"
|
||||
"color.calendar.today=color15 on rgb013 # Color of today in calendar\n"
|
||||
"color.calendar.due=color0 on color1 # Color of days with due tasks in calendar\n"
|
||||
"color.calendar.due.today=color15 on color1 # Color of today with due tasks in calendar\n"
|
||||
"color.calendar.overdue=color0 on color9 # Color of days with overdue tasks in calendar\n"
|
||||
"color.calendar.weekend=color235 # Color of weekend days in calendar\n"
|
||||
"color.calendar.holiday=color0 on color11 # Color of public holidays in calendar\n"
|
||||
"color.calendar.weeknumber=rgb013 # Color of the weeknumbers in calendar\n"
|
||||
"\n"
|
||||
"# Here are the color rules.\n"
|
||||
"color.recurring=rgb013 # Color of recur.any: tasks\n"
|
||||
"color.overdue=color9 # Color of overdue tasks\n"
|
||||
"color.due.today=rgb400 # Color of tasks due today\n"
|
||||
"color.due=color1 # Color of due tasks\n"
|
||||
"#color.keyword.car=on blue # Color of description.contains:car tasks\n"
|
||||
"#color.project.garden=on green # Color of project:garden tasks\n"
|
||||
"#color.project.none= # Color of tasks with no project\n"
|
||||
"#color.tag.bug=yellow # Color of +bug tasks\n"
|
||||
"#color.tag.none= # Color of tag-less tasks\n"
|
||||
"color.active=rgb555 on rgb410 # Color of active tasks\n"
|
||||
"color.pri.none= # Color of priority: tasks\n"
|
||||
"color.pri.H=rgb255 # Color of priority:H tasks\n"
|
||||
"color.pri.M=rgb250 # Color of priority:M tasks\n"
|
||||
"color.pri.L=rgb245 # Color of priority:L tasks\n"
|
||||
"color.tagged=rgb031 # Color of tagged tasks\n"
|
||||
"color.blocked=white on color8 # Color of blocked tasks\n"
|
||||
#else
|
||||
"color.header=yellow # Color of header messages\n"
|
||||
"color.footnote=yellow # Color of footnote messages\n"
|
||||
"color.debug=yellow # Color of diagnostic output\n"
|
||||
"color.alternate= # Alternate color for line coloring\n"
|
||||
"\n"
|
||||
"color.summary.bar=on green # Color of summary report progress bar\n"
|
||||
"color.summary.background=on black # Color of summary report background\n"
|
||||
"\n"
|
||||
"color.history.add=black on red # Color of added tasks in ghistory report\n"
|
||||
"color.history.done=black on green # Color of completed tasks in ghistory report\n"
|
||||
"color.history.delete=black on yellow # Color of deleted tasks in ghistory report\n"
|
||||
"\n"
|
||||
"color.sync.added=green # Color of added tasks in sync output\n"
|
||||
"color.sync.changed=yellow # Color of changed tasks in sync output\n"
|
||||
"color.sync.rejected=red # Color of rejected tasks in sync output\n"
|
||||
"\n"
|
||||
"color.undo.before=red # Color of values before a change\n"
|
||||
"color.undo.after=green # Color of values after a change\n"
|
||||
"\n"
|
||||
"color.calendar.today=bold white on bright blue # Color of today in calendar\n"
|
||||
"color.calendar.due=white on red # Color of days with due tasks in calendar\n"
|
||||
"color.calendar.due.today=bold white on red # Color of today with due tasks in calendar\n"
|
||||
"color.calendar.overdue=black on bright red # Color of days with overdue tasks in calendar\n"
|
||||
"color.calendar.weekend=white on bright black # Color of weekend days in calendar\n"
|
||||
"color.calendar.holiday=black on bright yellow # Color of public holidays in calendar\n"
|
||||
"color.calendar.weeknumber=bold blue # Color of the weeknumbers in calendar\n"
|
||||
"\n"
|
||||
"# Here are the color rules.\n"
|
||||
"color.recurring=magenta # Color of recur.any: tasks\n"
|
||||
"color.overdue=bold red # Color of overdue tasks\n"
|
||||
"color.due.today=red # Color of tasks due today\n"
|
||||
"color.due=red # Color of due tasks\n"
|
||||
"#color.keyword.car=on blue # Color of description.contains:car tasks\n"
|
||||
"#color.project.garden=on green # Color of project:garden tasks\n"
|
||||
"#color.project.none= # Color of tasks with no project\n"
|
||||
"#color.tag.bug=yellow # Color of +bug tasks\n"
|
||||
"#color.tag.none= # Color of tag-less tasks\n"
|
||||
"color.active=black on bright green # Color of active tasks\n"
|
||||
"color.pri.none= # Color of priority: tasks\n"
|
||||
"color.pri.H=bold white # Color of priority:H tasks\n"
|
||||
"color.pri.M=white # Color of priority:M tasks\n"
|
||||
"color.pri.L= # Color of priority:L tasks\n"
|
||||
"color.tagged=green # Color of tagged tasks\n"
|
||||
"color.blocked=black on white # Color of blocked tasks\n"
|
||||
#endif
|
||||
"\n"
|
||||
"# Here is the rule precedence order, highest to lowest.\n"
|
||||
"# Note that these are just the color rule names, without the leading 'color.'\n"
|
||||
"# and any trailing '.value'.\n"
|
||||
"rule.precedence.color=due.today,active,blocked,overdue,due,keyword,project,tag,recurring,pri,tagged\n"
|
||||
"\n"
|
||||
"# Shadow file support\n"
|
||||
"#shadow.file=/tmp/shadow.txt # Location of shadow file\n"
|
||||
"#shadow.command=list # Task command for shadow file\n"
|
||||
"#shadow.notify=on # Footnote when updated\n"
|
||||
"#shadow.file=/tmp/shadow.txt # Location of shadow file\n"
|
||||
"#shadow.command=list # Task command for shadow file\n"
|
||||
"#shadow.notify=on # Footnote when updated\n"
|
||||
"\n"
|
||||
"#default.project=foo # Default project for 'add' command\n"
|
||||
"#default.priority=M # Default priority for 'add' command\n"
|
||||
"default.command=list # When no arguments are specified\n"
|
||||
"#default.project=foo # Default project for 'add' command\n"
|
||||
"#default.priority=M # Default priority for 'add' command\n"
|
||||
"default.command=list # When no arguments are specified\n"
|
||||
"\n"
|
||||
"_forcecolor=no # Forces color to be on, even for non TTY output\n"
|
||||
"blanklines=true # Use more whitespace in output\n"
|
||||
"complete.all.projects=no # Include old project names in 'projects' command\n" // TODO
|
||||
"complete.all.tags=no # Include old tag names in 'tags' command\n" // TODO
|
||||
"debug=no # Display diagnostics\n"
|
||||
"hooks=off # Hook system master switch\n"
|
||||
"fontunderline=yes # Uses underlines rather than -------\n"
|
||||
"shell.prompt=task> # Prompt used by the shell command\n" // TODO
|
||||
"_forcecolor=no # Forces color to be on, even for non TTY output\n"
|
||||
"blanklines=true # Use more whitespace in output\n"
|
||||
"complete.all.projects=no # Include old project names in '_projects' command\n"
|
||||
"complete.all.tags=no # Include old tag names in '_ags' command\n"
|
||||
"list.all.projects=no # Include old project names in 'projects' command\n"
|
||||
"list.all.tags=no # Include old tag names in 'tags' command\n"
|
||||
"debug=no # Display diagnostics\n"
|
||||
"hooks=off # Hook system master switch\n"
|
||||
"fontunderline=yes # Uses underlines rather than -------\n"
|
||||
"shell.prompt=task> # Prompt used by the shell command\n"
|
||||
"\n"
|
||||
"# Merge options\n"
|
||||
"#\n"
|
||||
"# WARNING: Please read the documentation (man task-sync) before proceeding with these\n"
|
||||
"# synchronization features. Improperly used, data can be lost!\n"
|
||||
"merge.autopush=ask # Push database to remote origin after merge: yes, no, ask\n"
|
||||
"#merge.default.uri=user@host.xz:.task/ # URI for merge\n"
|
||||
"#pull.default.uri=rsync://host.xz/task-backup/ # URI for pull\n"
|
||||
"\n"
|
||||
"# Import heuristics - alternate names for fields (comma-separated list of names)\n"
|
||||
"#import.synonym.bg=?\n"
|
||||
"#import.synonym.description=?\n"
|
||||
@@ -155,13 +264,20 @@ std::string Config::defaults =
|
||||
"#import.synonym.tags=?\n"
|
||||
"#import.synonym.uuid=?\n"
|
||||
"\n"
|
||||
"# Aliases - alternate names for commands\n"
|
||||
"alias.rm=delete # Alias for the delete command\n"
|
||||
"# Export Controls\n"
|
||||
"export.ical.class=PRIVATE # Could be PUBLIC, PRIVATE or CONFIDENTIAL\n"
|
||||
"\n"
|
||||
"# Fields: id,uuid,project,priority,priority_long,entry,entry_time,\n" // TODO
|
||||
"# start,entry_time,due,recur,recurrence_indicator,age,\n" // TODO
|
||||
"# age_compact,active,tags,tag_indicator,description,\n" // TODO
|
||||
"# description_only,end,end_time,countdown,countdown_compact\n" // TODO
|
||||
"# Aliases - alternate names for commands\n"
|
||||
"alias.rm=delete # Alias for the delete command\n"
|
||||
"alias.history=history.monthly # Prefer monthly 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.vcalendar=export.ical # They are the same\n"
|
||||
"\n"
|
||||
"# Fields: id, uuid, project, priority, priority_long, entry, start, end,\n"
|
||||
"# due, countdown, countdown_compact, age, age_compact, active, tags,\n"
|
||||
"# depends, description_only, description, recur, recurrence_indicator,\n"
|
||||
"# tag_indicator, wait.\n"
|
||||
"# Description: This report is ...\n"
|
||||
"# Sort: due+,priority-,project+\n"
|
||||
"# Filter: pro:x pri:H +bug limit:10\n"
|
||||
@@ -169,8 +285,8 @@ std::string Config::defaults =
|
||||
"\n"
|
||||
"# task long\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,tags,description\n"
|
||||
"report.long.labels=ID,Project,Pri,Added,Started,Due,Recur,Countdown,Age,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.sort=due+,priority-,project+\n"
|
||||
"report.long.filter=status:pending\n"
|
||||
"#report.long.dateformat=m/d/Y\n"
|
||||
@@ -180,7 +296,7 @@ std::string Config::defaults =
|
||||
"report.list.description=Lists all tasks matching the specified criteria\n"
|
||||
"report.list.columns=id,project,priority,due,active,age,description\n"
|
||||
"report.list.labels=ID,Project,Pri,Due,Active,Age,Description\n"
|
||||
"report.list.sort=due+,priority-,project+\n"
|
||||
"report.list.sort=due+,priority-,active-,project+\n"
|
||||
"report.list.filter=status:pending\n"
|
||||
"#report.list.dateformat=m/d/Y\n"
|
||||
"#report.list.annotations=full\n"
|
||||
@@ -225,8 +341,8 @@ std::string Config::defaults =
|
||||
"report.overdue.description=Lists overdue tasks matching the specified criteria\n"
|
||||
"report.overdue.columns=id,project,priority,due,active,age,description\n"
|
||||
"report.overdue.labels=ID,Project,Pri,Due,Active,Age,Description\n"
|
||||
"report.overdue.sort=due+,priority-,project+\n"
|
||||
"report.overdue.filter=status:pending due.before:today\n"
|
||||
"report.overdue.sort=due+,priority-,active-,project+\n"
|
||||
"report.overdue.filter=status:pending due.before:now\n"
|
||||
"#report.overdue.dateformat=m/d/Y\n"
|
||||
"#report.overdue.annotations=full\n"
|
||||
"\n"
|
||||
@@ -252,7 +368,7 @@ std::string Config::defaults =
|
||||
"report.recurring.description=Lists recurring tasks matching the specified criteria\n"
|
||||
"report.recurring.columns=id,project,priority,due,recur,active,age,description\n"
|
||||
"report.recurring.labels=ID,Project,Pri,Due,Recur,Active,Age,Description\n"
|
||||
"report.recurring.sort=due+,priority-,project+\n"
|
||||
"report.recurring.sort=due+,priority-,active-,project+\n"
|
||||
"report.recurring.filter=status:pending parent.any:\n"
|
||||
"#report.recurring.dateformat=m/d/Y\n"
|
||||
"#report.recurring.annotations=full\n"
|
||||
@@ -268,9 +384,10 @@ std::string Config::defaults =
|
||||
"\n"
|
||||
"# task all\n"
|
||||
"report.all.description=Lists all tasks matching the specified criteria\n"
|
||||
"report.all.columns=id,project,priority,due,active,age,description\n"
|
||||
"report.all.labels=ID,Project,Pri,Due,Active,Age,Description\n"
|
||||
"report.all.sort=due+,priority-,project+\n"
|
||||
"report.all.columns=id,project,priority,due,end,active,age,description\n"
|
||||
"report.all.labels=ID,Project,Pri,Due,Completed,Active,Age,Description\n"
|
||||
"report.all.sort=project+,due+,end+,priority-,active-,description+\n"
|
||||
"report.all.filter=status.not:deleted\n"
|
||||
"#report.all.dateformat=m/d/Y\n"
|
||||
"#report.all.annotations=full\n"
|
||||
"\n"
|
||||
@@ -278,10 +395,26 @@ std::string Config::defaults =
|
||||
"report.next.description=Lists the most urgent tasks\n"
|
||||
"report.next.columns=id,project,priority,due,active,age,description\n"
|
||||
"report.next.labels=ID,Project,Pri,Due,Active,Age,Description\n"
|
||||
"report.next.sort=due+,priority-,project+\n"
|
||||
"report.next.filter=status:pending\n"
|
||||
"report.next.sort=due+,priority-,active-,project+\n"
|
||||
"report.next.filter=status:pending limit:page depends.none:\n"
|
||||
"#report.next.dateformat=m/d/Y\n"
|
||||
"#report.next.annotations=full\n"
|
||||
"\n"
|
||||
"# task blocked\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.labels=ID,Deps,Project,Pri,Due,Active,Age,Description\n"
|
||||
"report.blocked.sort=due+,priority-,active-,project+\n"
|
||||
"report.blocked.filter=status:pending depends.any:\n"
|
||||
"#report.blocked.dateformat=m/d/Y\n"
|
||||
"\n"
|
||||
"# task unblocked\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.labels=ID,Deps,Project,Pri,Due,Active,Age,Description\n"
|
||||
"report.unblocked.sort=due+,priority-,active-,project+\n"
|
||||
"report.unblocked.filter=status:pending depends.none:\n"
|
||||
"#report.unblocked.dateformat=m/d/Y\n"
|
||||
"\n";
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
@@ -293,6 +426,7 @@ std::string Config::defaults =
|
||||
//
|
||||
// In all real use cases, Config::load is called.
|
||||
Config::Config ()
|
||||
: original_file ()
|
||||
{
|
||||
}
|
||||
|
||||
@@ -376,13 +510,13 @@ void Config::parse (const std::string& input, int nest /* = 1 */)
|
||||
if (included.readable ())
|
||||
this->load (included, nest + 1);
|
||||
else
|
||||
throw std::string ("Could not read include file '") + included.data + "'";
|
||||
throw std::string ("Could not read include file '") + included.data + "'.";
|
||||
}
|
||||
else
|
||||
throw std::string ("Can only include files with absolute paths, not '") + included.data + "'";
|
||||
}
|
||||
else
|
||||
throw std::string ("Malformed entry '") + line + "'";
|
||||
throw std::string ("Malformed entry '") + line + "'.";
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -395,13 +529,30 @@ void Config::createDefaultRC (const std::string& rc, const std::string& data)
|
||||
std::string::size_type loc = defaults.find ("data.location=~/.task");
|
||||
// loc+0^ +14^ +21^
|
||||
|
||||
std::string contents = defaults.substr (0, loc + 14) +
|
||||
data +
|
||||
defaults.substr (loc + 21, std::string::npos);
|
||||
Date now;
|
||||
std::stringstream contents;
|
||||
contents << "# [Created by "
|
||||
<< PACKAGE_STRING
|
||||
<< " "
|
||||
<< now.toString ("m/d/Y H:N:S")
|
||||
<< "]\n"
|
||||
<< defaults.substr (0, loc + 14)
|
||||
<< data
|
||||
<< "\n\n# Color theme (uncomment one to use)\n"
|
||||
<< "#include /usr/local/share/doc/task/rc/light-16.theme\n"
|
||||
<< "#include /usr/local/share/doc/task/rc/light-256.theme\n"
|
||||
<< "#include /usr/local/share/doc/task/rc/dark-16.theme\n"
|
||||
<< "#include /usr/local/share/doc/task/rc/dark-256.theme\n"
|
||||
<< "#include /usr/local/share/doc/task/rc/dark-red-256.theme\n"
|
||||
<< "#include /usr/local/share/doc/task/rc/dark-green-256.theme\n"
|
||||
<< "#include /usr/local/share/doc/task/rc/dark-blue-256.theme\n"
|
||||
<< "#include /usr/local/share/doc/task/rc/dark-violets-256.theme\n"
|
||||
<< "#include /usr/local/share/doc/task/rc/dark-yellow-green.theme\n"
|
||||
<< "\n";
|
||||
|
||||
// Write out the new file.
|
||||
if (! File::write (rc, contents))
|
||||
throw std::string ("Could not write to '") + rc + "'";
|
||||
if (! File::write (rc, contents.str ()))
|
||||
throw std::string ("Could not write to '") + rc + "'.";
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
@@ -503,7 +654,6 @@ void Config::all (std::vector<std::string>& items)
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
std::string Config::checkForDeprecatedColor ()
|
||||
{
|
||||
int count = 0;
|
||||
std::vector <std::string> deprecated;
|
||||
foreach (i, *this)
|
||||
{
|
||||
@@ -511,24 +661,53 @@ std::string Config::checkForDeprecatedColor ()
|
||||
{
|
||||
std::string value = get (i->first);
|
||||
if (value.find ("_") != std::string::npos)
|
||||
{
|
||||
++count;
|
||||
deprecated.push_back (i->first);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
std::stringstream out;
|
||||
if (count)
|
||||
if (deprecated.size ())
|
||||
{
|
||||
out << "Your .taskrc file contains color settings that use deprecated "
|
||||
<< "underscores. Please check:"
|
||||
<< std::endl;
|
||||
<< "underscores. Please check:\n";
|
||||
|
||||
foreach (i, deprecated)
|
||||
out << " " << *i << "=" << get (*i) << std::endl;
|
||||
out << " " << *i << "=" << get (*i) << "\n";
|
||||
|
||||
out << std::endl;
|
||||
out << "\n";
|
||||
}
|
||||
|
||||
return out.str ();
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
std::string Config::checkForDeprecatedColumns ()
|
||||
{
|
||||
std::vector <std::string> deprecated;
|
||||
foreach (i, *this)
|
||||
{
|
||||
if (i->first.find ("report") == 0)
|
||||
{
|
||||
std::string value = get (i->first);
|
||||
if (value.find ("entry_time") != std::string::npos ||
|
||||
value.find ("start_time") != std::string::npos ||
|
||||
value.find ("end_time") != std::string::npos)
|
||||
deprecated.push_back (i->first);
|
||||
}
|
||||
}
|
||||
|
||||
std::stringstream out;
|
||||
out << "\n";
|
||||
|
||||
if (deprecated.size ())
|
||||
{
|
||||
out << "Your .taskrc file contains reports with deprecated columns. "
|
||||
<< "Please check for entry_time, start_time or end_time in:\n";
|
||||
|
||||
foreach (i, deprecated)
|
||||
out << " " << *i << "\n";
|
||||
|
||||
out << "\n";
|
||||
}
|
||||
|
||||
return out.str ();
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// task - a command line task list manager.
|
||||
// taskwarrior - a command line task list manager.
|
||||
//
|
||||
// Copyright 2006 - 2010, Paul Beckingham.
|
||||
// All rights reserved.
|
||||
@@ -60,6 +60,7 @@ public:
|
||||
void all (std::vector <std::string>&);
|
||||
|
||||
std::string checkForDeprecatedColor ();
|
||||
std::string checkForDeprecatedColumns ();
|
||||
|
||||
public:
|
||||
File original_file;
|
||||
|
||||
333
src/Context.cpp
333
src/Context.cpp
@@ -1,7 +1,7 @@
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// task - a command line task list manager.
|
||||
// taskwarrior - a command line task list manager.
|
||||
//
|
||||
// Copyright 2006 - 2010, Paul Beckingham.
|
||||
// Copyright 2006 - 2010, Paul Beckingham, Federico Hernandez.
|
||||
// All rights reserved.
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or modify it under
|
||||
@@ -125,8 +125,6 @@ void Context::initialize ()
|
||||
if (locale != "")
|
||||
stringtable.load (location.data + "/strings." + locale);
|
||||
|
||||
// TODO Handle "--version, -v" right here?
|
||||
|
||||
// init TDB.
|
||||
tdb.clear ();
|
||||
std::vector <std::string> all;
|
||||
@@ -163,18 +161,19 @@ int Context::run ()
|
||||
if (config.getBoolean ("debug"))
|
||||
foreach (d, debugMessages)
|
||||
if (config.getBoolean ("color") || config.getBoolean ("_forcecolor"))
|
||||
std::cout << colorizeDebug (*d) << std::endl;
|
||||
std::cout << colorizeDebug (*d) << "\n";
|
||||
else
|
||||
std::cout << *d << std::endl;
|
||||
std::cout << *d << "\n";
|
||||
hooks.trigger ("post-debug");
|
||||
|
||||
// Dump all headers.
|
||||
hooks.trigger ("pre-header");
|
||||
foreach (h, headers)
|
||||
if (config.getBoolean ("color") || config.getBoolean ("_forcecolor"))
|
||||
std::cout << colorizeHeader (*h) << std::endl;
|
||||
else
|
||||
std::cout << *h << std::endl;
|
||||
if (config.getBoolean ("verbose"))
|
||||
foreach (h, headers)
|
||||
if (config.getBoolean ("color") || config.getBoolean ("_forcecolor"))
|
||||
std::cout << colorizeHeader (*h) << "\n";
|
||||
else
|
||||
std::cout << *h << "\n";
|
||||
hooks.trigger ("post-header");
|
||||
|
||||
// Dump the report output.
|
||||
@@ -184,11 +183,12 @@ int Context::run ()
|
||||
|
||||
// Dump all footnotes.
|
||||
hooks.trigger ("pre-footnote");
|
||||
foreach (f, footnotes)
|
||||
if (config.getBoolean ("color") || config.getBoolean ("_forcecolor"))
|
||||
std::cout << colorizeFootnote (*f) << std::endl;
|
||||
else
|
||||
std::cout << *f << std::endl;
|
||||
if (config.getBoolean ("verbose"))
|
||||
foreach (f, footnotes)
|
||||
if (config.getBoolean ("color") || config.getBoolean ("_forcecolor"))
|
||||
std::cout << colorizeFootnote (*f) << "\n";
|
||||
else
|
||||
std::cout << *f << "\n";
|
||||
hooks.trigger ("post-footnote");
|
||||
|
||||
hooks.trigger ("pre-exit");
|
||||
@@ -205,52 +205,65 @@ int Context::dispatch (std::string &out)
|
||||
hooks.trigger ("pre-dispatch");
|
||||
|
||||
// TODO Just look at this thing. It cries out for a dispatch table.
|
||||
if (cmd.command == "projects") { rc = handleProjects (out); }
|
||||
else if (cmd.command == "tags") { rc = handleTags (out); }
|
||||
else if (cmd.command == "colors") { rc = handleColor (out); }
|
||||
else if (cmd.command == "version") { rc = handleVersion (out); }
|
||||
else if (cmd.command == "config") { rc = handleConfig (out); }
|
||||
else if (cmd.command == "help") { rc = longUsage (out); }
|
||||
else if (cmd.command == "stats") { rc = handleReportStats (out); }
|
||||
else if (cmd.command == "info") { rc = handleInfo (out); }
|
||||
else if (cmd.command == "history") { rc = handleReportHistory (out); }
|
||||
else if (cmd.command == "ghistory") { rc = handleReportGHistory (out); }
|
||||
else if (cmd.command == "summary") { rc = handleReportSummary (out); }
|
||||
else if (cmd.command == "calendar") { rc = handleReportCalendar (out); }
|
||||
else if (cmd.command == "timesheet") { rc = handleReportTimesheet (out); }
|
||||
else if (cmd.command == "add") { rc = handleAdd (out); }
|
||||
else if (cmd.command == "append") { rc = handleAppend (out); }
|
||||
else if (cmd.command == "prepend") { rc = handlePrepend (out); }
|
||||
else if (cmd.command == "annotate") { rc = handleAnnotate (out); }
|
||||
else if (cmd.command == "done") { rc = handleDone (out); }
|
||||
else if (cmd.command == "delete") { rc = handleDelete (out); }
|
||||
else if (cmd.command == "start") { rc = handleStart (out); }
|
||||
else if (cmd.command == "stop") { rc = handleStop (out); }
|
||||
else if (cmd.command == "export") { rc = handleExport (out); }
|
||||
else if (cmd.command == "import") { rc = handleImport (out); }
|
||||
else if (cmd.command == "duplicate") { rc = handleDuplicate (out); }
|
||||
else if (cmd.command == "edit") { rc = handleEdit (out); }
|
||||
if (cmd.command == "projects") { rc = handleProjects (out); }
|
||||
else if (cmd.command == "tags") { rc = handleTags (out); }
|
||||
else if (cmd.command == "colors") { rc = handleColor (out); }
|
||||
else if (cmd.command == "version") { rc = handleVersion (out); }
|
||||
else if (cmd.command == "config") { rc = handleConfig (out); }
|
||||
else if (cmd.command == "show") { rc = handleShow (out); }
|
||||
else if (cmd.command == "help") { rc = longUsage (out); }
|
||||
else if (cmd.command == "stats") { rc = handleReportStats (out); }
|
||||
else if (cmd.command == "info") { rc = handleInfo (out); }
|
||||
else if (cmd.command == "history.monthly") { rc = handleReportHistoryMonthly (out); }
|
||||
else if (cmd.command == "history.annual") { rc = handleReportHistoryAnnual (out); }
|
||||
else if (cmd.command == "ghistory.monthly") { rc = handleReportGHistoryMonthly (out); }
|
||||
else if (cmd.command == "ghistory.annual") { rc = handleReportGHistoryAnnual (out); }
|
||||
else if (cmd.command == "summary") { rc = handleReportSummary (out); }
|
||||
else if (cmd.command == "calendar") { rc = handleReportCalendar (out); }
|
||||
else if (cmd.command == "timesheet") { rc = handleReportTimesheet (out); }
|
||||
else if (cmd.command == "add") { rc = handleAdd (out); }
|
||||
else if (cmd.command == "log") { rc = handleLog (out); }
|
||||
else if (cmd.command == "append") { rc = handleAppend (out); }
|
||||
else if (cmd.command == "prepend") { rc = handlePrepend (out); }
|
||||
else if (cmd.command == "annotate") { rc = handleAnnotate (out); }
|
||||
else if (cmd.command == "denotate") { rc = handleDenotate (out); }
|
||||
else if (cmd.command == "done") { rc = handleDone (out); }
|
||||
else if (cmd.command == "delete") { rc = handleDelete (out); }
|
||||
else if (cmd.command == "start") { rc = handleStart (out); }
|
||||
else if (cmd.command == "stop") { rc = handleStop (out); }
|
||||
else if (cmd.command == "export.csv") { rc = handleExportCSV (out); }
|
||||
else if (cmd.command == "export.ical") { rc = handleExportiCal (out); }
|
||||
else if (cmd.command == "export.yaml") { rc = handleExportYAML (out); }
|
||||
else if (cmd.command == "import") { rc = handleImport (out); }
|
||||
else if (cmd.command == "duplicate") { rc = handleDuplicate (out); }
|
||||
else if (cmd.command == "edit") { rc = handleEdit (out); }
|
||||
#ifdef FEATURE_SHELL
|
||||
else if (cmd.command == "shell") { handleShell ( ); }
|
||||
else if (cmd.command == "shell") { handleShell ( ); }
|
||||
#endif
|
||||
else if (cmd.command == "undo") { handleUndo ( ); }
|
||||
else if (cmd.command == "_projects") { rc = handleCompletionProjects (out); }
|
||||
else if (cmd.command == "_tags") { rc = handleCompletionTags (out); }
|
||||
else if (cmd.command == "_commands") { rc = handleCompletionCommands (out); }
|
||||
else if (cmd.command == "_ids") { rc = handleCompletionIDs (out); }
|
||||
else if (cmd.command == "_config") { rc = handleCompletionConfig (out); }
|
||||
else if (cmd.command == "_version") { rc = handleCompletionVersion (out); }
|
||||
else if (cmd.command == "undo") { handleUndo ( ); }
|
||||
else if (cmd.command == "merge") { tdb.gc ();
|
||||
handleMerge (out); }
|
||||
else if (cmd.command == "push") { handlePush (out); }
|
||||
else if (cmd.command == "pull") { handlePull (out); }
|
||||
else if (cmd.command == "diagnostics") { handleDiagnostics (out); }
|
||||
else if (cmd.command == "_projects") { rc = handleCompletionProjects (out); }
|
||||
else if (cmd.command == "_tags") { rc = handleCompletionTags (out); }
|
||||
else if (cmd.command == "_commands") { rc = handleCompletionCommands (out); }
|
||||
else if (cmd.command == "_ids") { rc = handleCompletionIDs (out); }
|
||||
else if (cmd.command == "_config") { rc = handleCompletionConfig (out); }
|
||||
else if (cmd.command == "_version") { rc = handleCompletionVersion (out); }
|
||||
else if (cmd.command == "_urgency") { rc = handleUrgency (out); }
|
||||
else if (cmd.command == "" &&
|
||||
sequence.size ()) { rc = handleModify (out); }
|
||||
sequence.size ()) { rc = handleModify (out); }
|
||||
|
||||
// Command that display IDs and therefore need TDB::gc first.
|
||||
else if (cmd.command == "next") { if (!inShadow) tdb.gc (); rc = handleReportNext (out); }
|
||||
else if (cmd.validCustom (cmd.command)) { if (!inShadow) tdb.gc (); rc = handleCustomReport (cmd.command, out); }
|
||||
// Commands that display IDs and therefore need TDB::gc first.
|
||||
else if (cmd.validCustom (cmd.command)) { if (!inShadow) tdb.gc ();
|
||||
rc = handleCustomReport (cmd.command, out); }
|
||||
|
||||
// If the command is not recognized, display usage.
|
||||
else { hooks.trigger ("pre-usage-command");
|
||||
rc = shortUsage (out);
|
||||
hooks.trigger ("post-usage-command"); }
|
||||
else { hooks.trigger ("pre-usage-command");
|
||||
rc = shortUsage (out);
|
||||
hooks.trigger ("post-usage-command"); }
|
||||
|
||||
// Only update the shadow file if such an update was not suppressed (shadow),
|
||||
if (cmd.isWriteCommand () && !inShadow)
|
||||
@@ -269,17 +282,15 @@ void Context::shadow ()
|
||||
{
|
||||
inShadow = true; // Prevents recursion in case shadow command writes.
|
||||
|
||||
// TODO Reinstate these checks.
|
||||
/*
|
||||
// Check for silly shadow file settings.
|
||||
if (shadowFile == dataLocation + "/pending.data")
|
||||
std::string dataLocation = config.get ("data.location");
|
||||
if (shadowFile.data == dataLocation + "/pending.data")
|
||||
throw std::string ("Configuration variable 'shadow.file' is set to "
|
||||
"overwrite your pending tasks. Please change it.");
|
||||
|
||||
if (shadowFile == dataLocation + "/completed.data")
|
||||
if (shadowFile.data == dataLocation + "/completed.data")
|
||||
throw std::string ("Configuration variable 'shadow.file' is set to "
|
||||
"overwrite your completed tasks. Please change it.");
|
||||
*/
|
||||
|
||||
std::string oldCurses = config.get ("curses");
|
||||
std::string oldColor = config.get ("color");
|
||||
@@ -315,7 +326,7 @@ void Context::shadow ()
|
||||
|
||||
// Optionally display a notification that the shadow file was updated.
|
||||
if (config.getBoolean ("shadow.notify"))
|
||||
footnote (std::string ("[Shadow file '") + shadowFile.data + "' updated]");
|
||||
footnote (std::string ("[Shadow file '") + shadowFile.data + "' updated.]");
|
||||
|
||||
inShadow = false;
|
||||
}
|
||||
@@ -363,6 +374,45 @@ void Context::disallowModification () const
|
||||
+ "' command does not allow further modification of a task.";
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// Takes a vector of args (foo, rc.name:value, bar), extracts any rc.name:value
|
||||
// args and sets the name/value in context.config, returning only the plain args
|
||||
// (foo, bar) as output.
|
||||
void Context::applyOverrides (
|
||||
const std::vector <std::string>& input,
|
||||
std::vector <std::string>& output)
|
||||
{
|
||||
bool foundTerminator = false;
|
||||
foreach (in, input)
|
||||
{
|
||||
if (*in == "--")
|
||||
{
|
||||
foundTerminator = true;
|
||||
output.push_back (*in);
|
||||
}
|
||||
else if (!foundTerminator && in->substr (0, 3) == "rc.")
|
||||
{
|
||||
std::string name;
|
||||
std::string value;
|
||||
Nibbler n (*in);
|
||||
if (n.getLiteral ("rc.") && // rc.
|
||||
n.getUntilOneOf (":=", name) && // xxx
|
||||
n.skipN (1)) // :
|
||||
{
|
||||
n.getUntilEOS (value); // Don't care if it's blank.
|
||||
|
||||
config.set (name, value);
|
||||
var_overrides += " " + *in;
|
||||
footnote ("Configuration override " + in->substr (3));
|
||||
}
|
||||
else
|
||||
footnote ("Problem with override: " + *in);
|
||||
}
|
||||
else
|
||||
output.push_back (*in);
|
||||
}
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
void Context::loadCorrectConfigFile ()
|
||||
{
|
||||
@@ -413,8 +463,8 @@ void Context::loadCorrectConfigFile ()
|
||||
{
|
||||
if (*arg == "--")
|
||||
break;
|
||||
else if (arg->substr (0, 17) == "rc.data.location:" ||
|
||||
arg->substr (0, 17) == "rc.data.location=")
|
||||
else if (arg->substr (0, 16) == "rc.data.location" &&
|
||||
((*arg)[16] == ':' || (*arg)[16] == '='))
|
||||
{
|
||||
data = Directory (arg->substr (17));
|
||||
header ("Using alternate data.location " + data.data); // TODO i18n
|
||||
@@ -425,60 +475,23 @@ void Context::loadCorrectConfigFile ()
|
||||
// Do we need to create a default rc?
|
||||
if (! rc.exists ())
|
||||
{
|
||||
if (confirm ("A configuration file could not be found in " // TODO i18n
|
||||
+ home
|
||||
+ "\n\n"
|
||||
+ "Would you like a sample "
|
||||
+ rc.data
|
||||
+ " created, so task can proceed?"))
|
||||
{
|
||||
config.createDefaultRC (rc, data);
|
||||
}
|
||||
else
|
||||
if (!confirm ("A configuration file could not be found in " // TODO i18n
|
||||
+ home
|
||||
+ "\n\n"
|
||||
+ "Would you like a sample "
|
||||
+ rc.data
|
||||
+ " created, so taskwarrior can proceed?"))
|
||||
throw std::string ("Cannot proceed without rc file.");
|
||||
|
||||
config.createDefaultRC (rc, data);
|
||||
}
|
||||
|
||||
// Create data location, if necessary.
|
||||
config.createDefaultData (data);
|
||||
|
||||
// TODO find out why this was done twice - see tw #355
|
||||
// Load rc file.
|
||||
//config.clear (); // Dump current values.
|
||||
//config.setDefaults (); // Add in the custom reports.
|
||||
//config.load (rc); // Load new file.
|
||||
|
||||
// Apply overrides of type: "rc.name:value", or "rc.name=value".
|
||||
// Apply rc overrides.
|
||||
std::vector <std::string> filtered;
|
||||
bool foundTerminator = false;
|
||||
foreach (arg, args)
|
||||
{
|
||||
if (*arg == "--")
|
||||
{
|
||||
foundTerminator = true;
|
||||
filtered.push_back (*arg);
|
||||
}
|
||||
else if (!foundTerminator &&
|
||||
arg->substr (0, 3) == "rc.")
|
||||
{
|
||||
std::string name;
|
||||
std::string value;
|
||||
Nibbler n (*arg);
|
||||
if (n.getUntil ('.', name) &&
|
||||
n.skip ('.') &&
|
||||
n.getUntilOneOf (":=", name) &&
|
||||
n.skipN (1) &&
|
||||
n.getUntilEOS (value))
|
||||
{
|
||||
config.set (name, value);
|
||||
var_overrides += " " + *arg;
|
||||
footnote (std::string ("Configuration override ") + // TODO i18n
|
||||
arg->substr (3));
|
||||
}
|
||||
}
|
||||
else
|
||||
filtered.push_back (*arg);
|
||||
}
|
||||
|
||||
applyOverrides (args, filtered);
|
||||
args = filtered;
|
||||
}
|
||||
|
||||
@@ -526,6 +539,7 @@ void Context::parse (
|
||||
bool terminated = false;
|
||||
bool foundSequence = false;
|
||||
bool foundSomethingAfterSequence = false;
|
||||
bool foundNonSequence = false;
|
||||
|
||||
foreach (arg, parseArgs)
|
||||
{
|
||||
@@ -540,7 +554,7 @@ void Context::parse (
|
||||
|
||||
// Sequence
|
||||
// Note: "add" doesn't require an ID
|
||||
else if (parseCmd.command != "add" &&
|
||||
else if (parseCmd.command != "add" &&
|
||||
! foundSomethingAfterSequence &&
|
||||
parseSequence.valid (*arg))
|
||||
{
|
||||
@@ -558,6 +572,8 @@ void Context::parse (
|
||||
if (foundSequence)
|
||||
foundSomethingAfterSequence = true;
|
||||
|
||||
foundNonSequence = true;
|
||||
|
||||
if (arg->find (',') != std::string::npos)
|
||||
throw stringtable.get (TAGS_NO_COMMA,
|
||||
"Tags are not permitted to contain commas.");
|
||||
@@ -575,6 +591,8 @@ void Context::parse (
|
||||
if (foundSequence)
|
||||
foundSomethingAfterSequence = true;
|
||||
|
||||
foundNonSequence = true;
|
||||
|
||||
if (arg->find (',') != std::string::npos)
|
||||
throw stringtable.get (TAGS_NO_COMMA,
|
||||
"Tags are not permitted to contain commas.");
|
||||
@@ -582,6 +600,18 @@ void Context::parse (
|
||||
tagRemovals.push_back (arg->substr (1));
|
||||
}
|
||||
|
||||
// Substitution of description and/or annotation text.
|
||||
else if (parseSubst.valid (*arg))
|
||||
{
|
||||
if (foundSequence)
|
||||
foundSomethingAfterSequence = true;
|
||||
|
||||
foundNonSequence = true;
|
||||
|
||||
debug ("parse subst '" + *arg + "'");
|
||||
parseSubst.parse (*arg);
|
||||
}
|
||||
|
||||
// Atributes - name[.mod]:[value]
|
||||
else if (attribute.valid (*arg))
|
||||
{
|
||||
@@ -589,6 +619,8 @@ void Context::parse (
|
||||
if (foundSequence)
|
||||
foundSomethingAfterSequence = true;
|
||||
|
||||
foundNonSequence = true;
|
||||
|
||||
attribute.parse (*arg);
|
||||
|
||||
// There has to be a better way. And it starts with a fresh coffee.
|
||||
@@ -618,22 +650,14 @@ void Context::parse (
|
||||
if (foundSequence)
|
||||
foundSomethingAfterSequence = true;
|
||||
|
||||
foundNonSequence = true;
|
||||
|
||||
if (descCandidate.length ())
|
||||
descCandidate += " ";
|
||||
descCandidate += *arg;
|
||||
}
|
||||
}
|
||||
|
||||
// Substitution of description and/or annotation text.
|
||||
else if (parseSubst.valid (*arg))
|
||||
{
|
||||
if (foundSequence)
|
||||
foundSomethingAfterSequence = true;
|
||||
|
||||
debug ("parse subst '" + *arg + "'");
|
||||
parseSubst.parse (*arg);
|
||||
}
|
||||
|
||||
// It might be a command if one has not already been found.
|
||||
else if (parseCmd.command == "" &&
|
||||
parseCmd.valid (*arg))
|
||||
@@ -643,6 +667,8 @@ void Context::parse (
|
||||
|
||||
if (foundSequence)
|
||||
foundSomethingAfterSequence = true;
|
||||
|
||||
foundNonSequence = true;
|
||||
}
|
||||
|
||||
// Anything else is just considered description.
|
||||
@@ -651,6 +677,8 @@ void Context::parse (
|
||||
if (foundSequence)
|
||||
foundSomethingAfterSequence = true;
|
||||
|
||||
foundNonSequence = true;
|
||||
|
||||
if (descCandidate.length ())
|
||||
descCandidate += " ";
|
||||
descCandidate += *arg;
|
||||
@@ -675,6 +703,8 @@ void Context::parse (
|
||||
debug ("parse description '" + descCandidate + "'");
|
||||
parseTask.set ("description", descCandidate);
|
||||
|
||||
foundNonSequence = true;
|
||||
|
||||
// Now convert the description to a filter on each word, if necessary.
|
||||
if (parseCmd.isReadOnlyCommand ())
|
||||
{
|
||||
@@ -701,31 +731,43 @@ void Context::parse (
|
||||
|
||||
// If no command was specified, and there were no command line arguments
|
||||
// then invoke the default command.
|
||||
if (parseCmd.command == "" && parseArgs.size () == 0)
|
||||
if (parseCmd.command == "")
|
||||
{
|
||||
// Apply overrides, if any.
|
||||
std::string defaultCommand = config.get ("default.command");
|
||||
if (defaultCommand != "")
|
||||
if (parseArgs.size () == 0)
|
||||
{
|
||||
// Add on the overrides.
|
||||
defaultCommand += " " + file_override + " " + var_overrides;
|
||||
// Apply overrides, if any.
|
||||
std::string defaultCommand = config.get ("default.command");
|
||||
if (defaultCommand != "")
|
||||
{
|
||||
// Add on the overrides.
|
||||
defaultCommand += " " + file_override + " " + var_overrides;
|
||||
|
||||
// Stuff the command line.
|
||||
args.clear ();
|
||||
split (args, defaultCommand, ' ');
|
||||
header ("[task " + trim (defaultCommand) + "]");
|
||||
// Stuff the command line.
|
||||
args.clear ();
|
||||
split (args, defaultCommand, ' ');
|
||||
header ("[task " + trim (defaultCommand) + "]");
|
||||
|
||||
// Reinitialize the context and recurse.
|
||||
file_override = "";
|
||||
var_overrides = "";
|
||||
footnotes.clear ();
|
||||
initialize ();
|
||||
parse (args, cmd, task, sequence, subst, filter);
|
||||
// Reinitialize the context and recurse.
|
||||
file_override = "";
|
||||
var_overrides = "";
|
||||
footnotes.clear ();
|
||||
initialize ();
|
||||
parse (args, cmd, task, sequence, subst, filter);
|
||||
}
|
||||
else
|
||||
throw stringtable.get (
|
||||
CMD_MISSING,
|
||||
"You must specify a command, or a task ID to modify.");
|
||||
}
|
||||
|
||||
// If the command "task 123" is entered, but with no modifier arguments,
|
||||
// then the actual command is assumed to be "info".
|
||||
else if (!foundNonSequence &&
|
||||
(parseTask.id != 0 || parseSequence.size () != 0))
|
||||
{
|
||||
std::cout << "No command - assuming 'info'.\n";
|
||||
parseCmd.command = "info";
|
||||
}
|
||||
else
|
||||
throw stringtable.get (
|
||||
CMD_MISSING,
|
||||
"You must specify a command, or a task ID to modify");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -799,11 +841,8 @@ void Context::autoFilter (Att& a, Filter& f)
|
||||
{
|
||||
}
|
||||
|
||||
// The mechanism for filtering on tags is +/-<tag>.
|
||||
// Do not handle here - see below.
|
||||
else if (a.name () == "tags")
|
||||
{
|
||||
}
|
||||
// Note: Tags are handled via the +/-<tag> syntax, but also via attribute
|
||||
// modifiers.
|
||||
|
||||
// Generic attribute matching.
|
||||
else
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// task - a command line task list manager.
|
||||
// taskwarrior - a command line task list manager.
|
||||
//
|
||||
// Copyright 2006 - 2010, Paul Beckingham.
|
||||
// All rights reserved.
|
||||
@@ -55,6 +55,7 @@ public:
|
||||
void shadow (); // shadow file update
|
||||
|
||||
int getWidth (); // determine terminal width
|
||||
int getHeight (); // determine terminal height
|
||||
|
||||
void header (const std::string&); // Header message sink
|
||||
void footnote (const std::string&); // Footnote message sink
|
||||
@@ -67,6 +68,7 @@ public:
|
||||
|
||||
std::string canonicalize (const std::string&) const;
|
||||
void disallowModification () const;
|
||||
void applyOverrides (const std::vector <std::string>&, std::vector <std::string>&);
|
||||
|
||||
private:
|
||||
void loadCorrectConfigFile ();
|
||||
@@ -93,7 +95,6 @@ public:
|
||||
std::vector <std::string> tagRemovals;
|
||||
Hooks hooks;
|
||||
|
||||
private:
|
||||
std::vector <std::string> headers;
|
||||
std::vector <std::string> footnotes;
|
||||
std::vector <std::string> debugMessages;
|
||||
|
||||
486
src/Date.cpp
486
src/Date.cpp
@@ -1,5 +1,5 @@
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// task - a command line task list manager.
|
||||
// taskwarrior - a command line task list manager.
|
||||
//
|
||||
// Copyright 2006 - 2010, Paul Beckingham, Federico Hernandez.
|
||||
// All rights reserved.
|
||||
@@ -24,7 +24,7 @@
|
||||
// USA
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
#include <iostream>
|
||||
#include <iomanip>
|
||||
#include <sstream>
|
||||
#include <time.h>
|
||||
#include <assert.h>
|
||||
@@ -55,120 +55,145 @@ Date::Date (const int m, const int d, const int y)
|
||||
{
|
||||
// Error if not valid.
|
||||
struct tm t = {0};
|
||||
t.tm_mday = d;
|
||||
t.tm_mon = m - 1;
|
||||
t.tm_year = y - 1900;
|
||||
t.tm_isdst = -1; // Requests that mktime determine summer time effect.
|
||||
t.tm_mday = d;
|
||||
t.tm_mon = m - 1;
|
||||
t.tm_year = y - 1900;
|
||||
|
||||
mT = mktime (&t);
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
Date::Date (const std::string& mdy, const std::string& format /* = "m/d/Y" */)
|
||||
Date::Date (const int m, const int d, const int y,
|
||||
const int hr, const int mi, const int se)
|
||||
{
|
||||
int month = 0;
|
||||
int day = 0;
|
||||
int year = 0;
|
||||
// Error if not valid.
|
||||
struct tm t = {0};
|
||||
t.tm_isdst = -1; // Requests that mktime determine summer time effect.
|
||||
t.tm_mday = d;
|
||||
t.tm_mon = m - 1;
|
||||
t.tm_year = y - 1900;
|
||||
t.tm_hour = hr;
|
||||
t.tm_min = mi;
|
||||
t.tm_sec = se;
|
||||
|
||||
mT = mktime (&t);
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
Date::Date (const std::string& input, const std::string& format /* = "m/d/Y" */)
|
||||
{
|
||||
int month = 0;
|
||||
int day = 0;
|
||||
int year = -1; // So we can check later.
|
||||
int hour = 0;
|
||||
int minute = 0;
|
||||
int second = 0;
|
||||
|
||||
// Perhaps it is an epoch date, in string form?
|
||||
if (isEpoch (mdy))
|
||||
if (isEpoch (input))
|
||||
return;
|
||||
|
||||
// Before parsing according to "format", perhaps this is a relative date?
|
||||
if (isRelativeDate (mdy))
|
||||
if (isRelativeDate (input))
|
||||
return;
|
||||
|
||||
unsigned int i = 0; // Index into mdy.
|
||||
unsigned int i = 0; // Index into input.
|
||||
|
||||
// Format may include: mMdDyYVaAbBhHNS
|
||||
//
|
||||
// Note that the format should never include T or Z, as that interferes with
|
||||
// the potential parsing for ISO dates constructed from the above format.
|
||||
for (unsigned int f = 0; f < format.length (); ++f)
|
||||
{
|
||||
switch (format[f])
|
||||
{
|
||||
// Single or double digit.
|
||||
case 'm':
|
||||
if (i >= mdy.length () ||
|
||||
! isdigit (mdy[i]))
|
||||
if (i >= input.length () ||
|
||||
! isdigit (input[i]))
|
||||
{
|
||||
throw std::string ("\"") + mdy + "\" is not a valid date (m).";
|
||||
throw std::string ("\"") + input + "\" is not a valid date (m).";
|
||||
}
|
||||
|
||||
if (i + 1 < mdy.length () &&
|
||||
(mdy[i + 0] == '0' || mdy[i + 0] == '1') &&
|
||||
isdigit (mdy[i + 1]))
|
||||
if (i + 1 < input.length () &&
|
||||
(input[i + 0] == '0' || input[i + 0] == '1') &&
|
||||
isdigit (input[i + 1]))
|
||||
{
|
||||
month = atoi (mdy.substr (i, 2).c_str ());
|
||||
month = atoi (input.substr (i, 2).c_str ());
|
||||
i += 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
month = atoi (mdy.substr (i, 1).c_str ());
|
||||
month = atoi (input.substr (i, 1).c_str ());
|
||||
++i;
|
||||
}
|
||||
break;
|
||||
|
||||
case 'd':
|
||||
if (i >= mdy.length () ||
|
||||
! isdigit (mdy[i]))
|
||||
if (i >= input.length () ||
|
||||
! isdigit (input[i]))
|
||||
{
|
||||
throw std::string ("\"") + mdy + "\" is not a valid date (d).";
|
||||
throw std::string ("\"") + input + "\" is not a valid date (d).";
|
||||
}
|
||||
|
||||
if (i + 1 < mdy.length () &&
|
||||
(mdy[i + 0] == '0' || mdy[i + 0] == '1' || mdy[i + 0] == '2' || mdy[i + 0] == '3') &&
|
||||
isdigit (mdy[i + 1]))
|
||||
if (i + 1 < input.length () &&
|
||||
(input[i + 0] == '0' || input[i + 0] == '1' || input[i + 0] == '2' || input[i + 0] == '3') &&
|
||||
isdigit (input[i + 1]))
|
||||
{
|
||||
day = atoi (mdy.substr (i, 2).c_str ());
|
||||
day = atoi (input.substr (i, 2).c_str ());
|
||||
i += 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
day = atoi (mdy.substr (i, 1).c_str ());
|
||||
day = atoi (input.substr (i, 1).c_str ());
|
||||
++i;
|
||||
}
|
||||
break;
|
||||
|
||||
// Double digit.
|
||||
case 'y':
|
||||
if (i + 1 >= mdy.length () ||
|
||||
! isdigit (mdy[i + 0]) ||
|
||||
! isdigit (mdy[i + 1]))
|
||||
if (i + 1 >= input.length () ||
|
||||
! isdigit (input[i + 0]) ||
|
||||
! isdigit (input[i + 1]))
|
||||
{
|
||||
throw std::string ("\"") + mdy + "\" is not a valid date (y).";
|
||||
throw std::string ("\"") + input + "\" is not a valid date (y).";
|
||||
}
|
||||
|
||||
year = atoi (mdy.substr (i, 2).c_str ()) + 2000;
|
||||
year = atoi (input.substr (i, 2).c_str ()) + 2000;
|
||||
i += 2;
|
||||
break;
|
||||
|
||||
case 'M':
|
||||
if (i + 1 >= mdy.length () ||
|
||||
! isdigit (mdy[i + 0]) ||
|
||||
! isdigit (mdy[i + 1]))
|
||||
if (i + 1 >= input.length () ||
|
||||
! isdigit (input[i + 0]) ||
|
||||
! isdigit (input[i + 1]))
|
||||
{
|
||||
throw std::string ("\"") + mdy + "\" is not a valid date (M).";
|
||||
throw std::string ("\"") + input + "\" is not a valid date (M).";
|
||||
}
|
||||
|
||||
month = atoi (mdy.substr (i, 2).c_str ());
|
||||
month = atoi (input.substr (i, 2).c_str ());
|
||||
i += 2;
|
||||
break;
|
||||
|
||||
case 'D':
|
||||
if (i + 1 >= mdy.length () ||
|
||||
! isdigit (mdy[i + 0]) ||
|
||||
! isdigit (mdy[i + 1]))
|
||||
if (i + 1 >= input.length () ||
|
||||
! isdigit (input[i + 0]) ||
|
||||
! isdigit (input[i + 1]))
|
||||
{
|
||||
throw std::string ("\"") + mdy + "\" is not a valid date (D).";
|
||||
throw std::string ("\"") + input + "\" is not a valid date (D).";
|
||||
}
|
||||
|
||||
day = atoi (mdy.substr (i, 2).c_str ());
|
||||
day = atoi (input.substr (i, 2).c_str ());
|
||||
i += 2;
|
||||
break;
|
||||
|
||||
case 'V':
|
||||
if (i + 1 >= mdy.length () ||
|
||||
! isdigit (mdy[i + 0]) ||
|
||||
! isdigit (mdy[i + 1]))
|
||||
if (i + 1 >= input.length () ||
|
||||
! isdigit (input[i + 0]) ||
|
||||
! isdigit (input[i + 1]))
|
||||
{
|
||||
throw std::string ("\"") + mdy + "\" is not a valid date (V).";
|
||||
throw std::string ("\"") + input + "\" is not a valid date (V).";
|
||||
}
|
||||
|
||||
i += 2;
|
||||
@@ -176,93 +201,163 @@ Date::Date (const std::string& mdy, const std::string& format /* = "m/d/Y" */)
|
||||
|
||||
// Quadruple digit.
|
||||
case 'Y':
|
||||
if (i + 3 >= mdy.length () ||
|
||||
! isdigit (mdy[i + 0]) ||
|
||||
! isdigit (mdy[i + 1]) ||
|
||||
! isdigit (mdy[i + 2]) ||
|
||||
! isdigit (mdy[i + 3]))
|
||||
if (i + 3 >= input.length () ||
|
||||
! isdigit (input[i + 0]) ||
|
||||
! isdigit (input[i + 1]) ||
|
||||
! isdigit (input[i + 2]) ||
|
||||
! isdigit (input[i + 3]))
|
||||
{
|
||||
throw std::string ("\"") + mdy + "\" is not a valid date (Y).";
|
||||
throw std::string ("\"") + input + "\" is not a valid date (Y).";
|
||||
}
|
||||
|
||||
year = atoi (mdy.substr (i, 4).c_str ());
|
||||
year = atoi (input.substr (i, 4).c_str ());
|
||||
i += 4;
|
||||
break;
|
||||
|
||||
// Short names with 3 characters
|
||||
case 'a':
|
||||
if (i + 2 >= mdy.length () ||
|
||||
isdigit (mdy[i + 0]) ||
|
||||
isdigit (mdy[i + 1]) ||
|
||||
isdigit (mdy[i + 2]))
|
||||
if (i + 2 >= input.length () ||
|
||||
isdigit (input[i + 0]) ||
|
||||
isdigit (input[i + 1]) ||
|
||||
isdigit (input[i + 2]))
|
||||
{
|
||||
throw std::string ("\"") + mdy + "\" is not a valid date (a).";
|
||||
throw std::string ("\"") + input + "\" is not a valid date (a).";
|
||||
}
|
||||
|
||||
i += 3;
|
||||
break;
|
||||
|
||||
case 'b':
|
||||
if (i + 2 >= mdy.length () ||
|
||||
isdigit (mdy[i + 0]) ||
|
||||
isdigit (mdy[i + 1]) ||
|
||||
isdigit (mdy[i + 2]))
|
||||
if (i + 2 >= input.length () ||
|
||||
isdigit (input[i + 0]) ||
|
||||
isdigit (input[i + 1]) ||
|
||||
isdigit (input[i + 2]))
|
||||
{
|
||||
throw std::string ("\"") + mdy + "\" is not a valid date (b).";
|
||||
throw std::string ("\"") + input + "\" is not a valid date (b).";
|
||||
}
|
||||
|
||||
month = Date::monthOfYear (mdy.substr (i, 3).c_str());
|
||||
month = Date::monthOfYear (input.substr (i, 3).c_str());
|
||||
i += 3;
|
||||
break;
|
||||
|
||||
// Long names
|
||||
case 'A':
|
||||
if (i + 2 >= mdy.length () ||
|
||||
isdigit (mdy[i + 0]) ||
|
||||
isdigit (mdy[i + 1]) ||
|
||||
isdigit (mdy[i + 2]))
|
||||
if (i + 2 >= input.length () ||
|
||||
isdigit (input[i + 0]) ||
|
||||
isdigit (input[i + 1]) ||
|
||||
isdigit (input[i + 2]))
|
||||
{
|
||||
throw std::string ("\"") + mdy + "\" is not a valid date (A).";
|
||||
throw std::string ("\"") + input + "\" is not a valid date (A).";
|
||||
}
|
||||
|
||||
i += Date::dayName( Date::dayOfWeek (mdy.substr (i, 3).c_str()) ).size();
|
||||
i += Date::dayName( Date::dayOfWeek (input.substr (i, 3).c_str()) ).size();
|
||||
break;
|
||||
|
||||
case 'B':
|
||||
if (i + 2 >= mdy.length () ||
|
||||
isdigit (mdy[i + 0]) ||
|
||||
isdigit (mdy[i + 1]) ||
|
||||
isdigit (mdy[i + 2]))
|
||||
if (i + 2 >= input.length () ||
|
||||
isdigit (input[i + 0]) ||
|
||||
isdigit (input[i + 1]) ||
|
||||
isdigit (input[i + 2]))
|
||||
{
|
||||
throw std::string ("\"") + mdy + "\" is not a valid date (B).";
|
||||
throw std::string ("\"") + input + "\" is not a valid date (B).";
|
||||
}
|
||||
|
||||
month = Date::monthOfYear (mdy.substr (i, 3).c_str());
|
||||
month = Date::monthOfYear (input.substr (i, 3).c_str());
|
||||
i += Date::monthName(month).size();
|
||||
break;
|
||||
|
||||
default:
|
||||
if (i >= mdy.length () ||
|
||||
mdy[i] != format[f])
|
||||
// Single or double digit.
|
||||
case 'h':
|
||||
if (i >= input.length () ||
|
||||
! isdigit (input[i]))
|
||||
{
|
||||
throw std::string ("\"") + mdy + "\" is not a valid date (DEFAULT).";
|
||||
throw std::string ("\"") + input + "\" is not a valid date (h).";
|
||||
}
|
||||
|
||||
if (i + 1 < input.length () &&
|
||||
(input[i + 0] == '0' || input[i + 0] == '1' || input[i + 0] == '2') &&
|
||||
isdigit (input[i + 1]))
|
||||
{
|
||||
hour = atoi (input.substr (i, 2).c_str ());
|
||||
i += 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
hour = atoi (input.substr (i, 1).c_str ());
|
||||
++i;
|
||||
}
|
||||
break;
|
||||
|
||||
case 'H':
|
||||
if (i + 1 >= input.length () ||
|
||||
! isdigit (input[i + 0]) ||
|
||||
! isdigit (input[i + 1]))
|
||||
{
|
||||
throw std::string ("\"") + input + "\" is not a valid date (H).";
|
||||
}
|
||||
|
||||
hour = atoi (input.substr (i, 2).c_str ());
|
||||
i += 2;
|
||||
break;
|
||||
|
||||
case 'N':
|
||||
if (i + 1 >= input.length () ||
|
||||
! isdigit (input[i + 0]) ||
|
||||
! isdigit (input[i + 1]))
|
||||
{
|
||||
throw std::string ("\"") + input + "\" is not a valid date (N).";
|
||||
}
|
||||
|
||||
minute = atoi (input.substr (i, 2).c_str ());
|
||||
i += 2;
|
||||
break;
|
||||
|
||||
case 'S':
|
||||
if (i + 1 >= input.length () ||
|
||||
! isdigit (input[i + 0]) ||
|
||||
! isdigit (input[i + 1]))
|
||||
{
|
||||
throw std::string ("\"") + input + "\" is not a valid date (S).";
|
||||
}
|
||||
|
||||
second = atoi (input.substr (i, 2).c_str ());
|
||||
i += 2;
|
||||
break;
|
||||
|
||||
default:
|
||||
if (i >= input.length () ||
|
||||
input[i] != format[f])
|
||||
{
|
||||
throw std::string ("\"") + input + "\" is not a valid date (DEFAULT).";
|
||||
}
|
||||
++i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (i < mdy.length ())
|
||||
throw std::string ("\"") + mdy + "\" is not a valid date in " + format + " format.";
|
||||
// Default the year to the current year, for formats that lack Y/y.
|
||||
if (year == -1)
|
||||
{
|
||||
time_t now = time (NULL);
|
||||
struct tm* default_year = localtime (&now);
|
||||
year = default_year->tm_year + 1900;
|
||||
}
|
||||
|
||||
if (i < input.length ())
|
||||
throw std::string ("\"") + input + "\" is not a valid date in " + format + " format.";
|
||||
|
||||
if (!valid (month, day, year))
|
||||
throw std::string ("\"") + mdy + "\" is not a valid date (VALID).";
|
||||
throw std::string ("\"") + input + "\" is not a valid date (VALID).";
|
||||
|
||||
// Duplicate Date::Date (const int, const int, const int);
|
||||
// Convert to epoch.
|
||||
struct tm t = {0};
|
||||
t.tm_mday = day;
|
||||
t.tm_mon = month - 1;
|
||||
t.tm_year = year - 1900;
|
||||
t.tm_isdst = -1; // Requests that mktime determine summer time effect.
|
||||
t.tm_mday = day;
|
||||
t.tm_mon = month - 1;
|
||||
t.tm_year = year - 1900;
|
||||
t.tm_hour = hour;
|
||||
t.tm_min = minute;
|
||||
t.tm_sec = second;
|
||||
|
||||
mT = mktime (&t);
|
||||
}
|
||||
@@ -292,6 +387,25 @@ std::string Date::toEpochString ()
|
||||
return epoch.str ();
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// 19980119T070000Z = YYYYMMDDThhmmssZ
|
||||
std::string Date::toISO ()
|
||||
{
|
||||
struct tm* t = gmtime (&mT);
|
||||
|
||||
std::stringstream iso;
|
||||
iso << std::setw (4) << std::setfill ('0') << t->tm_year + 1900
|
||||
<< std::setw (2) << std::setfill ('0') << t->tm_mon + 1
|
||||
<< std::setw (2) << std::setfill ('0') << t->tm_mday
|
||||
<< "T"
|
||||
<< std::setw (2) << std::setfill ('0') << t->tm_hour
|
||||
<< std::setw (2) << std::setfill ('0') << t->tm_min
|
||||
<< std::setw (2) << std::setfill ('0') << t->tm_sec
|
||||
<< "Z";
|
||||
|
||||
return iso.str ();
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
void Date::toEpoch (time_t& epoch)
|
||||
{
|
||||
@@ -333,6 +447,10 @@ const std::string Date::toString (const std::string& format /*= "m/d/Y" */) cons
|
||||
case 'b': sprintf (buffer, "%.3s", Date::monthName (month ()).c_str ()); break;
|
||||
case 'B': sprintf (buffer, "%.9s", Date::monthName (month ()).c_str ()); break;
|
||||
case 'V': sprintf (buffer, "%02d", Date::weekOfYear (Date::dayOfWeek (context.config.get ("weekstart")))); break;
|
||||
case 'h': sprintf (buffer, "%d", this->hour ()); break;
|
||||
case 'H': sprintf (buffer, "%02d", this->hour ()); break;
|
||||
case 'N': sprintf (buffer, "%02d", this->minute ()); break;
|
||||
case 'S': sprintf (buffer, "%02d", this->second ()); break;
|
||||
default: sprintf (buffer, "%c", c); break;
|
||||
}
|
||||
|
||||
@@ -342,19 +460,6 @@ const std::string Date::toString (const std::string& format /*= "m/d/Y" */) cons
|
||||
return formatted;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
const std::string Date::toStringWithTime (const std::string& format /*= "m/d/Y" */) const
|
||||
{
|
||||
// Format as above.
|
||||
std::string formatted = toString (format);
|
||||
|
||||
char buffer[12];
|
||||
sprintf (buffer, " %d:%02d:%02d", hour (), minute (), second ());
|
||||
formatted += buffer;
|
||||
|
||||
return formatted;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
bool Date::valid (const std::string& input, const std::string& format)
|
||||
{
|
||||
@@ -371,6 +476,22 @@ bool Date::valid (const std::string& input, const std::string& format)
|
||||
return true;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
bool Date::valid (const int m, const int d, const int y, const int hr,
|
||||
const int mi, const int se)
|
||||
{
|
||||
if (hr < 0 || hr > 23)
|
||||
return false;
|
||||
|
||||
if (mi < 0 || mi > 59)
|
||||
return false;
|
||||
|
||||
if (se < 0 || se > 59)
|
||||
return false;
|
||||
|
||||
return Date::valid (m, d, y);
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
bool Date::valid (const int m, const int d, const int y)
|
||||
{
|
||||
@@ -540,6 +661,32 @@ int Date::monthOfYear (const std::string& input)
|
||||
return -1;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
time_t Date::easter (int year)
|
||||
{
|
||||
int Y = year;
|
||||
int a = Y % 19;
|
||||
int b = Y / 100;
|
||||
int c = Y % 100;
|
||||
int d = b / 4;
|
||||
int e = b % 4;
|
||||
int f = (b + 8) / 25;
|
||||
int g = (b - f + 1) / 3;
|
||||
int h = (19 * a + b - d - g + 15) % 30;
|
||||
int i = c / 4;
|
||||
int k = c % 4;
|
||||
int L = (32 + 2 * e + 2 * i - h - k) % 7;
|
||||
int m = (a + 11 * h + 22 * L) / 451;
|
||||
int month = (h + L - 7 * m + 114) / 31;
|
||||
int day = ((h + L - 7 * m + 114) % 31) + 1;
|
||||
struct tm t = {0};
|
||||
t.tm_isdst = -1; // Requests that mktime determine summer time effect.
|
||||
t.tm_mday = day;
|
||||
t.tm_mon = month - 1;
|
||||
t.tm_year = year - 1900;
|
||||
return mktime (&t);
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
int Date::month () const
|
||||
{
|
||||
@@ -618,6 +765,18 @@ bool Date::operator>= (const Date& rhs)
|
||||
return mT >= rhs.mT;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
bool Date::sameHour (const Date& rhs)
|
||||
{
|
||||
if (this->year () == rhs.year () &&
|
||||
this->month () == rhs.month () &&
|
||||
this->day () == rhs.day () &&
|
||||
this->hour () == rhs.hour ())
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
bool Date::sameDay (const Date& rhs)
|
||||
{
|
||||
@@ -648,10 +807,16 @@ bool Date::sameYear (const Date& rhs)
|
||||
return false;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
Date Date::operator- (const int delta)
|
||||
{
|
||||
return Date (mT - delta);
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
Date Date::operator+ (const int delta)
|
||||
{
|
||||
return Date::Date (mT + delta);
|
||||
return Date (mT + delta);
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
@@ -677,8 +842,9 @@ time_t Date::operator- (const Date& rhs)
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
bool Date::isEpoch (const std::string& input)
|
||||
{
|
||||
if (digitsOnly (input) &&
|
||||
input.length () > 8)
|
||||
if (digitsOnly (input) &&
|
||||
input.length () > 8 &&
|
||||
input.length () <= 10 )
|
||||
{
|
||||
mT = (time_t) atoi (input.c_str ());
|
||||
return true;
|
||||
@@ -702,6 +868,7 @@ bool Date::isEpoch (const std::string& input)
|
||||
// eow (end of week)
|
||||
// eom (end of month)
|
||||
// eoy (end of year)
|
||||
// now
|
||||
bool Date::isRelativeDate (const std::string& input)
|
||||
{
|
||||
std::string in (lowerCase (input));
|
||||
@@ -719,8 +886,23 @@ bool Date::isRelativeDate (const std::string& input)
|
||||
supported.push_back ("tomorrow");
|
||||
supported.push_back ("yesterday");
|
||||
supported.push_back ("eow");
|
||||
supported.push_back ("eoww");
|
||||
supported.push_back ("eocw");
|
||||
supported.push_back ("eom");
|
||||
supported.push_back ("eoy");
|
||||
supported.push_back ("sow");
|
||||
supported.push_back ("soww");
|
||||
supported.push_back ("socw");
|
||||
supported.push_back ("som");
|
||||
supported.push_back ("soy");
|
||||
supported.push_back ("goodfriday");
|
||||
supported.push_back ("easter");
|
||||
supported.push_back ("eastermonday");
|
||||
supported.push_back ("ascension");
|
||||
supported.push_back ("pentecost");
|
||||
supported.push_back ("midsommar");
|
||||
supported.push_back ("midsommarafton");
|
||||
supported.push_back ("now");
|
||||
|
||||
std::vector <std::string> matches;
|
||||
if (autoComplete (in, supported, matches) == 1)
|
||||
@@ -730,11 +912,25 @@ bool Date::isRelativeDate (const std::string& input)
|
||||
// If day name.
|
||||
int dow;
|
||||
if ((dow = Date::dayOfWeek (found)) != -1 ||
|
||||
found == "eow")
|
||||
found == "eow" ||
|
||||
found == "eoww" ||
|
||||
found == "eocw" ||
|
||||
found == "sow" ||
|
||||
found == "soww" ||
|
||||
found == "socw")
|
||||
{
|
||||
if (found == "eow")
|
||||
if (found == "eow" || found == "eoww")
|
||||
dow = 5;
|
||||
|
||||
if (found == "eocw")
|
||||
dow = (Date::dayOfWeek (context.config.get ("weekstart")) + 6) % 7;
|
||||
|
||||
if (found == "sow" || found == "soww")
|
||||
dow = 1;
|
||||
|
||||
if (found == "socw")
|
||||
dow = Date::dayOfWeek (context.config.get ("weekstart"));
|
||||
|
||||
if (today.dayOfWeek () >= dow)
|
||||
today += (dow - today.dayOfWeek () + 7) * 86400;
|
||||
else
|
||||
@@ -785,6 +981,84 @@ bool Date::isRelativeDate (const std::string& input)
|
||||
mT = then.mT;
|
||||
return true;
|
||||
}
|
||||
else if (found == "som")
|
||||
{
|
||||
int m = today.month () + 1;
|
||||
int y = today.year ();
|
||||
if (m > 12)
|
||||
{
|
||||
m -=12;
|
||||
y++;
|
||||
}
|
||||
Date then (m, 1, y);
|
||||
mT = then.mT;
|
||||
return true;
|
||||
}
|
||||
else if (found == "soy")
|
||||
{
|
||||
Date then (1, 1, today.year () + 1);
|
||||
mT = then.mT;
|
||||
return true;
|
||||
}
|
||||
else if (found == "goodfriday")
|
||||
{
|
||||
Date then (Date::easter(today.year()));
|
||||
mT = then.mT - 86400*2;
|
||||
return true;
|
||||
}
|
||||
else if (found == "easter")
|
||||
{
|
||||
Date then (Date::easter(today.year()));
|
||||
mT = then.mT;
|
||||
return true;
|
||||
}
|
||||
else if (found == "eastermonday")
|
||||
{
|
||||
Date then (Date::easter(today.year()));
|
||||
mT = then.mT + 86400;
|
||||
return true;
|
||||
}
|
||||
else if (found == "ascension")
|
||||
{
|
||||
Date then (Date::easter(today.year()));
|
||||
mT = then.mT + 86400*39;
|
||||
return true;
|
||||
}
|
||||
else if (found == "pentecost")
|
||||
{
|
||||
Date then (Date::easter(today.year()));
|
||||
mT = then.mT + 86400*49;
|
||||
return true;
|
||||
}
|
||||
else if (found == "midsommar")
|
||||
{
|
||||
for (int midsommar = 20; midsommar <= 26; midsommar++)
|
||||
{
|
||||
Date then (6, midsommar, today.year ());
|
||||
if (6 == then.dayOfWeek ())
|
||||
{
|
||||
mT = then.mT;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (found == "midsommarafton")
|
||||
{
|
||||
for (int midsommar = 19; midsommar <= 25; midsommar++)
|
||||
{
|
||||
Date then (6, midsommar, today.year ());
|
||||
if (5 == then.dayOfWeek ())
|
||||
{
|
||||
mT = then.mT;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (found == "now")
|
||||
{
|
||||
mT = time (NULL);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
// Support "21st" to indicate the next date that is the 21st day.
|
||||
|
||||
10
src/Date.h
10
src/Date.h
@@ -1,5 +1,5 @@
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// task - a command line task list manager.
|
||||
// taskwarrior - a command line task list manager.
|
||||
//
|
||||
// Copyright 2006 - 2010, Paul Beckingham, Federico Hernandez.
|
||||
// All rights reserved.
|
||||
@@ -30,6 +30,7 @@
|
||||
#include <stdio.h>
|
||||
#include <string>
|
||||
|
||||
|
||||
class Date;
|
||||
|
||||
class Date
|
||||
@@ -38,6 +39,7 @@ public:
|
||||
Date ();
|
||||
Date (time_t);
|
||||
Date (const int, const int, const int);
|
||||
Date (const int, const int, const int, const int, const int, const int);
|
||||
Date (const std::string&, const std::string& format = "m/d/Y");
|
||||
Date (const Date&);
|
||||
virtual ~Date ();
|
||||
@@ -45,12 +47,14 @@ public:
|
||||
void toEpoch (time_t&);
|
||||
time_t toEpoch ();
|
||||
std::string toEpochString ();
|
||||
std::string toISO ();
|
||||
void toMDY (int&, int&, int&);
|
||||
const std::string toString (const std::string& format = "m/d/Y") const;
|
||||
const std::string toStringWithTime (const std::string& format = "m/d/Y") const;
|
||||
static bool valid (const std::string&, const std::string& format = "m/d/Y");
|
||||
static bool valid (const int, const int, const int, const int, const int, const int);
|
||||
static bool valid (const int, const int, const int);
|
||||
|
||||
static time_t easter (int year);
|
||||
static bool leapYear (int);
|
||||
static int daysInMonth (int, int);
|
||||
static std::string monthName (int);
|
||||
@@ -75,11 +79,13 @@ public:
|
||||
bool operator> (const Date&);
|
||||
bool operator<= (const Date&);
|
||||
bool operator>= (const Date&);
|
||||
bool sameHour (const Date&);
|
||||
bool sameDay (const Date&);
|
||||
bool sameMonth (const Date&);
|
||||
bool sameYear (const Date&);
|
||||
|
||||
Date operator+ (const int);
|
||||
Date operator- (const int);
|
||||
Date& operator+= (const int);
|
||||
Date& operator-= (const int);
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// task - a command line task list manager.
|
||||
// taskwarrior - a command line task list manager.
|
||||
//
|
||||
// Copyright 2006 - 2009, Paul Beckingham.
|
||||
// All rights reserved.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// task - a command line task list manager.
|
||||
// taskwarrior - a command line task list manager.
|
||||
//
|
||||
// Copyright 2006 - 2009, Paul Beckingham.
|
||||
// All rights reserved.
|
||||
|
||||
357
src/Duration.cpp
357
src/Duration.cpp
@@ -1,5 +1,5 @@
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// task - a command line task list manager.
|
||||
// taskwarrior - a command line task list manager.
|
||||
//
|
||||
// Copyright 2006 - 2010, Paul Beckingham.
|
||||
// All rights reserved.
|
||||
@@ -29,24 +29,98 @@
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include "text.h"
|
||||
#include "util.h"
|
||||
#include "Duration.h"
|
||||
|
||||
static const char* durations[] =
|
||||
{
|
||||
"annual",
|
||||
"biannual",
|
||||
"bimonthly",
|
||||
"biweekly",
|
||||
"biyearly",
|
||||
"daily",
|
||||
"days",
|
||||
"day",
|
||||
"d",
|
||||
"fortnight",
|
||||
"hours",
|
||||
"hrs",
|
||||
"h",
|
||||
"minutes",
|
||||
"mins",
|
||||
"min",
|
||||
"m",
|
||||
|
||||
"mnths",
|
||||
"monthly",
|
||||
"months",
|
||||
"month",
|
||||
"mos",
|
||||
"mo",
|
||||
"mths",
|
||||
|
||||
"quarterly",
|
||||
"quarters",
|
||||
"qrtrs",
|
||||
"qtrs",
|
||||
"q",
|
||||
"seconds",
|
||||
"secs",
|
||||
"sec",
|
||||
"s",
|
||||
"semiannual",
|
||||
"sennight",
|
||||
"weekdays",
|
||||
"weekly",
|
||||
"weeks",
|
||||
"wks",
|
||||
"w",
|
||||
"yearly",
|
||||
"years",
|
||||
"yrs",
|
||||
"y",
|
||||
"-",
|
||||
};
|
||||
|
||||
#define NUM_DURATIONS (sizeof (durations) / sizeof (durations[0]))
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
Duration::Duration ()
|
||||
: mDays (0)
|
||||
: mSecs (0)
|
||||
, mNegative (false)
|
||||
{
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
Duration::Duration (const Duration& other)
|
||||
{
|
||||
mSecs = other.mSecs;
|
||||
mNegative = other.mNegative;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
Duration::Duration (time_t input)
|
||||
{
|
||||
mDays = input;
|
||||
if (input < 0)
|
||||
{
|
||||
mSecs = -input;
|
||||
mNegative = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
mSecs = input;
|
||||
mNegative = false;
|
||||
}
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
Duration::Duration (const std::string& input)
|
||||
: mSecs (0)
|
||||
, mNegative (false)
|
||||
{
|
||||
parse (input);
|
||||
}
|
||||
@@ -54,27 +128,101 @@ Duration::Duration (const std::string& input)
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
Duration::operator time_t ()
|
||||
{
|
||||
return mDays;
|
||||
return mSecs;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
Duration::operator std::string ()
|
||||
{
|
||||
std::stringstream s;
|
||||
s << mDays;
|
||||
s << (mNegative ? - (long) mSecs : (long) mSecs);
|
||||
return s.str ();
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
Duration& Duration::operator= (const Duration& other)
|
||||
{
|
||||
if (this != &other)
|
||||
{
|
||||
mSecs = other.mSecs;
|
||||
mNegative = other.mNegative;
|
||||
}
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
std::string Duration::format () const
|
||||
{
|
||||
char formatted[24];
|
||||
float days = (float) mSecs / 86400.0;
|
||||
|
||||
if (mSecs >= 86400 * 365)
|
||||
sprintf (formatted, "%s%.1f yrs", (mNegative ? "-" : ""), (days / 365));
|
||||
else if (mSecs > 86400 * 84)
|
||||
sprintf (formatted, "%s%1d mth%s",
|
||||
(mNegative ? "-" : ""), (int) (float) (days / 30.6),
|
||||
((int) (float) (days / 30.6) == 1 ? "" : "s"));
|
||||
else if (mSecs > 86400 * 13)
|
||||
sprintf (formatted, "%s%d wk%s",
|
||||
(mNegative ? "-" : ""), (int) (float) (days / 7.0),
|
||||
((int) (float) (days / 7.0) == 1 ? "" : "s"));
|
||||
else if (mSecs >= 86400)
|
||||
sprintf (formatted, "%s%d day%s",
|
||||
(mNegative ? "-" : ""), (int) days,
|
||||
((int) days == 1 ? "" : "s"));
|
||||
else if (mSecs >= 3600)
|
||||
sprintf (formatted, "%s%d hr%s",
|
||||
(mNegative ? "-" : ""), (int) (float) (mSecs / 3600),
|
||||
((int) (float) (mSecs / 3600) == 1 ? "" : "s"));
|
||||
else if (mSecs >= 60)
|
||||
sprintf (formatted, "%s%d min%s",
|
||||
(mNegative ? "-" : ""), (int) (float) (mSecs / 60),
|
||||
((int) (float) (mSecs / 60) == 1 ? "" : "s"));
|
||||
else if (mSecs >= 1)
|
||||
sprintf (formatted, "%s%d sec%s",
|
||||
(mNegative ? "-" : ""), (int) mSecs,
|
||||
((int) mSecs == 1 ? "" : "s"));
|
||||
else
|
||||
strcpy (formatted, "-"); // no i18n
|
||||
|
||||
return std::string (formatted);
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
std::string Duration::formatCompact () const
|
||||
{
|
||||
char formatted[24];
|
||||
float days = (float) mSecs / 86400.0;
|
||||
|
||||
if (mSecs >= 86400 * 365) sprintf (formatted, "%s%.1fy", (mNegative ? "-" : ""), (days / 365));
|
||||
else if (mSecs >= 86400 * 84) sprintf (formatted, "%s%1dmo", (mNegative ? "-" : ""), (int) (float) (days / 30.6));
|
||||
else if (mSecs >= 86400 * 13) sprintf (formatted, "%s%dwk", (mNegative ? "-" : ""), (int) (float) (days / 7.0));
|
||||
else if (mSecs >= 86400) sprintf (formatted, "%s%dd", (mNegative ? "-" : ""), (int) days);
|
||||
else if (mSecs >= 3600) sprintf (formatted, "%s%dh", (mNegative ? "-" : ""), (int) (float) (mSecs / 3600));
|
||||
else if (mSecs >= 60) sprintf (formatted, "%s%dm", (mNegative ? "-" : ""), (int) (float) (mSecs / 60));
|
||||
else if (mSecs >= 1) sprintf (formatted, "%s%ds", (mNegative ? "-" : ""), (int) mSecs);
|
||||
else strcpy (formatted, "-");
|
||||
|
||||
return std::string (formatted);
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
bool Duration::operator< (const Duration& other)
|
||||
{
|
||||
return mDays < other.mDays;
|
||||
long left = (long) ( mNegative ? -mSecs : mSecs);
|
||||
long right = (long) (other.mNegative ? -other.mSecs : other.mSecs);
|
||||
|
||||
return left < right;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
bool Duration::operator> (const Duration& other)
|
||||
{
|
||||
return mDays > other.mDays;
|
||||
long left = (long) ( mNegative ? -mSecs : mSecs);
|
||||
long right = (long) (other.mNegative ? -other.mSecs : other.mSecs);
|
||||
|
||||
return left > right;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
@@ -82,50 +230,39 @@ Duration::~Duration ()
|
||||
{
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
bool Duration::negative () const
|
||||
{
|
||||
return mNegative;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
bool Duration::valid (const std::string& input) const
|
||||
{
|
||||
std::string lower_input = lowerCase (input);
|
||||
|
||||
// Assume the ordinal is 1, but look for an integer, just in case.
|
||||
int value = 1;
|
||||
Nibbler n (lower_input);
|
||||
n.skipAll (' ');
|
||||
n.getInt (value);
|
||||
n.skipAll (' ');
|
||||
|
||||
if (value < 0)
|
||||
value = -value;
|
||||
|
||||
std::string units;
|
||||
n.getUntilEOS (units);
|
||||
|
||||
// Auto complete against all supported durations.
|
||||
std::vector <std::string> supported;
|
||||
supported.push_back ("daily"); // TODO i18n
|
||||
supported.push_back ("day"); // TODO i18n
|
||||
supported.push_back ("weekly"); // TODO i18n
|
||||
supported.push_back ("weekdays"); // TODO i18n
|
||||
supported.push_back ("sennight"); // TODO i18n
|
||||
supported.push_back ("biweekly"); // TODO i18n
|
||||
supported.push_back ("fortnight"); // TODO i18n
|
||||
supported.push_back ("monthly"); // TODO i18n
|
||||
supported.push_back ("bimonthly"); // TODO i18n
|
||||
supported.push_back ("quarterly"); // TODO i18n
|
||||
supported.push_back ("biannual"); // TODO i18n
|
||||
supported.push_back ("biyearly"); // TODO i18n
|
||||
supported.push_back ("annual"); // TODO i18n
|
||||
supported.push_back ("semiannual"); // TODO i18n
|
||||
supported.push_back ("yearly"); // TODO i18n
|
||||
for (unsigned int i = 0; i < NUM_DURATIONS; ++i)
|
||||
supported.push_back (durations[i]);
|
||||
|
||||
std::vector <std::string> matches;
|
||||
if (autoComplete (lower_input, supported, matches) == 1)
|
||||
if (autoComplete (units, supported, matches) == 1)
|
||||
return true;
|
||||
|
||||
// Support \d+ d|w|m|q|y
|
||||
// Verify all digits followed by d, w, m, q, or y.
|
||||
unsigned int length = lower_input.length ();
|
||||
for (unsigned int i = 0; i < length; ++i)
|
||||
{
|
||||
if (! isdigit (lower_input[i]) &&
|
||||
i == length - 1)
|
||||
{
|
||||
std::string type = lower_input.substr (length - 1);
|
||||
if (type == "d" || // TODO i18n
|
||||
type == "w" || // TODO i18n
|
||||
type == "m" || // TODO i18n
|
||||
type == "q" || // TODO i18n
|
||||
type == "y") // TODO i18n
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -134,66 +271,98 @@ void Duration::parse (const std::string& input)
|
||||
{
|
||||
std::string lower_input = lowerCase (input);
|
||||
|
||||
std::vector <std::string> supported;
|
||||
supported.push_back ("daily"); // TODO i18n
|
||||
supported.push_back ("day"); // TODO i18n
|
||||
supported.push_back ("weekly"); // TODO i18n
|
||||
supported.push_back ("weekdays"); // TODO i18n
|
||||
supported.push_back ("sennight"); // TODO i18n
|
||||
supported.push_back ("biweekly"); // TODO i18n
|
||||
supported.push_back ("fortnight"); // TODO i18n
|
||||
supported.push_back ("monthly"); // TODO i18n
|
||||
supported.push_back ("bimonthly"); // TODO i18n
|
||||
supported.push_back ("quarterly"); // TODO i18n
|
||||
supported.push_back ("biannual"); // TODO i18n
|
||||
supported.push_back ("biyearly"); // TODO i18n
|
||||
supported.push_back ("annual"); // TODO i18n
|
||||
supported.push_back ("semiannual"); // TODO i18n
|
||||
supported.push_back ("yearly"); // TODO i18n
|
||||
// Assume the ordinal is 1, but look for an integer, just in case.
|
||||
int value = 1;
|
||||
Nibbler n (lower_input);
|
||||
n.skipAll (' ');
|
||||
n.getInt (value);
|
||||
|
||||
std::vector <std::string> matches;
|
||||
if (autoComplete (lower_input, supported, matches) == 1)
|
||||
n.skipAll (' ');
|
||||
|
||||
if (value < 0)
|
||||
{
|
||||
std::string found = matches[0];
|
||||
|
||||
if (found == "daily" || found == "day") mDays = 1; // TODO i18n
|
||||
else if (found == "weekdays") mDays = 1; // TODO i18n
|
||||
else if (found == "weekly" || found == "sennight") mDays = 7; // TODO i18n
|
||||
else if (found == "biweekly" || found == "fortnight") mDays = 14; // TODO i18n
|
||||
else if (found == "monthly") mDays = 30; // TODO i18n
|
||||
else if (found == "bimonthly") mDays = 61; // TODO i18n
|
||||
else if (found == "quarterly") mDays = 91; // TODO i18n
|
||||
else if (found == "semiannual") mDays = 183; // TODO i18n
|
||||
else if (found == "yearly" || found == "annual") mDays = 365; // TODO i18n
|
||||
else if (found == "biannual" || found == "biyearly") mDays = 730; // TODO i18n
|
||||
mNegative = true;
|
||||
value = -value;
|
||||
}
|
||||
|
||||
// Support \d+ d|w|m|q|y
|
||||
else
|
||||
{
|
||||
// Verify all digits followed by d, w, m, q, or y.
|
||||
unsigned int length = lower_input.length ();
|
||||
for (unsigned int i = 0; i < length; ++i)
|
||||
{
|
||||
if (! isdigit (lower_input[i]) &&
|
||||
i == length - 1)
|
||||
{
|
||||
int number = atoi (lower_input.substr (0, i).c_str ());
|
||||
mNegative = false;
|
||||
|
||||
switch (lower_input[length - 1])
|
||||
{
|
||||
case 'd': mDays = number * 1; break; // TODO i18n
|
||||
case 'w': mDays = number * 7; break; // TODO i18n
|
||||
case 'm': mDays = number * 30; break; // TODO i18n
|
||||
case 'q': mDays = number * 91; break; // TODO i18n
|
||||
case 'y': mDays = number * 365; break; // TODO i18n
|
||||
}
|
||||
}
|
||||
}
|
||||
std::string units;
|
||||
n.getUntilEOS (units);
|
||||
|
||||
// Auto complete against all supported durations.
|
||||
std::vector <std::string> supported;
|
||||
for (unsigned int i = 0; i < NUM_DURATIONS; ++i)
|
||||
supported.push_back (durations[i]);
|
||||
|
||||
mSecs = 0;
|
||||
std::vector <std::string> matches;
|
||||
if (autoComplete (units, supported, matches) == 1)
|
||||
{
|
||||
std::string match = matches[0];
|
||||
|
||||
if (match == "biannual") mSecs = value * 86400 * 730;
|
||||
else if (match == "biyearly") mSecs = value * 86400 * 730;
|
||||
|
||||
else if (match == "yearly") mSecs = value * 86400 * 365;
|
||||
else if (match == "annual") mSecs = value * 86400 * 365;
|
||||
else if (match == "years") mSecs = value * 86400 * 365;
|
||||
else if (match == "yrs") mSecs = value * 86400 * 365;
|
||||
else if (match == "y") mSecs = value * 86400 * 365;
|
||||
else if (match == "yearly") mSecs = value * 86400 * 365;
|
||||
else if (match == "annual") mSecs = value * 86400 * 365;
|
||||
|
||||
else if (match == "semiannual") mSecs = value * 86400 * 183;
|
||||
|
||||
else if (match == "bimonthly") mSecs = value * 86400 * 61;
|
||||
else if (match == "quarterly") mSecs = value * 86400 * 91;
|
||||
else if (match == "quarters") mSecs = value * 86400 * 91;
|
||||
else if (match == "qrtrs") mSecs = value * 86400 * 91;
|
||||
else if (match == "qtrs") mSecs = value * 86400 * 91;
|
||||
else if (match == "q") mSecs = value * 86400 * 91;
|
||||
|
||||
else if (match == "monthly") mSecs = value * 86400 * 30;
|
||||
else if (match == "month") mSecs = value * 86400 * 30;
|
||||
else if (match == "months") mSecs = value * 86400 * 30;
|
||||
else if (match == "mnths") mSecs = value * 86400 * 30;
|
||||
else if (match == "mos") mSecs = value * 86400 * 30;
|
||||
else if (match == "mo") mSecs = value * 86400 * 30;
|
||||
else if (match == "mths") mSecs = value * 86400 * 30;
|
||||
|
||||
else if (match == "biweekly") mSecs = value * 86400 * 14;
|
||||
else if (match == "fortnight") mSecs = value * 86400 * 14;
|
||||
|
||||
else if (match == "weekly") mSecs = value * 86400 * 7;
|
||||
else if (match == "sennight") mSecs = value * 86400 * 7;
|
||||
else if (match == "weeks") mSecs = value * 86400 * 7;
|
||||
else if (match == "wks") mSecs = value * 86400 * 7;
|
||||
else if (match == "w") mSecs = value * 86400 * 7;
|
||||
|
||||
else if (match == "daily") mSecs = value * 86400 * 1;
|
||||
else if (match == "day") mSecs = value * 86400 * 1;
|
||||
else if (match == "weekdays") mSecs = value * 86400 * 1;
|
||||
else if (match == "days") mSecs = value * 86400 * 1;
|
||||
else if (match == "d") mSecs = value * 86400 * 1;
|
||||
|
||||
else if (match == "hours") mSecs = value * 3600;
|
||||
else if (match == "hrs") mSecs = value * 3600;
|
||||
else if (match == "h") mSecs = value * 3600;
|
||||
|
||||
else if (match == "minutes") mSecs = value * 60;
|
||||
else if (match == "mins") mSecs = value * 60;
|
||||
else if (match == "min") mSecs = value * 60;
|
||||
else if (match == "m") mSecs = value * 60;
|
||||
|
||||
else if (match == "seconds") mSecs = value;
|
||||
else if (match == "secs") mSecs = value;
|
||||
else if (match == "sec") mSecs = value;
|
||||
else if (match == "s") mSecs = value;
|
||||
|
||||
else if (match == "-") mSecs = 0;
|
||||
}
|
||||
|
||||
if (mDays == 0)
|
||||
throw std::string ("The duration '") + input + "' was not recognized."; // TODO i18n
|
||||
if (mSecs == 0)
|
||||
throw std::string ("The duration '") + input + "' was not recognized.";
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// task - a command line task list manager.
|
||||
// taskwarrior - a command line task list manager.
|
||||
//
|
||||
// Copyright 2006 - 2010, Paul Beckingham.
|
||||
// All rights reserved.
|
||||
@@ -34,20 +34,27 @@ class Duration
|
||||
{
|
||||
public:
|
||||
Duration (); // Default constructor
|
||||
Duration (time_t); // Default constructor
|
||||
Duration (const Duration&); // Copy constructor
|
||||
Duration (time_t); // Constructor
|
||||
Duration (const std::string&); // Parse
|
||||
bool operator< (const Duration&);
|
||||
bool operator> (const Duration&);
|
||||
Duration& operator= (const Duration&);
|
||||
~Duration (); // Destructor
|
||||
|
||||
operator time_t ();
|
||||
operator std::string ();
|
||||
|
||||
std::string format () const;
|
||||
std::string formatCompact () const;
|
||||
|
||||
bool negative () const;
|
||||
bool valid (const std::string&) const;
|
||||
void parse (const std::string&);
|
||||
|
||||
private:
|
||||
time_t mDays;
|
||||
time_t mSecs;
|
||||
bool mNegative;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
14
src/File.cpp
14
src/File.cpp
@@ -1,7 +1,7 @@
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// task - a command line task list manager.
|
||||
// taskwarrior - a command line task list manager.
|
||||
//
|
||||
// Copyright 2006 - 2009, Paul Beckingham.
|
||||
// Copyright 2006 - 2010, Paul Beckingham.
|
||||
// All rights reserved.
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or modify it under
|
||||
@@ -125,6 +125,16 @@ size_t File::size () const
|
||||
return 0;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
time_t File::mtime () const
|
||||
{
|
||||
struct stat s;
|
||||
if (!stat (data.c_str (), &s))
|
||||
return s.st_mtime;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
bool File::create (const std::string& name)
|
||||
{
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user