added ptask
[www.git] / www / ptask / doc / 0.0.4 / index.html
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
4 <head>\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
9 body {\r
10     background: #FFFFFF;\r
11     color: #333333;\r
12     font-family: Ubuntu,Arial,sans-serif;\r
13     line-height: 1.6;\r
14     font-weight: lighter;\r
15     margin: 1em 2em 2em 2em;\r
16     padding: 0 0 0 0;\r
17 }\r
18 \r
19 h1 {\r
20     font-size: 2.813em;\r
21     margin: 0 0 0.267em 0;\r
22     padding: 0 0 0 0;\r
23     font-weight: normal;\r
24 }\r
25 \r
26 h2 {\r
27     font-size: 2em;\r
28     margin: 0 0 0.375em;\r
29     padding: 0 0 0 0;\r
30     font-weight: normal;\r
31 }\r
32 \r
33 h3 {\r
34     font-size: 1.438em;\r
35     margin: 0 0 0.522em;\r
36     padding: 0 0 0 0;\r
37     font-weight: normal;\r
38 }\r
39 \r
40 h4 {\r
41     font-size: 1.219em;\r
42     margin: 0 0 0.615em;\r
43     padding: 0 0 0 0;\r
44     font-weight: normal;\r
45 }\r
46 \r
47 h5 {\r
48     font-size: 1em;\r
49     margin: 0 0 0.75em;\r
50     padding: 0 0 0 0;\r
51     font-weight: bold;\r
52 }\r
53 \r
54 h6 {\r
55     font-weight: normal;\r
56     font-size: 0.813em;\r
57     letter-spacing: 0.1em;\r
58     margin: 0 0 0.923em;\r
59     text-transform: uppercase;\r
60     padding: 0 0 0 0;\r
61 }\r
62 \r
63 li {\r
64     margin: 0 0 0 1em;\r
65     line-height: 1.6;\r
66 }\r
67 \r
68 li p {\r
69     margin: 0 0 0 0;\r
70 }\r
71 \r
72 ul {\r
73     margin: 0 0 0 0;\r
74     padding: 0 0 0 0;\r
75 }\r
76 \r
77 a:link, a:visited {\r
78     color: #19B6EE;\r
79     text-decoration: none;\r
80 }\r
81 \r
82 a:hover {\r
83     text-decoration: underline;\r
84 }\r
85 \r
86 code, pre, tt {\r
87     font-family: "Ubuntu Mono","Courier New",Courier,monospace;\r
88     font-weight: normal;\r
89     color: #333333;\r
90 }\r
91 \r
92 pre {\r
93     background: none repeat scroll 0 0 #e0e0e0;\r
94     border-radius: 4px;\r
95     padding: 0.5em 0.5em;\r
96     margin: 0 0 0 0;\r
97     white-space: pre-wrap;\r
98     word-wrap: break-word;\r
99 }\r
100 \r
101 /* ASCIIDOC */\r
102 \r
103 div.toclevel2 {\r
104     margin-left: 1em;\r
105 }\r
106 \r
107 #toctitle {\r
108     font-size: 1.219em;\r
109     margin: 0 0 0.615em;\r
110     padding: 0 0 0 0;\r
111     font-weight: normal;\r
112 }\r
113 \r
114 #footer {\r
115     margin: 2em 0 0 0;\r
116     font-size: 0.8em;\r
117     font-weight: lighter;\r
118 }\r
119 </style>\r
120 <script type="text/javascript">\r
121 /*<![CDATA[*/\r
122 var asciidoc = {  // Namespace.\r
123 \r
124 /////////////////////////////////////////////////////////////////////\r
125 // Table Of Contents generator\r
126 /////////////////////////////////////////////////////////////////////\r
127 \r
128 /* Author: Mihai Bazon, September 2002\r
129  * http://students.infoiasi.ro/~mishoo\r
130  *\r
131  * Table Of Content generator\r
132  * Version: 0.4\r
133  *\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
136  */\r
137 \r
138  /* modified by Troy D. Hanson, September 2006. License: GPL */\r
139  /* modified by Stuart Rackham, 2006, 2009. License: GPL */\r
140 \r
141 // toclevels = 1..4.\r
142 toc: function (toclevels) {\r
143 \r
144   function getText(el) {\r
145     var text = "";\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
148         text += i.data;\r
149       else if (i.firstChild != null)\r
150         text += getText(i);\r
151     }\r
152     return text;\r
153   }\r
154 \r
155   function TocEntry(el, text, toclevel) {\r
156     this.element = el;\r
157     this.text = text;\r
158     this.toclevel = toclevel;\r
159   }\r
160 \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
166     // browsers).\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
173           }\r
174           iterate(i);\r
175         }\r
176       }\r
177     }\r
178     iterate(el);\r
179     return result;\r
180   }\r
181 \r
182   var toc = document.getElementById("toc");\r
183   if (!toc) {\r
184     return;\r
185   }\r
186 \r
187   // Delete existing TOC entries in case we're reloading the TOC.\r
188   var tocEntriesToRemove = [];\r
189   var i;\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
196   }\r
197   for (i = 0; i < tocEntriesToRemove.length; i++) {\r
198     toc.removeChild(tocEntriesToRemove[i]);\r
199   }\r
200 \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
214   }\r
215   if (entries.length == 0)\r
216     toc.parentNode.removeChild(toc);\r
217 },\r
218 \r
219 \r
220 /////////////////////////////////////////////////////////////////////\r
221 // Footnotes generator\r
222 /////////////////////////////////////////////////////////////////////\r
223 \r
224 /* Based on footnote generation code from:\r
225  * http://www.brandspankingnew.net/archive/2005/07/format_footnote.html\r
226  */\r
227 \r
228 footnotes: function () {\r
229   // Delete existing footnote entries in case we're reloading the footnodes.\r
230   var i;\r
231   var noteholder = document.getElementById("footnotes");\r
232   if (!noteholder) {\r
233     return;\r
234   }\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
240   }\r
241   for (i = 0; i < entriesToRemove.length; i++) {\r
242     noteholder.removeChild(entriesToRemove[i]);\r
243   }\r
244 \r
245   // Rebuild footnote entries.\r
246   var cont = document.getElementById("content");\r
247   var spans = cont.getElementsByTagName("span");\r
248   var refs = {};\r
249   var n = 0;\r
250   for (i=0; i<spans.length; i++) {\r
251     if (spans[i].className == "footnote") {\r
252       n++;\r
253       var note = spans[i].getAttribute("data-note");\r
254       if (!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
262       }\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
269     }\r
270   }\r
271   if (n == 0)\r
272     noteholder.parentNode.removeChild(noteholder);\r
273   else {\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
279         n = refs[href];\r
280         spans[i].innerHTML =\r
281           "[<a href='#_footnote_" + n +\r
282           "' title='View footnote' class='footnote'>" + n + "</a>]";\r
283       }\r
284     }\r
285   }\r
286 },\r
287 \r
288 install: function(toclevels) {\r
289   var timerId;\r
290 \r
291   function reinstall() {\r
292     asciidoc.footnotes();\r
293     if (toclevels) {\r
294       asciidoc.toc(toclevels);\r
295     }\r
296   }\r
297 \r
298   function reinstallAndRemoveTimer() {\r
299     clearInterval(timerId);\r
300     reinstall();\r
301   }\r
302 \r
303   timerId = setInterval(reinstall, 500);\r
304   if (document.addEventListener)\r
305     document.addEventListener("DOMContentLoaded", reinstallAndRemoveTimer, false);\r
306   else\r
307     window.onload = reinstallAndRemoveTimer;\r
308 }\r
309 \r
310 }\r
311 asciidoc.install(2);\r
312 /*]]>*/\r
313 </script>\r
314 </head>\r
315 <body class="article">\r
316 <div id="header">\r
317 <h1>ptask README</h1>\r
318 <div id="toc">
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>
321 </div>\r
322 </div>\r
323 <div id="content">\r
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
333 </div>\r
334 </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
344 </div></div>\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
349 </div>\r
350 </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
360 <li>\r
361 <p>\r
362 asciidoc\r
363 </p>\r
364 </li>\r
365 <li>\r
366 <p>\r
367 autotools\r
368 </p>\r
369 </li>\r
370 <li>\r
371 <p>\r
372 cppcheck (optional, static source checker)\r
373 </p>\r
374 </li>\r
375 <li>\r
376 <p>\r
377 gcc\r
378 </p>\r
379 </li>\r
380 <li>\r
381 <p>\r
382 help2man\r
383 </p>\r
384 </li>\r
385 <li>\r
386 <p>\r
387 library gtk3\r
388 </p>\r
389 </li>\r
390 <li>\r
391 <p>\r
392 library json-c\r
393 </p>\r
394 </li>\r
395 <li>\r
396 <p>\r
397 make\r
398 </p>\r
399 </li>\r
400 </ul></div>\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
405 </div></div>\r
406 </div>\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
413 cd 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
417 </div></div>\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
423 cd TMP_DIR\r
424 svn co http://wpitchoune.net/svnpub/ptask/trunk\r
425 cd trunk</tt></pre>\r
426 </div></div>\r
427 </div>\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
434 </div></div>\r
435 </div>\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
441 </div></div>\r
442 </div>\r
443 </div>\r
444 </div>\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
449 <li>\r
450 <p>\r
451 <strong>Home page</strong>: <a href="http://wpitchoune.net/ptask">http://wpitchoune.net/ptask</a>.\r
452 </p>\r
453 </li>\r
454 <li>\r
455 <p>\r
456 <strong>RSS feed</strong>: <a href="http://wpitchoune.net/blog/category/ptask/feed/">http://wpitchoune.net/blog/category/ptask/feed/</a>.\r
457 </p>\r
458 </li>\r
459 <li>\r
460 <p>\r
461 <strong>Release changes</strong>: <a href="NEWS.html">NEWS</a>.\r
462 </p>\r
463 </li>\r
464 <li>\r
465 <p>\r
466 <strong>Source tarballs</strong>: <a href="http://wpitchoune.net/ptask/files">http://wpitchoune.net/ptask/files</a>.\r
467 </p>\r
468 </li>\r
469 <li>\r
470 <p>\r
471 <strong>Documentation</strong>: <a href="http://wpitchoune.net/ptask/doc">http://wpitchoune.net/ptask/doc</a>.\r
472 </p>\r
473 </li>\r
474 </ul></div>\r
475 </div>\r
476 </div>\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
481 </div>\r
482 </div>\r
483 </div>\r
484 <div id="footnotes"><hr /></div>\r
485 <div id="footer">\r
486 <div id="footer-text">\r
487 Last updated 2013-12-01 17:39:17 CET\r
488 </div>\r
489 </div>\r
490 </body>\r
491 </html>\r