Compare commits

..

13 Commits

Author SHA1 Message Date
Paul Beckingham
1422a15cbc Merge branch '1.7.1'
Conflicts:
	doc/man5/taskrc.5
2009-06-09 19:49:36 -04:00
Paul Beckingham
9c15457d7f Merge branch '1.7.1' 2009-06-09 19:35:24 -04:00
Federico Hernandez
20d8124a1d Fixed documentation for 1.7.1 2009-06-09 17:30:09 +02:00
Federico Hernandez
db6de54ccc * Updated project homepage reference and license text 2009-06-09 09:32:23 +02:00
Federico Hernandez
eb864820cf * Removed hard-coded version number 2009-06-09 09:31:44 +02:00
Federico Hernandez
0291e4c72e Changed some more references from beckingham.net to taskwarrior.org 2009-06-09 08:56:59 +02:00
Paul Beckingham
6e27feb8a3 Code Cleanup
- Removed Makefile.in from repository.  This was done in 1.8.0, but
  wasn't in 1.7.0.  It's time.
- Added Makefile.in to the .gitignore files.
2009-06-08 23:24:09 -04:00
Paul Beckingham
1dcba4619e Documentation Update
- Bumped version to 1.7.1.
- Changed references to email addresses, URLs.
2009-06-08 23:14:38 -04:00
Paul Beckingham
7538b43c68 Bug Fix - Build failure on OpenBSD
- Fixed build failure on OpenBSD (thanks to Mike Adonay).
2009-06-08 23:03:30 -04:00
Paul Beckingham
a57552f8bc Patch - Corrected missing line break
From 88311e6941804f5c697967ce82e6935d07941d02 Mon Sep 17 00:00:00 2001
From: Federico Hernandez <ultrafredde@gmail.com>
Date: Sat, 30 May 2009 23:00:32 +0200
Subject: [PATCH] iCorrected missing line break.
2009-05-30 17:17:54 -04:00
Paul Beckingham
64a891e8b1 Documentation Update - ran a spellchecker
- Caught a couple of typos in the man pages.
2009-05-28 11:47:44 -04:00
Paul Beckingham
73ecb0480f Patch - "Bug" discovered while creating Ubuntu deb package using lintian tool.
From 6b0bd9f9be642a8f08ea27c937a1c1eb2253565e Mon Sep 17 00:00:00 2001
From: Federico Hernandez <ultrafredde@gmail.com>
Date: Thu, 28 May 2009 08:58:28 +0200
Subject: [PATCH] Fixing line breaks.

"Bug" discovered while creating Ubuntu deb package using lintian tool.
2009-05-28 09:21:01 -04:00
Paul Beckingham
419ab2ad51 Documentation Update - synch with web site
- This commit synchronizes the web site and the master branch.
  Edits have been made on the site but not in the master branch,
  which is wrong.
2009-05-22 20:15:01 -04:00
28 changed files with 484 additions and 1637 deletions

1
.gitignore vendored
View File

@@ -12,3 +12,4 @@ configure
config.log
www.xls
*~
Makefile.in

View File

@@ -33,4 +33,5 @@ With thanks to:
Eric Farris
Bruce Dillahunty
Askme Too
Mike Adonay

View File

@@ -1,6 +1,13 @@
------ current release ---------------------------
1.7.1 (6/8/2009)
+ Fixed build failure on OpenBSD (thanks to Mike Adonay).
+ Took the opportunity of a patch release to update the various email
addresses and URLs in the various documents.
------ old releases ------------------------------
1.7.0 (5/14/2009)
+ Improved the errors when parsing a corrupt or unrecognized pending.data
or completed.data file (thanks to T. Charles Yun).
@@ -39,8 +46,6 @@
variable, $VISUAL or $EDITOR environment variable) and allows direct
editing of all editable task details.
------ old releases ------------------------------
1.6.1 (4/24/2009) 1b6faf57c998617024d0348a87b941a5d2ab2249
+ Fixed bug that caused new, first-time .taskrc files to be written without
including the custom report labels (thanks to P.C. Shyamshankar).

View File

@@ -18,5 +18,5 @@ included.
color.cpp Color support functions.
rules.cpp Auto-colorization rules.
Please send bugs, patches to task@beckingham.net
Please send bugs, patches to support@taskwarrior.org

View File

@@ -2,5 +2,5 @@ SUBDIRS = src
EXTRA_DIST = task_completion.sh doc/man1/task.1 doc/man5/taskrc.5
man1_MANS = doc/man1/task.1
man5_MANS = doc/man5/taskrc.5
otherdir = $(datadir)/doc/task-1.7.0
otherdir = $(datadir)/doc/task-$(VERSION)
other_DATA = AUTHORS ChangeLog COPYING INSTALL NEWS README task_completion.sh

View File

