Priority: Converted 'priority' attribute to a UDA

- 'priority.long' and 'priority.short' formats now map to 'priority', and
  generate a warning.
- Man page updated.
- Converted priority urgency coefficients to UDA equivalents.
- Converted priority color rules to UDA color rules.
- Removed 'default.priority' support.
- Removed special sort handling for 'priority' field in Variant, added special
  UDA sort handling.
- Removed ColPriority.{h,cpp} source files.
- Removed asorted newly-unused variables.
- The 'show' command now highlights unused priority settings.
- Removed unused localized priority-relateѕ strings.
- Added legacy mapping for columns and sort columns for 'priority.long' and
  'priority.short' columns in report definitions.
- Removed priority color rules implementation.
- Removed obsolete tests for #860, #990, custom.priority_long.t.
- Updated various tests that set priority default, colors.
This commit is contained in:
Paul Beckingham 2015-04-04 19:30:33 -04:00
parent 7a9d314016
commit 5af4579741
33 changed files with 102 additions and 630 deletions

3
NEWS
View file

@ -1,7 +1,8 @@
New Features in taskwarrior 2.4.3
-
- UDA string attributes with allowable values can now define their sort order.
- The 'priority' attribute is now a UDA, configured by default.
New commands in taskwarrior 2.4.3

View file

@ -320,10 +320,10 @@ This is useful for preventing large-scale unintended changes.
.TP
.B nag=You have more urgent tasks.
This may be a string of text, or blank. It is used as a prompt when a task is
started or completed that is not considered high priority. Default value is:
You have more urgent tasks. It is a gentle reminder that you are contradicting
your own priority settings.
This may be a string of text, or blank. It is used as a prompt when a task is
started of completed, when there are other tasks with a higher urgency.
Default value is: 'You have more urgent tasks'.
It is a gentle reminder that you are contradicting your own urgency settings.
.TP
.B list.all.projects=yes
@ -828,18 +828,6 @@ Task has at least one tag.
.B color.recurring
Task is recurring.
.br
.B color.pri.H
Task has priority H.
.br
.B color.pri.M
Task has priority M.
.br
.B color.pri.L
Task has priority L.
.br
.B color.pri.none
Task has no priority.
.br
.B color.completed
Task is completed.
.br
@ -1058,10 +1046,6 @@ Urgency inherited from dependency chain
.RS
Urgency coefficient for due dates
.RE
.B urgency.priority.coefficient=6.0
.RS
Urgency coefficient for priorities
.RE
.B urgency.waiting.coefficient=-3.0
.RS
Urgency coefficient for waiting status
@ -1124,13 +1108,6 @@ Provides a default project name for the
.I task add
command, if you don't specify one. The default is blank.
.TP
.B
default.priority=M
Provides a default priority for the
.I task add
command, if you don't specify one. The default is blank.
.TP
.B
default.due=...
@ -1336,19 +1313,36 @@ Provides a default report label for the UDA called '<name>'.
For type 'string' UDAs only, this provides a comma-separated list of acceptable
values. In this example, the '<name>' UDA may only contain values 'A', 'B',
or 'C', but may also contain no value.
Note that the order of the value is important, and denotes the sort order from
highest ('A') to lowest ('C').
Note that a blank value is permitted.
.RE
.TP
.B uda.<name>.default=...
.RS
Provides a default value for the UDA called '<name>'.
.RE
.TP
.B Example 'estimate' UDA
This example shows an 'estimate' UDA that stores specific values for the size
of a task.
of a task. Note the blank value after 'trivial'.
.RS
.B uda.estimate.type=string
.br
.B uda.estimate.label=Size Estimate
.br
.B uda.estimate.values=trivial,small,medium,large,huge
.B uda.estimate.values=huge,large,medium,small,trivial,
.RE
.RS
Note that the value are sorted
huge > large > medium > small > trivial > ''
.RE
.SS CONTEXT

View file

@ -147,7 +147,6 @@ std::string Config::_defaults =
"urgency.next.coefficient=15.0 # Urgency coefficient for 'next' special tag\n"
"urgency.due.coefficient=12.0 # Urgency coefficient for due dates\n"
"urgency.blocking.coefficient=8.0 # Urgency coefficient for blocking tasks\n"
"urgency.priority.coefficient=6.0 # Urgency coefficient for priorities\n"
"urgency.active.coefficient=4.0 # Urgency coefficient for active tasks\n"
"urgency.scheduled.coefficient=5.0 # Urgency coefficient for scheduled tasks\n"
"urgency.age.coefficient=2.0 # Urgency coefficient for age\n"
@ -192,11 +191,11 @@ std::string Config::_defaults =
"# Project\n"
"color.project.none=\n"
"\n"
"# Priority\n"
"color.pri.H=color255\n"
"color.pri.L=color245\n"
"color.pri.M=color250\n"
"color.pri.none=\n"
"# Priority UDA\n"
"color.uda.priority.H=color255\n"
"color.uda.priority.L=color245\n"
"color.uda.priority.M=color250\n"
"color.uda.priority.none=\n"
"\n"
"# Tags\n"
"color.tag.next=rgb440\n"
@ -267,11 +266,11 @@ std::string Config::_defaults =
"# Project\n"
"color.project.none=\n"
"\n"
"# Priority\n"
"color.pri.H=bold white\n"
"color.pri.M=white\n"
"color.pri.L=\n"
"color.pri.none=\n"
"# Priority UDA\n"
"color.uda.priority.H=bold white\n"
"color.uda.priority.M=white\n"
"color.uda.priority.L=\n"
"color.uda.priority.none=\n"
"\n"
"# Tags\n"
"color.tag.next=bold yellow\n"
@ -319,13 +318,22 @@ std::string Config::_defaults =
"color.undo.before=red\n"
"\n"
#endif
"# UDA priority\n"
"uda.priority.type=string # UDA priority is a string type\n"
"uda.priority.label=Priority # UDA priority has a display label'\n"
"uda.priority.values=H,M,L, # UDA priority values are 'H', 'M', 'L' or ''\n"
" # UDA priority sorting is 'H' > 'M' > 'L' > '' (highest to lowest)\n"
"#uda.priority.default=M # UDA priority default value of 'M'\n"
"urgency.uda.priority.H.coefficient=6.0 # UDA priority coefficient for value 'H'\n"
"urgency.uda.priority.M.coefficient=3.9 # UDA priority coefficient for value 'M'\n"
"urgency.uda.priority.L.coefficient=1.8 # UDA priority coefficient for value 'L'\n"
"\n"
"# Here is the rule precedence order, highest to lowest.\n"
"# Note that these are just the color rule names, without the leading 'color.'\n"
"# and any trailing '.value'.\n"
"rule.precedence.color=deleted,completed,active,keyword.,tag.,uda.,project.,overdue,scheduled,due.today,due,blocked,blocking,recurring,tagged,pri.\n"
"\n"
"#default.project=foo # Default project for 'add' command\n"
"#default.priority=M # Default priority for 'add' command\n"
"#default.due=eom # Default due date for 'add' command\n"
"default.command=next # When no arguments are specified\n"
"\n"

