diff --git a/doc/misc/script-color.txt b/doc/misc/script-color.txt new file mode 100644 index 000000000..2d669ed09 --- /dev/null +++ b/doc/misc/script-color.txt @@ -0,0 +1,34 @@ + Hello. This is a demonstration of the + task program color capabilities coming + in version 1.9. + +task color The color command shows the various + supported colors. For this you will + need an xterm with 256-color support, + or an equivalent. + + This demo uses iTerm running on Snow + Leopard. + +task add Prepare 1.9 for release Let's create a few tasks, to illustrate +task add Update the various docs the features. Five should be enough. +task add Run the regression tests +task add Make the packages +task add Upload to distributions + +--- NOTES + +16-color mode +upgrade +blending +alternate lines + +--- NOTES + +task ls Okay, let's color any tasks that + mention tests a nice medium blue. + +echo 'color.keyword.test=color23' >> ~/.taskrc + + + diff --git a/src/Config.cpp b/src/Config.cpp index 0648d56d3..cefde2359 100644 --- a/src/Config.cpp +++ b/src/Config.cpp @@ -62,17 +62,17 @@ std::string Config::defaults = "annotation.details=2 # Level of verbosity for annotations in reports\n" "next=2 # How many tasks per project in next report\n" "bulk=2 # > 2 tasks considered 'a lot', for confirmation\n" - "nag=You have higher priority tasks. # Nag message to keep you honest\n" + "nag=You have higher priority tasks. # Nag message to keep you honest\n" // TODO "\n" "# Dates\n" "dateformat=m/d/Y # Preferred input and display date format\n" - "#reportdateformat=m/d/Y # Preferred input and display date format\n" - "weekstart=Sunday # Sunday or Monday only\n" - "displayweeknumber=yes # Show week numbers on calendar\n" + "#reportdateformat=m/d/Y # Preferred display date format for repors\n" + "weekstart=Sunday # Sunday or Monday only\n" // TODO + "displayweeknumber=yes # Show week numbers on calendar\n" // TODO "due=7 # Task is considered due in 7 days\n" "#calendar.details=yes # Calendar shows information for tasks w/due dates\n" - "#calendar.details.report=list # Report to use when showing task information in cal\n" - "#monthsperline=3 # Number of calendar months on a line\n" + "#calendar.details.report=list # Report to use when showing task information in cal\n" // TODO + "#monthsperline=3 # Number of calendar months on a line\n" // TODO "\n" "# Color controls.\n" "color=on # Enable color\n" @@ -101,21 +101,22 @@ std::string Config::defaults = "color.history.delete=on yellow # Color of deleted tasks in the history reports\n" "color.history.done=on green # Color of completed tasks in the history reports\n" "\n" + "# Shadow file support\n" "#shadow.file=/tmp/shadow.txt # Location of shadow file\n" "#shadow.command=list # Task command for shadow file\n" "#shadow.notify=on # Footnote when updated\n" "\n" "#default.project=foo # Default project for 'add' command\n" "#default.priority=M # Default priority for 'add' command\n" - "default.command=list # When no arguments are specified\n" + "default.command=list # When no arguments are specified\n" // TODO "\n" "_forcecolor=no # Forces color to be on, even for non TTY output\n" "blanklines=true # Use more whitespace in output\n" - "complete.all.projects=no # Include old project names in 'projects' command\n" - "complete.all.tags=no # Include old tag names in 'tags' command\n" + "complete.all.projects=no # Include old project names in 'projects' command\n" // TODO + "complete.all.tags=no # Include old tag names in 'tags' command\n" // TODO "debug=no # Display diagnostics\n" "fontunderline=yes # Uses underlines rather than -------\n" - "shell.prompt=task> # Prompt used by the shell command\n" + "shell.prompt=task> # Prompt used by the shell command\n" // TODO "\n" "# Import heuristics - alternate names for fields (comma-separated list of names)\n" "#import.synonym.bg=?\n" @@ -133,12 +134,13 @@ std::string Config::defaults = "#import.synonym.tags=?\n" "#import.synonym.uuid=?\n" "\n" + "# Aliases - alternate names for commands\n" "alias.rm=delete # Alias for the delete command\n" "\n" - "# Fields: id,uuid,project,priority,priority_long,entry,entry_time,\n" - "# start,entry_time,due,recur,recurrence_indicator,age,\n" - "# age_compact,active,tags,tag_indicator,description,\n" - "# description_only,end,end_time\n" + "# Fields: id,uuid,project,priority,priority_long,entry,entry_time,\n" // TODO + "# start,entry_time,due,recur,recurrence_indicator,age,\n" // TODO + "# age_compact,active,tags,tag_indicator,description,\n" // TODO + "# description_only,end,end_time\n" // TODO "# Description: This report is ...\n" "# Sort: due+,priority-,project+\n" "# Filter: pro:x pri:H +bug limit:10\n" @@ -321,7 +323,7 @@ void Config::parse (const std::string& input, int nest /* = 1 */) if (included.is_absolute ()) { if (included.readable ()) - this->load (included.data, nest + 1); + this->load (included, nest + 1); else throw std::string ("Could not read include file '") + included.data + "'"; } diff --git a/src/Context.cpp b/src/Context.cpp index 683b08284..a4a9485ad 100644 --- a/src/Context.cpp +++ b/src/Context.cpp @@ -125,7 +125,7 @@ void Context::initialize () // init TDB. tdb.clear (); std::vector all; - split (all, location.data, ','); + split (all, location, ','); foreach (path, all) tdb.location (*path); } @@ -372,7 +372,7 @@ void Context::loadCorrectConfigFile () file_override = *arg; rc = File (arg->substr (3)); - home = rc.data; + home = rc; std::string::size_type last_slash = rc.data.rfind ("/"); if (last_slash != std::string::npos) home = rc.data.substr (0, last_slash); @@ -387,7 +387,7 @@ void Context::loadCorrectConfigFile () // Load rc file. config.clear (); // Dump current values. - config.load (rc.data); // Load new file. + config.load (rc); // Load new file. if (config.get ("data.location") != "") data = Directory (config.get ("data.location")); @@ -416,20 +416,20 @@ void Context::loadCorrectConfigFile () + rc.data + " created, so task can proceed?")) { - config.createDefaultRC (rc.data, data.data); + config.createDefaultRC (rc, data); } else throw std::string ("Cannot proceed without rc file."); } // Create data location, if necessary. - config.createDefaultData (data.data); + config.createDefaultData (data); // TODO find out why this was done twice - see tw #355 // Load rc file. //config.clear (); // Dump current values. //config.setDefaults (); // Add in the custom reports. - //config.load (rc.data); // Load new file. + //config.load (rc); // Load new file. // Apply overrides of type: "rc.name:value", or "rc.name=value". std::vector filtered; diff --git a/src/Path.cpp b/src/Path.cpp index 8bcd41342..b6613a0b8 100644 --- a/src/Path.cpp +++ b/src/Path.cpp @@ -65,6 +65,12 @@ Path& Path::operator= (const Path& other) return *this; } +//////////////////////////////////////////////////////////////////////////////// +Path::operator std::string () const +{ + return data; +} + //////////////////////////////////////////////////////////////////////////////// std::string Path::name () const { diff --git a/src/Path.h b/src/Path.h index 5f1ba2c1e..b934d0ba3 100644 --- a/src/Path.h +++ b/src/Path.h @@ -39,6 +39,8 @@ public: virtual ~Path (); Path& operator= (const Path&); + operator std::string () const; + std::string name () const; std::string parent () const; std::string extension () const; diff --git a/src/TDB.cpp b/src/TDB.cpp index c231d86ec..c2b9cabb7 100644 --- a/src/TDB.cpp +++ b/src/TDB.cpp @@ -114,7 +114,7 @@ void TDB::location (const std::string& path) path + "' does not exist, or is not readable and writable."; - mLocations.push_back (Location (d.data)); + mLocations.push_back (Location (d)); } //////////////////////////////////////////////////////////////////////////////// diff --git a/src/report.cpp b/src/report.cpp index aaa719df4..f13018295 100644 --- a/src/report.cpp +++ b/src/report.cpp @@ -1535,7 +1535,7 @@ int handleReportCalendar (std::string &outs) // task cal 2010 monthsToDisplay = 12; mFrom = 1; - yFrom = atoi( context.args[1].data()); + yFrom = atoi (context.args[1].c_str ()); } } else if (numberOfArgs == 3) { @@ -1547,15 +1547,15 @@ int handleReportCalendar (std::string &outs) else { // task cal 8 2010 monthsToDisplay = monthsPerLine; - mFrom = atoi( context.args[1].data()); - yFrom = atoi( context.args[2].data()); + mFrom = atoi (context.args[1].c_str ()); + yFrom = atoi (context.args[2].c_str ()); } } else if (numberOfArgs == 4) { // task cal 8 2010 y monthsToDisplay = 12; - mFrom = atoi( context.args[1].data()); - yFrom = atoi( context.args[2].data()); + mFrom = atoi (context.args[1].c_str ()); + yFrom = atoi (context.args[2].c_str ()); } int countDueDates = 0; @@ -1728,7 +1728,7 @@ int handleReportStats (std::string &outs) dataSize += undo.size (); std::vector undoTxns; - slurp (undo.data, undoTxns, false); + slurp (undo, undoTxns, false); int undoCount = 0; foreach (tx, undoTxns) if (tx->substr (0, 3) == "---") diff --git a/src/tests/directory.t.cpp b/src/tests/directory.t.cpp index 26418b969..d6e5cde56 100644 --- a/src/tests/directory.t.cpp +++ b/src/tests/directory.t.cpp @@ -33,7 +33,7 @@ Context context; int main (int argc, char** argv) { - UnitTest t (20); + UnitTest t (21); // Directory (const File&); // Directory (const Path&); @@ -55,6 +55,9 @@ int main (int argc, char** argv) Directory d5 = d4; t.is (d5.data, "/tmp/test_directory", "Directory::operator="); + // operator (std::string) const; + t.is ((std::string) d3, "/tmp", "Directory::operator (std::string) const"); + // virtual bool create (); t.ok (d5.create (), "Directory::create /tmp/test_directory"); t.ok (d5.exists (), "Directory::exists /tmp/test_directory"); diff --git a/src/tests/file.t.cpp b/src/tests/file.t.cpp index 905aa265e..af0b3b9a5 100644 --- a/src/tests/file.t.cpp +++ b/src/tests/file.t.cpp @@ -33,7 +33,7 @@ Context context; int main (int argc, char** argv) { - UnitTest t (5); + UnitTest t (6); File::write ("/tmp/file.t.txt", "This is a test\n"); File f6 ("/tmp/file.t.txt"); @@ -41,6 +41,9 @@ int main (int argc, char** argv) t.ok (f6.mode () & S_IRUSR, "File::mode /tmp/file.t.txt good"); t.ok (File::remove ("/tmp/file.t.txt"), "File::remove /tmp/file.t.txt good"); + // operator (std::string) const; + t.is ((std::string) f6, "/tmp/file.t.txt", "File::operator (std::string) const"); + t.ok (File::create ("/tmp/file.t.create"), "File::create /tmp/file.t.create good"); t.ok (File::remove ("/tmp/file.t.create"), "File::remove /tmp/file.t.create good"); diff --git a/src/tests/path.t.cpp b/src/tests/path.t.cpp index aaaed861b..462598fac 100644 --- a/src/tests/path.t.cpp +++ b/src/tests/path.t.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////////////////////////// // task - a command line task list manager. // -// Copyright 2006 - 2009, Paul Beckingham. +// Copyright 2006 - 2010, Paul Beckingham. // All rights reserved. // // This program is free software; you can redistribute it and/or modify it under @@ -33,7 +33,7 @@ Context context; int main (int argc, char** argv) { - UnitTest t (31); + UnitTest t (32); // Path (); Path p0; @@ -54,6 +54,9 @@ int main (int argc, char** argv) Path p3_copy (p3); t.is (p3.data, p3_copy.data, "Path::Path (Path&)"); + // operator (std::string) const; + t.is ((std::string) p3, "/tmp", "Path::operator (std::string) const"); + // std::string name () const; Path p4 ("/a/b/c/file.ext"); t.is (p4.name (), "file.ext", "/a/b/c/file.ext name is file.ext");