@@ -1,734 +0,0 @@
# Makefile.in generated by automake 1.10.1 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
@SET_MAKE@
VPATH = @srcdir@
pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
subdir = .
DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \
$(srcdir)/Makefile.in $(srcdir)/auto.h.in \
$(top_srcdir)/configure AUTHORS COPYING ChangeLog INSTALL NEWS \
depcomp install-sh missing
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
configure.lineno config.status.lineno
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = auto.h
CONFIG_CLEAN_FILES =
SOURCES =
DIST_SOURCES =
RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
html-recursive info-recursive install-data-recursive \
install-dvi-recursive install-exec-recursive \
install-html-recursive install-info-recursive \
install-pdf-recursive install-ps-recursive install-recursive \
installcheck-recursive installdirs-recursive pdf-recursive \
ps-recursive uninstall-recursive
man1dir = $(mandir)/man1
am__installdirs = "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man5dir)" \
"$(DESTDIR)$(otherdir)"
man5dir = $(mandir)/man5
NROFF = nroff
MANS = $(man1_MANS) $(man5_MANS)
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
am__vpath_adj = case $$p in \
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
*) f=$$p;; \
esac;
am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
otherDATA_INSTALL = $(INSTALL_DATA)
DATA = $(other_DATA)
RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
distclean-recursive maintainer-clean-recursive
ETAGS = etags
CTAGS = ctags
DIST_SUBDIRS = $(SUBDIRS)
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
distdir = $(PACKAGE)-$(VERSION)
top_distdir = $(distdir)
am__remove_distdir = \
{ test ! -d $(distdir) \
|| { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \
&& rm -fr $(distdir); }; }
DIST_ARCHIVES = $(distdir).tar.gz
GZIP_ENV = --best
distuninstallcheck_listfiles = find . -type f -print
distcleancheck_listfiles = find . -type f -print
ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CPPFLAGS = @CPPFLAGS@
CXX = @CXX@
CXXCPP = @CXXCPP@
CXXDEPMODE = @CXXDEPMODE@
CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
GREP = @GREP@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
LDFLAGS = @LDFLAGS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
MKDIR_P = @MKDIR_P@
OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
VERSION = @VERSION@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
bindir = @bindir@
build_alias = @build_alias@
builddir = @builddir@
datadir = @datadir@
datarootdir = @datarootdir@
docdir = @docdir@
dvidir = @dvidir@
exec_prefix = @exec_prefix@
host_alias = @host_alias@
htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
SUBDIRS = src
EXTRA_DIST = task_completion.sh doc/man1/task.1 doc/man5/taskrc.5
man1_MANS = doc/man1/task.1
man5_MANS = doc/man5/taskrc.5
otherdir = $(datadir)/doc/task-1.7.0
other_DATA = AUTHORS ChangeLog COPYING INSTALL NEWS README task_completion.sh
all: auto.h
$(MAKE) $(AM_MAKEFLAGS) all-recursive
.SUFFIXES:
am--refresh:
@:
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
echo ' cd $(srcdir) && $(AUTOMAKE) --gnu '; \
cd $(srcdir) && $(AUTOMAKE) --gnu \
&& exit 0; \
exit 1;; \
esac; \
done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \
cd $(top_srcdir) && \
$(AUTOMAKE) --gnu Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
echo ' $(SHELL) ./config.status'; \
$(SHELL) ./config.status;; \
*) \
echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
$(SHELL) ./config.status --recheck
$(top_srcdir)/configure: $(am__configure_deps)
cd $(srcdir) && $(AUTOCONF)
$(ACLOCAL_M4): $(am__aclocal_m4_deps)
cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
auto.h: stamp-h1
@if test ! -f $@; then \
rm -f stamp-h1; \
$(MAKE) $(AM_MAKEFLAGS) stamp-h1; \
else :; fi
stamp-h1: $(srcdir)/auto.h.in $(top_builddir)/config.status
@rm -f stamp-h1
cd $(top_builddir) && $(SHELL) ./config.status auto.h
$(srcdir)/auto.h.in: $(am__configure_deps)
cd $(top_srcdir) && $(AUTOHEADER)
rm -f stamp-h1
touch $@
distclean-hdr:
-rm -f auto.h stamp-h1
install-man1: $(man1_MANS) $(man_MANS)
@$(NORMAL_INSTALL)
test -z "$(man1dir)" || $(MKDIR_P) "$(DESTDIR)$(man1dir)"
@list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
for i in $$l2; do \
case "$$i" in \
*.1*) list="$$list $$i" ;; \
esac; \
done; \
for i in $$list; do \
if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \
else file=$$i; fi; \
ext=`echo $$i | sed -e 's/^.*\\.//'`; \
case "$$ext" in \
1*) ;; \
*) ext='1' ;; \
esac; \
inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
inst=`echo $$inst | sed -e 's/^.*\///'`; \
inst=`echo $$inst | sed '$(transform)'`.$$ext; \
echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \
$(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst"; \
done
uninstall-man1:
@$(NORMAL_UNINSTALL)
@list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
for i in $$l2; do \
case "$$i" in \
*.1*) list="$$list $$i" ;; \
esac; \
done; \
for i in $$list; do \
ext=`echo $$i | sed -e 's/^.*\\.//'`; \
case "$$ext" in \
1*) ;; \
*) ext='1' ;; \
esac; \
inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
inst=`echo $$inst | sed -e 's/^.*\///'`; \
inst=`echo $$inst | sed '$(transform)'`.$$ext; \
echo " rm -f '$(DESTDIR)$(man1dir)/$$inst'"; \
rm -f "$(DESTDIR)$(man1dir)/$$inst"; \
done
install-man5: $(man5_MANS) $(man_MANS)
@$(NORMAL_INSTALL)
test -z "$(man5dir)" || $(MKDIR_P) "$(DESTDIR)$(man5dir)"
@list='$(man5_MANS) $(dist_man5_MANS) $(nodist_man5_MANS)'; \
l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
for i in $$l2; do \
case "$$i" in \
*.5*) list="$$list $$i" ;; \
esac; \
done; \
for i in $$list; do \
if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \
else file=$$i; fi; \
ext=`echo $$i | sed -e 's/^.*\\.//'`; \
case "$$ext" in \
5*) ;; \
*) ext='5' ;; \
esac; \
inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
inst=`echo $$inst | sed -e 's/^.*\///'`; \
inst=`echo $$inst | sed '$(transform)'`.$$ext; \
echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man5dir)/$$inst'"; \
$(INSTALL_DATA) "$$file" "$(DESTDIR)$(man5dir)/$$inst"; \
done
uninstall-man5:
@$(NORMAL_UNINSTALL)
@list='$(man5_MANS) $(dist_man5_MANS) $(nodist_man5_MANS)'; \
l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
for i in $$l2; do \
case "$$i" in \
*.5*) list="$$list $$i" ;; \
esac; \
done; \
for i in $$list; do \
ext=`echo $$i | sed -e 's/^.*\\.//'`; \
case "$$ext" in \
5*) ;; \
*) ext='5' ;; \
esac; \
inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
inst=`echo $$inst | sed -e 's/^.*\///'`; \
inst=`echo $$inst | sed '$(transform)'`.$$ext; \
echo " rm -f '$(DESTDIR)$(man5dir)/$$inst'"; \
rm -f "$(DESTDIR)$(man5dir)/$$inst"; \
done
install-otherDATA: $(other_DATA)
@$(NORMAL_INSTALL)
test -z "$(otherdir)" || $(MKDIR_P) "$(DESTDIR)$(otherdir)"
@list='$(other_DATA)'; for p in $$list; do \
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
f=$(am__strip_dir) \
echo " $(otherDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(otherdir)/$$f'"; \
$(otherDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(otherdir)/$$f"; \
done
uninstall-otherDATA:
@$(NORMAL_UNINSTALL)
@list='$(other_DATA)'; for p in $$list; do \
f=$(am__strip_dir) \
echo " rm -f '$(DESTDIR)$(otherdir)/$$f'"; \
rm -f "$(DESTDIR)$(otherdir)/$$f"; \
done
# This directory's subdirectories are mostly independent; you can cd
# into them and run `make' without going through this Makefile.
# To change the values of `make' variables: instead of editing Makefiles,
# (1) if the variable is set in `config.status', edit `config.status'
# (which will cause the Makefiles to be regenerated when you run `make');
# (2) otherwise, pass the desired values on the `make' command line.
$(RECURSIVE_TARGETS):
@failcom='exit 1'; \
for f in x $$MAKEFLAGS; do \
case $$f in \
*=* | --[!k]*);; \
*k*) failcom='fail=yes';; \
esac; \
done; \
dot_seen=no; \
target=`echo $@ | sed s/-recursive//`; \
list='$(SUBDIRS)'; for subdir in $$list; do \
echo "Making $$target in $$subdir"; \
if test "$$subdir" = "."; then \
dot_seen=yes; \
local_target="$$target-am"; \
else \
local_target="$$target"; \
fi; \
(cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|| eval $$failcom; \
done; \
if test "$$dot_seen" = "no"; then \
$(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
fi; test -z "$$fail"
$(RECURSIVE_CLEAN_TARGETS):
@failcom='exit 1'; \
for f in x $$MAKEFLAGS; do \
case $$f in \
*=* | --[!k]*);; \
*k*) failcom='fail=yes';; \
esac; \
done; \
dot_seen=no; \
case "$@" in \
distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
*) list='$(SUBDIRS)' ;; \
esac; \
rev=''; for subdir in $$list; do \
if test "$$subdir" = "."; then :; else \
rev="$$subdir $$rev"; \
fi; \
done; \
rev="$$rev ."; \
target=`echo $@ | sed s/-recursive//`; \
for subdir in $$rev; do \
echo "Making $$target in $$subdir"; \
if test "$$subdir" = "."; then \
local_target="$$target-am"; \
else \
local_target="$$target"; \
fi; \
(cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|| eval $$failcom; \
done && test -z "$$fail"
tags-recursive:
list='$(SUBDIRS)'; for subdir in $$list; do \
test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
done
ctags-recursive:
list='$(SUBDIRS)'; for subdir in $$list; do \
test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
done
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
mkid -fID $$unique
tags: TAGS
TAGS: tags-recursive $(HEADERS) $(SOURCES) auto.h.in $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
tags=; \
here=`pwd`; \
if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
include_option=--etags-include; \
empty_fix=.; \
else \
include_option=--include; \
empty_fix=; \
fi; \
list='$(SUBDIRS)'; for subdir in $$list; do \
if test "$$subdir" = .; then :; else \
test ! -f $$subdir/TAGS || \
tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
fi; \
done; \
list='$(SOURCES) $(HEADERS) auto.h.in $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
test -n "$$unique" || unique=$$empty_fix; \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
$$tags $$unique; \
fi
ctags: CTAGS
CTAGS: ctags-recursive $(HEADERS) $(SOURCES) auto.h.in $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
tags=; \
list='$(SOURCES) $(HEADERS) auto.h.in $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
test -z "$(CTAGS_ARGS)$$tags$$unique" \
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
$$tags $$unique
GTAGS:
here=`$(am__cd) $(top_builddir) && pwd` \
&& cd $(top_srcdir) \
&& gtags -i $(GTAGS_ARGS) $$here
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
distdir: $(DISTFILES)
$(am__remove_distdir)
test -d $(distdir) || mkdir $(distdir)
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
list='$(DISTFILES)'; \
dist_files=`for file in $$list; do echo $$file; done | \
sed -e "s|^$$srcdirstrip/||;t" \
-e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
case $$dist_files in \
*/*) $(MKDIR_P) `echo "$$dist_files" | \
sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
sort -u` ;; \
esac; \
for file in $$dist_files; do \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
if test -d $$d/$$file; then \
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
fi; \
cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
else \
test -f $(distdir)/$$file \
|| cp -p $$d/$$file $(distdir)/$$file \
|| exit 1; \
fi; \
done
list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
if test "$$subdir" = .; then :; else \
test -d "$(distdir)/$$subdir" \
|| $(MKDIR_P) "$(distdir)/$$subdir" \
|| exit 1; \
distdir=`$(am__cd) $(distdir) && pwd`; \
top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
(cd $$subdir && \
$(MAKE) $(AM_MAKEFLAGS) \
top_distdir="$$top_distdir" \
distdir="$$distdir/$$subdir" \
am__remove_distdir=: \
am__skip_length_check=: \
distdir) \
|| exit 1; \
fi; \
done
-find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \
! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
! -type d ! -perm -400 -exec chmod a+r {} \; -o \
! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \
|| chmod -R a+r $(distdir)
dist-gzip: distdir
tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
$(am__remove_distdir)
dist-bzip2: distdir
tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
$(am__remove_distdir)
dist-lzma: distdir
tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma
$(am__remove_distdir)
dist-tarZ: distdir
tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
$(am__remove_distdir)
dist-shar: distdir
shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
$(am__remove_distdir)
dist-zip: distdir
-rm -f $(distdir).zip
zip -rq $(distdir).zip $(distdir)
$(am__remove_distdir)
dist dist-all: distdir
tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
$(am__remove_distdir)
# This target untars the dist file and tries a VPATH configuration. Then
# it guarantees that the distribution is self-contained by making another
# tarfile.
distcheck: dist
case '$(DIST_ARCHIVES)' in \
*.tar.gz*) \
GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\
*.tar.bz2*) \
bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\
*.tar.lzma*) \
unlzma -c $(distdir).tar.lzma | $(am__untar) ;;\
*.tar.Z*) \
uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
*.shar.gz*) \
GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\
*.zip*) \
unzip $(distdir).zip ;;\
esac
chmod -R a-w $(distdir); chmod a+w $(distdir)
mkdir $(distdir)/_build
mkdir $(distdir)/_inst
chmod a-w $(distdir)
dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
&& dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
&& cd $(distdir)/_build \
&& ../configure --srcdir=.. --prefix="$$dc_install_base" \
$(DISTCHECK_CONFIGURE_FLAGS) \
&& $(MAKE) $(AM_MAKEFLAGS) \
&& $(MAKE) $(AM_MAKEFLAGS) dvi \
&& $(MAKE) $(AM_MAKEFLAGS) check \
&& $(MAKE) $(AM_MAKEFLAGS) install \
&& $(MAKE) $(AM_MAKEFLAGS) installcheck \
&& $(MAKE) $(AM_MAKEFLAGS) uninstall \
&& $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
distuninstallcheck \
&& chmod -R a-w "$$dc_install_base" \
&& ({ \
(cd ../.. && umask 077 && mkdir "$$dc_destdir") \
&& $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
&& $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
&& $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
} || { rm -rf "$$dc_destdir"; exit 1; }) \
&& rm -rf "$$dc_destdir" \
&& $(MAKE) $(AM_MAKEFLAGS) dist \
&& rm -rf $(DIST_ARCHIVES) \
&& $(MAKE) $(AM_MAKEFLAGS) distcleancheck
$(am__remove_distdir)
@(echo "$(distdir) archives ready for distribution: "; \
list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
distuninstallcheck:
@cd $(distuninstallcheck_dir) \
&& test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
|| { echo "ERROR: files left after uninstall:" ; \
if test -n "$(DESTDIR)"; then \
echo " (check DESTDIR support)"; \
fi ; \
$(distuninstallcheck_listfiles) ; \
exit 1; } >&2
distcleancheck: distclean
@if test '$(srcdir)' = . ; then \
echo "ERROR: distcleancheck can only run from a VPATH build" ; \
exit 1 ; \
fi
@test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
|| { echo "ERROR: files left in build directory after distclean:" ; \
$(distcleancheck_listfiles) ; \
exit 1; } >&2
check-am: all-am
check: check-recursive
all-am: Makefile $(MANS) $(DATA) auto.h
installdirs: installdirs-recursive
installdirs-am:
for dir in "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man5dir)" "$(DESTDIR)$(otherdir)"; do \
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
done
install: install-recursive
install-exec: install-exec-recursive
install-data: install-data-recursive
uninstall: uninstall-recursive
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
installcheck: installcheck-recursive
install-strip:
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
`test -z '$(STRIP)' || \
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic:
clean-generic:
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
clean: clean-recursive
clean-am: clean-generic mostlyclean-am
distclean: distclean-recursive
-rm -f $(am__CONFIG_DISTCLEAN_FILES)
-rm -f Makefile
distclean-am: clean-am distclean-generic distclean-hdr distclean-tags
dvi: dvi-recursive
dvi-am:
html: html-recursive
info: info-recursive
info-am:
install-data-am: install-man install-otherDATA
install-dvi: install-dvi-recursive
install-exec-am:
install-html: install-html-recursive
install-info: install-info-recursive
install-man: install-man1 install-man5
install-pdf: install-pdf-recursive
install-ps: install-ps-recursive
installcheck-am:
maintainer-clean: maintainer-clean-recursive
-rm -f $(am__CONFIG_DISTCLEAN_FILES)
-rm -rf $(top_srcdir)/autom4te.cache
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
mostlyclean: mostlyclean-recursive
mostlyclean-am: mostlyclean-generic
pdf: pdf-recursive
pdf-am:
ps: ps-recursive
ps-am:
uninstall-am: uninstall-man uninstall-otherDATA
uninstall-man: uninstall-man1 uninstall-man5
.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \
install-strip
.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
all all-am am--refresh check check-am clean clean-generic \
ctags ctags-recursive dist dist-all dist-bzip2 dist-gzip \
dist-lzma dist-shar dist-tarZ dist-zip distcheck distclean \
distclean-generic distclean-hdr distclean-tags distcleancheck \
distdir distuninstallcheck dvi dvi-am html html-am info \
info-am install install-am install-data install-data-am \
install-dvi install-dvi-am install-exec install-exec-am \
install-html install-html-am install-info install-info-am \
install-man install-man1 install-man5 install-otherDATA \
install-pdf install-pdf-am install-ps install-ps-am \
install-strip installcheck installcheck-am installdirs \
installdirs-am maintainer-clean maintainer-clean-generic \
mostlyclean mostlyclean-generic pdf pdf-am ps ps-am tags \
tags-recursive uninstall uninstall-am uninstall-man \
uninstall-man1 uninstall-man5 uninstall-otherDATA
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:

14
NEWS
View File

@@ -1,4 +1,4 @@
Welcome to Task 1.7.0.
Welcome to Task 1.7.1.
Task has been built and tested on the following configurations:
@@ -12,17 +12,18 @@ Task has been built and tested on the following configurations:
- Ubuntu 8.10 Intrepid Ibex
- Ubuntu 9.04 Jaunty Jackalope
- Arch Linux
- OpenBSD 4.5
- Solaris 8
- Solaris 10
- Cygwin 1.5.25-14
While Task has undergone testing, bugs are sure to remain. If you encounter a
bug, please contact me at task@beckingham.net. Here is what you could do, in
bug, please contact me at support@taskwarrior.org. Here is what you could do, in
order of increasing effort (to you) and usefulness (to me):
- Do nothing. Bug probably won't get fixed.
- Send an email to task@beckingham.net, explaining what you saw. The bug
- Send an email to support@taskwarrior.org, explaining what you saw. The bug
will be addressed, and a new release will be made. You will be a hero.
- Send an email, and a reproducible test case in the form of the few commands
@@ -33,9 +34,10 @@ order of increasing effort (to you) and usefulness (to me):
will be applied and tested, and a new release will be made. You will be a
hero.
- Another option involves using Github's issue tracker, which can be found
at http://github.com/pbeckingham/task/issues which has the advantage that
everyone gets to see and track the issue. You will still be a hero.
- Another option involves using the taskwarrior.org issue tracker, which can
be found at http://taskwarrior.org/projects/taskwarrior/issues/new which has
the advantage that everyone gets to see and track the issue. You will still
be a hero.
Thank you.

14
README
View File

@@ -30,11 +30,7 @@ task is not for everyone and some of you may prefer to not proceed. The
movie or online tutorial file are the quickest way for you to make that
decision. The online tutorial can be found at:
http://www.beckingham.net/task.html
Task is based on ideas presented in the todo.sh script, found on:
http://todotxt.org
http://taskwarrior.org/wiki/taskwarrior/Simple
Task has many more features than todo.sh, but fundamentally, they are
both working toward the same goals, which is to help you follow basic
@@ -42,14 +38,14 @@ Getting Things Done (GTD) principles.
All feedback is welcome, in addition to any bug reports or patches to:
task@beckingham.net
support@taskwarrior.org
Or better yet, get involved in the discussion at
http://groups.google.com/group/taskprogram
http://taskwarrior.org
Got an idea for an enhancement? Post a message!
I have found that task makes me more productive and organized.
I hope task can do the same for you.
We have found that task makes me more productive and organized.
We hope task can do the same for you.

View File

@@ -2,7 +2,7 @@
# Process this file with autoconf to produce a configure script.
AC_PREREQ(2.61)
AC_INIT(task, 1.7.0, bugs@beckingham.net)
AC_INIT(task, 1.7.1, support@taskwarrior.org)
CFLAGS="${CFLAGS=}"
CXXFLAGS="${CXXFLAGS=}"

View File

@@ -1,4 +1,4 @@
.TH task 1 2009-05-14 "Task 1.7.0" "User Manuals"
.TH task 1 2009-05-14 "Task 1.7.1" "User Manuals"
.SH NAME
task \- A command line todo manager.
@@ -111,7 +111,7 @@ Shows a monthly calendar with due tasks marked.
.TP
.B active
Shows all tasks that are started but not comleted.
Shows all tasks that are started but not completed.
.TP
.B overdue
@@ -220,7 +220,7 @@ Specify alternate configuration file.
.SH SPECIFYING DATES AND FREQUENCIES
.SS DATES
Task reads dates from the commandline and displays dates in the
Task 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
@@ -252,7 +252,7 @@ task ... due:eom
task ... due:eoy
.TP
Next occuring weekday
Next occurring weekday
task ... due:fri
.RE
@@ -272,15 +272,15 @@ Mondays, Tuesdays, Wednesdays, Thursdays, Fridays and skipping weekend days.
.TP
weekly, 1w, 2w, ...
Eery week or a number of weeks.
Every week or a number of weeks.
.TP
biweekly, fortnight
Every two weeks.
.TP
quaterly, 1q, 2q, ...
Every three months, a quarter, or a number of quaters.
quarterly, 1q, 2q, ...
Every three months, a quarter, or a number of quarters.
.TP
semiannual
@@ -319,16 +319,14 @@ could be list, ls or long.
.SH EXAMPLES
A small section for examples e.g. some stuff from
For examples please see the online documentation at
.br
http://www.beckingham.net/30second.html
.br
http://www.beckingham.net/simple.html
<http://taskwarrior.org/wiki/taskwarrior/Simple>
.SH FILES
.TP
~/.taskrc User configuration file.
~/.taskrc User configuration file - see also taskrc(5).
.TP
~/.task The default directory where task stores its data files. The location
@@ -341,7 +339,7 @@ can be configured in the configuration file.
~/.task/completed.data The file that contains the completed "done" tasks.
.SH "CREDITS & COPYRIGHTS"
task was written by P. Beckingham <task@beckingham.net>.
task was written by P. Beckingham <paul@beckingham.net>.
.br
Copyright (C) 2006 \- 2009 P. Beckingham
@@ -357,26 +355,18 @@ http://www.gnu.org/licenses/gpl-2.0.txt for more information.
For more information regarding task, the following may be referenced:
.TP
<http://www.beckingham.net/task.html>
The official site.
.TP
<http://groups.google.com/group/taskprogram>
The official mailing list.
The official site at
<http://taskwarrior.org>
.TP
The official code repository at
<http://github.com/pbeckingham/task/>
The official code repository.
.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
.RS
<http://github.com/pbeckingham/task/issues>
.RE
or to the mailing list at
.RS
<http://groups.google.com/group/taskprogram>
.RE
<http://taskwarrior.org>

View File

@@ -1,10 +1,11 @@
.TH taskrc 5 2009-05-14 "Task 1.7.0" "User Manuals"
.TH taskrc 5 2009-05-14 "Task 1.7.1" "User Manuals"
.SH NAME
taskrc \- Configuration file for the task(1) command
.SH SYNOPSIS
.B $HOME/.taskrc
.br
.B task rc:<directory-path>/.taskrc
.SH DESCRIPTION
@@ -17,7 +18,7 @@ obtains its configuration data from a file called
$HOME/.taskrc
.RE
The default location can be overriden using the
The default location can be overridden using the
.I rc:
attribute when running task:
@@ -49,9 +50,9 @@ is the value the variable is to be set to.
.RE
and set a configuration variable to a certain value. The equal sign ("=") is used to separate the variable
name from the value to be set.
name from the value to be set.
The hash mark, or pounf sign ("#") is used as a "comment" character. It can be used to annotte the
The hash mark, or pound sign ("#") is used as a "comment" character. It can be used to annotate the
configuration file. It is placed at the beginning of a line and all text after the character to the
end of the line is ignored.
@@ -61,7 +62,7 @@ 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: /Users/paul/.task
for example: /Users/paul/.task
.TP
.B confirmation=yes
@@ -75,7 +76,7 @@ May be "yes" or "no", and causes task to display the ID and description of any t
.B next=2
Is a number, defaulting to 2, which is the number of tasks for each project that are shown in the
.B task next
command.
command.
.TP
.B dateformat=m/d/Y
@@ -112,21 +113,21 @@ m-d-y would output 07-24-09
.B monthsperline=99
Determines how many months the "task calendar" command renders across the screen.
Defaults to however many will fit. If more months that will fit are specified,
task will only show as many that will fit.
task will only show as many that will fit.
.TP
.B defaultwidth=80
The width of tables used when ncurses support is not available. Defaults to 80.
The width of tables used when ncurses support is not available. Defaults to 80.
.TP
.B curses=on
Determines whether task uses ncurses to establish the size of the window you are
using, for text wrapping.
using, for text wrapping.
.TP
.B due=7
This is the number of days into the future that define when a task is considered due,
and is colored accordingly. Defaults to 7.
and is colored accordingly. Defaults to 7.
.TP
.B nag=You have higher priority tasks.
@@ -153,7 +154,7 @@ to using "vi".
.TP
.B color=on
May be "on" or "off". Determines whether task uses color. When "off", task will
use dashes (-----) to underline column headings.
use dashes (-----) to underline column headings.
Task 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
@@ -206,7 +207,7 @@ Certain attributes like tags, projects and keywords can also have their own colo
.RE
.RS
.TP
.TP
.B color.tag.X=yellow
Colors any task that has the tag X.
@@ -216,49 +217,49 @@ Colors any task assigned to project X.
.TP
.B color.keyword.X=on_blue
Colors any task where the description contains X.
Colors any task where the description contains X.
.RE
.TP
.B
.B
shadow.file=$HOME/.task/shadow.txt
If specified, designates a file path that will be autoamtically written to by task,
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.
.TP
.B
.B
shadow.command=list
This is the command that is run to maintain the shadow file, determined by the
This is the command that is run to maintain the shadow file, determined by the
.I shadow.file
configuration variable. The format is identical to that of
.I default.command
\&. Please see the corresponding documentation for that command.
.TP
.B
.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.
file is updated by some task command.
.TP
.B
.B
default.project=foo
Provides a default project name for the
.I task add
command.
command.
.TP
.B
.B
default.priority=M
Provides a default priority for the
.I task add
command.
command.
.TP
.B
.B
default.command=list
Provides a default command that is run every time task is invoked with no arguments.
For example, if set to:
@@ -293,84 +294,95 @@ The output columns, their labels and the sort order can be set using the corresp
variables for each report.
.TP
.B
.B
report.long.description
Lists all task, all data, matching the specified criteria
.TP
.B
.B
report.long.labels=ID,Project,Pri,Added,Started,Due,Recur,Age,Tags,Description
.RE
.B
.br
.B
report.long.columns=id,project,priority,entry,start,due,recur,age,tags,description
.B
.br
.B
report.long.sort=due+,priority-,project+
.TP
.B
.B
report.list.description
Lists all tasks matching the specified criteria
.TP
.B
.B
report.list.labels=ID,Project,Pri,Due,Active,Age,Description
.RE
.B
.br
.B
report.list.columns=id,project,priority,due,active,age,description
.B
.br
.B
report.list.sort=due+,priority-,project+
.TP
.B
.B
report.ls.description
Minimal listing of all tasks matching the specified criteria
.TP
.B
.B
report.ls.labels=ID,Project,Pri,Description
.RE
.B
.br
.B
report.ls.columns=id,project,priority,description
.B
.br
.B
report.ls.sort=priority-,project+
.TP
.B
.B
report.newest.description
Shows the newest tasks
.TP
.B
.B
report.newest.labels=ID,Project,Pri,Due,Active,Age,Description
.RE
.B
.br
.B
report.newest.columns=id,project,priority,due,active,age,description
.B
.br
.B
report.newest.sort=id-
.B
.br
.B
report.newest.limit=10
.TP
.B
.B
report.oldest.description
Shows the oldest tasks
.TP
.B
.B
report.oldest.labels=ID,Project,Pri,Due,Active,Age,Description
.RE
.B
.br
.B
report.oldest.columns=id,project,priority,due,active,age,description
.B
.br
.B
report.oldest.sort=id+
.B
.br
.B
report.oldest.limit=10
.SH "CREDITS & COPYRIGHTS"
task was written by P. Beckingham <task@beckingham.net>.
task was written by P. Beckingham <paul@beckingham.net>.
.br
Copyright (C) 2006 \- 2009 P. Beckingham
@@ -381,31 +393,23 @@ 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 task(1)
For more information regarding task, the following may be referenced:
.TP
<http://www.beckingham.net/task.html>
The official site.
.TP
<http://groups.google.com/group/taskprogram>
The official mailing list.
The official site at
<http://taskwarrior.org>
.TP
The official code repository at
<http://github.com/pbeckingham/task/>
The official code repository.
.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
.RS
<http://github.com/pbeckingham/task/issues>
.RE
or to the mailing list at
.RS
<http://groups.google.com/group/taskprogram>
.RE
<http://taskwarrior.org>

View File

@@ -90,7 +90,7 @@
<p>
The intent here is that task 3 have its description modified to be
"40123 is back-ordered, try again next week", but will be
"4-123 is back-ordered, try again next week", but will be
misinterpreted as tasks 3, 4, 5, 6 ... 123 will all be modified
to have the description "is back-ordered, try again next week".
The solution is to quote the whole description:

View File

@@ -120,21 +120,21 @@
<td>Mac OS X 10.5 (Leopard) Intel-only:</td>
<td><a href="http://www.beckingham.net/task-1.7.0.pkg">task-1.7.0.pkg</a></td>
</tr>
-->
<tr>
<td>
Debian:
(Thanks to <a href="http://blog.rfquerin.org">Richard&nbsp;Querin</a>):
Ubuntu 9.04:
(Thanks to <a href="http://www.ultrafredde.com">Federico&nbsp;Hernandez</a>):
</td>
<td><a href="http://www.beckingham.net/task_1.7.0-1_i386.deb">task_1.7.0-1_i386.deb</a></td>
<td><a href="http://www.beckingham.net/task_1.7.0-0ubuntu1_i386.deb">task_1.7.0-0ubuntu1_i386.deb</a></td>
</tr>
<tr>
<td>
Red Hat:
(Thanks to <a href="http://www.ultrafredde.com">Federico&nbsp;Hernandez</a>):
</td>
<td><a href="http://www.beckingham.net/task-1.7.0-1.FC10.i386.rpm">task-1.7.0-1.FC10.i386.rpm</a></td>
<td><a href="http://www.beckingham.net/task-1.7.0-2.fc10.i386.rpm">task-1.7.0-2.fc10.i386.rpm</a></td>
</tr>
-->
<tr>
<td>Git - get the whole source and history:</td>
<td><a href="http://github.com/pbeckingham/task">http://github.com/pbeckingham/task</a></td>
@@ -202,6 +202,7 @@
<li>Ubuntu 8.10 Intrepid Ibex
<li>Ubuntu 9.04 Jaunty Jackalope
<li>Arch Linux
<li>Slackware 12-12.2
<li>Solaris 8
<li>Solaris 10
<li>Cygwin 1.5.25-14

1
src/.gitignore vendored
View File

@@ -1 +1,2 @@
*.o
Makefile.in

View File

@@ -1,436 +0,0 @@
# Makefile.in generated by automake 1.10.1 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
@SET_MAKE@
VPATH = @srcdir@
pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
bin_PROGRAMS = task$(EXEEXT)
subdir = src
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/auto.h
CONFIG_CLEAN_FILES =
am__installdirs = "$(DESTDIR)$(bindir)"
binPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
PROGRAMS = $(bin_PROGRAMS)
am_task_OBJECTS = Config.$(OBJEXT) Date.$(OBJEXT) T.$(OBJEXT) \
TDB.$(OBJEXT) Table.$(OBJEXT) Grid.$(OBJEXT) Timer.$(OBJEXT) \
color.$(OBJEXT) parse.$(OBJEXT) task.$(OBJEXT) \
command.$(OBJEXT) edit.$(OBJEXT) report.$(OBJEXT) \
util.$(OBJEXT) text.$(OBJEXT) rules.$(OBJEXT) import.$(OBJEXT)
task_OBJECTS = $(am_task_OBJECTS)
task_LDADD = $(LDADD)
DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
depcomp = $(SHELL) $(top_srcdir)/depcomp
am__depfiles_maybe = depfiles
CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
CXXLD = $(CXX)
CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
-o $@
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
CCLD = $(CC)
LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
SOURCES = $(task_SOURCES)
DIST_SOURCES = $(task_SOURCES)
ETAGS = etags
CTAGS = ctags
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CPPFLAGS = @CPPFLAGS@
CXX = @CXX@
CXXCPP = @CXXCPP@
CXXDEPMODE = @CXXDEPMODE@
CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
GREP = @GREP@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
LDFLAGS = @LDFLAGS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
MKDIR_P = @MKDIR_P@
OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
VERSION = @VERSION@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
bindir = @bindir@
build_alias = @build_alias@
builddir = @builddir@
datadir = @datadir@
datarootdir = @datarootdir@
docdir = @docdir@
dvidir = @dvidir@
exec_prefix = @exec_prefix@
host_alias = @host_alias@
htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
task_SOURCES = Config.cpp Date.cpp T.cpp TDB.cpp Table.cpp Grid.cpp Timer.cpp color.cpp parse.cpp task.cpp command.cpp edit.cpp report.cpp util.cpp text.cpp rules.cpp import.cpp Config.h Date.h T.h TDB.h Table.h Grid.h Timer.h color.h task.h
all: all-am
.SUFFIXES:
.SUFFIXES: .cpp .o .obj
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
&& exit 0; \
exit 1;; \
esac; \
done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Makefile'; \
cd $(top_srcdir) && \
$(AUTOMAKE) --gnu src/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
*) \
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(top_srcdir)/configure: $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
install-binPROGRAMS: $(bin_PROGRAMS)
@$(NORMAL_INSTALL)
test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)"
@list='$(bin_PROGRAMS)'; for p in $$list; do \
p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
if test -f $$p \
; then \
f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \
echo " $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(bindir)/$$f'"; \
$(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(bindir)/$$f" || exit 1; \
else :; fi; \
done
uninstall-binPROGRAMS:
@$(NORMAL_UNINSTALL)
@list='$(bin_PROGRAMS)'; for p in $$list; do \
f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \
rm -f "$(DESTDIR)$(bindir)/$$f"; \
done
clean-binPROGRAMS:
-test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS)
task$(EXEEXT): $(task_OBJECTS) $(task_DEPENDENCIES)
@rm -f task$(EXEEXT)
$(CXXLINK) $(task_OBJECTS) $(task_LDADD) $(LIBS)
mostlyclean-compile:
-rm -f *.$(OBJEXT)
distclean-compile:
-rm -f *.tab.c
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Config.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Date.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Grid.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/T.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TDB.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Table.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Timer.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/color.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/command.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/edit.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/import.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/parse.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/report.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rules.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/task.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/text.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/util.Po@am__quote@
.cpp.o:
@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $<
.cpp.obj:
@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
mkid -fID $$unique
tags: TAGS
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
tags=; \
here=`pwd`; \
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
test -n "$$unique" || unique=$$empty_fix; \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
$$tags $$unique; \
fi
ctags: CTAGS
CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
tags=; \
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
test -z "$(CTAGS_ARGS)$$tags$$unique" \
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
$$tags $$unique
GTAGS:
here=`$(am__cd) $(top_builddir) && pwd` \
&& cd $(top_srcdir) \
&& gtags -i $(GTAGS_ARGS) $$here
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
distdir: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
list='$(DISTFILES)'; \
dist_files=`for file in $$list; do echo $$file; done | \
sed -e "s|^$$srcdirstrip/||;t" \
-e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
case $$dist_files in \
*/*) $(MKDIR_P) `echo "$$dist_files" | \
sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
sort -u` ;; \
esac; \
for file in $$dist_files; do \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
if test -d $$d/$$file; then \
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
fi; \
cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
else \
test -f $(distdir)/$$file \
|| cp -p $$d/$$file $(distdir)/$$file \
|| exit 1; \
fi; \
done
check-am: all-am
check: check-am
all-am: Makefile $(PROGRAMS)
installdirs:
for dir in "$(DESTDIR)$(bindir)"; do \
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
done
install: install-am
install-exec: install-exec-am
install-data: install-data-am
uninstall: uninstall-am
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
installcheck: installcheck-am
install-strip:
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
`test -z '$(STRIP)' || \
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic:
clean-generic:
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
clean: clean-am
clean-am: clean-binPROGRAMS clean-generic mostlyclean-am
distclean: distclean-am
-rm -rf ./$(DEPDIR)
-rm -f Makefile
distclean-am: clean-am distclean-compile distclean-generic \
distclean-tags
dvi: dvi-am
dvi-am:
html: html-am
info: info-am
info-am:
install-data-am:
install-dvi: install-dvi-am
install-exec-am: install-binPROGRAMS
install-html: install-html-am
install-info: install-info-am
install-man:
install-pdf: install-pdf-am
install-ps: install-ps-am
installcheck-am:
maintainer-clean: maintainer-clean-am
-rm -rf ./$(DEPDIR)
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
mostlyclean: mostlyclean-am
mostlyclean-am: mostlyclean-compile mostlyclean-generic
pdf: pdf-am
pdf-am:
ps: ps-am
ps-am:
uninstall-am: uninstall-binPROGRAMS
.MAKE: install-am install-strip
.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \
clean-generic ctags distclean distclean-compile \
distclean-generic distclean-tags distdir dvi dvi-am html \
html-am info info-am install install-am install-binPROGRAMS \
install-data install-data-am install-dvi install-dvi-am \
install-exec install-exec-am install-html install-html-am \
install-info install-info-am install-man install-pdf \
install-pdf-am install-ps install-ps-am install-strip \
installcheck installcheck-am installdirs maintainer-clean \
maintainer-clean-generic mostlyclean mostlyclean-compile \
mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \
uninstall-am uninstall-binPROGRAMS
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:

View File

@@ -32,7 +32,7 @@
////////////////////////////////////////////////////////////////////////////////
// Default
T::T ()
Tt::Tt ()
{
mUUID = uuid ();
mStatus = pending;
@@ -49,13 +49,13 @@ T::T ()
////////////////////////////////////////////////////////////////////////////////
// Initialize by parsing storage format
T::T (const std::string& line)
Tt::Tt (const std::string& line)
{
parse (line);
}
////////////////////////////////////////////////////////////////////////////////
T::T (const T& other)
Tt::Tt (const Tt& other)
{
mStatus = other.mStatus;
mUUID = other.mUUID;
@@ -69,7 +69,7 @@ T::T (const T& other)
}
////////////////////////////////////////////////////////////////////////////////
T& T::operator= (const T& other)
Tt& Tt::operator= (const Tt& other)
{
if (this != &other)
{
@@ -88,12 +88,12 @@ T& T::operator= (const T& other)
}
////////////////////////////////////////////////////////////////////////////////
T::~T ()
Tt::~Tt ()
{
}
////////////////////////////////////////////////////////////////////////////////
bool T::hasTag (const std::string& tag) const
bool Tt::hasTag (const std::string& tag) const
{
std::vector <std::string>::const_iterator it = find (mTags.begin (), mTags.end (), tag);
if (it != mTags.end ())
@@ -104,38 +104,38 @@ bool T::hasTag (const std::string& tag) const
////////////////////////////////////////////////////////////////////////////////
// SPECIAL METHOD - DO NOT REMOVE
void T::getRemoveTags (std::vector<std::string>& all)
void Tt::getRemoveTags (std::vector<std::string>& all)
{
all = mRemoveTags;
}
////////////////////////////////////////////////////////////////////////////////
// SPECIAL METHOD - DO NOT REMOVE
void T::addRemoveTag (const std::string& tag)
void Tt::addRemoveTag (const std::string& tag)
{
if (tag.find (' ') != std::string::npos)
throw std::string ("T::addRemoveTag - tags may not contain spaces");
throw std::string ("Tt::addRemoveTag - tags may not contain spaces");
mRemoveTags.push_back (tag);
}
////////////////////////////////////////////////////////////////////////////////
int T::getTagCount () const
int Tt::getTagCount () const
{
return mTags.size ();
}
////////////////////////////////////////////////////////////////////////////////
void T::getTags (std::vector<std::string>& all) const
void Tt::getTags (std::vector<std::string>& all) const
{
all = mTags;
}
////////////////////////////////////////////////////////////////////////////////
void T::addTag (const std::string& tag)
void Tt::addTag (const std::string& tag)
{
if (tag.find (' ') != std::string::npos)
throw std::string ("T::addTag - tags may not contain spaces");
throw std::string ("Tt::addTag - tags may not contain spaces");
if (tag[0] == '+')
{
@@ -150,12 +150,12 @@ void T::addTag (const std::string& tag)
}
////////////////////////////////////////////////////////////////////////////////
void T::addTags (const std::vector <std::string>& tags)
void Tt::addTags (const std::vector <std::string>& tags)
{
for (size_t i = 0; i < tags.size (); ++i)
{
if (tags[i].find (' ') != std::string::npos)
throw std::string ("T::addTags - tags may not contain spaces");
throw std::string ("Tt::addTags - tags may not contain spaces");
if (tags[i][0] == '+')
{
@@ -171,7 +171,7 @@ void T::addTags (const std::vector <std::string>& tags)
}
////////////////////////////////////////////////////////////////////////////////
void T::removeTag (const std::string& tag)
void Tt::removeTag (const std::string& tag)
{
std::vector <std::string> copy;
for (size_t i = 0; i < mTags.size (); ++i)
@@ -182,19 +182,19 @@ void T::removeTag (const std::string& tag)
}
////////////////////////////////////////////////////////////////////////////////
void T::removeTags ()
void Tt::removeTags ()
{
mTags.clear ();
}
////////////////////////////////////////////////////////////////////////////////
void T::getAttributes (std::map<std::string, std::string>& all)
void Tt::getAttributes (std::map<std::string, std::string>& all)
{
all = mAttributes;
}
////////////////////////////////////////////////////////////////////////////////
const std::string T::getAttribute (const std::string& name)
const std::string Tt::getAttribute (const std::string& name)
{
if (mAttributes.find (name) != mAttributes.end ())
return mAttributes[name];
@@ -203,7 +203,7 @@ const std::string T::getAttribute (const std::string& name)
}
////////////////////////////////////////////////////////////////////////////////
void T::setAttribute (const std::string& name, const std::string& value)
void Tt::setAttribute (const std::string& name, const std::string& value)
{
if (name.find (' ') != std::string::npos)
throw std::string ("An attribute name may not contain spaces");
@@ -215,7 +215,7 @@ void T::setAttribute (const std::string& name, const std::string& value)
}
////////////////////////////////////////////////////////////////////////////////
void T::setAttributes (const std::map <std::string, std::string>& attributes)
void Tt::setAttributes (const std::map <std::string, std::string>& attributes)
{
foreach (i, attributes)
{
@@ -230,13 +230,13 @@ void T::setAttributes (const std::map <std::string, std::string>& attributes)
}
////////////////////////////////////////////////////////////////////////////////
void T::removeAttributes ()
void Tt::removeAttributes ()
{
mAttributes.clear ();
}
////////////////////////////////////////////////////////////////////////////////
void T::removeAttribute (const std::string& name)
void Tt::removeAttribute (const std::string& name)
{
std::map <std::string, std::string> copy = mAttributes;
mAttributes.clear ();
@@ -246,7 +246,7 @@ void T::removeAttribute (const std::string& name)
}
////////////////////////////////////////////////////////////////////////////////
void T::getSubstitution (
void Tt::getSubstitution (
std::string& from,
std::string& to,
bool& global) const
@@ -257,7 +257,7 @@ void T::getSubstitution (
}
////////////////////////////////////////////////////////////////////////////////
void T::setSubstitution (
void Tt::setSubstitution (
const std::string& from,
const std::string& to,
bool global)
@@ -268,19 +268,19 @@ void T::setSubstitution (
}
////////////////////////////////////////////////////////////////////////////////
void T::getAnnotations (std::map <time_t, std::string>& all) const
void Tt::getAnnotations (std::map <time_t, std::string>& all) const
{
all = mAnnotations;
}
////////////////////////////////////////////////////////////////////////////////
void T::setAnnotations (const std::map <time_t, std::string>& all)
void Tt::setAnnotations (const std::map <time_t, std::string>& all)
{
mAnnotations = all;
}
////////////////////////////////////////////////////////////////////////////////
void T::addAnnotation (const std::string& description)
void Tt::addAnnotation (const std::string& description)
{
std::string sanitized = description;
std::replace (sanitized.begin (), sanitized.end (), '"', '\'');
@@ -290,7 +290,7 @@ void T::addAnnotation (const std::string& description)
}
////////////////////////////////////////////////////////////////////////////////
bool T::sequenceContains (int id) const
bool Tt::sequenceContains (int id) const
{
foreach (seq, mSequence)
if (*seq == id)
@@ -308,7 +308,7 @@ bool T::sequenceContains (int id) const
// attributes \w+:\w+ \s ...
// description .+
//
const std::string T::compose () const
const std::string Tt::compose () const
{
// UUID
std::string line = mUUID + ' ';
@@ -367,7 +367,7 @@ const std::string T::compose () const
}
////////////////////////////////////////////////////////////////////////////////
const std::string T::composeCSV ()
const std::string Tt::composeCSV ()
{
// UUID
std::string line = "'" + mUUID + "',";
@@ -441,7 +441,7 @@ const std::string T::composeCSV ()
////////////////////////////////////////////////////////////////////////////////
// Read all file formats, write only the latest.
void T::parse (const std::string& line)
void Tt::parse (const std::string& line)
{
switch (determineVersion (line))
{
@@ -659,7 +659,7 @@ void T::parse (const std::string& line)
////////////////////////////////////////////////////////////////////////////////
// If this code is inaccurate, data corruption ensues.
int T::determineVersion (const std::string& line)
int Tt::determineVersion (const std::string& line)
{
// Version 1 looks like:
//
@@ -721,7 +721,7 @@ int T::determineVersion (const std::string& line)
////////////////////////////////////////////////////////////////////////////////
// TODO Expand this method into a full-blown task validation check.
bool T::validate () const
bool Tt::validate () const
{
// TODO Verify until > due
// TODO Verify entry < until, due, start, end

16
src/T.h
View File

@@ -24,8 +24,8 @@
// USA
//
////////////////////////////////////////////////////////////////////////////////
#ifndef INCLUDED_T
#define INCLUDED_T
#ifndef INCLUDED_Tt
#define INCLUDED_Tt
#include <string>
#include <vector>
@@ -34,16 +34,16 @@
// Length of longest line.
#define T_LINE_MAX 32768
class T
class Tt
{
public:
enum status {pending, completed, deleted, recurring};
T (); // Default constructor
T (const std::string&); // Initialize by parsing storage format
T (const T&); // Copy constructor
T& operator= (const T&); // Assignment operator
~T (); // Destructor
Tt (); // Default constructor
Tt (const std::string&); // Initialize by parsing storage format
Tt (const Tt&); // Copy constructor
Tt& operator= (const Tt&); // Assignment operator
~Tt (); // Destructor
std::string getUUID () const { return mUUID; }
void setUUID (const std::string& uuid) { mUUID = uuid; }

View File

@@ -68,20 +68,20 @@ void TDB::dataDirectory (const std::string& directory)
////////////////////////////////////////////////////////////////////////////////
// Combine allPendingT with allCompletedT.
// Note: this method is O(N1) + O(N2), where N2 is not bounded.
bool TDB::allT (std::vector <T>& all)
bool TDB::allT (std::vector <Tt>& all)
{
all.clear ();
// Retrieve all the pending records.
std::vector <T> allp;
std::vector <Tt> allp;
if (allPendingT (allp))
{
std::vector <T>::iterator i;
std::vector <Tt>::iterator i;
for (i = allp.begin (); i != allp.end (); ++i)
all.push_back (*i);
// Retrieve all the completed records.
std::vector <T> allc;
std::vector <Tt> allc;
if (allCompletedT (allc))
{
for (i = allc.begin (); i != allc.end (); ++i)
@@ -96,7 +96,7 @@ bool TDB::allT (std::vector <T>& all)
////////////////////////////////////////////////////////////////////////////////
// Only accesses to the pending file result in Tasks that have assigned ids.
bool TDB::pendingT (std::vector <T>& all)
bool TDB::pendingT (std::vector <Tt>& all)
{
all.clear ();
@@ -111,9 +111,9 @@ bool TDB::pendingT (std::vector <T>& all)
{
try
{
T t (*it);
Tt t (*it);
t.setId (mId++);
if (t.getStatus () == T::pending)
if (t.getStatus () == Tt::pending)
all.push_back (t);
}
@@ -136,7 +136,7 @@ bool TDB::pendingT (std::vector <T>& all)
////////////////////////////////////////////////////////////////////////////////
// Only accesses to the pending file result in Tasks that have assigned ids.
bool TDB::allPendingT (std::vector <T>& all)
bool TDB::allPendingT (std::vector <Tt>& all)
{
all.clear ();
@@ -151,7 +151,7 @@ bool TDB::allPendingT (std::vector <T>& all)
{
try
{
T t (*it);
Tt t (*it);
t.setId (mId++);
all.push_back (t);
}
@@ -174,7 +174,7 @@ bool TDB::allPendingT (std::vector <T>& all)
}
////////////////////////////////////////////////////////////////////////////////
bool TDB::completedT (std::vector <T>& all) const
bool TDB::completedT (std::vector <Tt>& all) const
{
all.clear ();
@@ -187,8 +187,8 @@ bool TDB::completedT (std::vector <T>& all) const
{
try
{
T t (*it);
if (t.getStatus () != T::deleted)
Tt t (*it);
if (t.getStatus () != Tt::deleted)
all.push_back (t);
}
@@ -210,7 +210,7 @@ bool TDB::completedT (std::vector <T>& all) const
}
////////////////////////////////////////////////////////////////////////////////
bool TDB::allCompletedT (std::vector <T>& all) const
bool TDB::allCompletedT (std::vector <Tt>& all) const
{
all.clear ();
@@ -223,7 +223,7 @@ bool TDB::allCompletedT (std::vector <T>& all) const
{
try
{
T t (*it);
Tt t (*it);
all.push_back (t);
}
@@ -245,9 +245,9 @@ bool TDB::allCompletedT (std::vector <T>& all) const
}
////////////////////////////////////////////////////////////////////////////////
bool TDB::addT (const T& t)
bool TDB::addT (const Tt& t)
{
T task (t);
Tt task (t);
std::vector <std::string> tags;
task.getTags (tags);
@@ -262,8 +262,8 @@ bool TDB::addT (const T& t)
}
}
if (task.getStatus () == T::pending ||
task.getStatus () == T::recurring)
if (task.getStatus () == Tt::pending ||
task.getStatus () == Tt::recurring)
{
return writePending (task);
}
@@ -272,16 +272,16 @@ bool TDB::addT (const T& t)
}
////////////////////////////////////////////////////////////////////////////////
bool TDB::modifyT (const T& t)
bool TDB::modifyT (const Tt& t)
{
T modified (t);
Tt modified (t);
std::vector <T> all;
std::vector <Tt> all;
allPendingT (all);
std::vector <T> pending;
std::vector <Tt> pending;
std::vector <T>::iterator it;
std::vector <Tt>::iterator it;
for (it = all.begin (); it != all.end (); ++it)
{
if (it->getId () == t.getId ())
@@ -306,7 +306,7 @@ bool TDB::lock (FILE* file) const
}
////////////////////////////////////////////////////////////////////////////////
bool TDB::overwritePending (std::vector <T>& all)
bool TDB::overwritePending (std::vector <Tt>& all)
{
// Write a single task to the pending file
FILE* out;
@@ -317,7 +317,7 @@ bool TDB::overwritePending (std::vector <T>& all)
while (flock (fileno (out), LOCK_EX) && ++retry <= 3)
delay (0.1);
std::vector <T>::iterator it;
std::vector <Tt>::iterator it;
for (it = all.begin (); it != all.end (); ++it)
fputs (it->compose ().c_str (), out);
@@ -329,7 +329,7 @@ bool TDB::overwritePending (std::vector <T>& all)
}
////////////////////////////////////////////////////////////////////////////////
bool TDB::writePending (const T& t)
bool TDB::writePending (const Tt& t)
{
// Write a single task to the pending file
FILE* out;
@@ -350,7 +350,7 @@ bool TDB::writePending (const T& t)
}
////////////////////////////////////////////////////////////////////////////////
bool TDB::writeCompleted (const T& t)
bool TDB::writeCompleted (const Tt& t)
{
// Write a single task to the pending file
FILE* out;
@@ -414,18 +414,18 @@ int TDB::gc ()
int count = 0;
// Read everything from the pending file.
std::vector <T> all;
std::vector <Tt> all;
allPendingT (all);
// A list of the truly pending tasks.
std::vector <T> pending;
std::vector <Tt> pending;
std::vector<T>::iterator it;
std::vector<Tt>::iterator it;
for (it = all.begin (); it != all.end (); ++it)
{
// Some tasks stay in the pending file.
if (it->getStatus () == T::pending ||
it->getStatus () == T::recurring)
if (it->getStatus () == Tt::pending ||
it->getStatus () == Tt::recurring)
{
pending.push_back (*it);
}

View File

@@ -38,13 +38,13 @@ public:
~TDB ();
void dataDirectory (const std::string&);
bool allT (std::vector <T>&);
bool pendingT (std::vector <T>&);
bool allPendingT (std::vector <T>&);
bool completedT (std::vector <T>&) const;
bool allCompletedT (std::vector <T>&) const;
bool addT (const T&);
bool modifyT (const T&);
bool allT (std::vector <Tt>&);
bool pendingT (std::vector <Tt>&);
bool allPendingT (std::vector <Tt>&);
bool completedT (std::vector <Tt>&) const;
bool allCompletedT (std::vector <Tt>&) const;
bool addT (const Tt&);
bool modifyT (const Tt&);
int gc ();
int nextId ();
@@ -52,9 +52,9 @@ public:
private:
bool lock (FILE*) const;
bool overwritePending (std::vector <T>&);
bool writePending (const T&);
bool writeCompleted (const T&);
bool overwritePending (std::vector <Tt>&);
bool writePending (const Tt&);
bool writeCompleted (const Tt&);
bool readLockedFile (const std::string&, std::vector <std::string>&) const;
private:

View File

@@ -41,7 +41,7 @@
#endif
////////////////////////////////////////////////////////////////////////////////
std::string handleAdd (TDB& tdb, T& task, Config& conf)
std::string handleAdd (TDB& tdb, Tt& task, Config& conf)
{
std::stringstream out;
@@ -59,7 +59,7 @@ std::string handleAdd (TDB& tdb, T& task, Config& conf)
if (task.getAttribute ("due") != "" &&
task.getAttribute ("recur") != "")
{
task.setStatus (T::recurring);
task.setStatus (Tt::recurring);
task.setAttribute ("mask", "");
}
@@ -86,12 +86,12 @@ std::string handleAdd (TDB& tdb, T& task, Config& conf)
}
////////////////////////////////////////////////////////////////////////////////
std::string handleProjects (TDB& tdb, T& task, Config& conf)
std::string handleProjects (TDB& tdb, Tt& task, Config& conf)
{
std::stringstream out;
// Get all the tasks, including deleted ones.
std::vector <T> tasks;
std::vector <Tt> tasks;
tdb.pendingT (tasks);
// Scan all the tasks for their project name, building a map using project
@@ -99,7 +99,7 @@ std::string handleProjects (TDB& tdb, T& task, Config& conf)
std::map <std::string, int> unique;
for (unsigned int i = 0; i < tasks.size (); ++i)
{
T task (tasks[i]);
Tt task (tasks[i]);
unique[task.getAttribute ("project")] += 1;
}
@@ -141,12 +141,12 @@ std::string handleProjects (TDB& tdb, T& task, Config& conf)
}
////////////////////////////////////////////////////////////////////////////////
std::string handleTags (TDB& tdb, T& task, Config& conf)
std::string handleTags (TDB& tdb, Tt& task, Config& conf)
{
std::stringstream out;
// Get all the tasks.
std::vector <T> tasks;
std::vector <Tt> tasks;
tdb.pendingT (tasks);
// Scan all the tasks for their project name, building a map using project
@@ -154,7 +154,7 @@ std::string handleTags (TDB& tdb, T& task, Config& conf)
std::map <std::string, std::string> unique;
for (unsigned int i = 0; i < tasks.size (); ++i)
{
T task (tasks[i]);
Tt task (tasks[i]);
std::vector <std::string> tags;
task.getTags (tags);
@@ -183,22 +183,22 @@ std::string handleTags (TDB& tdb, T& task, Config& conf)
////////////////////////////////////////////////////////////////////////////////
// If a task is deleted, but is still in the pending file, then it may be
// undeleted simply by changing it's status.
std::string handleUndelete (TDB& tdb, T& task, Config& conf)
std::string handleUndelete (TDB& tdb, Tt& task, Config& conf)
{
std::stringstream out;
std::vector <T> all;
std::vector <Tt> all;
tdb.allPendingT (all);
filterSequence (all, task);
foreach (t, all)
{
if (t->getStatus () == T::deleted)
if (t->getStatus () == Tt::deleted)
{
if (t->getAttribute ("recur") != "")
out << "Task does not support 'undo' for recurring tasks.\n";
t->setStatus (T::pending);
t->setStatus (Tt::pending);
t->removeAttribute ("end");
tdb.modifyT (*t);
@@ -221,22 +221,22 @@ std::string handleUndelete (TDB& tdb, T& task, Config& conf)
////////////////////////////////////////////////////////////////////////////////
// If a task is done, but is still in the pending file, then it may be undone
// simply by changing it's status.
std::string handleUndo (TDB& tdb, T& task, Config& conf)
std::string handleUndo (TDB& tdb, Tt& task, Config& conf)
{
std::stringstream out;
std::vector <T> all;
std::vector <Tt> all;
tdb.allPendingT (all);
filterSequence (all, task);
foreach (t, all)
{
if (t->getStatus () == T::completed)
if (t->getStatus () == Tt::completed)
{
if (t->getAttribute ("recur") != "")
out << "Task does not support 'undo' for recurring tasks.\n";
t->setStatus (T::pending);
t->setStatus (Tt::pending);
t->removeAttribute ("end");
tdb.modifyT (*t);
@@ -290,7 +290,7 @@ std::string handleVersion (Config& conf)
link.setColumnWidth (0, Table::flexible);
link.setColumnJustification (0, Table::left);
link.addCell (link.addRow (), 0,
"See http://www.beckingham.net/task.html for the latest releases and a "
"See http://taskwarrior.org for the latest releases and a "
"full tutorial. New releases containing fixes and enhancements are "
"made frequently.");
@@ -418,11 +418,11 @@ std::string handleVersion (Config& conf)
}
////////////////////////////////////////////////////////////////////////////////
std::string handleDelete (TDB& tdb, T& task, Config& conf)
std::string handleDelete (TDB& tdb, Tt& task, Config& conf)
{
std::stringstream out;
std::vector <T> all;
std::vector <Tt> all;
tdb.allPendingT (all);
filterSequence (all, task);
@@ -455,7 +455,7 @@ std::string handleDelete (TDB& tdb, T& task, Config& conf)
if (sibling->getAttribute ("parent") == parent ||
sibling->getUUID () == parent)
{
sibling->setStatus (T::deleted);
sibling->setStatus (Tt::deleted);
sibling->setAttribute ("end", endTime);
tdb.modifyT (*sibling);
@@ -472,7 +472,7 @@ std::string handleDelete (TDB& tdb, T& task, Config& conf)
else
{
// Update mask in parent.
t->setStatus (T::deleted);
t->setStatus (Tt::deleted);
updateRecurrenceMask (tdb, all, *t);
t->setAttribute ("end", endTime);
@@ -488,7 +488,7 @@ std::string handleDelete (TDB& tdb, T& task, Config& conf)
}
else
{
t->setStatus (T::deleted);
t->setStatus (Tt::deleted);
t->setAttribute ("end", endTime);
tdb.modifyT (*t);
@@ -509,11 +509,11 @@ std::string handleDelete (TDB& tdb, T& task, Config& conf)
}
////////////////////////////////////////////////////////////////////////////////
std::string handleStart (TDB& tdb, T& task, Config& conf)
std::string handleStart (TDB& tdb, Tt& task, Config& conf)
{
std::stringstream out;
std::vector <T> all;
std::vector <Tt> all;
tdb.pendingT (all);
filterSequence (all, task);
@@ -546,11 +546,11 @@ std::string handleStart (TDB& tdb, T& task, Config& conf)
}
////////////////////////////////////////////////////////////////////////////////
std::string handleStop (TDB& tdb, T& task, Config& conf)
std::string handleStop (TDB& tdb, Tt& task, Config& conf)
{
std::stringstream out;
std::vector <T> all;
std::vector <Tt> all;
tdb.pendingT (all);
filterSequence (all, task);
@@ -574,18 +574,18 @@ std::string handleStop (TDB& tdb, T& task, Config& conf)
}
////////////////////////////////////////////////////////////////////////////////
std::string handleDone (TDB& tdb, T& task, Config& conf)
std::string handleDone (TDB& tdb, Tt& task, Config& conf)
{
int count = 0;
std::stringstream out;
std::vector <T> all;
std::vector <Tt> all;
tdb.allPendingT (all);
std::vector <T> filtered = all;
std::vector <Tt> filtered = all;
filterSequence (filtered, task);
foreach (seq, filtered)
{
if (seq->getStatus () == T::pending)
if (seq->getStatus () == Tt::pending)
{
// Apply deltas.
deltaDescription (*seq, task);
@@ -599,7 +599,7 @@ std::string handleDone (TDB& tdb, T& task, Config& conf)
seq->setAttribute ("end", entryTime);
// Change status.
seq->setStatus (T::completed);
seq->setStatus (Tt::completed);
if (!tdb.modifyT (*seq))
throw std::string ("Could not mark task as completed.");
@@ -638,7 +638,7 @@ std::string handleDone (TDB& tdb, T& task, Config& conf)
}
////////////////////////////////////////////////////////////////////////////////
std::string handleExport (TDB& tdb, T& task, Config& conf)
std::string handleExport (TDB& tdb, Tt& task, Config& conf)
{
std::stringstream output;
@@ -669,13 +669,13 @@ std::string handleExport (TDB& tdb, T& task, Config& conf)
<< "\n";
int count = 0;
std::vector <T> all;
std::vector <Tt> all;
tdb.allPendingT (all);
filter (all, task);
foreach (t, all)
{
if (t->getStatus () != T::recurring &&
t->getStatus () != T::deleted)
if (t->getStatus () != Tt::recurring &&
t->getStatus () != Tt::deleted)
{
out << t->composeCSV ().c_str ();
++count;
@@ -695,14 +695,14 @@ std::string handleExport (TDB& tdb, T& task, Config& conf)
}
////////////////////////////////////////////////////////////////////////////////
std::string handleModify (TDB& tdb, T& task, Config& conf)
std::string handleModify (TDB& tdb, Tt& task, Config& conf)
{
int count = 0;
std::stringstream out;
std::vector <T> all;
std::vector <Tt> all;
tdb.allPendingT (all);
std::vector <T> filtered = all;
std::vector <Tt> filtered = all;
filterSequence (filtered, task);
foreach (seq, filtered)
{
@@ -749,14 +749,14 @@ std::string handleModify (TDB& tdb, T& task, Config& conf)
}
////////////////////////////////////////////////////////////////////////////////
std::string handleAppend (TDB& tdb, T& task, Config& conf)
std::string handleAppend (TDB& tdb, Tt& task, Config& conf)
{
int count = 0;
std::stringstream out;
std::vector <T> all;
std::vector <Tt> all;
tdb.allPendingT (all);
std::vector <T> filtered = all;
std::vector <Tt> filtered = all;
filterSequence (filtered, task);
foreach (seq, filtered)
{
@@ -799,20 +799,20 @@ std::string handleAppend (TDB& tdb, T& task, Config& conf)
}
////////////////////////////////////////////////////////////////////////////////
std::string handleDuplicate (TDB& tdb, T& task, Config& conf)
std::string handleDuplicate (TDB& tdb, Tt& task, Config& conf)
{
int count = 0;
std::stringstream out;
std::vector <T> all;
std::vector <Tt> all;
tdb.allPendingT (all);
std::vector <T> filtered = all;
std::vector <Tt> filtered = all;
filterSequence (filtered, task);
foreach (seq, filtered)
{
if (seq->getStatus () != T::recurring && seq->getAttribute ("parent") == "")
if (seq->getStatus () != Tt::recurring && seq->getAttribute ("parent") == "")
{
T dup (*seq);
Tt dup (*seq);
dup.setUUID (uuid ()); // Needs a new UUID.
// Apply deltas.
@@ -942,10 +942,10 @@ std::string handleColor (Config& conf)
}
////////////////////////////////////////////////////////////////////////////////
std::string handleAnnotate (TDB& tdb, T& task, Config& conf)
std::string handleAnnotate (TDB& tdb, Tt& task, Config& conf)
{
std::stringstream out;
std::vector <T> all;
std::vector <Tt> all;
tdb.pendingT (all);
filterSequence (all, task);
@@ -967,18 +967,18 @@ std::string handleAnnotate (TDB& tdb, T& task, Config& conf)
}
////////////////////////////////////////////////////////////////////////////////
T findT (int id, const std::vector <T>& all)
Tt findT (int id, const std::vector <Tt>& all)
{
std::vector <T>::const_iterator it;
std::vector <Tt>::const_iterator it;
for (it = all.begin (); it != all.end (); ++it)
if (id == it->getId ())
return *it;
return T ();
return Tt ();
}
////////////////////////////////////////////////////////////////////////////////
int deltaAppend (T& task, T& delta)
int deltaAppend (Tt& task, Tt& delta)
{
if (delta.getDescription () != "")
{
@@ -994,7 +994,7 @@ int deltaAppend (T& task, T& delta)
}
////////////////////////////////////////////////////////////////////////////////
int deltaDescription (T& task, T& delta)
int deltaDescription (Tt& task, Tt& delta)
{
if (delta.getDescription () != "")
{
@@ -1006,7 +1006,7 @@ int deltaDescription (T& task, T& delta)
}
////////////////////////////////////////////////////////////////////////////////
int deltaTags (T& task, T& delta)
int deltaTags (Tt& task, Tt& delta)
{
int changes = 0;
@@ -1038,7 +1038,7 @@ int deltaTags (T& task, T& delta)
}
////////////////////////////////////////////////////////////////////////////////
int deltaAttributes (T& task, T& delta)
int deltaAttributes (Tt& task, Tt& delta)
{
int changes = 0;
@@ -1058,7 +1058,7 @@ int deltaAttributes (T& task, T& delta)
}
////////////////////////////////////////////////////////////////////////////////
int deltaSubstitutions (T& task, T& delta)
int deltaSubstitutions (Tt& task, Tt& delta)
{
int changes = 0;
std::string from;

View File

@@ -87,14 +87,14 @@ static std::string findDate (
}
////////////////////////////////////////////////////////////////////////////////
static std::string formatStatus (T& task)
static std::string formatStatus (Tt& task)
{
switch (task.getStatus ())
{
case T::pending: return "Pending"; break;
case T::completed: return "Completed"; break;
case T::deleted: return "Deleted"; break;
case T::recurring: return "Recurring"; break;
case Tt::pending: return "Pending"; break;
case Tt::completed: return "Completed"; break;
case Tt::deleted: return "Deleted"; break;
case Tt::recurring: return "Recurring"; break;
}
return "";
@@ -103,7 +103,7 @@ static std::string formatStatus (T& task)
////////////////////////////////////////////////////////////////////////////////
static std::string formatDate (
Config& conf,
T& task,
Tt& task,
const std::string& attribute)
{
std::string value = task.getAttribute (attribute);
@@ -117,7 +117,7 @@ static std::string formatDate (
}
////////////////////////////////////////////////////////////////////////////////
static std::string formatTask (Config& conf, T task)
static std::string formatTask (Config& conf, Tt task)
{
std::stringstream before;
before << "# The 'task edit <id>' command allows you to modify all aspects of a task" << std::endl
@@ -182,7 +182,7 @@ static std::string formatTask (Config& conf, T task)
}
////////////////////////////////////////////////////////////////////////////////
static void parseTask (Config& conf, T& task, const std::string& after)
static void parseTask (Config& conf, Tt& task, const std::string& after)
{
// project
std::string value = findValue (after, "Project:");
@@ -300,7 +300,7 @@ static void parseTask (Config& conf, T& task, const std::string& after)
task.setAttribute ("end", value);
}
}
else if (task.getStatus () != T::deleted)
else if (task.getStatus () != Tt::deleted)
throw std::string ("Cannot set a done date on a pending task.");
}
else
@@ -308,7 +308,7 @@ static void parseTask (Config& conf, T& task, const std::string& after)
if (task.getAttribute ("end") != "")
{
std::cout << "Done date removed." << std::endl;
task.setStatus (T::pending);
task.setStatus (Tt::pending);
task.removeAttribute ("end");
}
}
@@ -338,7 +338,7 @@ static void parseTask (Config& conf, T& task, const std::string& after)
{
if (task.getAttribute ("due") != "")
{
if (task.getStatus () == T::recurring ||
if (task.getStatus () == Tt::recurring ||
task.getAttribute ("parent") != "")
{
std::cout << "Cannot remove a due date from a recurring task." << std::endl;
@@ -393,7 +393,7 @@ static void parseTask (Config& conf, T& task, const std::string& after)
if (task.getAttribute ("due") != "")
{
task.setAttribute ("recur", value);
task.setStatus (T::recurring);
task.setStatus (Tt::recurring);
}
else
throw std::string ("A recurring task must have a due date.");
@@ -404,7 +404,7 @@ static void parseTask (Config& conf, T& task, const std::string& after)
else
{
std::cout << "Recurrence removed." << std::endl;
task.setStatus (T::pending);
task.setStatus (Tt::pending);
task.removeAttribute ("recur");
task.removeAttribute ("until");
task.removeAttribute ("mask");
@@ -491,10 +491,10 @@ static void parseTask (Config& conf, T& task, const std::string& after)
// Introducing the Silver Bullet. This feature is the catch-all fixative for
// various other ills. This is like opening up the hood and going in with a
// wrench. To be used sparingly.
std::string handleEdit (TDB& tdb, T& task, Config& conf)
std::string handleEdit (TDB& tdb, Tt& task, Config& conf)
{
std::stringstream out;
std::vector <T> all;
std::vector <Tt> all;
tdb.allPendingT (all);
filterSequence (all, task);
@@ -513,7 +513,7 @@ std::string handleEdit (TDB& tdb, T& task, Config& conf)
mkstemp (cpattern);
char* file = cpattern;
// Format the contents, T -> text, write to a file.
// Format the contents, Tt -> text, write to a file.
std::string before = formatTask (conf, *seq);
spit (file, before);

View File

@@ -155,7 +155,7 @@ static fileType determineFileType (const std::vector <std::string>& lines)
}
////////////////////////////////////////////////////////////////////////////////
static void decorateTask (T& task, Config& conf)
static void decorateTask (Tt& task, Config& conf)
{
char entryTime[16];
sprintf (entryTime, "%u", (unsigned int) time (NULL));
@@ -227,7 +227,7 @@ static std::string importTask_1_4_3 (
throw "unrecoverable";
// Build up this task ready for insertion.
T task;
Tt task;
// Handle the 12 fields.
for (unsigned int f = 0; f < fields.size (); ++f)
@@ -239,10 +239,10 @@ static std::string importTask_1_4_3 (
break;
case 1: // 'status'
if (fields[f] == "'pending'") task.setStatus (T::pending);
else if (fields[f] == "'recurring'") task.setStatus (T::recurring);
else if (fields[f] == "'deleted'") task.setStatus (T::deleted);
else if (fields[f] == "'completed'") task.setStatus (T::completed);
if (fields[f] == "'pending'") task.setStatus (Tt::pending);
else if (fields[f] == "'recurring'") task.setStatus (Tt::recurring);
else if (fields[f] == "'deleted'") task.setStatus (Tt::deleted);
else if (fields[f] == "'completed'") task.setStatus (Tt::completed);
break;
case 2: // 'tags'
@@ -383,7 +383,7 @@ static std::string importTask_1_5_0 (
throw "unrecoverable";
// Build up this task ready for insertion.
T task;
Tt task;
// Handle the 13 fields.
for (unsigned int f = 0; f < fields.size (); ++f)
@@ -395,10 +395,10 @@ static std::string importTask_1_5_0 (
break;
case 1: // 'status'
if (fields[f] == "'pending'") task.setStatus (T::pending);
else if (fields[f] == "'recurring'") task.setStatus (T::recurring);
else if (fields[f] == "'deleted'") task.setStatus (T::deleted);
else if (fields[f] == "'completed'") task.setStatus (T::completed);
if (fields[f] == "'pending'") task.setStatus (Tt::pending);
else if (fields[f] == "'recurring'") task.setStatus (Tt::recurring);
else if (fields[f] == "'deleted'") task.setStatus (Tt::deleted);
else if (fields[f] == "'completed'") task.setStatus (Tt::completed);
break;
case 2: // 'tags'
@@ -544,7 +544,7 @@ static std::string importTask_1_6_0 (
throw "unrecoverable";
// Build up this task ready for insertion.
T task;
Tt task;
// Handle the 13 fields.
for (unsigned int f = 0; f < fields.size (); ++f)
@@ -556,10 +556,10 @@ static std::string importTask_1_6_0 (
break;
case 1: // 'status'
if (fields[f] == "'pending'") task.setStatus (T::pending);
else if (fields[f] == "'recurring'") task.setStatus (T::recurring);
else if (fields[f] == "'deleted'") task.setStatus (T::deleted);
else if (fields[f] == "'completed'") task.setStatus (T::completed);
if (fields[f] == "'pending'") task.setStatus (Tt::pending);
else if (fields[f] == "'recurring'") task.setStatus (Tt::recurring);
else if (fields[f] == "'deleted'") task.setStatus (Tt::deleted);
else if (fields[f] == "'completed'") task.setStatus (Tt::completed);
break;
case 2: // 'tags'
@@ -670,7 +670,7 @@ static std::string importTaskCmdLine (
std::vector <std::string> args;
split (args, std::string ("add ") + line, ' ');
T task;
Tt task;
std::string command;
parse (args, command, task, conf);
handleAdd (tdb, task, conf);
@@ -776,18 +776,18 @@ static std::string importTodoSh_2_0 (
}
}
T task;
Tt task;
std::string command;
parse (args, command, task, conf);
decorateTask (task, conf);
if (isPending)
{
task.setStatus (T::pending);
task.setStatus (Tt::pending);
}
else
{
task.setStatus (T::completed);
task.setStatus (Tt::completed);
char end[16];
sprintf (end, "%u", (unsigned int) endDate.toEpoch ());
@@ -850,7 +850,7 @@ static std::string importText (
std::vector <std::string> args;
split (args, std::string ("add ") + line, ' ');
T task;
Tt task;
std::string command;
parse (args, command, task, conf);
decorateTask (task, conf);
@@ -1040,7 +1040,7 @@ static std::string importCSV (
std::vector <std::string> fields;
split (fields, *it, ',');
T task;
Tt task;
int f;
if ((f = mapping["uuid"]) != -1)
@@ -1050,10 +1050,10 @@ static std::string importCSV (
{
std::string value = lowerCase (unquoteText (trim (fields[f])));
if (value == "recurring") task.setStatus (T::recurring);
else if (value == "deleted") task.setStatus (T::deleted);
else if (value == "completed") task.setStatus (T::completed);
else task.setStatus (T::pending);
if (value == "recurring") task.setStatus (Tt::recurring);
else if (value == "deleted") task.setStatus (Tt::deleted);
else if (value == "completed") task.setStatus (Tt::completed);
else task.setStatus (Tt::pending);
}
if ((f = mapping["tags"]) != -1)
@@ -1128,7 +1128,7 @@ static std::string importCSV (
}
////////////////////////////////////////////////////////////////////////////////
std::string handleImport (TDB& tdb, T& task, Config& conf)
std::string handleImport (TDB& tdb, Tt& task, Config& conf)
{
std::stringstream out;

View File

@@ -469,7 +469,7 @@ bool validDuration (std::string& input)
void parse (
std::vector <std::string>& args,
std::string& command,
T& task,
Tt& task,
Config& conf)
{
command = "";

View File

@@ -47,12 +47,12 @@
#endif
////////////////////////////////////////////////////////////////////////////////
void filterSequence (std::vector<T>& all, T& task)
void filterSequence (std::vector<Tt>& all, Tt& task)
{
std::vector <int> sequence = task.getAllIds ();
std::vector <T> filtered;
std::vector <T>::iterator t;
std::vector <Tt> filtered;
std::vector <Tt>::iterator t;
for (t = all.begin (); t != all.end (); ++t)
{
std::vector <int>::iterator s;
@@ -64,7 +64,7 @@ void filterSequence (std::vector<T>& all, T& task)
if (sequence.size () != filtered.size ())
{
std::vector <int> filteredSequence;
std::vector <T>::iterator fs;
std::vector <Tt>::iterator fs;
for (fs = filtered.begin (); fs != filtered.end (); ++fs)
filteredSequence.push_back (fs->getId ());
@@ -94,9 +94,9 @@ void filterSequence (std::vector<T>& all, T& task)
}
////////////////////////////////////////////////////////////////////////////////
void filter (std::vector<T>& all, T& task)
void filter (std::vector<Tt>& all, Tt& task)
{
std::vector <T> filtered;
std::vector <Tt> filtered;
// Split any description specified into words.
std::vector <std::string> descWords;
@@ -113,7 +113,7 @@ void filter (std::vector<T>& all, T& task)
// Iterate over each task, and apply selection criteria.
for (unsigned int i = 0; i < all.size (); ++i)
{
T refTask (all[i]);
Tt refTask (all[i]);
// Apply description filter.
std::string desc = lowerCase (refTask.getDescription ());
@@ -189,7 +189,7 @@ void filter (std::vector<T>& all, T& task)
////////////////////////////////////////////////////////////////////////////////
// Successively apply filters based on the task object built from the command
// line. Tasks that match all the specified criteria are listed.
std::string handleCompleted (TDB& tdb, T& task, Config& conf)
std::string handleCompleted (TDB& tdb, Tt& task, Config& conf)
{
std::stringstream out;
@@ -205,7 +205,7 @@ std::string handleCompleted (TDB& tdb, T& task, Config& conf)
#endif
// Get the pending tasks.
std::vector <T> tasks;
std::vector <Tt> tasks;
tdb.completedT (tasks);
filter (tasks, task);
@@ -244,7 +244,7 @@ std::string handleCompleted (TDB& tdb, T& task, Config& conf)
// Iterate over each task, and apply selection criteria.
for (unsigned int i = 0; i < tasks.size (); ++i)
{
T refTask (tasks[i]);
Tt refTask (tasks[i]);
// Now format the matching task.
Date end (::atoi (refTask.getAttribute ("end").c_str ()));
@@ -293,7 +293,7 @@ std::string handleCompleted (TDB& tdb, T& task, Config& conf)
////////////////////////////////////////////////////////////////////////////////
// Display all information for the given task.
std::string handleInfo (TDB& tdb, T& task, Config& conf)
std::string handleInfo (TDB& tdb, Tt& task, Config& conf)
{
std::stringstream out;
@@ -309,14 +309,14 @@ std::string handleInfo (TDB& tdb, T& task, Config& conf)
#endif
// Get all the tasks.
std::vector <T> tasks;
std::vector <Tt> tasks;
tdb.allPendingT (tasks);
// Find the task.
int count = 0;
for (unsigned int i = 0; i < tasks.size (); ++i)
{
T refTask (tasks[i]);
Tt refTask (tasks[i]);
if (refTask.getId () == task.getId () || task.sequenceContains (refTask.getId ()))
{
@@ -348,10 +348,10 @@ std::string handleInfo (TDB& tdb, T& task, Config& conf)
table.addCell (row, 0, "ID");
table.addCell (row, 1, refTask.getId ());
std::string status = refTask.getStatus () == T::pending ? "Pending"
: refTask.getStatus () == T::completed ? "Completed"
: refTask.getStatus () == T::deleted ? "Deleted"
: refTask.getStatus () == T::recurring ? "Recurring"
std::string status = refTask.getStatus () == Tt::pending ? "Pending"
: refTask.getStatus () == Tt::completed ? "Completed"
: refTask.getStatus () == Tt::deleted ? "Deleted"
: refTask.getStatus () == Tt::recurring ? "Recurring"
: "";
if (refTask.getAttribute ("parent") != "")
status += " (Recurring)";
@@ -389,7 +389,7 @@ std::string handleInfo (TDB& tdb, T& task, Config& conf)
table.addCell (row, 1, refTask.getAttribute ("priority"));
}
if (refTask.getStatus () == T::recurring ||
if (refTask.getStatus () == Tt::recurring ||
refTask.getAttribute ("parent") != "")
{
if (refTask.getAttribute ("recur") != "")
@@ -540,11 +540,11 @@ std::string handleInfo (TDB& tdb, T& task, Config& conf)
// Project Remaining Avg Age Complete 0% 100%
// A 12 13d 55% XXXXXXXXXXXXX-----------
// B 109 3d 12h 10% XXX---------------------
std::string handleReportSummary (TDB& tdb, T& task, Config& conf)
std::string handleReportSummary (TDB& tdb, Tt& task, Config& conf)
{
std::stringstream out;
std::vector <T> tasks;
std::vector <Tt> tasks;
tdb.allT (tasks);
handleRecurrence (tdb, tasks);
filter (tasks, task);
@@ -552,7 +552,7 @@ std::string handleReportSummary (TDB& tdb, T& task, Config& conf)
// Generate unique list of project names from all pending tasks.
std::map <std::string, bool> allProjects;
foreach (t, tasks)
if (t->getStatus () == T::pending)
if (t->getStatus () == Tt::pending)
allProjects[t->getAttribute ("project")] = false;
// Initialize counts, sum.
@@ -577,7 +577,7 @@ std::string handleReportSummary (TDB& tdb, T& task, Config& conf)
std::string project = t->getAttribute ("project");
++counter[project];
if (t->getStatus () == T::pending)
if (t->getStatus () == Tt::pending)
{
++countPending[project];
@@ -586,7 +586,7 @@ std::string handleReportSummary (TDB& tdb, T& task, Config& conf)
sumEntry[project] = sumEntry[project] + (double) (now - entry);
}
else if (t->getStatus () == T::completed)
else if (t->getStatus () == Tt::completed)
{
++countCompleted[project];
@@ -702,12 +702,12 @@ std::string handleReportSummary (TDB& tdb, T& task, Config& conf)
//
// Make the "three" tasks a configurable number
//
std::string handleReportNext (TDB& tdb, T& task, Config& conf)
std::string handleReportNext (TDB& tdb, Tt& task, Config& conf)
{
std::stringstream out;
// Load all pending.
std::vector <T> pending;
std::vector <Tt> pending;
tdb.allPendingT (pending);
handleRecurrence (tdb, pending);
filter (pending, task);
@@ -728,7 +728,7 @@ std::string handleReportNext (TDB& tdb, T& task, Config& conf)
#endif
// Get the pending tasks.
std::vector <T> tasks;
std::vector <Tt> tasks;
tdb.pendingT (tasks);
filter (tasks, task);
@@ -778,7 +778,7 @@ std::string handleReportNext (TDB& tdb, T& task, Config& conf)
// Iterate over each task, and apply selection criteria.
foreach (i, matching)
{
T refTask (pending[*i]);
Tt refTask (pending[*i]);
Date now;
// Now format the matching task.
@@ -887,7 +887,7 @@ time_t monthlyEpoch (const std::string& date)
return 0;
}
std::string handleReportHistory (TDB& tdb, T& task, Config& conf)
std::string handleReportHistory (TDB& tdb, Tt& task, Config& conf)
{
std::stringstream out;
@@ -897,13 +897,13 @@ std::string handleReportHistory (TDB& tdb, T& task, Config& conf)
std::map <time_t, int> deletedGroup;
// Scan the pending tasks.
std::vector <T> pending;
std::vector <Tt> pending;
tdb.allPendingT (pending);
handleRecurrence (tdb, pending);
filter (pending, task);
for (unsigned int i = 0; i < pending.size (); ++i)
{
T task (pending[i]);
Tt task (pending[i]);
time_t epoch = monthlyEpoch (task.getAttribute ("entry"));
if (epoch)
{
@@ -914,7 +914,7 @@ std::string handleReportHistory (TDB& tdb, T& task, Config& conf)
else
addedGroup[epoch] = 1;
if (task.getStatus () == T::deleted)
if (task.getStatus () == Tt::deleted)
{
epoch = monthlyEpoch (task.getAttribute ("end"));
groups[epoch] = 0;
@@ -924,7 +924,7 @@ std::string handleReportHistory (TDB& tdb, T& task, Config& conf)
else
deletedGroup[epoch] = 1;
}
else if (task.getStatus () == T::completed)
else if (task.getStatus () == Tt::completed)
{
epoch = monthlyEpoch (task.getAttribute ("end"));
groups[epoch] = 0;
@@ -938,12 +938,12 @@ std::string handleReportHistory (TDB& tdb, T& task, Config& conf)
}
// Scan the completed tasks.
std::vector <T> completed;
std::vector <Tt> completed;
tdb.allCompletedT (completed);
filter (completed, task);
for (unsigned int i = 0; i < completed.size (); ++i)
{
T task (completed[i]);
Tt task (completed[i]);
time_t epoch = monthlyEpoch (task.getAttribute ("entry"));
if (epoch)
{
@@ -955,7 +955,7 @@ std::string handleReportHistory (TDB& tdb, T& task, Config& conf)
addedGroup[epoch] = 1;
epoch = monthlyEpoch (task.getAttribute ("end"));
if (task.getStatus () == T::deleted)
if (task.getStatus () == Tt::deleted)
{
epoch = monthlyEpoch (task.getAttribute ("end"));
groups[epoch] = 0;
@@ -965,7 +965,7 @@ std::string handleReportHistory (TDB& tdb, T& task, Config& conf)
else
deletedGroup[epoch] = 1;
}
else if (task.getStatus () == T::completed)
else if (task.getStatus () == Tt::completed)
{
epoch = monthlyEpoch (task.getAttribute ("end"));
groups[epoch] = 0;
@@ -1079,7 +1079,7 @@ std::string handleReportHistory (TDB& tdb, T& task, Config& conf)
}
////////////////////////////////////////////////////////////////////////////////
std::string handleReportGHistory (TDB& tdb, T& task, Config& conf)
std::string handleReportGHistory (TDB& tdb, Tt& task, Config& conf)
{
std::stringstream out;
@@ -1101,13 +1101,13 @@ std::string handleReportGHistory (TDB& tdb, T& task, Config& conf)
std::map <time_t, int> deletedGroup;
// Scan the pending tasks.
std::vector <T> pending;
std::vector <Tt> pending;
tdb.allPendingT (pending);
handleRecurrence (tdb, pending);
filter (pending, task);
for (unsigned int i = 0; i < pending.size (); ++i)
{
T task (pending[i]);
Tt task (pending[i]);
time_t epoch = monthlyEpoch (task.getAttribute ("entry"));
if (epoch)
{
@@ -1118,7 +1118,7 @@ std::string handleReportGHistory (TDB& tdb, T& task, Config& conf)
else
addedGroup[epoch] = 1;
if (task.getStatus () == T::deleted)
if (task.getStatus () == Tt::deleted)
{
epoch = monthlyEpoch (task.getAttribute ("end"));
groups[epoch] = 0;
@@ -1128,7 +1128,7 @@ std::string handleReportGHistory (TDB& tdb, T& task, Config& conf)
else
deletedGroup[epoch] = 1;
}
else if (task.getStatus () == T::completed)
else if (task.getStatus () == Tt::completed)
{
epoch = monthlyEpoch (task.getAttribute ("end"));
groups[epoch] = 0;
@@ -1142,12 +1142,12 @@ std::string handleReportGHistory (TDB& tdb, T& task, Config& conf)
}
// Scan the completed tasks.
std::vector <T> completed;
std::vector <Tt> completed;
tdb.allCompletedT (completed);
filter (completed, task);
for (unsigned int i = 0; i < completed.size (); ++i)
{
T task (completed[i]);
Tt task (completed[i]);
time_t epoch = monthlyEpoch (task.getAttribute ("entry"));
if (epoch)
{
@@ -1159,7 +1159,7 @@ std::string handleReportGHistory (TDB& tdb, T& task, Config& conf)
addedGroup[epoch] = 1;
epoch = monthlyEpoch (task.getAttribute ("end"));
if (task.getStatus () == T::deleted)
if (task.getStatus () == Tt::deleted)
{
epoch = monthlyEpoch (task.getAttribute ("end"));
groups[epoch] = 0;
@@ -1169,7 +1169,7 @@ std::string handleReportGHistory (TDB& tdb, T& task, Config& conf)
else
deletedGroup[epoch] = 1;
}
else if (task.getStatus () == T::completed)
else if (task.getStatus () == Tt::completed)
{
epoch = monthlyEpoch (task.getAttribute ("end"));
groups[epoch] = 0;
@@ -1323,7 +1323,7 @@ std::string handleReportGHistory (TDB& tdb, T& task, Config& conf)
}
////////////////////////////////////////////////////////////////////////////////
std::string handleReportTimesheet (TDB& tdb, T& task, Config& conf)
std::string handleReportTimesheet (TDB& tdb, Tt& task, Config& conf)
{
std::stringstream out;
@@ -1339,7 +1339,7 @@ std::string handleReportTimesheet (TDB& tdb, T& task, Config& conf)
#endif
// Get all the tasks.
std::vector <T> tasks;
std::vector <Tt> tasks;
tdb.allT (tasks);
filter (tasks, task);
@@ -1399,7 +1399,7 @@ std::string handleReportTimesheet (TDB& tdb, T& task, Config& conf)
foreach (t, tasks)
{
// If task completed within range.
if (t->getStatus () == T::completed)
if (t->getStatus () == Tt::completed)
{
Date compDate (::atoi (t->getAttribute ("end").c_str ()));
if (compDate >= start && compDate < end)
@@ -1469,7 +1469,7 @@ std::string handleReportTimesheet (TDB& tdb, T& task, Config& conf)
foreach (t, tasks)
{
// If task started within range, but not completed withing range.
if (t->getStatus () == T::pending &&
if (t->getStatus () == Tt::pending &&
t->getAttribute ("start") != "")
{
Date startDate (::atoi (t->getAttribute ("start").c_str ()));
@@ -1530,7 +1530,7 @@ std::string renderMonths (
int firstMonth,
int firstYear,
const Date& today,
std::vector <T>& all,
std::vector <Tt>& all,
Config& conf,
int monthsPerLine)
{
@@ -1625,7 +1625,7 @@ std::string renderMonths (
today.year () == years.at (c))
table.setCellFg (row, thisCol, Text::cyan);
std::vector <T>::iterator it;
std::vector <Tt>::iterator it;
for (it = all.begin (); it != all.end (); ++it)
{
Date due (::atoi (it->getAttribute ("due").c_str ()));
@@ -1650,7 +1650,7 @@ std::string renderMonths (
}
////////////////////////////////////////////////////////////////////////////////
std::string handleReportCalendar (TDB& tdb, T& task, Config& conf)
std::string handleReportCalendar (TDB& tdb, Tt& task, Config& conf)
{
std::stringstream out;
@@ -1675,7 +1675,7 @@ std::string handleReportCalendar (TDB& tdb, T& task, Config& conf)
monthsPerLine = preferredMonthsPerLine;
// Load all the pending tasks.
std::vector <T> pending;
std::vector <Tt> pending;
tdb.allPendingT (pending);
handleRecurrence (tdb, pending);
filter (pending, task);
@@ -1683,7 +1683,7 @@ std::string handleReportCalendar (TDB& tdb, T& task, Config& conf)
// Find the oldest pending due date.
Date oldest;
Date newest;
std::vector <T>::iterator it;
std::vector <Tt>::iterator it;
for (it = pending.begin (); it != pending.end (); ++it)
{
if (it->getAttribute ("due") != "")
@@ -1759,7 +1759,7 @@ std::string handleReportCalendar (TDB& tdb, T& task, Config& conf)
}
////////////////////////////////////////////////////////////////////////////////
std::string handleReportActive (TDB& tdb, T& task, Config& conf)
std::string handleReportActive (TDB& tdb, Tt& task, Config& conf)
{
std::stringstream out;
@@ -1775,7 +1775,7 @@ std::string handleReportActive (TDB& tdb, T& task, Config& conf)
#endif
// Get all the tasks.
std::vector <T> tasks;
std::vector <Tt> tasks;
tdb.pendingT (tasks);
filter (tasks, task);
@@ -1818,7 +1818,7 @@ std::string handleReportActive (TDB& tdb, T& task, Config& conf)
// Iterate over each task, and apply selection criteria.
for (unsigned int i = 0; i < tasks.size (); ++i)
{
T refTask (tasks[i]);
Tt refTask (tasks[i]);
if (refTask.getAttribute ("start") != "")
{
Date now;
@@ -1892,7 +1892,7 @@ std::string handleReportActive (TDB& tdb, T& task, Config& conf)
}
////////////////////////////////////////////////////////////////////////////////
std::string handleReportOverdue (TDB& tdb, T& task, Config& conf)
std::string handleReportOverdue (TDB& tdb, Tt& task, Config& conf)
{
std::stringstream out;
@@ -1908,7 +1908,7 @@ std::string handleReportOverdue (TDB& tdb, T& task, Config& conf)
#endif
// Get all the tasks.
std::vector <T> tasks;
std::vector <Tt> tasks;
tdb.pendingT (tasks);
filter (tasks, task);
@@ -1953,7 +1953,7 @@ std::string handleReportOverdue (TDB& tdb, T& task, Config& conf)
// Iterate over each task, and apply selection criteria.
for (unsigned int i = 0; i < tasks.size (); ++i)
{
T refTask (tasks[i]);
Tt refTask (tasks[i]);
std::string due;
if ((due = refTask.getAttribute ("due")) != "")
{
@@ -2015,7 +2015,7 @@ std::string handleReportOverdue (TDB& tdb, T& task, Config& conf)
}
////////////////////////////////////////////////////////////////////////////////
std::string handleReportStats (TDB& tdb, T& task, Config& conf)
std::string handleReportStats (TDB& tdb, Tt& task, Config& conf)
{
std::stringstream out;
@@ -2031,7 +2031,7 @@ std::string handleReportStats (TDB& tdb, T& task, Config& conf)
#endif
// Get all the tasks.
std::vector <T> tasks;
std::vector <Tt> tasks;
tdb.allT (tasks);
filter (tasks, task);
@@ -2050,26 +2050,26 @@ std::string handleReportStats (TDB& tdb, T& task, Config& conf)
std::map <std::string, int> allTags;
std::map <std::string, int> allProjects;
std::vector <T>::iterator it;
std::vector <Tt>::iterator it;
for (it = tasks.begin (); it != tasks.end (); ++it)
{
++totalT;
if (it->getStatus () == T::deleted) ++deletedT;
if (it->getStatus () == T::pending) ++pendingT;
if (it->getStatus () == T::completed) ++completedT;
if (it->getStatus () == T::recurring) ++recurringT;
if (it->getStatus () == Tt::deleted) ++deletedT;
if (it->getStatus () == Tt::pending) ++pendingT;
if (it->getStatus () == Tt::completed) ++completedT;
if (it->getStatus () == Tt::recurring) ++recurringT;
time_t entry = ::atoi (it->getAttribute ("entry").c_str ());
if (entry < earliest) earliest = entry;
if (entry > latest) latest = entry;
if (it->getStatus () == T::completed)
if (it->getStatus () == Tt::completed)
{
time_t end = ::atoi (it->getAttribute ("end").c_str ());
daysPending += (end - entry) / 86400.0;
}
if (it->getStatus () == T::pending)
if (it->getStatus () == Tt::pending)
daysPending += (now - entry) / 86400.0;
descLength += it->getDescription ().length ();
@@ -2215,9 +2215,9 @@ std::string handleReportStats (TDB& tdb, T& task, Config& conf)
////////////////////////////////////////////////////////////////////////////////
void gatherNextTasks (
const TDB& tdb,
T& task,
Tt& task,
Config& conf,
std::vector <T>& pending,
std::vector <Tt>& pending,
std::vector <int>& all)
{
// For counting tasks by project.
@@ -2232,7 +2232,7 @@ void gatherNextTasks (
// due:< 1wk, pri:*
for (unsigned int i = 0; i < pending.size (); ++i)
{
if (pending[i].getStatus () == T::pending)
if (pending[i].getStatus () == Tt::pending)
{
std::string due = pending[i].getAttribute ("due");
if (due != "")
@@ -2254,7 +2254,7 @@ void gatherNextTasks (
// due:*, pri:H
for (unsigned int i = 0; i < pending.size (); ++i)
{
if (pending[i].getStatus () == T::pending)
if (pending[i].getStatus () == Tt::pending)
{
std::string due = pending[i].getAttribute ("due");
if (due != "")
@@ -2276,7 +2276,7 @@ void gatherNextTasks (
// pri:H
for (unsigned int i = 0; i < pending.size (); ++i)
{
if (pending[i].getStatus () == T::pending)
if (pending[i].getStatus () == Tt::pending)
{
std::string priority = pending[i].getAttribute ("priority");
if (priority == "H")
@@ -2294,7 +2294,7 @@ void gatherNextTasks (
// due:*, pri:M
for (unsigned int i = 0; i < pending.size (); ++i)
{
if (pending[i].getStatus () == T::pending)
if (pending[i].getStatus () == Tt::pending)
{
std::string due = pending[i].getAttribute ("due");
if (due != "")
@@ -2316,7 +2316,7 @@ void gatherNextTasks (
// pri:M
for (unsigned int i = 0; i < pending.size (); ++i)
{
if (pending[i].getStatus () == T::pending)
if (pending[i].getStatus () == Tt::pending)
{
std::string priority = pending[i].getAttribute ("priority");
if (priority == "M")
@@ -2334,7 +2334,7 @@ void gatherNextTasks (
// due:*, pri:L
for (unsigned int i = 0; i < pending.size (); ++i)
{
if (pending[i].getStatus () == T::pending)
if (pending[i].getStatus () == Tt::pending)
{
std::string due = pending[i].getAttribute ("due");
if (due != "")
@@ -2356,7 +2356,7 @@ void gatherNextTasks (
// pri:L
for (unsigned int i = 0; i < pending.size (); ++i)
{
if (pending[i].getStatus () == T::pending)
if (pending[i].getStatus () == Tt::pending)
{
std::string priority = pending[i].getAttribute ("priority");
if (priority == "L")
@@ -2374,7 +2374,7 @@ void gatherNextTasks (
// due:, pri:
for (unsigned int i = 0; i < pending.size (); ++i)
{
if (pending[i].getStatus () == T::pending)
if (pending[i].getStatus () == Tt::pending)
{
std::string due = pending[i].getAttribute ("due");
if (due == "")
@@ -2403,7 +2403,7 @@ void gatherNextTasks (
// via the .taskrc file.
std::string handleCustomReport (
TDB& tdb,
T& task,
Tt& task,
Config& conf,
const std::string& report)
{
@@ -2447,14 +2447,14 @@ std::string handleCustomReport (
split (filterArgs, filterList, ' ');
// Load all pending tasks.
std::vector <T> tasks;
std::vector <Tt> tasks;
tdb.allPendingT (tasks);
handleRecurrence (tdb, tasks);
// Apply filters.
{
std::string ignore;
T filterTask;
Tt filterTask;
parse (filterArgs, ignore, filterTask, conf);
filter (tasks, filterTask); // Filter from custom report

View File

@@ -81,7 +81,7 @@ void initializeColorRules (Config& conf)
////////////////////////////////////////////////////////////////////////////////
void autoColorize (
T& task,
Tt& task,
Text::color& fg,
Text::color& bg,
Config& conf)

View File

@@ -224,10 +224,9 @@ static std::string shortUsage (Config& conf)
out << table.render ()
<< std::endl
<< "See http://www.beckingham.net/task.html for the latest releases and a "
<< "See http://taskwarrior.org for the latest releases and a "
<< "full tutorial. New releases containing fixes and enhancements are "
<< "made frequently. Join in the discussion of task, present and future, "
<< "at http://groups.google.com/group/taskprogram"
<< "made frequently. Join in the discussion of task, present and future."
<< std::endl
<< std::endl;
@@ -368,13 +367,13 @@ int main (int argc, char** argv)
}
////////////////////////////////////////////////////////////////////////////////
void nag (TDB& tdb, T& task, Config& conf)
void nag (TDB& tdb, Tt& task, Config& conf)
{
std::string nagMessage = conf.get ("nag", std::string (""));
if (nagMessage != "")
{
// Load all pending tasks.
std::vector <T> pending;
std::vector <Tt> pending;
tdb.allPendingT (pending);
// Counters.
@@ -397,7 +396,7 @@ void nag (TDB& tdb, T& task, Config& conf)
if (priority.length ())
pri = priority[0];
}
else if (t->getStatus () == T::pending)
else if (t->getStatus () == Tt::pending)
{
if (getDueState (t->getAttribute ("due")) == 2)
overdue++;
@@ -456,14 +455,14 @@ int getDueState (const std::string& due)
////////////////////////////////////////////////////////////////////////////////
// Scans all tasks, and for any recurring tasks, determines whether any new
// child tasks need to be generated to fill gaps.
void handleRecurrence (TDB& tdb, std::vector <T>& tasks)
void handleRecurrence (TDB& tdb, std::vector <Tt>& tasks)
{
std::vector <T> modified;
std::vector <Tt> modified;
// Look at all tasks and find any recurring ones.
foreach (t, tasks)
{
if (t->getStatus () == T::recurring)
if (t->getStatus () == Tt::recurring)
{
// Generate a list of due dates for this recurring task, regardless of
// the mask.
@@ -480,7 +479,7 @@ void handleRecurrence (TDB& tdb, std::vector <T>& tasks)
char endTime[16];
sprintf (endTime, "%u", (unsigned int) time (NULL));
t->setAttribute ("end", endTime);
t->setStatus (T::deleted);
t->setStatus (Tt::deleted);
tdb.modifyT (*t);
continue;
}
@@ -498,10 +497,10 @@ void handleRecurrence (TDB& tdb, std::vector <T>& tasks)
mask += '-';
changed = true;
T rec (*t); // Clone the parent.
Tt rec (*t); // Clone the parent.
rec.setId (tdb.nextId ()); // Assign a unique id.
rec.setUUID (uuid ()); // New UUID.
rec.setStatus (T::pending); // Shiny.
rec.setStatus (Tt::pending); // Shiny.
rec.setAttribute ("parent", t->getUUID ()); // Remember mom.
char dueDate[16];
@@ -541,7 +540,7 @@ void handleRecurrence (TDB& tdb, std::vector <T>& tasks)
// period (recur). Then generate a set of corresponding dates.
//
// Returns false if the parent recurring task is depleted.
bool generateDueDates (T& parent, std::vector <Date>& allDue)
bool generateDueDates (Tt& parent, std::vector <Date>& allDue)
{
// Determine due date, recur period and until date.
Date due (atoi (parent.getAttribute ("due").c_str ()));
@@ -726,13 +725,13 @@ Date getNextRecurrence (Date& current, std::string& period)
// update it's mask.
void updateRecurrenceMask (
TDB& tdb,
std::vector <T>& all,
T& task)
std::vector <Tt>& all,
Tt& task)
{
std::string parent = task.getAttribute ("parent");
if (parent != "")
{
std::vector <T>::iterator it;
std::vector <Tt>::iterator it;
for (it = all.begin (); it != all.end (); ++it)
{
if (it->getUUID () == parent)
@@ -741,9 +740,9 @@ void updateRecurrenceMask (
std::string mask = it->getAttribute ("mask");
if (mask.length () > index)
{
mask[index] = (task.getStatus () == T::pending) ? '-'
: (task.getStatus () == T::completed) ? '+'
: (task.getStatus () == T::deleted) ? 'X'
mask[index] = (task.getStatus () == Tt::pending) ? '-'
: (task.getStatus () == Tt::completed) ? '+'
: (task.getStatus () == Tt::deleted) ? 'X'
: '?';
it->setAttribute ("mask", mask);
@@ -755,9 +754,9 @@ void updateRecurrenceMask (
for (unsigned int i = 0; i < index; ++i)
mask += "?";
mask += (task.getStatus () == T::pending) ? '-'
: (task.getStatus () == T::completed) ? '+'
: (task.getStatus () == T::deleted) ? 'X'
mask += (task.getStatus () == Tt::pending) ? '-'
: (task.getStatus () == Tt::completed) ? '+'
: (task.getStatus () == Tt::deleted) ? 'X'
: '?';
}
@@ -858,7 +857,7 @@ std::string runTaskCommand (
loadCustomReports (conf);
std::string command;
T task;
Tt task;
parse (args, command, task, conf);
bool gcMod = false; // Change occurred by way of gc.

View File

@@ -54,7 +54,7 @@ for (typeof (c) *foreach_p = & (c); \
++i)
// parse.cpp
void parse (std::vector <std::string>&, std::string&, T&, Config&);
void parse (std::vector <std::string>&, std::string&, Tt&, Config&);
bool validPriority (const std::string&);
bool validDate (std::string&, Config&);
bool validDuration (std::string&);
@@ -63,60 +63,60 @@ bool isCustomReport (const std::string&);
void allCustomReports (std::vector <std::string>&);
// task.cpp
void gatherNextTasks (const TDB&, T&, Config&, std::vector <T>&, std::vector <int>&);
void nag (TDB&, T&, Config&);
void gatherNextTasks (const TDB&, Tt&, Config&, std::vector <Tt>&, std::vector <int>&);
void nag (TDB&, Tt&, Config&);
int getDueState (const std::string&);
void handleRecurrence (TDB&, std::vector <T>&);
bool generateDueDates (T&, std::vector <Date>&);
void handleRecurrence (TDB&, std::vector <Tt>&);
bool generateDueDates (Tt&, std::vector <Date>&);
Date getNextRecurrence (Date&, std::string&);
void updateRecurrenceMask (TDB&, std::vector <T>&, T&);
void updateRecurrenceMask (TDB&, std::vector <Tt>&, Tt&);
void onChangeCallback ();
std::string runTaskCommand (int, char**, TDB&, Config&, bool gc = true, bool shadow = true);
std::string runTaskCommand (std::vector <std::string>&, TDB&, Config&, bool gc = false, bool shadow = false);
// command.cpp
std::string handleAdd (TDB&, T&, Config&);
std::string handleAppend (TDB&, T&, Config&);
std::string handleExport (TDB&, T&, Config&);
std::string handleDone (TDB&, T&, Config&);
std::string handleModify (TDB&, T&, Config&);
std::string handleProjects (TDB&, T&, Config&);
std::string handleTags (TDB&, T&, Config&);
std::string handleUndelete (TDB&, T&, Config&);
std::string handleAdd (TDB&, Tt&, Config&);
std::string handleAppend (TDB&, Tt&, Config&);
std::string handleExport (TDB&, Tt&, Config&);
std::string handleDone (TDB&, Tt&, Config&);
std::string handleModify (TDB&, Tt&, Config&);
std::string handleProjects (TDB&, Tt&, Config&);
std::string handleTags (TDB&, Tt&, Config&);
std::string handleUndelete (TDB&, Tt&, Config&);
std::string handleVersion (Config&);
std::string handleDelete (TDB&, T&, Config&);
std::string handleStart (TDB&, T&, Config&);
std::string handleStop (TDB&, T&, Config&);
std::string handleUndo (TDB&, T&, Config&);
std::string handleDelete (TDB&, Tt&, Config&);
std::string handleStart (TDB&, Tt&, Config&);
std::string handleStop (TDB&, Tt&, Config&);
std::string handleUndo (TDB&, Tt&, Config&);
std::string handleColor (Config&);
std::string handleAnnotate (TDB&, T&, Config&);
std::string handleDuplicate (TDB&, T&, Config&);
T findT (int, const std::vector <T>&);
int deltaAppend (T&, T&);
int deltaDescription (T&, T&);
int deltaTags (T&, T&);
int deltaAttributes (T&, T&);
int deltaSubstitutions (T&, T&);
std::string handleAnnotate (TDB&, Tt&, Config&);
std::string handleDuplicate (TDB&, Tt&, Config&);
Tt findT (int, const std::vector <Tt>&);
int deltaAppend (Tt&, Tt&);
int deltaDescription (Tt&, Tt&);
int deltaTags (Tt&, Tt&);
int deltaAttributes (Tt&, Tt&);
int deltaSubstitutions (Tt&, Tt&);
// edit.cpp
std::string handleEdit (TDB&, T&, Config&);
std::string handleEdit (TDB&, Tt&, Config&);
// report.cpp
void filterSequence (std::vector<T>&, T&);
void filter (std::vector<T>&, T&);
std::string handleInfo (TDB&, T&, Config&);
std::string handleCompleted (TDB&, T&, Config&);
std::string handleReportSummary (TDB&, T&, Config&);
std::string handleReportNext (TDB&, T&, Config&);
std::string handleReportHistory (TDB&, T&, Config&);
std::string handleReportGHistory (TDB&, T&, Config&);
std::string handleReportCalendar (TDB&, T&, Config&);
std::string handleReportActive (TDB&, T&, Config&);
std::string handleReportOverdue (TDB&, T&, Config&);
std::string handleReportStats (TDB&, T&, Config&);
std::string handleReportTimesheet (TDB&, T&, Config&);
void filterSequence (std::vector<Tt>&, Tt&);
void filter (std::vector<Tt>&, Tt&);
std::string handleInfo (TDB&, Tt&, Config&);
std::string handleCompleted (TDB&, Tt&, Config&);
std::string handleReportSummary (TDB&, Tt&, Config&);
std::string handleReportNext (TDB&, Tt&, Config&);
std::string handleReportHistory (TDB&, Tt&, Config&);
std::string handleReportGHistory (TDB&, Tt&, Config&);
std::string handleReportCalendar (TDB&, Tt&, Config&);
std::string handleReportActive (TDB&, Tt&, Config&);
std::string handleReportOverdue (TDB&, Tt&, Config&);
std::string handleReportStats (TDB&, Tt&, Config&);
std::string handleReportTimesheet (TDB&, Tt&, Config&);
std::string handleCustomReport (TDB&, T&, Config&, const std::string&);
std::string handleCustomReport (TDB&, Tt&, Config&, const std::string&);
void validReportColumns (const std::vector <std::string>&);
void validSortColumns (const std::vector <std::string>&, const std::vector <std::string>&);
@@ -160,10 +160,10 @@ void spit (const std::string&, const std::string&);
// rules.cpp
void initializeColorRules (Config&);
void autoColorize (T&, Text::color&, Text::color&, Config&);
void autoColorize (Tt&, Text::color&, Text::color&, Config&);
// import.cpp
std::string handleImport (TDB&, T&, Config&);
std::string handleImport (TDB&, Tt&, Config&);
// list template
///////////////////////////////////////////////////////////////////////////////

View File

@@ -1,18 +1,39 @@
# bash completion support for task
#
# bash completion support for task 1.7.0-2
# Copyright (C) 2009 Federico Hernandez <ultrafredde@gmail.com>
# Distributed under the GNU General Public License, version 2.0
# Copyright 2009 Federico Hernandez
# All rights reserved.
#
# This script is part of the task 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
# 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
#
# The routines will do completion of:
#
# *) task subcommands
# *) local and remote tag names
# *) tag names
#
# To use these routines:
#
# 1) Copy this file to somewhere (e.g. ~/.task-completion.sh).
# 1) Copy this file to somewhere (e.g. ~/.bash_completion.d/.task_completion.sh).
# 2) Added the following line to your .bashrc:
# source ~/.task-completion.sh
# source ~/.bash_completion.d/task_completion.sh
#
# OR
#
@@ -21,13 +42,9 @@
#
# To submit patches/bug reports:
#
# *) Send them to the mailing list:
# *) Go to the projects website at
#
# taskprogram@googlegroups.com
#
# *) CC the all patchesi/bug reports to:
#
# Federico Hernandez <ultrafredde@gmail.com>
# http://taskwarrior.org
#
_task()