- Fixed bug #1006, #1024, which caused words like the German 'im' and 'des' in a description to be expanded into 'imask' and 'description' (thanks to Louis-Claude Canon and Martin U). - Promoted Louis-Claude Canon in the AUTHORS file, added Martin U.
This commit is contained in:
3
AUTHORS
3
AUTHORS
@@ -10,6 +10,7 @@ contributions of the following people:
|
|||||||
Dirk Deimeke (Technical Advisor & Marketing)
|
Dirk Deimeke (Technical Advisor & Marketing)
|
||||||
Wim Schuermann (Contributing Author)
|
Wim Schuermann (Contributing Author)
|
||||||
Owen Clarke (Contributing Author)
|
Owen Clarke (Contributing Author)
|
||||||
|
Louis-Claude Canon (Contributing Author)
|
||||||
|
|
||||||
The following submitted code, packages or analysis, and deserve special thanks:
|
The following submitted code, packages or analysis, and deserve special thanks:
|
||||||
|
|
||||||
@@ -71,7 +72,6 @@ The following submitted code, packages or analysis, and deserve special thanks:
|
|||||||
Sam Stuck
|
Sam Stuck
|
||||||
Christoph Robbert
|
Christoph Robbert
|
||||||
Oleksii Tsai
|
Oleksii Tsai
|
||||||
Louis-Claude Canon
|
|
||||||
Jörg Plate
|
Jörg Plate
|
||||||
|
|
||||||
Thanks to the following, who submitted detailed bug reports and excellent
|
Thanks to the following, who submitted detailed bug reports and excellent
|
||||||
@@ -143,4 +143,5 @@ suggestions:
|
|||||||
Nicholas Rabenau
|
Nicholas Rabenau
|
||||||
Bruno Bigras
|
Bruno Bigras
|
||||||
Hyde Stevenson
|
Hyde Stevenson
|
||||||
|
Martin U
|
||||||
|
|
||||||
|
|||||||
@@ -82,6 +82,9 @@ Bugs
|
|||||||
+ Fixed bug #990, which prevents color precedence to be applied correctly for
|
+ Fixed bug #990, which prevents color precedence to be applied correctly for
|
||||||
tagged tasks.
|
tagged tasks.
|
||||||
+ Fixed bug #1001, which caused a segv (thanks to Bryce Harrington).
|
+ Fixed bug #1001, which caused a segv (thanks to Bryce Harrington).
|
||||||
|
+ Fixed bug #1006, #1024, which caused words like the German 'im' and 'des' in
|
||||||
|
a description to be expanded into 'imask' and 'description' (thanks to
|
||||||
|
Louis-Claude Canon and Martin U).
|
||||||
+ Fixed bug #1008, which failed to remove tasks with the special tag '+nocal'
|
+ Fixed bug #1008, which failed to remove tasks with the special tag '+nocal'
|
||||||
from the calendar report output with 'calendar.details=full' set (thanks to
|
from the calendar report output with 'calendar.details=full' set (thanks to
|
||||||
Bryan Kam).
|
Bryan Kam).
|
||||||
|
|||||||
1
NEWS
1
NEWS
@@ -7,6 +7,7 @@ New Features in taskwarrior 2.0.1
|
|||||||
opportunity to work on a task.
|
opportunity to work on a task.
|
||||||
- All tasks may now be given an 'until' date, after which they will expire
|
- All tasks may now be given an 'until' date, after which they will expire
|
||||||
and are deleted.
|
and are deleted.
|
||||||
|
- User defined attributes.
|
||||||
|
|
||||||
Please refer to the ChangeLog file for full details. There are too many to
|
Please refer to the ChangeLog file for full details. There are too many to
|
||||||
list here.
|
list here.
|
||||||
|
|||||||
32
src/A3.cpp
32
src/A3.cpp
@@ -1301,12 +1301,13 @@ bool A3::is_attr (Nibbler& n, Arg& arg)
|
|||||||
{
|
{
|
||||||
n.save ();
|
n.save ();
|
||||||
std::string name;
|
std::string name;
|
||||||
|
std::string canonical;
|
||||||
std::string value;
|
std::string value;
|
||||||
|
|
||||||
// If there is a valid attribute name.
|
// If there is a valid attribute name.
|
||||||
if (n.getName (name) &&
|
if (n.getName (name) &&
|
||||||
name.length () &&
|
name.length () &&
|
||||||
is_attribute (name, name))
|
is_attribute (name, canonical))
|
||||||
{
|
{
|
||||||
if (n.skip (':'))
|
if (n.skip (':'))
|
||||||
{
|
{
|
||||||
@@ -1326,13 +1327,13 @@ bool A3::is_attr (Nibbler& n, Arg& arg)
|
|||||||
return false;
|
return false;
|
||||||
*/
|
*/
|
||||||
|
|
||||||
arg._raw = name + ':' + value;
|
arg._raw = canonical + ':' + value;
|
||||||
arg._category = Arg::cat_attr;
|
arg._category = Arg::cat_attr;
|
||||||
|
|
||||||
// Most attributes are standard, some are pseudo-attributes, such as
|
// Most attributes are standard, some are pseudo-attributes, such as
|
||||||
// 'limit:page', which is not represented by a column object, and
|
// 'limit:page', which is not represented by a column object, and
|
||||||
// therefore not stored.
|
// therefore not stored.
|
||||||
std::map<std::string, Column*>::iterator i = context.columns.find (name);
|
std::map<std::string, Column*>::iterator i = context.columns.find (canonical);
|
||||||
if (i != context.columns.end ())
|
if (i != context.columns.end ())
|
||||||
arg._type = Arg::type_id (i->second->type ());
|
arg._type = Arg::type_id (i->second->type ());
|
||||||
else
|
else
|
||||||
@@ -1353,6 +1354,7 @@ bool A3::is_attmod (Nibbler& n, Arg& arg)
|
|||||||
{
|
{
|
||||||
n.save ();
|
n.save ();
|
||||||
std::string name;
|
std::string name;
|
||||||
|
std::string canonical;
|
||||||
std::string modifier;
|
std::string modifier;
|
||||||
std::string value;
|
std::string value;
|
||||||
// time_t date;
|
// time_t date;
|
||||||
@@ -1360,7 +1362,7 @@ bool A3::is_attmod (Nibbler& n, Arg& arg)
|
|||||||
// If there is a valid attribute name.
|
// If there is a valid attribute name.
|
||||||
if (n.getName (name) &&
|
if (n.getName (name) &&
|
||||||
name.length () &&
|
name.length () &&
|
||||||
is_attribute (name, name))
|
is_attribute (name, canonical))
|
||||||
{
|
{
|
||||||
if (n.skip ('.'))
|
if (n.skip ('.'))
|
||||||
{
|
{
|
||||||
@@ -1395,8 +1397,8 @@ bool A3::is_attmod (Nibbler& n, Arg& arg)
|
|||||||
return false;
|
return false;
|
||||||
*/
|
*/
|
||||||
|
|
||||||
arg._raw = name + '.' + modifier + ':' + value;
|
arg._raw = canonical + '.' + modifier + ':' + value;
|
||||||
Column* col = context.columns[name];
|
Column* col = context.columns[canonical];
|
||||||
arg._type = col ? Arg::type_id (col->type ()) : Arg::type_pseudo;
|
arg._type = col ? Arg::type_id (col->type ()) : Arg::type_pseudo;
|
||||||
arg._category = Arg::cat_attmod;
|
arg._category = Arg::cat_attmod;
|
||||||
return true;
|
return true;
|
||||||
@@ -1472,6 +1474,7 @@ bool A3::is_dom (Nibbler& n, Arg& arg)
|
|||||||
{
|
{
|
||||||
n.save ();
|
n.save ();
|
||||||
std::string name;
|
std::string name;
|
||||||
|
std::string canonical;
|
||||||
int id;
|
int id;
|
||||||
std::string uuid;
|
std::string uuid;
|
||||||
|
|
||||||
@@ -1505,11 +1508,12 @@ bool A3::is_dom (Nibbler& n, Arg& arg)
|
|||||||
n.skip ('.') &&
|
n.skip ('.') &&
|
||||||
n.getName (name) &&
|
n.getName (name) &&
|
||||||
name.length () &&
|
name.length () &&
|
||||||
is_attribute (name, name))
|
is_attribute (name, canonical))
|
||||||
{
|
{
|
||||||
result = format (id) + '.' + name;
|
name = canonical;
|
||||||
|
result = format (id) + '.' + name;
|
||||||
arg._raw = result;
|
arg._raw = result;
|
||||||
Column* col = context.columns[name];
|
Column* col = context.columns[name];
|
||||||
arg._type = col ? Arg::type_id (col->type ()) : Arg::type_pseudo;
|
arg._type = col ? Arg::type_id (col->type ()) : Arg::type_pseudo;
|
||||||
arg._category = Arg::cat_dom;
|
arg._category = Arg::cat_dom;
|
||||||
return true;
|
return true;
|
||||||
@@ -1522,10 +1526,11 @@ bool A3::is_dom (Nibbler& n, Arg& arg)
|
|||||||
n.skip ('.') &&
|
n.skip ('.') &&
|
||||||
n.getName (name) &&
|
n.getName (name) &&
|
||||||
name.length () &&
|
name.length () &&
|
||||||
is_attribute (name, name))
|
is_attribute (name, canonical))
|
||||||
{
|
{
|
||||||
|
name = canonical;
|
||||||
arg._raw = uuid + '.' + name;
|
arg._raw = uuid + '.' + name;
|
||||||
Column* col = context.columns[name];
|
Column* col = context.columns[name];
|
||||||
arg._type = col ? Arg::type_id (col->type ()) : Arg::type_pseudo;
|
arg._type = col ? Arg::type_id (col->type ()) : Arg::type_pseudo;
|
||||||
arg._category = Arg::cat_dom;
|
arg._category = Arg::cat_dom;
|
||||||
return true;
|
return true;
|
||||||
@@ -1536,12 +1541,13 @@ bool A3::is_dom (Nibbler& n, Arg& arg)
|
|||||||
// Attribute.
|
// Attribute.
|
||||||
if (n.getName (name) &&
|
if (n.getName (name) &&
|
||||||
name.length () &&
|
name.length () &&
|
||||||
is_attribute (name, name))
|
is_attribute (name, canonical))
|
||||||
{
|
{
|
||||||
if (name != "limit")
|
if (name != "limit")
|
||||||
{
|
{
|
||||||
arg._raw = name;
|
arg._raw = name;
|
||||||
Column* col = context.columns[name];
|
arg._value = canonical;
|
||||||
|
Column* col = context.columns[canonical];
|
||||||
arg._type = col ? Arg::type_id (col->type ()) : Arg::type_pseudo;
|
arg._type = col ? Arg::type_id (col->type ()) : Arg::type_pseudo;
|
||||||
arg._category = Arg::cat_dom;
|
arg._category = Arg::cat_dom;
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
Reference in New Issue
Block a user