1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
\r
2 "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
\r
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
\r
5 <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />
\r
6 <meta name="generator" content="AsciiDoc 8.6.7" />
\r
7 <title>ptask README</title>
\r
8 <style type="text/css">
\r
10 background: #FFFFFF;
\r
12 font-family: Ubuntu,Arial,sans-serif;
\r
14 font-weight: lighter;
\r
15 margin: 1em 2em 2em 2em;
\r
21 margin: 0 0 0.267em 0;
\r
23 font-weight: normal;
\r
28 margin: 0 0 0.375em;
\r
30 font-weight: normal;
\r
35 margin: 0 0 0.522em;
\r
37 font-weight: normal;
\r
42 margin: 0 0 0.615em;
\r
44 font-weight: normal;
\r
55 font-weight: normal;
\r
57 letter-spacing: 0.1em;
\r
58 margin: 0 0 0.923em;
\r
59 text-transform: uppercase;
\r
79 text-decoration: none;
\r
83 text-decoration: underline;
\r
87 font-family: "Ubuntu Mono","Courier New",Courier,monospace;
\r
88 font-weight: normal;
\r
93 background: none repeat scroll 0 0 #e0e0e0;
\r
95 padding: 0.5em 0.5em;
\r
97 white-space: pre-wrap;
\r
98 word-wrap: break-word;
\r
108 font-size: 1.219em;
\r
109 margin: 0 0 0.615em;
\r
111 font-weight: normal;
\r
117 font-weight: lighter;
\r
120 <script type="text/javascript">
\r
122 var asciidoc = { // Namespace.
\r
124 /////////////////////////////////////////////////////////////////////
\r
125 // Table Of Contents generator
\r
126 /////////////////////////////////////////////////////////////////////
\r
128 /* Author: Mihai Bazon, September 2002
\r
129 * http://students.infoiasi.ro/~mishoo
\r
131 * Table Of Content generator
\r
134 * Feel free to use this script under the terms of the GNU General Public
\r
135 * License, as long as you do not remove or alter this notice.
\r
138 /* modified by Troy D. Hanson, September 2006. License: GPL */
\r
139 /* modified by Stuart Rackham, 2006, 2009. License: GPL */
\r
141 // toclevels = 1..4.
\r
142 toc: function (toclevels) {
\r
144 function getText(el) {
\r
146 for (var i = el.firstChild; i != null; i = i.nextSibling) {
\r
147 if (i.nodeType == 3 /* Node.TEXT_NODE */) // IE doesn't speak constants.
\r
149 else if (i.firstChild != null)
\r
150 text += getText(i);
\r
155 function TocEntry(el, text, toclevel) {
\r
158 this.toclevel = toclevel;
\r
161 function tocEntries(el, toclevels) {
\r
162 var result = new Array;
\r
163 var re = new RegExp('[hH]([1-'+(toclevels+1)+'])');
\r
164 // Function that scans the DOM tree for header elements (the DOM2
\r
165 // nodeIterator API would be a better technique but not supported by all
\r
167 var iterate = function (el) {
\r
168 for (var i = el.firstChild; i != null; i = i.nextSibling) {
\r
169 if (i.nodeType == 1 /* Node.ELEMENT_NODE */) {
\r
170 var mo = re.exec(i.tagName);
\r
171 if (mo && (i.getAttribute("class") || i.getAttribute("className")) != "float") {
\r
172 result[result.length] = new TocEntry(i, getText(i), mo[1]-1);
\r
182 var toc = document.getElementById("toc");
\r
187 // Delete existing TOC entries in case we're reloading the TOC.
\r
188 var tocEntriesToRemove = [];
\r
190 for (i = 0; i < toc.childNodes.length; i++) {
\r
191 var entry = toc.childNodes[i];
\r
192 if (entry.nodeName.toLowerCase() == 'div'
\r
193 && entry.getAttribute("class")
\r
194 && entry.getAttribute("class").match(/^toclevel/))
\r
195 tocEntriesToRemove.push(entry);
\r
197 for (i = 0; i < tocEntriesToRemove.length; i++) {
\r
198 toc.removeChild(tocEntriesToRemove[i]);
\r
201 // Rebuild TOC entries.
\r
202 var entries = tocEntries(document.getElementById("content"), toclevels);
\r
203 for (var i = 0; i < entries.length; ++i) {
\r
204 var entry = entries[i];
\r
205 if (entry.element.id == "")
\r
206 entry.element.id = "_toc_" + i;
\r
207 var a = document.createElement("a");
\r
208 a.href = "#" + entry.element.id;
\r
209 a.appendChild(document.createTextNode(entry.text));
\r
210 var div = document.createElement("div");
\r
211 div.appendChild(a);
\r
212 div.className = "toclevel" + entry.toclevel;
\r
213 toc.appendChild(div);
\r
215 if (entries.length == 0)
\r
216 toc.parentNode.removeChild(toc);
\r
220 /////////////////////////////////////////////////////////////////////
\r
221 // Footnotes generator
\r
222 /////////////////////////////////////////////////////////////////////
\r
224 /* Based on footnote generation code from:
\r
225 * http://www.brandspankingnew.net/archive/2005/07/format_footnote.html
\r
228 footnotes: function () {
\r
229 // Delete existing footnote entries in case we're reloading the footnodes.
\r
231 var noteholder = document.getElementById("footnotes");
\r
235 var entriesToRemove = [];
\r
236 for (i = 0; i < noteholder.childNodes.length; i++) {
\r
237 var entry = noteholder.childNodes[i];
\r
238 if (entry.nodeName.toLowerCase() == 'div' && entry.getAttribute("class") == "footnote")
\r
239 entriesToRemove.push(entry);
\r
241 for (i = 0; i < entriesToRemove.length; i++) {
\r
242 noteholder.removeChild(entriesToRemove[i]);
\r
245 // Rebuild footnote entries.
\r
246 var cont = document.getElementById("content");
\r
247 var spans = cont.getElementsByTagName("span");
\r
250 for (i=0; i<spans.length; i++) {
\r
251 if (spans[i].className == "footnote") {
\r
253 var note = spans[i].getAttribute("data-note");
\r
255 // Use [\s\S] in place of . so multi-line matches work.
\r
256 // Because JavaScript has no s (dotall) regex flag.
\r
257 note = spans[i].innerHTML.match(/\s*\[([\s\S]*)]\s*/)[1];
\r
258 spans[i].innerHTML =
\r
259 "[<a id='_footnoteref_" + n + "' href='#_footnote_" + n +
\r
260 "' title='View footnote' class='footnote'>" + n + "</a>]";
\r
261 spans[i].setAttribute("data-note", note);
\r
263 noteholder.innerHTML +=
\r
264 "<div class='footnote' id='_footnote_" + n + "'>" +
\r
265 "<a href='#_footnoteref_" + n + "' title='Return to text'>" +
\r
266 n + "</a>. " + note + "</div>";
\r
267 var id =spans[i].getAttribute("id");
\r
268 if (id != null) refs["#"+id] = n;
\r
272 noteholder.parentNode.removeChild(noteholder);
\r
274 // Process footnoterefs.
\r
275 for (i=0; i<spans.length; i++) {
\r
276 if (spans[i].className == "footnoteref") {
\r
277 var href = spans[i].getElementsByTagName("a")[0].getAttribute("href");
\r
278 href = href.match(/#.*/)[0]; // Because IE return full URL.
\r
280 spans[i].innerHTML =
\r
281 "[<a href='#_footnote_" + n +
\r
282 "' title='View footnote' class='footnote'>" + n + "</a>]";
\r
288 install: function(toclevels) {
\r
291 function reinstall() {
\r
292 asciidoc.footnotes();
\r
294 asciidoc.toc(toclevels);
\r
298 function reinstallAndRemoveTimer() {
\r
299 clearInterval(timerId);
\r
303 timerId = setInterval(reinstall, 500);
\r
304 if (document.addEventListener)
\r
305 document.addEventListener("DOMContentLoaded", reinstallAndRemoveTimer, false);
\r
307 window.onload = reinstallAndRemoveTimer;
\r
311 asciidoc.install(2);
\r
315 <body class="article">
\r
317 <h1>ptask README</h1>
\r
319 <div id="toctitle">Table of Contents</div>
320 <noscript><p><b>JavaScript must be enabled in your browser to display the table of contents.</b></p></noscript>
324 <div id="preamble">
\r
325 <div class="sectionbody">
\r
326 <div class="paragraph"><p><tt>ptask</tt> is a GTK+ graphical user interface for managing tasks.</p></div>
\r
327 <div class="paragraph"><p>It is based on <a href="http://taskwarrior.org">taskwarrior</a>, a well-known and robust command line
\r
328 tasks manager.</p></div>
\r
329 <div class="paragraph"><p>Unlike <tt>taskwarrior</tt>, it is possible to associate a note (long
\r
330 description) to each task.</p></div>
\r
331 <div class="paragraph"><p><tt>ptask</tt> is licensed under the GPLv2 terms and should compile on any
\r
332 modern GNU/Linux distribution.</p></div>
\r
335 <div class="sect1">
\r
336 <h2 id="_installation_on_ubuntu">1. Installation on Ubuntu</h2>
\r
337 <div class="sectionbody">
\r
338 <div class="paragraph"><p>To install <tt>ptask</tt> on Ubuntu and derivates, the easiest way is to use the dedicated PPA:</p></div>
\r
339 <div class="listingblock">
\r
340 <div class="content">
\r
341 <pre><tt>sudo apt-add-repository ppa:jfi/ptask
\r
342 sudo apt-get update
\r
343 sudo apt-get install ptask</tt></pre>
\r
345 <div class="paragraph"><p>The PPA <tt>ppa:jfi/ptask</tt> contains the binary package of the last
\r
346 released version of <tt>ptask</tt> for the last released version of Ubuntu.</p></div>
\r
347 <div class="paragraph"><p>The PPA <tt>ppa:jfi/ptask-daily</tt> contains the binary package of the last
\r
348 development snapshot. It should only be used for testing purpose.</p></div>
\r
351 <div class="sect1">
\r
352 <h2 id="_installation_from_source_archive">2. Installation from source archive</h2>
\r
353 <div class="sectionbody">
\r
354 <div class="paragraph"><p><tt>ptask</tt> can be compiled and installed on any modern GNU/Linux
\r
355 distribution.</p></div>
\r
356 <div class="sect2">
\r
357 <h3 id="_prerequisites">2.1. Prerequisites</h3>
\r
358 <div class="paragraph"><p>The compilation of <tt>ptask</tt> requires:</p></div>
\r
359 <div class="ulist"><ul>
\r
372 cppcheck (optional, static source checker)
\r
401 <div class="paragraph"><p>For Ubuntu 12.10:</p></div>
\r
402 <div class="listingblock">
\r
403 <div class="content">
\r
404 <pre><tt>sudo apt-get install autoconf automake asciidoc cppcheck gcc gettext autopoint help2man libgtk-3-dev libjson0-dev make perl</tt></pre>
\r
407 <div class="sect2">
\r
408 <h3 id="_download_sources">2.2. Download sources</h3>
\r
409 <div class="paragraph"><p>Download a source tarballs of a release and extracts its content:</p></div>
\r
410 <div class="listingblock">
\r
411 <div class="content">
\r
412 <pre><tt>mkdir TMP_DIR
\r
414 wget http://wpitchoune.net/ptask/files/ptask-last.tar.gz
\r
415 tar -xzvf ptask-last.tar.gz
\r
416 cd ptask-*</tt></pre>
\r
418 <div class="paragraph"><p>Alternatively, you can get the last development snapshot of the
\r
419 sources directly from the SVN source repository:</p></div>
\r
420 <div class="listingblock">
\r
421 <div class="content">
\r
422 <pre><tt>mkdir TMP_DIR
\r
424 svn co http://wpitchoune.net/svnpub/ptask/trunk
\r
425 cd trunk</tt></pre>
\r
428 <div class="sect2">
\r
429 <h3 id="_compilation">2.3. Compilation</h3>
\r
430 <div class="listingblock">
\r
431 <div class="content">
\r
432 <pre><tt>./configure
\r
433 make clean all</tt></pre>
\r
436 <div class="sect2">
\r
437 <h3 id="_installation">2.4. Installation</h3>
\r
438 <div class="listingblock">
\r
439 <div class="content">
\r
440 <pre><tt>make install</tt></pre>
\r
445 <div class="sect1">
\r
446 <h2 id="_resources">3. Resources</h2>
\r
447 <div class="sectionbody">
\r
448 <div class="ulist"><ul>
\r
451 <strong>Home page</strong>: <a href="http://wpitchoune.net/ptask">http://wpitchoune.net/ptask</a>.
\r
456 <strong>RSS feed</strong>: <a href="http://wpitchoune.net/blog/category/ptask/feed/">http://wpitchoune.net/blog/category/ptask/feed/</a>.
\r
461 <strong>Release changes</strong>: <a href="NEWS.html">NEWS</a>.
\r
466 <strong>Source tarballs</strong>: <a href="http://wpitchoune.net/ptask/files">http://wpitchoune.net/ptask/files</a>.
\r
471 <strong>Documentation</strong>: <a href="http://wpitchoune.net/ptask/doc">http://wpitchoune.net/ptask/doc</a>.
\r
477 <div class="sect1">
\r
478 <h2 id="_contact">4. Contact</h2>
\r
479 <div class="sectionbody">
\r
480 <div class="paragraph"><p>Bugs and comments can be sent to <a href="mailto:jeanfi@gmail.com">jeanfi@gmail.com</a>.</p></div>
\r
484 <div id="footnotes"><hr /></div>
\r
486 <div id="footer-text">
\r
487 Last updated 2013-12-01 17:39:17 CET
\r