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.9" />
\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
122 <script type="text/javascript">
\r
124 var asciidoc = { // Namespace.
\r
126 /////////////////////////////////////////////////////////////////////
\r
127 // Table Of Contents generator
\r
128 /////////////////////////////////////////////////////////////////////
\r
130 /* Author: Mihai Bazon, September 2002
\r
131 * http://students.infoiasi.ro/~mishoo
\r
133 * Table Of Content generator
\r
136 * Feel free to use this script under the terms of the GNU General Public
\r
137 * License, as long as you do not remove or alter this notice.
\r
140 /* modified by Troy D. Hanson, September 2006. License: GPL */
\r
141 /* modified by Stuart Rackham, 2006, 2009. License: GPL */
\r
143 // toclevels = 1..4.
\r
144 toc: function (toclevels) {
\r
146 function getText(el) {
\r
148 for (var i = el.firstChild; i != null; i = i.nextSibling) {
\r
149 if (i.nodeType == 3 /* Node.TEXT_NODE */) // IE doesn't speak constants.
\r
151 else if (i.firstChild != null)
\r
152 text += getText(i);
\r
157 function TocEntry(el, text, toclevel) {
\r
160 this.toclevel = toclevel;
\r
163 function tocEntries(el, toclevels) {
\r
164 var result = new Array;
\r
165 var re = new RegExp('[hH]([1-'+(toclevels+1)+'])');
\r
166 // Function that scans the DOM tree for header elements (the DOM2
\r
167 // nodeIterator API would be a better technique but not supported by all
\r
169 var iterate = function (el) {
\r
170 for (var i = el.firstChild; i != null; i = i.nextSibling) {
\r
171 if (i.nodeType == 1 /* Node.ELEMENT_NODE */) {
\r
172 var mo = re.exec(i.tagName);
\r
173 if (mo && (i.getAttribute("class") || i.getAttribute("className")) != "float") {
\r
174 result[result.length] = new TocEntry(i, getText(i), mo[1]-1);
\r
184 var toc = document.getElementById("toc");
\r
189 // Delete existing TOC entries in case we're reloading the TOC.
\r
190 var tocEntriesToRemove = [];
\r
192 for (i = 0; i < toc.childNodes.length; i++) {
\r
193 var entry = toc.childNodes[i];
\r
194 if (entry.nodeName.toLowerCase() == 'div'
\r
195 && entry.getAttribute("class")
\r
196 && entry.getAttribute("class").match(/^toclevel/))
\r
197 tocEntriesToRemove.push(entry);
\r
199 for (i = 0; i < tocEntriesToRemove.length; i++) {
\r
200 toc.removeChild(tocEntriesToRemove[i]);
\r
203 // Rebuild TOC entries.
\r
204 var entries = tocEntries(document.getElementById("content"), toclevels);
\r
205 for (var i = 0; i < entries.length; ++i) {
\r
206 var entry = entries[i];
\r
207 if (entry.element.id == "")
\r
208 entry.element.id = "_toc_" + i;
\r
209 var a = document.createElement("a");
\r
210 a.href = "#" + entry.element.id;
\r
211 a.appendChild(document.createTextNode(entry.text));
\r
212 var div = document.createElement("div");
\r
213 div.appendChild(a);
\r
214 div.className = "toclevel" + entry.toclevel;
\r
215 toc.appendChild(div);
\r
217 if (entries.length == 0)
\r
218 toc.parentNode.removeChild(toc);
\r
222 /////////////////////////////////////////////////////////////////////
\r
223 // Footnotes generator
\r
224 /////////////////////////////////////////////////////////////////////
\r
226 /* Based on footnote generation code from:
\r
227 * http://www.brandspankingnew.net/archive/2005/07/format_footnote.html
\r
230 footnotes: function () {
\r
231 // Delete existing footnote entries in case we're reloading the footnodes.
\r
233 var noteholder = document.getElementById("footnotes");
\r
237 var entriesToRemove = [];
\r
238 for (i = 0; i < noteholder.childNodes.length; i++) {
\r
239 var entry = noteholder.childNodes[i];
\r
240 if (entry.nodeName.toLowerCase() == 'div' && entry.getAttribute("class") == "footnote")
\r
241 entriesToRemove.push(entry);
\r
243 for (i = 0; i < entriesToRemove.length; i++) {
\r
244 noteholder.removeChild(entriesToRemove[i]);
\r
247 // Rebuild footnote entries.
\r
248 var cont = document.getElementById("content");
\r
249 var spans = cont.getElementsByTagName("span");
\r
252 for (i=0; i<spans.length; i++) {
\r
253 if (spans[i].className == "footnote") {
\r
255 var note = spans[i].getAttribute("data-note");
\r
257 // Use [\s\S] in place of . so multi-line matches work.
\r
258 // Because JavaScript has no s (dotall) regex flag.
\r
259 note = spans[i].innerHTML.match(/\s*\[([\s\S]*)]\s*/)[1];
\r
260 spans[i].innerHTML =
\r
261 "[<a id='_footnoteref_" + n + "' href='#_footnote_" + n +
\r
262 "' title='View footnote' class='footnote'>" + n + "</a>]";
\r
263 spans[i].setAttribute("data-note", note);
\r
265 noteholder.innerHTML +=
\r
266 "<div class='footnote' id='_footnote_" + n + "'>" +
\r
267 "<a href='#_footnoteref_" + n + "' title='Return to text'>" +
\r
268 n + "</a>. " + note + "</div>";
\r
269 var id =spans[i].getAttribute("id");
\r
270 if (id != null) refs["#"+id] = n;
\r
274 noteholder.parentNode.removeChild(noteholder);
\r
276 // Process footnoterefs.
\r
277 for (i=0; i<spans.length; i++) {
\r
278 if (spans[i].className == "footnoteref") {
\r
279 var href = spans[i].getElementsByTagName("a")[0].getAttribute("href");
\r
280 href = href.match(/#.*/)[0]; // Because IE return full URL.
\r
282 spans[i].innerHTML =
\r
283 "[<a href='#_footnote_" + n +
\r
284 "' title='View footnote' class='footnote'>" + n + "</a>]";
\r
290 install: function(toclevels) {
\r
293 function reinstall() {
\r
294 asciidoc.footnotes();
\r
296 asciidoc.toc(toclevels);
\r
300 function reinstallAndRemoveTimer() {
\r
301 clearInterval(timerId);
\r
305 timerId = setInterval(reinstall, 500);
\r
306 if (document.addEventListener)
\r
307 document.addEventListener("DOMContentLoaded", reinstallAndRemoveTimer, false);
\r
309 window.onload = reinstallAndRemoveTimer;
\r
313 asciidoc.install(2);
\r
317 <body class="article">
\r
319 <h1>ptask README</h1>
\r
321 <div id="toctitle">Table of Contents</div>
322 <noscript><p><b>JavaScript must be enabled in your browser to display the table of contents.</b></p></noscript>
326 <div id="preamble">
\r
327 <div class="sectionbody">
\r
328 <div class="paragraph"><p><code>ptask</code> is a GTK+ graphical user interface for managing tasks.</p></div>
\r
329 <div class="paragraph"><p>It is based on <a href="http://taskwarrior.org">taskwarrior</a>, a well-known and robust command line
\r
330 tasks manager.</p></div>
\r
331 <div class="paragraph"><p>Unlike <code>taskwarrior</code>, it is possible to associate a note (long
\r
332 description) to each task.</p></div>
\r
333 <div class="paragraph"><p><code>ptask</code> is licensed under the GPLv2 terms and should compile on any
\r
334 modern GNU/Linux distribution.</p></div>
\r
337 <div class="sect1">
\r
338 <h2 id="_installation_on_ubuntu">1. Installation on Ubuntu</h2>
\r
339 <div class="sectionbody">
\r
340 <div class="paragraph"><p>To install <code>ptask</code> on Ubuntu and derivates, the easiest way is to use the dedicated PPA:</p></div>
\r
341 <div class="listingblock">
\r
342 <div class="content">
\r
343 <pre><code>sudo apt-add-repository ppa:jfi/ptask
\r
344 sudo apt-get update
\r
345 sudo apt-get install ptask</code></pre>
\r
347 <div class="paragraph"><p>The PPA <code>ppa:jfi/ptask</code> contains the binary package of the last
\r
348 released version of <code>ptask</code> for the last released version of Ubuntu.</p></div>
\r
349 <div class="paragraph"><p>The PPA <code>ppa:jfi/ptask-daily</code> contains the binary package of the last
\r
350 development snapshot. It should only be used for testing purpose.</p></div>
\r
353 <div class="sect1">
\r
354 <h2 id="_installation_from_source_archive">2. Installation from source archive</h2>
\r
355 <div class="sectionbody">
\r
356 <div class="paragraph"><p><code>ptask</code> can be compiled and installed on any modern GNU/Linux
\r
357 distribution.</p></div>
\r
358 <div class="sect2">
\r
359 <h3 id="_prerequisites">2.1. Prerequisites</h3>
\r
360 <div class="paragraph"><p>The compilation of <code>ptask</code> requires:</p></div>
\r
361 <div class="ulist"><ul>
\r
374 cppcheck (optional, static source checker)
\r
403 <div class="paragraph"><p>For Ubuntu 12.10:</p></div>
\r
404 <div class="listingblock">
\r
405 <div class="content">
\r
406 <pre><code>sudo apt-get install autoconf automake asciidoc cppcheck gcc gettext autopoint help2man libgtk-3-dev libjson0-dev make perl</code></pre>
\r
409 <div class="sect2">
\r
410 <h3 id="_download_sources">2.2. Download sources</h3>
\r
411 <div class="paragraph"><p>Download a source tarballs of a release and extracts its content:</p></div>
\r
412 <div class="listingblock">
\r
413 <div class="content">
\r
414 <pre><code>mkdir TMP_DIR
\r
416 wget http://wpitchoune.net/ptask/files/ptask-last.tar.gz
\r
417 tar -xzvf ptask-last.tar.gz
\r
418 cd ptask-*</code></pre>
\r
420 <div class="paragraph"><p>Alternatively, you can get the last development snapshot of the
\r
421 sources directly from the SVN source repository:</p></div>
\r
422 <div class="listingblock">
\r
423 <div class="content">
\r
424 <pre><code>mkdir TMP_DIR
\r
426 svn co http://wpitchoune.net/svnpub/ptask/trunk
\r
427 cd trunk</code></pre>
\r
430 <div class="sect2">
\r
431 <h3 id="_compilation">2.3. Compilation</h3>
\r
432 <div class="listingblock">
\r
433 <div class="content">
\r
434 <pre><code>./configure
\r
435 make clean all</code></pre>
\r
438 <div class="sect2">
\r
439 <h3 id="_installation">2.4. Installation</h3>
\r
440 <div class="listingblock">
\r
441 <div class="content">
\r
442 <pre><code>make install</code></pre>
\r
447 <div class="sect1">
\r
448 <h2 id="_resources">3. Resources</h2>
\r
449 <div class="sectionbody">
\r
450 <div class="ulist"><ul>
\r
453 <strong>Home page</strong>: <a href="http://wpitchoune.net/ptask">http://wpitchoune.net/ptask</a>.
\r
458 <strong>RSS feed</strong>: <a href="http://wpitchoune.net/blog/category/ptask/feed/">http://wpitchoune.net/blog/category/ptask/feed/</a>.
\r
463 <strong>Release changes</strong>: <a href="NEWS.html">NEWS</a>.
\r
468 <strong>Source tarballs</strong>: <a href="http://wpitchoune.net/ptask/files">http://wpitchoune.net/ptask/files</a>.
\r
473 <strong>Documentation</strong>: <a href="http://wpitchoune.net/ptask/doc">http://wpitchoune.net/ptask/doc</a>.
\r
479 <div class="sect1">
\r
480 <h2 id="_contact">4. Contact</h2>
\r
481 <div class="sectionbody">
\r
482 <div class="paragraph"><p>Bugs and comments can be sent to <a href="mailto:jeanfi@gmail.com">jeanfi@gmail.com</a>.</p></div>
\r
486 <div id="footnotes"><hr /></div>
\r
488 <div id="footer-text">
\r
489 Last updated 2014-04-18 11:02:21 CEST
\r