Compare commits
13 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3a6de7d940 | ||
|
|
994f98b57a | ||
|
|
44ca388b52 | ||
|
|
06a85c24ad | ||
|
|
ceaba87ba3 | ||
|
|
61acf6239c | ||
|
|
8dc8cdeea7 | ||
|
|
10ef3013e3 | ||
|
|
3899f5352f | ||
|
|
64fbf88f48 | ||
|
|
2e0964aeb8 | ||
|
|
35d878de96 | ||
|
|
d771586080 |
1
AUTHORS
1
AUTHORS
@@ -11,4 +11,5 @@ With thanks to:
|
|||||||
Bruce Israel
|
Bruce Israel
|
||||||
Thomas Engel
|
Thomas Engel
|
||||||
Nishiishii
|
Nishiishii
|
||||||
|
galvanizd
|
||||||
|
|
||||||
|
|||||||
19
ChangeLog
19
ChangeLog
@@ -1,20 +1,27 @@
|
|||||||
Version numbers are of the form:
|
Version numbers are of the form:
|
||||||
|
|
||||||
x.y.z
|
X.Y.Z
|
||||||
|
|
||||||
where the x represents a major version number, or architecture. The y
|
where the X represents a major version number, or architecture. The Y
|
||||||
represents a feature release, and the z represents a patch.
|
represents a feature release, and the Z represents a patch.
|
||||||
|
|
||||||
------ plans -------------------------------------
|
------ plans -------------------------------------
|
||||||
|
|
||||||
- Configurable columns in reports
|
- Configurable columns in reports
|
||||||
- Dependencies
|
- Dependencies
|
||||||
|
- Recurring tasks
|
||||||
|
|
||||||
1.4.0 (?)
|
|
||||||
+ Bug: "showage" configuration variable should apply to all reprts, not
|
1.3.1 (6/21/2008)
|
||||||
just the ones based on "list"
|
|
||||||
+ New configuration variable, "defaultwidth" that determines the width
|
+ New configuration variable, "defaultwidth" that determines the width
|
||||||
of tables when ncurses support is not available
|
of tables when ncurses support is not available
|
||||||
|
+ Bug: "showage" configuration variable should apply to all reports, not
|
||||||
|
just the ones based on "list"
|
||||||
|
+ Bug: Fixed segmentation faults on Ubuntu when the "dateformat"
|
||||||
|
configuration variables was missing. This was a code bug, and should
|
||||||
|
have affected more platforms
|
||||||
|
+ Bug: Task now will recreate a missing ~/.taskrc file, OR a missing
|
||||||
|
~/.task directory
|
||||||
|
|
||||||
------ reality -----------------------------------
|
------ reality -----------------------------------
|
||||||
|
|
||||||
|
|||||||
2
NEWS
2
NEWS
@@ -1,4 +1,4 @@
|
|||||||
Welcome to Task 1.4.0.
|
Welcome to Task 1.3.1.
|
||||||
|
|
||||||
Task has been built and tested on the following configurations:
|
Task has been built and tested on the following configurations:
|
||||||
|
|
||||||
|
|||||||
10
TUTORIAL
10
TUTORIAL
@@ -1,4 +1,4 @@
|
|||||||
Task program tutorial, for version 1.4.0
|
Task program tutorial, for version 1.3.1
|
||||||
----------------------------------------
|
----------------------------------------
|
||||||
|
|
||||||
This guide shows how to quickly set up the task program, and become proficient
|
This guide shows how to quickly set up the task program, and become proficient
|
||||||
@@ -21,10 +21,10 @@ Build the task program according to the directions in the INSTALL file. This
|
|||||||
transcript illustrates a typical installation:
|
transcript illustrates a typical installation:
|
||||||
|
|
||||||
% ls
|
% ls
|
||||||
task-1.4.0.tar.gz
|
task-1.3.1.tar.gz
|
||||||
% gunzip task-1.4.0.tar.gz
|
% gunzip task-1.3.1.tar.gz
|
||||||
% tar xf task-1.4.0.tar
|
% tar xf task-1.3.1.tar
|
||||||
% cd task-1.4.0
|
% cd task-1.3.1
|
||||||
% ./configure
|
% ./configure
|
||||||
...
|
...
|
||||||
% make
|
% make
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
# Process this file with autoconf to produce a configure script.
|
# Process this file with autoconf to produce a configure script.
|
||||||
|
|
||||||
AC_PREREQ(2.61)
|
AC_PREREQ(2.61)
|
||||||
AC_INIT(task, 1.4.0, bugs@beckingham.net)
|
AC_INIT(task, 1.3.1, bugs@beckingham.net)
|
||||||
AM_INIT_AUTOMAKE
|
AM_INIT_AUTOMAKE
|
||||||
AC_CONFIG_SRCDIR([src/task.cpp])
|
AC_CONFIG_SRCDIR([src/task.cpp])
|
||||||
AC_CONFIG_HEADER([auto.h])
|
AC_CONFIG_HEADER([auto.h])
|
||||||
|
|||||||
126
html/task.css
Normal file
126
html/task.css
Normal file
@@ -0,0 +1,126 @@
|
|||||||
|
body {
|
||||||
|
text-align: center;
|
||||||
|
margin: 0; padding: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
#container {
|
||||||
|
width: 740px;
|
||||||
|
text-align: left;
|
||||||
|
margin: 0 auto; padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#header {
|
||||||
|
height: 60px;
|
||||||
|
margin: 0 0 15px; padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#page {}
|
||||||
|
|
||||||
|
#content {
|
||||||
|
width: 500px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#header a:link,
|
||||||
|
#header a:visited {
|
||||||
|
color:#000;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#header h1 {
|
||||||
|
font: bold 400% georgia, serif;
|
||||||
|
letter-spacing: -1px;
|
||||||
|
margin: 0;
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
#header h2 {
|
||||||
|
font: normal 12px verdana, arial, sans-serif;
|
||||||
|
margin: 2.5em 0 0 0.8em;
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
#content {}
|
||||||
|
|
||||||
|
#content h1,
|
||||||
|
#content h2,
|
||||||
|
#content h3,
|
||||||
|
#content h4,
|
||||||
|
#content h5 {
|
||||||
|
font-family: "lucidamac bold", "lucida grande", arial, sans-serif;
|
||||||
|
letter-spacing: -1px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#content h1 {
|
||||||
|
font-size: 24px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#content h2 {
|
||||||
|
font-size: 22px;
|
||||||
|
border-bottom: 1px dotted #000;
|
||||||
|
}
|
||||||
|
|
||||||
|
#content h3 {
|
||||||
|
font-size: 20px;
|
||||||
|
border-bottom: 1px dotted #bbb;
|
||||||
|
}
|
||||||
|
|
||||||
|
#content h4 {
|
||||||
|
font-size: 18px;
|
||||||
|
border-bottom: 1px dotted #bbb;
|
||||||
|
}
|
||||||
|
|
||||||
|
#content h5 {
|
||||||
|
font-size: 18px;
|
||||||
|
background: #ffd;
|
||||||
|
border-bottom: 1px dotted #bbb;
|
||||||
|
}
|
||||||
|
|
||||||
|
#content p {
|
||||||
|
line-height: 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#content ul,
|
||||||
|
#content ol {
|
||||||
|
}
|
||||||
|
|
||||||
|
#content code {
|
||||||
|
font: normal 12px "bitstream vera sans mono", monaco "lucida console", "courier new", courier, serif;
|
||||||
|
}
|
||||||
|
|
||||||
|
#content pre {
|
||||||
|
color: #63FF00;
|
||||||
|
background: #000;
|
||||||
|
overflow: auto;
|
||||||
|
font: normal 12px "bitstream vera sans mono", monaco "lucida console", "courier new", courier, serif;
|
||||||
|
margin: 0.9em 0; padding: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
dt {
|
||||||
|
font: bold 14px "lucida grande", verdana, arial, helvetica, sans-serif;
|
||||||
|
}
|
||||||
|
|
||||||
|
dd {
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
font: normal 12px "lucida grande", verdana, arial, helvetica, sans-serif;
|
||||||
|
}
|
||||||
|
|
||||||
|
.small {
|
||||||
|
font: normal 10px verdana, arial, sans-serif;
|
||||||
|
}
|
||||||
|
|
||||||
|
.table_h {
|
||||||
|
background-color: #e0e0e0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.table_d {
|
||||||
|
background-color: #f7f7f7;
|
||||||
|
}
|
||||||
|
input,
|
||||||
|
textarea { font: normal 12px "bitstream vera sans", verdana, sans-serif; }
|
||||||
|
|
||||||
|
abbr { border: none; }
|
||||||
|
cite { font-style: normal; }
|
||||||
|
a img { border: none; padding: 0; margin: 0; }
|
||||||
|
|
||||||
@@ -1,137 +1,9 @@
|
|||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||||
<head>
|
<head>
|
||||||
<title>Task 1.4.0</title>
|
<title>Task 1.3.1</title>
|
||||||
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
|
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
|
||||||
<style type="text/css">
|
<link rel="stylesheet" href="task.css" type="text/css" />
|
||||||
body {
|
|
||||||
text-align: center;
|
|
||||||
margin: 0; padding: 1em;
|
|
||||||
}
|
|
||||||
|
|
||||||
#container {
|
|
||||||
width: 740px;
|
|
||||||
text-align: left;
|
|
||||||
margin: 0 auto; padding: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#header {
|
|
||||||
height: 60px;
|
|
||||||
margin: 0 0 15px; padding: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#page {}
|
|
||||||
|
|
||||||
#content {
|
|
||||||
width: 500px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#header a:link,
|
|
||||||
#header a:visited {
|
|
||||||
color:#000;
|
|
||||||
text-decoration: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
#header h1 {
|
|
||||||
font: bold 400% georgia, serif;
|
|
||||||
letter-spacing: -1px;
|
|
||||||
margin: 0;
|
|
||||||
float: left;
|
|
||||||
}
|
|
||||||
|
|
||||||
#header h2 {
|
|
||||||
font: normal 12px verdana, arial, sans-serif;
|
|
||||||
margin: 2.5em 0 0 0.8em;
|
|
||||||
float: left;
|
|
||||||
}
|
|
||||||
|
|
||||||
#content {}
|
|
||||||
|
|
||||||
#content h1,
|
|
||||||
#content h2,
|
|
||||||
#content h3,
|
|
||||||
#content h4,
|
|
||||||
#content h5 {
|
|
||||||
font-family: "lucidamac bold", "lucida grande", arial, sans-serif;
|
|
||||||
letter-spacing: -1px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#content h1 {
|
|
||||||
font-size: 24px;
|
|
||||||
margin: 0 0 0.3em;
|
|
||||||
}
|
|
||||||
|
|
||||||
#content h2 {
|
|
||||||
font-size: 22px;
|
|
||||||
margin: 0 0 0.3em;
|
|
||||||
}
|
|
||||||
|
|
||||||
#content h3 {
|
|
||||||
font-size: 20px;
|
|
||||||
margin: 1.2em 0 0.3em;
|
|
||||||
}
|
|
||||||
|
|
||||||
#content h4 {
|
|
||||||
font-size: 18px;
|
|
||||||
margin: 1.2em 0 0.3em;
|
|
||||||
}
|
|
||||||
|
|
||||||
#content h5 {
|
|
||||||
font-size: 18px;
|
|
||||||
background: #ffd;
|
|
||||||
margin: 1.2em 0 0.3em;
|
|
||||||
border-bottom: 1px dotted #aaa;
|
|
||||||
}
|
|
||||||
|
|
||||||
#content p {
|
|
||||||
line-height: 15px;
|
|
||||||
margin: 0 0 1.2em;
|
|
||||||
}
|
|
||||||
|
|
||||||
#content ul,
|
|
||||||
#content ol {
|
|
||||||
margin: 1em;
|
|
||||||
padding:0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#content code {
|
|
||||||
font: normal 12px "bitstream vera sans mono", monaco "lucida console", "courier new", courier, serif;
|
|
||||||
}
|
|
||||||
|
|
||||||
#content pre {
|
|
||||||
color: #63FF00;
|
|
||||||
background: #000;
|
|
||||||
overflow: auto;
|
|
||||||
font: normal 12px "bitstream vera sans mono", monaco "lucida console", "courier new", courier, serif;
|
|
||||||
margin: 0.9em 0; padding: 8px;
|
|
||||||
}
|
|
||||||
|
|
||||||
dt {
|
|
||||||
font: bold 14px "lucida grande", verdana, arial, helvetica, sans-serif;
|
|
||||||
}
|
|
||||||
|
|
||||||
dd {
|
|
||||||
}
|
|
||||||
|
|
||||||
body {
|
|
||||||
font: normal 12px "lucida grande", verdana, arial, helvetica, sans-serif;
|
|
||||||
}
|
|
||||||
|
|
||||||
.table_h {
|
|
||||||
background-color: #e0e0e0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.table_d {
|
|
||||||
background-color: #f7f7f7;
|
|
||||||
}
|
|
||||||
input,
|
|
||||||
textarea { font: normal 12px "bitstream vera sans", verdana, sans-serif; }
|
|
||||||
|
|
||||||
abbr { border: none; }
|
|
||||||
cite { font-style: normal; }
|
|
||||||
a img { border: none; padding: 0; margin: 0; }
|
|
||||||
|
|
||||||
</style>
|
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
@@ -166,80 +38,35 @@ a img { border: none; padding: 0; margin: 0; }
|
|||||||
<div class="content">
|
<div class="content">
|
||||||
<p>
|
<p>
|
||||||
Download the
|
Download the
|
||||||
<a href="http://www.beckingham.net/task-1.4.0.tar.gz">latest version</a>
|
<a href="http://www.beckingham.net/task-1.3.1.tar.gz">latest version</a>
|
||||||
of the task source code (6/18/2008).
|
of the task source code (1.3.1, 6/21/2008).
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
<h4>New in version 1.4.0</h4>
|
<h4>New in version 1.3.1</h4>
|
||||||
Source: <a href="http://www.beckingham.net/task-1.4.0.tar.gz">task-1.4.0.tar.gz</a>
|
Source: <a href="http://www.beckingham.net/task-1.3.1.tar.gz">task-1.3.1.tar.gz</a>
|
||||||
|
<br />
|
||||||
|
Debian package: <a href="http://www.beckingham.net/task_1.3.1-1_i386.deb">task_1.3.1-1_i386.deb</a>
|
||||||
|
(Thanks to <a href="http://blog.rfquerin.org">Richard Querin</a>)
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
<li>Fixed bug where "showage" configuration variable was not being
|
|
||||||
oberved by the "task long" report
|
|
||||||
<li>New configuration variable "defaultwidth" determines the width
|
<li>New configuration variable "defaultwidth" determines the width
|
||||||
of windows in the absense of ncurses support
|
of windows in the absense of ncurses support
|
||||||
|
<li>Fixed bug where "showage" configuration variable was not being
|
||||||
|
oberved by the "task long" report
|
||||||
|
<li>Fixed bug causing segmentation faults (mostly for Ubuntu users)
|
||||||
|
when various commands are run
|
||||||
|
<li>Fixed bug so that task now will recreate a missing ~/.taskrc file,
|
||||||
|
OR a missing ~/.task directory
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
<h4>New in version 1.3.0</h4>
|
(Find out <a href="versions.html">what was new in prior versions</a>)
|
||||||
Source: <a href="http://www.beckingham.net/task-1.3.0.tar.gz">task-1.3.0.tar.gz</a>
|
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<ul>
|
|
||||||
<li>"task calendar" now displays multiple months per line, adjustable
|
|
||||||
by the "monthsperline" configuration variable. Feature added by
|
|
||||||
Damian Glenny
|
|
||||||
<li>Displays shorter message when a command is entered incorrectly,
|
|
||||||
and the full usage for "task help"
|
|
||||||
<li>"task export" can now filter tasks like the reports
|
|
||||||
<li>"task oldest" shows the oldest tasks
|
|
||||||
<li>"task newest" shows the newest tasks
|
|
||||||
<li>Fixed bug where task generates a segmentation fault for several
|
|
||||||
commands, when no "dateformat" configuration variable was present
|
|
||||||
<li>Fixed bug whereby if you have more than one task with a due date,
|
|
||||||
7 days gets added to the entry date of task 2..n
|
|
||||||
<li>Fixed bug whereby "1 wks" was being improperly pluralized
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
<h4>New in version 1.2.0</h4>
|
<h4>Troubleshooting</h4>
|
||||||
Source: <a href="http://www.beckingham.net/task-1.2.0.tar.gz">task-1.2.0.tar.gz</a>
|
|
||||||
<br />
|
|
||||||
Debian package: <a href="http://www.beckingham.net/task_1.2.0-1_i386.deb">task_1.2.0-1_i386.deb</a>
|
|
||||||
(Thanks to <a href="http://blog.rfquerin.org">Richard Querin</a>)
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<ul>
|
|
||||||
<li>Subprojects supported - please see documentation below, or TUTORIAL
|
|
||||||
file
|
|
||||||
<li>"dateformat" configuration variable now properly used to parse as
|
|
||||||
well as render dates
|
|
||||||
<li>"task list x" now performs a caseless comparison between "x" and
|
|
||||||
the task description
|
|
||||||
<li>"showage" configuration variable determines whether the "Age" column
|
|
||||||
should appear on the "task list" and "task next" reports
|
|
||||||
<li>Improvements to the TUTORIAL file and this page
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
<h4>New in version 1.1.0</h4>
|
|
||||||
Source: <a href="http://www.beckingham.net/task-1.1.0.tar.gz">task-1.1.0.tar.gz</a>
|
|
||||||
<br />
|
|
||||||
Debian package: <a href="http://www.beckingham.net/task_1.1.0-1_i386.deb">task_1.1.0-1_i386.deb</a>
|
|
||||||
(Thanks to <a href="http://blog.rfquerin.org">Richard Querin</a>)
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<ul>
|
|
||||||
<li>"blanklines" configuration variable to stop displaying unnecessary
|
|
||||||
white space and thus work better on small-screen devices
|
|
||||||
<li>"dateformat" configuration now determines how dates are formatted
|
|
||||||
<li>Better formatting of "task tags" output
|
|
||||||
<li>This home page set up, with TUTORIAL
|
|
||||||
<li>Added tags to the "task long" report
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
@@ -261,6 +88,12 @@ a img { border: none; padding: 0; margin: 0; }
|
|||||||
suggestion for improvement, or a feature request, please send mail to
|
suggestion for improvement, or a feature request, please send mail to
|
||||||
<a href="mailto:task@beckingham.net">task@beckingham.net</a>.
|
<a href="mailto:task@beckingham.net">task@beckingham.net</a>.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Take a look at the <a href="troubleshooting.html">troubleshooting guide</a>
|
||||||
|
for tips and workarounds to problems.
|
||||||
|
</p>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<br />
|
<br />
|
||||||
149
html/troubleshooting.html
Normal file
149
html/troubleshooting.html
Normal file
@@ -0,0 +1,149 @@
|
|||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||||
|
<head>
|
||||||
|
<title>Task Troubleshooting Guide</title>
|
||||||
|
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
|
||||||
|
<link rel="stylesheet" href="task.css" type="text/css" />
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div id="container">
|
||||||
|
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
|
||||||
|
<div id="content">
|
||||||
|
<br />
|
||||||
|
<br />
|
||||||
|
<br />
|
||||||
|
<h1 class="title">Task Troubleshooting Guide</h1>
|
||||||
|
<p>
|
||||||
|
Here you will find tips and suggestions for making task behave
|
||||||
|
properly, and bug workarounds.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<br />
|
||||||
|
<h2 class="title">Segmentation Fault for certain commands</h2>
|
||||||
|
<div class="content">
|
||||||
|
<p>
|
||||||
|
Upgrading task to version 1.1.0, 1.2.0 and 1.3.0 can cause
|
||||||
|
segmentation faults. This is mostly occurring for Ubuntu users,
|
||||||
|
although there is no reason for it to be limited to Ubuntu.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Task 1.3.1 fixes this bug, but there is a workaround for users
|
||||||
|
of earlier versions. Add the following line to your ~/.taskrc
|
||||||
|
file:
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<code><pre>dateformat=m/d/Y</pre></code>
|
||||||
|
|
||||||
|
<p class="small">
|
||||||
|
The "dateformat" setting is supported in task 1.1.0 and later.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<br />
|
||||||
|
<h2 class="title">How to get rid of the "Age" column</h2>
|
||||||
|
<div class="content">
|
||||||
|
<p>
|
||||||
|
The "Age" column that shows up on several reports is proving
|
||||||
|
to be unpopular. In task 1.2.0 and later, here is how to
|
||||||
|
remove it from the reports - make sure you have the line:
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<code><pre>showage=no</pre></code>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
in your ~/.taskrc file.
|
||||||
|
|
||||||
|
Note that the "task long" report does not obey this setting
|
||||||
|
in versions prior to 1.3.1.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p class="small">
|
||||||
|
The "showage" setting is supported in task 1.2.0 or later.
|
||||||
|
<br />
|
||||||
|
The "task long" report supports this setting in versions 1.3.1
|
||||||
|
or later.
|
||||||
|
</p>
|
||||||
|
<div>
|
||||||
|
|
||||||
|
<br />
|
||||||
|
<h2 class="title">How do I build task under Cygwin?</h2>
|
||||||
|
<div class="content">
|
||||||
|
<p>
|
||||||
|
Task is built the same way everywhere. But under Cygwin, you'll
|
||||||
|
need to make sure you have the following packages available
|
||||||
|
first:
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li>gcc
|
||||||
|
<li>make
|
||||||
|
<li>libncurses-devel
|
||||||
|
<li>libncurses8
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
The gcc and make packages allow you to compile the code, and
|
||||||
|
are therefore required, but the ncurses packages are optional.
|
||||||
|
Ncurses will allow task to determine the width of the window, and
|
||||||
|
therefore use the whole width and wrap text accordingly, for a
|
||||||
|
more aesthetically pleasing display.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<br />
|
||||||
|
<br />
|
||||||
|
<div class="content">
|
||||||
|
<p>
|
||||||
|
Copyright 2006-2008, P. Beckingham. All rights reserved.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
|
||||||
|
<td align="right" valign="top" width="200px">
|
||||||
|
<br />
|
||||||
|
<br />
|
||||||
|
<br />
|
||||||
|
<br />
|
||||||
|
<br />
|
||||||
|
<br />
|
||||||
|
<br />
|
||||||
|
<br />
|
||||||
|
<br />
|
||||||
|
<br />
|
||||||
|
|
||||||
|
<script type="text/javascript"><!--
|
||||||
|
google_ad_client = "pub-9709799404235424";
|
||||||
|
/* Task Main */
|
||||||
|
google_ad_slot = "8660617875";
|
||||||
|
google_ad_width = 120;
|
||||||
|
google_ad_height = 600;
|
||||||
|
//-->
|
||||||
|
</script>
|
||||||
|
<script type="text/javascript"
|
||||||
|
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
|
||||||
|
</script>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
|
||||||
|
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
|
||||||
|
</script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
var pageTracker = _gat._getTracker("UA-4737637-1");
|
||||||
|
pageTracker._initData();
|
||||||
|
pageTracker._trackPageview();
|
||||||
|
</script>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
||||||
157
html/versions.html
Normal file
157
html/versions.html
Normal file
@@ -0,0 +1,157 @@
|
|||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||||
|
<head>
|
||||||
|
<title>Task Prior Versions</title>
|
||||||
|
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
|
||||||
|
<link rel="stylesheet" href="task.css" type="text/css" />
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div id="container">
|
||||||
|
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
|
||||||
|
<div id="content">
|
||||||
|
<br />
|
||||||
|
<br />
|
||||||
|
<br />
|
||||||
|
<h1 class="title">Task Prior Versions</h1>
|
||||||
|
<br />
|
||||||
|
|
||||||
|
<div class="content">
|
||||||
|
<p>
|
||||||
|
<h4>New in version 1.3.0</h4>
|
||||||
|
Source: <a href="http://www.beckingham.net/task-1.3.0.tar.gz">task-1.3.0.tar.gz</a>
|
||||||
|
<br />
|
||||||
|
Debian package: <a href="http://www.beckingham.net/task_1.3.0-0_i386.deb">task_1.3.0-0_i386.deb</a>
|
||||||
|
(Thanks to <a href="http://blog.rfquerin.org">Richard Querin</a>)
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li>"task calendar" now displays multiple months per line, adjustable
|
||||||
|
by the "monthsperline" configuration variable. Feature added by
|
||||||
|
Damian Glenny
|
||||||
|
<li>Displays shorter message when a command is entered incorrectly,
|
||||||
|
and the full usage for "task help"
|
||||||
|
<li>"task export" can now filter tasks like the reports
|
||||||
|
<li>"task oldest" shows the oldest tasks
|
||||||
|
<li>"task newest" shows the newest tasks
|
||||||
|
<li>Fixed bug where task generates a segmentation fault for several
|
||||||
|
commands, when no "dateformat" configuration variable was present
|
||||||
|
<li>Fixed bug whereby if you have more than one task with a due date,
|
||||||
|
7 days gets added to the entry date of task 2..n
|
||||||
|
<li>Fixed bug whereby "1 wks" was being improperly pluralized
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<h4>New in version 1.2.0</h4>
|
||||||
|
Source: <a href="http://www.beckingham.net/task-1.2.0.tar.gz">task-1.2.0.tar.gz</a>
|
||||||
|
<br />
|
||||||
|
Debian package: <a href="http://www.beckingham.net/task_1.2.0-1_i386.deb">task_1.2.0-1_i386.deb</a>
|
||||||
|
(Thanks to <a href="http://blog.rfquerin.org">Richard Querin</a>)
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li>Subprojects supported - please see documentation below, or TUTORIAL
|
||||||
|
file
|
||||||
|
<li>"dateformat" configuration variable now properly used to parse as
|
||||||
|
well as render dates
|
||||||
|
<li>"task list x" now performs a caseless comparison between "x" and
|
||||||
|
the task description
|
||||||
|
<li>"showage" configuration variable determines whether the "Age" column
|
||||||
|
should appear on the "task list" and "task next" reports
|
||||||
|
<li>Improvements to the TUTORIAL file and this page
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<h4>New in version 1.1.0</h4>
|
||||||
|
Source: <a href="http://www.beckingham.net/task-1.1.0.tar.gz">task-1.1.0.tar.gz</a>
|
||||||
|
<br />
|
||||||
|
Debian package: <a href="http://www.beckingham.net/task_1.1.0-1_i386.deb">task_1.1.0-1_i386.deb</a>
|
||||||
|
(Thanks to <a href="http://blog.rfquerin.org">Richard Querin</a>)
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li>"blanklines" configuration variable to stop displaying unnecessary
|
||||||
|
white space and thus work better on small-screen devices
|
||||||
|
<li>"dateformat" configuration now determines how dates are formatted
|
||||||
|
<li>Better formatting of "task tags" output
|
||||||
|
<li>This home page set up, with TUTORIAL
|
||||||
|
<li>Added tags to the "task long" report
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<h4>New in version 1.0.1</h4>
|
||||||
|
Source: <a href="http://www.beckingham.net/task-1.0.1.tar.gz">task-1.0.1.tar.gz</a>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li>Fixed bug where the UUID generator not properly terminating strings
|
||||||
|
<li>Fixed bug where srandom/srand not called prior to custom UUID generation
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<h4>Version 1.0.0</h4>
|
||||||
|
Source: <a href="http://www.beckingham.net/task-1.0.0.tar.gz">task-1.0.0.tar.gz</a>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Task 1.0.0 was the first publicly available version of task.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<br />
|
||||||
|
<br />
|
||||||
|
<div class="content">
|
||||||
|
<p>
|
||||||
|
Copyright 2006-2008, P. Beckingham. All rights reserved.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
|
||||||
|
<td align="right" valign="top" width="200px">
|
||||||
|
<br />
|
||||||
|
<br />
|
||||||
|
<br />
|
||||||
|
<br />
|
||||||
|
<br />
|
||||||
|
<br />
|
||||||
|
<br />
|
||||||
|
<br />
|
||||||
|
<br />
|
||||||
|
<br />
|
||||||
|
|
||||||
|
<script type="text/javascript"><!--
|
||||||
|
google_ad_client = "pub-9709799404235424";
|
||||||
|
/* Task Main */
|
||||||
|
google_ad_slot = "8660617875";
|
||||||
|
google_ad_width = 120;
|
||||||
|
google_ad_height = 600;
|
||||||
|
//-->
|
||||||
|
</script>
|
||||||
|
<script type="text/javascript"
|
||||||
|
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
|
||||||
|
</script>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
|
||||||
|
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
|
||||||
|
</script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
var pageTracker = _gat._getTracker("UA-4737637-1");
|
||||||
|
pageTracker._initData();
|
||||||
|
pageTracker._trackPageview();
|
||||||
|
</script>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
||||||
@@ -91,14 +91,15 @@ Config.o Config.o: Config.cpp /usr/include/c++/4.0.0/iostream \
|
|||||||
/usr/include/c++/4.0.0/bits/istream.tcc /usr/include/c++/4.0.0/fstream \
|
/usr/include/c++/4.0.0/bits/istream.tcc /usr/include/c++/4.0.0/fstream \
|
||||||
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/basic_file.h \
|
/usr/include/c++/4.0.0/i686-apple-darwin9/bits/basic_file.h \
|
||||||
/usr/include/c++/4.0.0/bits/fstream.tcc /usr/include/c++/4.0.0/sstream \
|
/usr/include/c++/4.0.0/bits/fstream.tcc /usr/include/c++/4.0.0/sstream \
|
||||||
/usr/include/c++/4.0.0/bits/sstream.tcc /usr/include/sys/stat.h task.h \
|
/usr/include/c++/4.0.0/bits/sstream.tcc /usr/include/sys/types.h \
|
||||||
|
/usr/include/sys/stat.h /usr/include/pwd.h task.h \
|
||||||
/usr/include/c++/4.0.0/vector /usr/include/c++/4.0.0/bits/stl_vector.h \
|
/usr/include/c++/4.0.0/vector /usr/include/c++/4.0.0/bits/stl_vector.h \
|
||||||
/usr/include/c++/4.0.0/bits/stl_bvector.h \
|
/usr/include/c++/4.0.0/bits/stl_bvector.h \
|
||||||
/usr/include/c++/4.0.0/bits/vector.tcc /usr/include/c++/4.0.0/map \
|
/usr/include/c++/4.0.0/bits/vector.tcc /usr/include/c++/4.0.0/map \
|
||||||
/usr/include/c++/4.0.0/bits/stl_tree.h \
|
/usr/include/c++/4.0.0/bits/stl_tree.h \
|
||||||
/usr/include/c++/4.0.0/bits/stl_map.h \
|
/usr/include/c++/4.0.0/bits/stl_map.h \
|
||||||
/usr/include/c++/4.0.0/bits/stl_multimap.h /usr/include/sys/types.h \
|
/usr/include/c++/4.0.0/bits/stl_multimap.h Config.h Table.h color.h \
|
||||||
Config.h Table.h color.h Grid.h color.h TDB.h T.h ../auto.h
|
Grid.h color.h TDB.h T.h ../auto.h
|
||||||
|
|
||||||
/usr/include/c++/4.0.0/iostream:
|
/usr/include/c++/4.0.0/iostream:
|
||||||
|
|
||||||
@@ -366,8 +367,12 @@ Config.o Config.o: Config.cpp /usr/include/c++/4.0.0/iostream \
|
|||||||
|
|
||||||
/usr/include/c++/4.0.0/bits/sstream.tcc:
|
/usr/include/c++/4.0.0/bits/sstream.tcc:
|
||||||
|
|
||||||
|
/usr/include/sys/types.h:
|
||||||
|
|
||||||
/usr/include/sys/stat.h:
|
/usr/include/sys/stat.h:
|
||||||
|
|
||||||
|
/usr/include/pwd.h:
|
||||||
|
|
||||||
task.h:
|
task.h:
|
||||||
|
|
||||||
/usr/include/c++/4.0.0/vector:
|
/usr/include/c++/4.0.0/vector:
|
||||||
@@ -386,8 +391,6 @@ task.h:
|
|||||||
|
|
||||||
/usr/include/c++/4.0.0/bits/stl_multimap.h:
|
/usr/include/c++/4.0.0/bits/stl_multimap.h:
|
||||||
|
|
||||||
/usr/include/sys/types.h:
|
|
||||||
|
|
||||||
Config.h:
|
Config.h:
|
||||||
|
|
||||||
Table.h:
|
Table.h:
|
||||||
|
|||||||
@@ -27,8 +27,11 @@
|
|||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
|
#include <sys/types.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
|
#include <unistd.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
#include <pwd.h>
|
||||||
#include "task.h"
|
#include "task.h"
|
||||||
#include "Config.h"
|
#include "Config.h"
|
||||||
|
|
||||||
@@ -84,37 +87,33 @@ bool Config::load (const std::string& file)
|
|||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
void Config::createDefault (const std::string& file)
|
void Config::createDefault (const std::string& home)
|
||||||
{
|
{
|
||||||
if (confirm (
|
// Strip trailing slash off home directory, if necessary.
|
||||||
"A configuration file could not be found in "
|
std::string terminatedHome = home;
|
||||||
+ file
|
if (home[home.length () - 1] == '/')
|
||||||
+ "\n\n"
|
terminatedHome = home.substr (0, home.length () - 1);
|
||||||
+ "Would you like a sample .taskrc created, so task can proceed?"))
|
|
||||||
{
|
|
||||||
// Determine a path to the task directory.
|
|
||||||
std::string taskDir = "";
|
|
||||||
for (int i = file.length () - 1; i >= 0; --i)
|
|
||||||
{
|
|
||||||
if (file[i] == '/')
|
|
||||||
{
|
|
||||||
taskDir = file.substr (0, i) + "/.task";
|
|
||||||
if (-1 == access (taskDir.c_str (), F_OK))
|
|
||||||
mkdir (taskDir.c_str (), S_IRWXU);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (taskDir != "")
|
// Determine default names of init file and task directory.
|
||||||
|
std::string rcFile = terminatedHome + "/.taskrc";
|
||||||
|
std::string dataDir = terminatedHome + "/.task";;
|
||||||
|
|
||||||
|
// If rcFile is not found, offer to create one.
|
||||||
|
if (-1 == access (rcFile.c_str (), F_OK))
|
||||||
|
{
|
||||||
|
if (confirm (
|
||||||
|
"A configuration file could not be found in "
|
||||||
|
+ rcFile
|
||||||
|
+ "\n\n"
|
||||||
|
+ "Would you like a sample .taskrc created, so task can proceed?"))
|
||||||
{
|
{
|
||||||
// Create a sample .taskrc file.
|
// Create a sample .taskrc file.
|
||||||
FILE* out;
|
FILE* out;
|
||||||
if ((out = fopen (file.c_str (), "w")))
|
if ((out = fopen (rcFile.c_str (), "w")))
|
||||||
{
|
{
|
||||||
fprintf (out, "data.location=%s\n", taskDir.c_str ());
|
fprintf (out, "data.location=%s\n", dataDir.c_str ());
|
||||||
fprintf (out, "command.logging=off\n");
|
fprintf (out, "command.logging=off\n");
|
||||||
fprintf (out, "confirmation=yes\n");
|
fprintf (out, "confirmation=yes\n");
|
||||||
fprintf (out, "#nag=Note: try to stick to high priority tasks. See \"task next\".\n");
|
|
||||||
fprintf (out, "next=2\n");
|
fprintf (out, "next=2\n");
|
||||||
fprintf (out, "dateformat=m/d/Y\n");
|
fprintf (out, "dateformat=m/d/Y\n");
|
||||||
fprintf (out, "showage=yes\n");
|
fprintf (out, "showage=yes\n");
|
||||||
@@ -135,29 +134,20 @@ void Config::createDefault (const std::string& file)
|
|||||||
|
|
||||||
fclose (out);
|
fclose (out);
|
||||||
|
|
||||||
// Now set the live values.
|
|
||||||
set ("data.location", taskDir);
|
|
||||||
set ("command.logging", "off");
|
|
||||||
set ("confirmation", "yes");
|
|
||||||
set ("next", 1);
|
|
||||||
set ("dateformat", "m/d/Y");
|
|
||||||
set ("showage", "yes");
|
|
||||||
set ("monthsperline", 3);
|
|
||||||
set ("curses", "on");
|
|
||||||
set ("color", "on");
|
|
||||||
set ("color.overdue", "red");
|
|
||||||
set ("color.active", "cyan");
|
|
||||||
set ("color.tagged", "yellow");
|
|
||||||
|
|
||||||
std::cout << "Done." << std::endl;
|
std::cout << "Done." << std::endl;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this->load (rcFile);
|
||||||
|
|
||||||
|
if (-1 == access (dataDir.c_str (), F_OK))
|
||||||
|
mkdir (dataDir.c_str (), S_IRWXU);
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
// Return the configuration value given the specified key.
|
// Return the configuration value given the specified key.
|
||||||
const std::string& Config::get (const char* key)
|
const std::string Config::get (const char* key)
|
||||||
{
|
{
|
||||||
return this->get (std::string (key));
|
return this->get (std::string (key));
|
||||||
}
|
}
|
||||||
@@ -165,7 +155,7 @@ const std::string& Config::get (const char* key)
|
|||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
// Return the configuration value given the specified key. If a default_value
|
// Return the configuration value given the specified key. If a default_value
|
||||||
// is present, it will be the returned value in the event of a missing key.
|
// is present, it will be the returned value in the event of a missing key.
|
||||||
const std::string& Config::get (
|
const std::string Config::get (
|
||||||
const char* key,
|
const char* key,
|
||||||
const char* default_value)
|
const char* default_value)
|
||||||
{
|
{
|
||||||
@@ -174,7 +164,7 @@ const std::string& Config::get (
|
|||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
// Return the configuration value given the specified key.
|
// Return the configuration value given the specified key.
|
||||||
const std::string& Config::get (const std::string& key)
|
const std::string Config::get (const std::string& key)
|
||||||
{
|
{
|
||||||
return (*this)[key];
|
return (*this)[key];
|
||||||
}
|
}
|
||||||
@@ -182,7 +172,7 @@ const std::string& Config::get (const std::string& key)
|
|||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
// Return the configuration value given the specified key. If a default_value
|
// Return the configuration value given the specified key. If a default_value
|
||||||
// is present, it will be the returned value in the event of a missing key.
|
// is present, it will be the returned value in the event of a missing key.
|
||||||
const std::string& Config::get (
|
const std::string Config::get (
|
||||||
const std::string& key,
|
const std::string& key,
|
||||||
const std::string& default_value)
|
const std::string& default_value)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -40,10 +40,10 @@ public:
|
|||||||
bool load (const std::string&);
|
bool load (const std::string&);
|
||||||
void createDefault (const std::string&);
|
void createDefault (const std::string&);
|
||||||
|
|
||||||
const std::string& get (const char*);
|
const std::string get (const char*);
|
||||||
const std::string& get (const char*, const char*);
|
const std::string get (const char*, const char*);
|
||||||
const std::string& get (const std::string&);
|
const std::string get (const std::string&);
|
||||||
const std::string& get (const std::string&, const std::string&);
|
const std::string get (const std::string&, const std::string&);
|
||||||
bool get (const std::string&, bool);
|
bool get (const std::string&, bool);
|
||||||
int get (const std::string&, const int);
|
int get (const std::string&, const int);
|
||||||
double get (const std::string&, const double);
|
double get (const std::string&, const double);
|
||||||
|
|||||||
@@ -242,10 +242,9 @@ int main (int argc, char** argv)
|
|||||||
if (!pw)
|
if (!pw)
|
||||||
throw std::string ("Could not read home directory from passwd file.");
|
throw std::string ("Could not read home directory from passwd file.");
|
||||||
|
|
||||||
|
// Create a default config file and data directory if necessary.
|
||||||
std::string home = pw->pw_dir;
|
std::string home = pw->pw_dir;
|
||||||
home += "/.taskrc";
|
conf.createDefault (home);
|
||||||
if (!conf.load (home))
|
|
||||||
conf.createDefault (home);
|
|
||||||
|
|
||||||
TDB tdb;
|
TDB tdb;
|
||||||
tdb.dataDirectory (conf.get ("data.location"));
|
tdb.dataDirectory (conf.get ("data.location"));
|
||||||
|
|||||||
Reference in New Issue
Block a user