View file

@ -633,7 +633,6 @@ void Context::staticInitialization ()
CLI::minimumMatchLength = config.getInteger ("abbreviation.minimum");
Task::defaultProject = config.get ("default.project");
Task::defaultPriority = config.get ("default.priority");
Task::defaultDue = config.get ("default.due");
Task::searchCaseSensitive = Variant::searchCaseSensitive = config.getBoolean ("search.case.sensitive");
@ -660,7 +659,6 @@ void Context::staticInitialization ()
for (i = columns.begin (); i != columns.end (); ++i)
Task::attributes[i->first] = i->second->type ();
Task::urgencyPriorityCoefficient = config.getReal ("urgency.priority.coefficient");
Task::urgencyProjectCoefficient = config.getReal ("urgency.project.coefficient");
Task::urgencyActiveCoefficient = config.getReal ("urgency.active.coefficient");
Task::urgencyScheduledCoefficient = config.getReal ("urgency.scheduled.coefficient");

View file

@ -65,14 +65,12 @@ static const float epsilon = 0.000001;
#endif
std::string Task::defaultProject = "";
std::string Task::defaultPriority = "";
std::string Task::defaultDue = "";
bool Task::searchCaseSensitive = true;
bool Task::regex = false;
std::map <std::string, std::string> Task::attributes;
std::map <std::string, float> Task::coefficients;
float Task::urgencyPriorityCoefficient = 0.0;
float Task::urgencyProjectCoefficient = 0.0;
float Task::urgencyActiveCoefficient = 0.0;
float Task::urgencyScheduledCoefficient = 0.0;
@ -1396,14 +1394,6 @@ void Task::validate (bool applyDefault /* = true */)
set ("project", Task::defaultProject);
}
// Override with default.priority, if not specified.
if (Task::defaultPriority != "" &&
! has ("priority"))
{
if (context.columns["priority"]->validate (Task::defaultPriority))
set ("priority", Task::defaultPriority);
}
// Override with default.due, if not specified.
if (Task::defaultDue != "" &&
! has ("due"))
@ -1489,17 +1479,6 @@ void Task::validate (bool applyDefault /* = true */)
throw std::string (format (STRING_TASK_VALID_RECUR, value));
}
}
// Priorities must be valid.
if (has ("priority"))
{
std::string priority = get ("priority");
if (priority != "H" &&
priority != "M" &&
priority != "L" &&
priority != "")
throw format (STRING_TASK_VALID_PRIORITY, priority);
}
}
////////////////////////////////////////////////////////////////////////////////
@ -1657,7 +1636,6 @@ float Task::urgency_c () const
{
float value = 0.0;
#ifdef PRODUCT_TASKWARRIOR
value += fabsf (Task::urgencyPriorityCoefficient) > epsilon ? (urgency_priority () * Task::urgencyPriorityCoefficient) : 0.0;
value += fabsf (Task::urgencyProjectCoefficient) > epsilon ? (urgency_project () * Task::urgencyProjectCoefficient) : 0.0;
value += fabsf (Task::urgencyActiveCoefficient) > epsilon ? (urgency_active () * Task::urgencyActiveCoefficient) : 0.0;
value += fabsf (Task::urgencyScheduledCoefficient) > epsilon ? (urgency_scheduled () * Task::urgencyScheduledCoefficient) : 0.0;
@ -1744,18 +1722,6 @@ float Task::urgency ()
return urgency_value;
}
////////////////////////////////////////////////////////////////////////////////
float Task::urgency_priority () const
{
const std::string& value = get_ref ("priority");
if (value == "H") return 1.0;
else if (value == "M") return 0.65;
else if (value == "L") return 0.3;
return 0.0;
}
////////////////////////////////////////////////////////////////////////////////
float Task::urgency_inherit () const
{
@ -1777,7 +1743,6 @@ float Task::urgency_inherit () const
v += it->urgency_annotations ();
v += it->urgency_due ();
v += it->urgency_next ();
v += it->urgency_priority ();
v += it->urgency_scheduled ();
v += it->urgency_waiting ();

View file

@ -37,14 +37,12 @@ class Task : public std::map <std::string, std::string>
{
public:
static std::string defaultProject;
static std::string defaultPriority;
static std::string defaultDue;
static bool searchCaseSensitive;
static bool regex;
static std::map <std::string, std::string> attributes; // name -> type
static std::map <std::string, float> coefficients;
static std::map <std::string, std::vector <std::string> > customOrder;
static float urgencyPriorityCoefficient;
static float urgencyProjectCoefficient;
static float urgencyActiveCoefficient;
static float urgencyScheduledCoefficient;
@ -165,7 +163,6 @@ private:
const std::string decode (const std::string&) const;
public:
float urgency_priority () const;
float urgency_project () const;
float urgency_active () const;
float urgency_scheduled () const;

View file

@ -315,14 +315,6 @@ bool Variant::operator< (const Variant& other) const
return left._string < right._string;
case type_string:
if (left.source () == "priority" || right.source () == "priority")
{
if (left._string != "H" && right._string == "H") return true;
else if (left._string == "L" && right._string == "M") return true;
else if (left._string == "" && right._string != "") return true;
else return false;
}
else
{
if (left._string == right._string)
return false;
@ -474,15 +466,6 @@ bool Variant::operator<= (const Variant& other) const
return left._string <= right._string;
case type_string:
if (left.source () == "priority" || right.source () == "priority")
{
if (left._string == right._string ) return true;
else if ( right._string == "H") return true;
else if (left._string == "L" && right._string == "M") return true;
else if (left._string == "" ) return true;
else return false;
}
else
{
if (left._string == right._string)
return true;
@ -634,14 +617,6 @@ bool Variant::operator> (const Variant& other) const
return left._string > right._string;
case type_string:
if (left.source () == "priority" || right.source () == "priority")
{
if (left._string == "H" && right._string != "H") return true;
else if (left._string == "M" && right._string == "L") return true;
else if (left._string != "" && right._string == "") return true;
else return false;
}
else
{
if (left._string == right._string)
return false;
@ -793,15 +768,6 @@ bool Variant::operator>= (const Variant& other) const
return left._string >= right._string;
case type_string:
if (left.source () == "priority" || right.source () == "priority")
{
if (left._string == right._string ) return true;
else if (left._string == "H" ) return true;
else if (left._string == "M" && right._string == "L") return true;
else if ( right._string == "" ) return true;
else return false;
}
else
{
if (left._string == right._string)
return true;

View file

@ -135,7 +135,6 @@ int main (int argc, const char** argv)
cli.entity ("attribute", "mask");
cli.entity ("attribute", "modified");
cli.entity ("attribute", "parent");
cli.entity ("attribute", "priority");
cli.entity ("attribute", "project");
cli.entity ("attribute", "recur");
cli.entity ("attribute", "scheduled");

View file

@ -17,7 +17,6 @@ set (columns_SRCS Column.cpp Column.h
ColMask.cpp ColMask.h
ColModified.cpp ColModified.h
ColParent.cpp ColParent.h
ColPriority.cpp ColPriority.h
ColProject.cpp ColProject.h
ColRecur.cpp ColRecur.h
ColScheduled.cpp ColScheduled.h

View file

@ -1,141 +0,0 @@
////////////////////////////////////////////////////////////////////////////////
//
// Copyright 2006 - 2015, Paul Beckingham, Federico Hernandez.
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included
// in all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
//
// http://www.opensource.org/licenses/mit-license.php
//
////////////////////////////////////////////////////////////////////////////////
#include <cmake.h>
#include <Context.h>
#include <ColPriority.h>
#include <text.h>
#include <i18n.h>
extern Context context;
////////////////////////////////////////////////////////////////////////////////
ColumnPriority::ColumnPriority ()
{
_name = "priority";
_type = "string";
_style = "short";
_label = STRING_COLUMN_LABEL_PRI;
_styles.push_back ("short");
_styles.push_back ("long");
_examples.push_back ("H");
_examples.push_back ("High");
}
////////////////////////////////////////////////////////////////////////////////
ColumnPriority::~ColumnPriority ()
{
}
////////////////////////////////////////////////////////////////////////////////
// Allow lower case, but implicitly convert.
bool ColumnPriority::validate (std::string& value)
{
if (value == "h") { value = "H"; return true; }
else if (value == "m") { value = "M"; return true; }
else if (value == "l") { value = "L"; return true; }
return value == "H" || value == "M" || value == "L" || value == "";
}
////////////////////////////////////////////////////////////////////////////////
// Overriden so that style <----> label are linked.
// Note that you can not determine which gets called first.
void ColumnPriority::setStyle (const std::string& value)
{
_style = value;
if (_style == "long" && _label == STRING_COLUMN_LABEL_PRI)
_label = STRING_COLUMN_LABEL_PRIORITY;
}
////////////////////////////////////////////////////////////////////////////////
// Set the minimum and maximum widths for the value.
void ColumnPriority::measure (Task& task, unsigned int& minimum, unsigned int& maximum)
{
minimum = maximum = 0;
if (task.has (_name))
{
std::string priority = task.get (_name);
if (priority == "")
minimum = maximum = 0;
else
minimum = maximum = 1;
if (_style == "long")
{
if (priority == "H") minimum = maximum = 4;
else if (priority == "M") minimum = maximum = 6;
else if (priority == "L") minimum = maximum = 3;
}
else if (_style != "default" &&
_style != "short")
throw format (STRING_COLUMN_BAD_FORMAT, "priority", _style);
}
}
////////////////////////////////////////////////////////////////////////////////
void ColumnPriority::render (
std::vector <std::string>& lines,
Task& task,
int width,
Color& color)
{
if (task.has (_name))
{
std::string priority = task.get (_name);
if (_style == "long")
{
if (priority == "H") priority = "High";
else if (priority == "M") priority = "Medium";
else if (priority == "L") priority = "Low";
}
lines.push_back (color.colorize (leftJustify (priority, width)));
}
}
////////////////////////////////////////////////////////////////////////////////
std::string ColumnPriority::modify (std::string& value)
{
if (value == "h") value = "H";
else if (value == "m") value = "M";
else if (value == "l") value = "L";
return value;
}
////////////////////////////////////////////////////////////////////////////////
bool ColumnPriority::can_modify ()
{
return true;
}
////////////////////////////////////////////////////////////////////////////////

View file

@ -1,53 +0,0 @@
////////////////////////////////////////////////////////////////////////////////
//
// Copyright 2006 - 2015, Paul Beckingham, Federico Hernandez.
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included
// in all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
//
// http://www.opensource.org/licenses/mit-license.php
//
////////////////////////////////////////////////////////////////////////////////
#ifndef INCLUDED_COLPRIORITY
#define INCLUDED_COLPRIORITY
#include <vector>
#include <string>
#include <Column.h>
#include <Color.h>
#include <Task.h>
class ColumnPriority : public Column
{
public:
ColumnPriority ();
~ColumnPriority ();
bool validate (std::string&);
void setStyle (const std::string&);
void measure (Task&, unsigned int&, unsigned int&);
void render (std::vector <std::string>&, Task&, int, Color&);
std::string modify (std::string&);
bool can_modify ();
private:
};
#endif
////////////////////////////////////////////////////////////////////////////////

View file

@ -37,7 +37,6 @@
#include <ColMask.h>
#include <ColModified.h>
#include <ColParent.h>
#include <ColPriority.h>
#include <ColProject.h>
#include <ColRecur.h>
#include <ColScheduled.h>
@ -88,7 +87,6 @@ Column* Column::factory (const std::string& name, const std::string& report)
else if (column_name == "mask") c = new ColumnMask ();
else if (column_name == "modified") c = new ColumnModified ();
else if (column_name == "parent") c = new ColumnParent ();
else if (column_name == "priority") c = new ColumnPriority ();
else if (column_name == "project") c = new ColumnProject ();
else if (column_name == "recur") c = new ColumnRecur ();
else if (column_name == "scheduled") c = new ColumnScheduled ();
@ -131,7 +129,6 @@ void Column::factory (std::map <std::string, Column*>& all)
c = new ColumnMask (); all[c->_name] = c;
c = new ColumnModified (); all[c->_name] = c;
c = new ColumnParent (); all[c->_name] = c;
c = new ColumnPriority (); all[c->_name] = c;
c = new ColumnProject (); all[c->_name] = c;
c = new ColumnRecur (); all[c->_name] = c;
c = new ColumnScheduled (); all[c->_name] = c;

View file

@ -206,8 +206,7 @@ std::string CmdEdit::formatTask (Task task, const std::string& dateformat)
<< "# Status: " << ucFirst (Task::statusToText (task.getStatus ())) << "\n" // L10N safe ucFirst.
<< "# Mask: " << task.get ("mask") << "\n"
<< "# iMask: " << task.get ("imask") << "\n"
<< " Project: " << task.get ("project") << "\n"
<< " Priority: " << task.get ("priority") << "\n";
<< " Project: " << task.get ("project") << "\n";
std::vector <std::string> tags;
task.getTags (tags);
@ -343,25 +342,6 @@ void CmdEdit::parseTask (Task& task, const std::string& after, const std::string
}
}
// priority
value = findValue (after, "\n Priority:");
if (task.get ("priority") != value)
{
if (value != "")
{
if (context.columns["priority"]->validate (value))
{
context.footnote (STRING_EDIT_PRIORITY_MOD);
task.set ("priority", value);
}
}
else
{
context.footnote (STRING_EDIT_PRIORITY_DEL);
task.remove ("priority");
}
}
// tags
value = findValue (after, "\n Tags:");
std::vector <std::string> tags;

View file

@ -150,14 +150,6 @@ int CmdInfo::execute (std::string& output)
view.set (row, 1, task->get ("project"));
}
// priority
if (task->has ("priority"))
{
row = view.addRow ();
view.set (row, 0, STRING_COLUMN_LABEL_PRIORITY);
view.set (row, 1, task->get ("priority"));
}
// dependencies: blocked
{
std::vector <Task> blocked;
@ -420,7 +412,6 @@ int CmdInfo::execute (std::string& output)
urgencyDetails.add (Column::factory ("string", "")); // Result
urgencyTerm (urgencyDetails, "project", task->urgency_project (), Task::urgencyProjectCoefficient);
urgencyTerm (urgencyDetails, "priority", task->urgency_priority (), Task::urgencyPriorityCoefficient);
urgencyTerm (urgencyDetails, "active", task->urgency_active (), Task::urgencyActiveCoefficient);
urgencyTerm (urgencyDetails, "scheduled", task->urgency_scheduled (), Task::urgencyScheduledCoefficient);
urgencyTerm (urgencyDetails, "waiting", task->urgency_waiting (), Task::urgencyWaitingCoefficient);

View file

@ -82,7 +82,6 @@ int CmdProjects::execute (std::string& output)
std::map <std::string, int> unique;
bool no_project = false;
std::string project;
std::string priority;
std::vector <Task>::iterator task;
for (task = filtered.begin (); task != filtered.end (); ++task)
{

View file

@ -142,7 +142,6 @@ int CmdShow::execute (std::string& output)
" debug.tls"
" default.command"
" default.due"
" default.priority"
" default.project"
" defaultheight"
" defaultwidth"
@ -200,7 +199,6 @@ int CmdShow::execute (std::string& output)
" urgency.inherit.coefficient"
" urgency.due.coefficient"
" urgency.next.coefficient"
" urgency.priority.coefficient"
" urgency.project.coefficient"
" urgency.tags.coefficient"
" urgency.waiting.coefficient"
@ -367,15 +365,6 @@ int CmdShow::execute (std::string& output)
out << format (STRING_CMD_SHOW_CONFIG_ERROR, "calendar.holidays", calendarholidays)
<< "\n";
// Check for bad values in rc.default.priority.
std::string defaultPriority = context.config.get ("default.priority");
if (defaultPriority != "H" &&
defaultPriority != "M" &&
defaultPriority != "L" &&
defaultPriority != "")
out << format (STRING_CMD_SHOW_CONFIG_ERROR, "default.priority", defaultPriority)
<< "\n";
// Verify installation. This is mentioned in the documentation as the way
// to ensure everything is properly installed.

View file

@ -86,7 +86,6 @@
#include <Context.h>
#include <ColProject.h>
#include <ColPriority.h>
#include <ColDue.h>
extern Context context;

View file

@ -204,8 +204,6 @@
#define STRING_COLUMN_LABEL_ADDED "Hinzugefügt"
#define STRING_COLUMN_LABEL_AGE "Alter"
#define STRING_COLUMN_LABEL_ID "ID"
#define STRING_COLUMN_LABEL_PRI "Pri"
#define STRING_COLUMN_LABEL_PRIORITY "Priorität"
#define STRING_COLUMN_LABEL_PROJECT "Projekt"
#define STRING_COLUMN_LABEL_UNTIL "Bis"
#define STRING_COLUMN_LABEL_WAIT "Aufgeschoben"
@ -708,8 +706,6 @@
#define STRING_EDIT_PROJECT_MOD "Projekt geändert."
#define STRING_EDIT_PROJECT_DEL "Projekt gelöscht."
#define STRING_EDIT_PRIORITY_MOD "Wichtigkeit geändert."
#define STRING_EDIT_PRIORITY_DEL "Wichtigkeit gelöscht."
#define STRING_EDIT_DESC_MOD "Beschreibung geändert."
#define STRING_EDIT_DESC_REMOVE_ERR "Beschreibung kann nicht entfernt werden."
#define STRING_EDIT_ENTRY_REMOVE_ERR "Erstelldatum kann nicht entfernt werden."
@ -874,7 +870,6 @@
#define STRING_TASK_VALID_BEFORE "Warnung: Das '{1}'-Datum ist nach dem '{2}'-Datum."
#define STRING_TASK_VALID_REC_DUE "Wiederholende Aufgaben müssen eine Fälligkeit besitzen."
#define STRING_TASK_VALID_RECUR "Wiederhol-Periode '{1}' ist ungültig."
#define STRING_TASK_VALID_PRIORITY "Die Wichtigkeit kann die Werte 'H', 'M' oder 'L' annehmen, nicht jedoch '{1}'."
#define STRING_TASK_SAFETY_VALVE "Dieser Befehl hat keinen Filter und wird alle Aufgaben verändern. Sind Sie sicher?"
#define STRING_TASK_SAFETY_FAIL "Befehl an Ausführung gehindert."
#define STRING_TASK_SAFETY_ALLOW "Kein Filter angegeben, und durch den konfigurierten 'allow.empty.filter'-Wert wurde keine Aktion durchgeführt."
@ -1029,4 +1024,7 @@
#define STRING_UTIL_KIBIBYTES "KiB"
#define STRING_UTIL_BYTES "B"
// Legacy
#define STRING_LEGACY_PRIORITY "Legacy attribute found. Please change '{1}' to '{2}'."
#endif

View file

@ -204,8 +204,6 @@
#define STRING_COLUMN_LABEL_ADDED "Added"
#define STRING_COLUMN_LABEL_AGE "Age"
#define STRING_COLUMN_LABEL_ID "ID"
#define STRING_COLUMN_LABEL_PRI "Pri"
#define STRING_COLUMN_LABEL_PRIORITY "Priority"
#define STRING_COLUMN_LABEL_PROJECT "Project"
#define STRING_COLUMN_LABEL_UNTIL "Until"
#define STRING_COLUMN_LABEL_WAIT "Wait"
@ -708,8 +706,6 @@
#define STRING_EDIT_PROJECT_MOD "Project modified."
#define STRING_EDIT_PROJECT_DEL "Project deleted."
#define STRING_EDIT_PRIORITY_MOD "Priority modified."
#define STRING_EDIT_PRIORITY_DEL "Priority deleted."
#define STRING_EDIT_DESC_MOD "Description modified."
#define STRING_EDIT_DESC_REMOVE_ERR "Cannot remove description."
#define STRING_EDIT_ENTRY_REMOVE_ERR "Cannot remove creation date."
@ -874,7 +870,6 @@
#define STRING_TASK_VALID_BEFORE "Warning: You have specified that the '{1}' date is after the '{2}' date."
#define STRING_TASK_VALID_REC_DUE "A recurring task must also have a 'due' date."
#define STRING_TASK_VALID_RECUR "The recurrence value '{1}' is not valid."
#define STRING_TASK_VALID_PRIORITY "Priority values may be 'H', 'M' or 'L', not '{1}'."
#define STRING_TASK_SAFETY_VALVE "This command has no filter, and will modify all tasks. Are you sure?"
#define STRING_TASK_SAFETY_FAIL "Command prevented from running."
#define STRING_TASK_SAFETY_ALLOW "You did not specify a filter, and with the 'allow.empty.filter' value, no action is taken."
@ -1026,4 +1021,7 @@
#define STRING_UTIL_KIBIBYTES "KiB"
#define STRING_UTIL_BYTES "B"
// Legacy
#define STRING_LEGACY_PRIORITY "Legacy attribute found. Please change '{1}' to '{2}'."
#endif

View file

@ -204,8 +204,6 @@
#define STRING_COLUMN_LABEL_ADDED "Kreita"
#define STRING_COLUMN_LABEL_AGE "Aĝo"
#define STRING_COLUMN_LABEL_ID "ID"
#define STRING_COLUMN_LABEL_PRI "Gr"
#define STRING_COLUMN_LABEL_PRIORITY "Graveco"
#define STRING_COLUMN_LABEL_PROJECT "Projekto"
#define STRING_COLUMN_LABEL_UNTIL "Ĝis"
#define STRING_COLUMN_LABEL_WAIT "Atendu"
@ -708,8 +706,6 @@
#define STRING_EDIT_PROJECT_MOD "Modifis la projekton."
#define STRING_EDIT_PROJECT_DEL "Viŝis la projekton."
#define STRING_EDIT_PRIORITY_MOD "Modifis la gravecon."
#define STRING_EDIT_PRIORITY_DEL "Viŝis la gravecon."
#define STRING_EDIT_DESC_MOD "Modifis la priskribon."
#define STRING_EDIT_DESC_REMOVE_ERR "Ne povis viŝi la priskribon."
#define STRING_EDIT_ENTRY_REMOVE_ERR "Ne povis viŝi la krean daton."
@ -874,7 +870,6 @@
#define STRING_TASK_VALID_BEFORE "Averto: Vi specifis daton '{1}' post dato '{2}'."
#define STRING_TASK_VALID_REC_DUE "Reokazanta tasko devas ankaŭ havi daton 'due'."
#define STRING_TASK_VALID_RECUR "Reokaz-valoro '{1}' ne estas valida."
#define STRING_TASK_VALID_PRIORITY "Gravec-valoro povas esti 'H', 'M', aŭ 'L', sed ne '{1}'."
#define STRING_TASK_SAFETY_VALVE "Tiu komando ne havas filtrilo, do ĝi modifos ĉian taskon. Ĉu vi estas certa?"
#define STRING_TASK_SAFETY_FAIL "Antaŭmalebligis komandon."
#define STRING_TASK_SAFETY_ALLOW "Vi ne specifis filtrilon. Laŭ la valoro 'allow.empty.filter', ne faros nenion."
@ -1026,4 +1021,7 @@
#define STRING_UTIL_KIBIBYTES "KiB"
#define STRING_UTIL_BYTES "B"
// Legacy
#define STRING_LEGACY_PRIORITY "Legacy attribute found. Please change '{1}' to '{2}'."
#endif

View file

@ -204,8 +204,6 @@
#define STRING_COLUMN_LABEL_ADDED "Añadida"
#define STRING_COLUMN_LABEL_AGE "Edad"
#define STRING_COLUMN_LABEL_ID "ID" // |esp-ESP|==|eng-USA|
#define STRING_COLUMN_LABEL_PRI "Pri" // |esp-ESP|==|eng-USA|
#define STRING_COLUMN_LABEL_PRIORITY "Prioridad"
#define STRING_COLUMN_LABEL_PROJECT "Proyecto"
#define STRING_COLUMN_LABEL_UNTIL "Hasta"
#define STRING_COLUMN_LABEL_WAIT "Espera"
@ -717,8 +715,6 @@
#define STRING_EDIT_PROJECT_MOD "Proyecto modificado."
#define STRING_EDIT_PROJECT_DEL "Proyecto eliminado."
#define STRING_EDIT_PRIORITY_MOD "Prioridad modificada."
#define STRING_EDIT_PRIORITY_DEL "Prioridad eliminada."
#define STRING_EDIT_DESC_MOD "Descripción modificada."
#define STRING_EDIT_DESC_REMOVE_ERR "No se puede eliminar la descripción."
#define STRING_EDIT_ENTRY_REMOVE_ERR "No se puede eliminar la fecha de creación."
@ -883,7 +879,6 @@
#define STRING_TASK_VALID_BEFORE "Advertencia: ha especificado que la fecha '{1}' es después de la fecha '{2}'."
#define STRING_TASK_VALID_REC_DUE "Una tarea recurrente debe tener también una fecha de vencimiento."
#define STRING_TASK_VALID_RECUR "El valor de recurrencia '{1}' no es válido."
#define STRING_TASK_VALID_PRIORITY "Valores de prioridad pueden ser 'H', 'M' o 'L', no '{1}'."
#define STRING_TASK_SAFETY_VALVE "Este comando no tiene filtro, y modificará todas las tareas. ¿Está seguro?"
#define STRING_TASK_SAFETY_FAIL "Se impidió la ejecución del comando."
#define STRING_TASK_SAFETY_ALLOW "You did not specify a filter, and with the 'allow.empty.filter' value, no action is taken."
@ -1051,4 +1046,7 @@
#define STRING_UTIL_KIBIBYTES "KiB" // |esp-ESP|==|eng-USA|
#define STRING_UTIL_BYTES "B" // |esp-ESP|==|eng-USA|
// Legacy
#define STRING_LEGACY_PRIORITY "Legacy attribute found. Please change '{1}' to '{2}'."
#endif

View file

@ -204,8 +204,6 @@
#define STRING_COLUMN_LABEL_ADDED "Ajoutée"
#define STRING_COLUMN_LABEL_AGE "Age"
#define STRING_COLUMN_LABEL_ID "ID"
#define STRING_COLUMN_LABEL_PRI "Pri"
#define STRING_COLUMN_LABEL_PRIORITY "Priorité"
#define STRING_COLUMN_LABEL_PROJECT "Projet"
#define STRING_COLUMN_LABEL_UNTIL "Until"
#define STRING_COLUMN_LABEL_WAIT "Attente"
@ -707,8 +705,6 @@
#define STRING_EDIT_PROJECT_MOD "Projet modifié."
#define STRING_EDIT_PROJECT_DEL "Projet supprimé."
#define STRING_EDIT_PRIORITY_MOD "Priorité modifiée."
#define STRING_EDIT_PRIORITY_DEL "Priorité supprimée."
#define STRING_EDIT_DESC_MOD "Description modifiée."
#define STRING_EDIT_DESC_REMOVE_ERR "Impossible de supprimer la description."
#define STRING_EDIT_ENTRY_REMOVE_ERR "Impossible de supprimer la date de création."
@ -873,7 +869,6 @@
#define STRING_TASK_VALID_BEFORE "Warning: You have specified that the '{1}' date is after the '{2}' date."
#define STRING_TASK_VALID_REC_DUE "A recurring task must also have a 'due' date."
#define STRING_TASK_VALID_RECUR "The recurrence value '{1}' is not valid."
#define STRING_TASK_VALID_PRIORITY "Priority values may be 'H', 'M' or 'L', not '{1}'."
#define STRING_TASK_SAFETY_VALVE "This command has no filter, and will modify all tasks. Are you sure?"
#define STRING_TASK_SAFETY_FAIL "Command prevented from running."
#define STRING_TASK_SAFETY_ALLOW "You did not specify a filter, and with the 'allow.empty.filter' value, no action is taken."
@ -1025,4 +1020,7 @@
#define STRING_UTIL_KIBIBYTES "kio"
#define STRING_UTIL_BYTES "o"
// Legacy
#define STRING_LEGACY_PRIORITY "Legacy attribute found. Please change '{1}' to '{2}'."
#endif

View file

@ -204,8 +204,6 @@
#define STRING_COLUMN_LABEL_ADDED "Aggiunto"
#define STRING_COLUMN_LABEL_AGE "Età"
#define STRING_COLUMN_LABEL_ID "ID"
#define STRING_COLUMN_LABEL_PRI "Pri"
#define STRING_COLUMN_LABEL_PRIORITY "Priorità"
#define STRING_COLUMN_LABEL_PROJECT "Progetto"
#define STRING_COLUMN_LABEL_UNTIL "Fino a"
#define STRING_COLUMN_LABEL_WAIT "Attesa"
@ -707,8 +705,6 @@
#define STRING_EDIT_PROJECT_MOD "Progetto modificato."
#define STRING_EDIT_PROJECT_DEL "Progetto cancellato."
#define STRING_EDIT_PRIORITY_MOD "Progetto modificato."
#define STRING_EDIT_PRIORITY_DEL "Priorità cancellata."
#define STRING_EDIT_DESC_MOD "Descrizione modificata."
#define STRING_EDIT_DESC_REMOVE_ERR "Impossibile rimuovere la descrizione."
#define STRING_EDIT_ENTRY_REMOVE_ERR "Impossibile rimuovere la data di creazione."
@ -873,7 +869,6 @@
#define STRING_TASK_VALID_BEFORE "Warning: data '{1}' con valore successivo alla data '{2}'."
#define STRING_TASK_VALID_REC_DUE "Un task periodico deve avere una data di scadenza."
#define STRING_TASK_VALID_RECUR "Il valore di periodicità '{1}' non è valido."
#define STRING_TASK_VALID_PRIORITY "I valori di priorità possono essere 'H', 'M' o 'L', non '{1}'."
#define STRING_TASK_SAFETY_VALVE "Questo comando non ha filtro, e modificherà tutti i task. Sicuro?"
#define STRING_TASK_SAFETY_FAIL "Prevenuta l'esecuzione del comando."
#define STRING_TASK_SAFETY_ALLOW "You did not specify a filter, and with the 'allow.empty.filter' value, no action is taken."
@ -1025,4 +1020,7 @@
#define STRING_UTIL_KIBIBYTES "Kb"
#define STRING_UTIL_BYTES "B"
// Legacy
#define STRING_LEGACY_PRIORITY "Legacy attribute found. Please change '{1}' to '{2}'."
#endif

View file

@ -204,8 +204,6 @@
#define STRING_COLUMN_LABEL_ADDED "Dodane"
#define STRING_COLUMN_LABEL_AGE "Wiek"
#define STRING_COLUMN_LABEL_ID "ID"
#define STRING_COLUMN_LABEL_PRI "Pri"
#define STRING_COLUMN_LABEL_PRIORITY "Priorytet"
#define STRING_COLUMN_LABEL_PROJECT "Projekt"
#define STRING_COLUMN_LABEL_UNTIL "Do"
#define STRING_COLUMN_LABEL_WAIT "Czeka"
@ -708,8 +706,6 @@
#define STRING_EDIT_PROJECT_MOD "Projekt zmieniony."
#define STRING_EDIT_PROJECT_DEL "Projekt usunięty."
#define STRING_EDIT_PRIORITY_MOD "Priorytet zmieniony."
#define STRING_EDIT_PRIORITY_DEL "Priorytet usunięty."
#define STRING_EDIT_DESC_MOD "Opis zmieniony."
#define STRING_EDIT_DESC_REMOVE_ERR "Nie można usunąć opisu."
#define STRING_EDIT_ENTRY_REMOVE_ERR "Nie można usunąć daty utworzenia."
@ -874,7 +870,6 @@
#define STRING_TASK_VALID_BEFORE "Uwaga: podałeś datę '{1}' jako datę po '{2}'."
#define STRING_TASK_VALID_REC_DUE "Zadanie cykliczne musi posiadać datę zakończenia."
#define STRING_TASK_VALID_RECUR "Wartość '{1}' określająca okres zadania jest niepoprawna."
#define STRING_TASK_VALID_PRIORITY "Poprawne wartości określające priorytet to 'H', 'M' lub 'L', nie '{1}'."
#define STRING_TASK_SAFETY_VALVE "Nie nałożono filtra, wszystkie zadania zostaną poddane modyfikacji. Czy chcesz kontynuować?"
#define STRING_TASK_SAFETY_FAIL "Niedopuszczono do wykonania polecenia."
#define STRING_TASK_SAFETY_ALLOW "Brak filtra, z aktywną flagą 'allow.empty.filter', nie podjęto akcji."
@ -1026,4 +1021,7 @@
#define STRING_UTIL_KIBIBYTES "KiB"
#define STRING_UTIL_BYTES "B"
// Legacy
#define STRING_LEGACY_PRIORITY "Legacy attribute found. Please change '{1}' to '{2}'."
#endif

View file

@ -204,8 +204,6 @@
#define STRING_COLUMN_LABEL_ADDED "Adicionada"
#define STRING_COLUMN_LABEL_AGE "Idade"
#define STRING_COLUMN_LABEL_ID "ID" // |por-PRT|==|eng-USA|
#define STRING_COLUMN_LABEL_PRI "Pri" // |por-PRT|==|eng-USA|
#define STRING_COLUMN_LABEL_PRIORITY "Prioridade"
#define STRING_COLUMN_LABEL_PROJECT "Projeto"
#define STRING_COLUMN_LABEL_UNTIL "Até"
#define STRING_COLUMN_LABEL_WAIT "Adiada"
@ -708,8 +706,6 @@
#define STRING_EDIT_PROJECT_MOD "Projeto modificado."
#define STRING_EDIT_PROJECT_DEL "Projeto removido."
#define STRING_EDIT_PRIORITY_MOD "Prioridade modificada."
#define STRING_EDIT_PRIORITY_DEL "Prioridade removida."
#define STRING_EDIT_DESC_MOD "Descrição modificada."
#define STRING_EDIT_DESC_REMOVE_ERR "Não é possível remover a descrição."
#define STRING_EDIT_ENTRY_REMOVE_ERR "Não é possível remover a data de criação."
@ -874,7 +870,6 @@
#define STRING_TASK_VALID_BEFORE "Aviso: Especificou que a data de '{1}' é posterior à data de '{2}'."
#define STRING_TASK_VALID_REC_DUE "Uma tarefa recorrente necessita de uma data de vencimento."
#define STRING_TASK_VALID_RECUR "O valor de recorrência '{1}' não é válido."
#define STRING_TASK_VALID_PRIORITY "Valores de prioridade podem ser 'A', 'M' ou 'B', não '{1}'."
#define STRING_TASK_SAFETY_VALVE "Este comando não possui um filtro e irá modificar todas as tarefas. Tem a certeza?"
#define STRING_TASK_SAFETY_FAIL "Execução do comando abortada."
#define STRING_TASK_SAFETY_ALLOW "Não especificou um filtro e com o valor de 'allow.empty.filter', nenhuma ação foi tomada."
@ -1026,4 +1021,7 @@
#define STRING_UTIL_KIBIBYTES "KiB" // |por-PRT|==|eng-USA|
#define STRING_UTIL_BYTES "B" // |por-PRT|==|eng-USA|
// Legacy
#define STRING_LEGACY_PRIORITY "Legacy attribute found. Please change '{1}' to '{2}'."
#endif

View file

@ -54,6 +54,21 @@ void legacyColumnMap (std::string& name)
// 2014-01-26: recurrence_indicator --> recur.indicator Mapping removed
// 2014-01-26: tag_indicator --> tags.indicator Mapping removed
// 2014-01-26: description_only --> description.desc Mapping removed
// One-time initialization, on demand.
static std::map <std::string, std::string> legacyMap;
if (! legacyMap.size ())
{
legacyMap["priority."] = "priority";
}
// If a legacy column was used, complain about it, but modify it anyway.
std::map <std::string, std::string>::iterator found = legacyMap.find (name);
if (found != legacyMap.end ())
{
context.footnote (format (STRING_LEGACY_PRIORITY, name, found->second));
name = found->second;
}
}
////////////////////////////////////////////////////////////////////////////////
@ -71,6 +86,21 @@ void legacySortColumnMap (std::string& name)
// 2014-01-26: recurrence_indicator --> recur Mapping removed
// 2014-01-26: tag_indicator --> tags Mapping removed
// 2014-01-26: description_only --> description Mapping removed
// One-time initialization, on demand.
static std::map <std::string, std::string> legacyMap;
if (! legacyMap.size ())
{
legacyMap["priority."] = "priority";
}
// If a legacy column was used, complain about it, but modify it anyway.
std::map <std::string, std::string>::iterator found = legacyMap.find (name);
if (found != legacyMap.end ())
{
context.footnote (format (STRING_LEGACY_PRIORITY, name, found->second));
name = found->second;
}
}
////////////////////////////////////////////////////////////////////////////////

View file

@ -111,34 +111,6 @@ static void colorizeTagged (Task& task, const Color& base, Color& c)
c.blend (base);
}
////////////////////////////////////////////////////////////////////////////////
static void colorizePriorityL (Task& task, const Color& base, Color& c)
{
if (task.get ("priority") == "L")
c.blend (base);
}
////////////////////////////////////////////////////////////////////////////////
static void colorizePriorityM (Task& task, const Color& base, Color& c)
{
if (task.get ("priority") == "M")
c.blend (base);
}
////////////////////////////////////////////////////////////////////////////////
static void colorizePriorityH (Task& task, const Color& base, Color& c)
{
if (task.get ("priority") == "H")
c.blend (base);
}
////////////////////////////////////////////////////////////////////////////////
static void colorizePriorityNone (Task& task, const Color& base, Color& c)
{
if (task.get ("priority") == "")
c.blend (base);
}
////////////////////////////////////////////////////////////////////////////////
static void colorizeActive (Task& task, const Color& base, Color& c)
{
@ -329,10 +301,6 @@ void autoColorize (Task& task, Color& c)
if (*r == "color.blocked") colorizeBlocked (task, base, c);
else if (*r == "color.blocking") colorizeBlocking (task, base, c);
else if (*r == "color.tagged") colorizeTagged (task, base, c);
else if (*r == "color.pri.L") colorizePriorityL (task, base, c);
else if (*r == "color.pri.M") colorizePriorityM (task, base, c);
else if (*r == "color.pri.H") colorizePriorityH (task, base, c);
else if (*r == "color.pri.none") colorizePriorityNone (task, base, c);
else if (*r == "color.active") colorizeActive (task, base, c);
else if (*r == "color.scheduled") colorizeScheduled (task, base, c);
else if (*r == "color.until") colorizeUntil (task, base, c);

View file

@ -79,8 +79,6 @@ static bool sort_compare (int left, int right)
int right_number;
float left_real;
float right_real;
char left_char;
char right_char;
std::vector <std::string>::iterator k;
for (k = global_keys.begin (); k != global_keys.end (); ++k)
@ -133,25 +131,6 @@ static bool sort_compare (int left, int right)
: (left_string > right_string);
}
// Priority.
else if (field == "priority")
{
left_char = ((*global_data)[left].get (field))[0];
right_char = ((*global_data)[right].get (field))[0];
if (left_char == right_char)
continue;
if (ascending)
return (left_char == '\0' && right_char != '\0') ||
(left_char == 'L' && (right_char == 'M' || right_char == 'H')) ||
(left_char == 'M' && right_char == 'H');
return (left_char != '\0' && right_char == '\0') ||
(left_char == 'M' && right_char == 'L') ||
(left_char == 'H' && (right_char == 'M' || right_char == 'L'));
}
// Due Date.
else if (field == "due")
{

View file

@ -1,55 +0,0 @@
#! /usr/bin/env perl
################################################################################
##
## Copyright 2006 - 2015, Paul Beckingham, Federico Hernandez.
##
## Permission is hereby granted, free of charge, to any person obtaining a copy
## of this software and associated documentation files (the "Software"), to deal
## in the Software without restriction, including without limitation the rights
## to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
## copies of the Software, and to permit persons to whom the Software is
## furnished to do so, subject to the following conditions:
##
## The above copyright notice and this permission notice shall be included
## in all copies or substantial portions of the Software.
##
## THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
## OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
## FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
## THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
## LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
## OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
## SOFTWARE.
##
## http://www.opensource.org/licenses/mit-license.php
##
################################################################################
use strict;
use warnings;
use Test::More tests => 1;
# Ensure environment has no influence.
delete $ENV{'TASKDATA'};
delete $ENV{'TASKRC'};
use File::Basename;
my $ut = basename ($0);
my $rc = $ut . '.rc';
# Create the rc file.
if (open my $fh, '>', $rc)
{
print $fh "data.location=.\n";
close $fh;
}
# Bug 869: lower case priorities aren't accepted.
qx{../src/task rc:$rc add foo pri:h 2>&1};
my $output = qx{../src/task rc:$rc 1 info 2>&1};
like ($output, qr/Priority\s+H/, "$ut: pri:h --> pri:H");
# Cleanup.
unlink qw(pending.data completed.data undo.data backlog.data), $rc;
exit 0;

View file

@ -1,61 +0,0 @@
#! /usr/bin/env perl
################################################################################
##
## Copyright 2006 - 2015, Paul Beckingham, Federico Hernandez.
##
## Permission is hereby granted, free of charge, to any person obtaining a copy
## of this software and associated documentation files (the "Software"), to deal
## in the Software without restriction, including without limitation the rights
## to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
## copies of the Software, and to permit persons to whom the Software is
## furnished to do so, subject to the following conditions:
##
## The above copyright notice and this permission notice shall be included
## in all copies or substantial portions of the Software.
##
## THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
## OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
## FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
## THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
## LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
## OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
## SOFTWARE.
##
## http://www.opensource.org/licenses/mit-license.php
##
################################################################################
use strict;
use warnings;
use Test::More tests => 1;
# Ensure environment has no influence.
delete $ENV{'TASKDATA'};
delete $ENV{'TASKRC'};
use File::Basename;
my $ut = basename ($0);
my $rc = $ut . '.rc';
# Create the rc file.
if (open my $fh, '>', $rc)
{
print $fh "data.location=.\n",
"color.pri.L=green\n",
"color.tagged=red\n",
"_forcecolor=1\n",
"rule.precedence.color=pri.,tagged\n";
close $fh;
}
# Bug that colored any task with both priority:L and a tag as though
# rc.color.tagged had a higher precedence than rc.color.pri.L, which it is not.
qx{../src/task rc:$rc add test +test pri:L 2>&1};
my $output = qx{../src/task rc:$rc list 2>&1};
like ($output, qr/ \033\[32m .* test .* \033\[0m /x, "$ut: Colored with the priority color, which has precedence over the tagged color");
# Cleanup.
unlink qw(pending.data completed.data undo.data backlog.data), $rc;
exit 0;

View file

@ -1,61 +0,0 @@
#! /usr/bin/env perl
################################################################################
##
## Copyright 2006 - 2015, Paul Beckingham, Federico Hernandez.
##
## Permission is hereby granted, free of charge, to any person obtaining a copy
## of this software and associated documentation files (the "Software"), to deal
## in the Software without restriction, including without limitation the rights
## to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
## copies of the Software, and to permit persons to whom the Software is
## furnished to do so, subject to the following conditions:
##
## The above copyright notice and this permission notice shall be included
## in all copies or substantial portions of the Software.
##
## THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
## OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
## FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
## THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
## LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
## OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
## SOFTWARE.
##
## http://www.opensource.org/licenses/mit-license.php
##
################################################################################
use strict;
use warnings;
use Test::More tests => 4;
# Ensure environment has no influence.
delete $ENV{'TASKDATA'};
delete $ENV{'TASKRC'};
# Create the rc file.
if (open my $fh, '>', 'pri.rc')
{
print $fh "data.location=.\n",
"report.foo.description=DESC\n",
"report.foo.columns=id,priority.long\n",
"report.foo.labels=ID,Pri\n",
"report.foo.sort=id+\n";
close $fh;
}
# Generate the usage screen, and locate the custom report on it.
qx{../src/task rc:pri.rc add one pri:H 2>&1};
qx{../src/task rc:pri.rc add two pri:M 2>&1};
qx{../src/task rc:pri.rc add three pri:L 2>&1};
my $output = qx{../src/task rc:pri.rc foo 2>&1};
like ($output, qr/ID.+Pri/, 'priority.long indicator heading');
like ($output, qr/1\s+High/, 'priority.long High');
like ($output, qr/2\s+Medium/, 'priority.long Medium');
like ($output, qr/3\s+Low/, 'priority.long Low');
# Cleanup.
unlink qw(pending.data completed.data undo.data backlog.data pri.rc);
exit 0;

View file

@ -39,7 +39,7 @@ if (open my $fh, '>', 'default.rc')
print $fh "data.location=.\n",
"default.command=list\n",
"default.project=PROJECT\n",
"default.priority=M\n",
"uda.priority.default=M\n",
"default.due=eom\n",
"dateformat=m/d/Y\n";
close $fh;

View file

@ -114,7 +114,7 @@ int main (int argc, char** argv)
view.add (Column::factory ("id", report));
view.add (Column::factory ("uuid.short", report));
view.add (Column::factory ("project", report));
view.add (Column::factory ("priority.long", report));
view.add (Column::factory ("priority", report));
view.add (Column::factory ("tags", report));
view.add (Column::factory ("tags.count", report));
view.add (Column::factory ("description", report));