Giter Site home page Giter Site logo

gothenburgbitfactory / taskwarrior Goto Github PK

View Code? Open in Web Editor NEW
3.9K 57.0 267.0 35.65 MB

Taskwarrior - Command line Task Management

Home Page: https://taskwarrior.org

License: MIT License

CMake 0.63% Python 23.87% Perl 0.27% Shell 1.76% C++ 49.36% HTML 0.01% Rust 16.67% C 6.95% Makefile 0.01% Vim Script 0.43% Dockerfile 0.05%
taskwarrior task todo gtd cli commandline hackoctoberfest

taskwarrior's Introduction


GitHub Actions build status Release Release date GitHub Sponsors

Taskwarrior

OS-X downloads Github downloads Linux downloads

Taskwarrior is a command line task list management utility with a multitude of features, developed as a portable open source project with an active and quite vast ecosystem of tools, hooks and extensions.

Install

Arch Debian Fedora Homebrew Ubuntu

Taskwarrior is packaged on a wide range of Linux/Unix systems, Mac OS and Windows. Check out the latest available packages in repositories of your OS distribution of choice on Repology.

Alternatively, you can build Taskwarrior from source.

Documentation

The online documentation, downloads, news and more are available on our website, taskwarrior.org.

Community

Twitter Reddit Libera.chat Discord Github discussions

Taskwarrior has a lively community on many places on the internet.

Best place to ask questions is our discussions forum on Github. For other support options, take a look at taskwarrior.org/support

For code contributions, please use pull requests. See Contributing to Taskwarrior for more details.

Contributing

Contributors Milestone progress Good first issus

Your contributions are especially welcome. Whether it comes in the form of code patches, ideas, discussion, bug reports, encouragement or criticism, your input is needed. See further development documentation in doc/devel.

Sponsoring

GitHub Sponsors

Taskwarrior is a result of work of mostly small group of volunteers, and has been in development since 2006.

If you are a happy Taskwarrior user, please consider sponsoring us through Github Sponsors.

Every sponsorship matters, as it directly increases the number of hours core developers can contribute to the project and makes the project more sustainable.

License

Taskwarrior is released under the MIT license. For details check the LICENSE file.

taskwarrior's People

Contributors

danielmowitz avatar danielshahaf avatar dathanb avatar dbr avatar ddeimeke avatar dependabot[bot] avatar djmitche avatar doronbehar avatar elliot-forty-two avatar gahr avatar gravityvi avatar jschlatow avatar jwilk avatar kraai avatar mathstuf avatar mrossinek avatar neheb avatar nocejo avatar pbeckingham avatar pjf avatar ralphbean avatar recollir avatar rudis avatar ryneeverett avatar savchenko avatar smemsh avatar tbabej avatar tinloaf avatar unode avatar wbsch avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

taskwarrior's Issues

[EX-49] vim syntax file enhancement; tw-theme.vim

David Patrick on 2013-10-22T07:53:32Z says:

The more I learn about vim, the more I learn that anything is possible. This feature request (requiring some real "vimspertise") is to create a tw-theme.vim syntax file that will be used to theme taskwarrior.

The idea is simple enough (to describe) when editing both .taskrc and /usr/local/share/doc/rc/dark-burgundy-256.theme files, if any color directives {^color.*) terminate in a valid 256 color descriptor, they are then displayed in that color (combination)

With this syntax enhancements, just looking at a theme file, in full color, will be all you need to develop that theme.

[EX-23] helper command _colors

David Patrick on 2012-09-07T17:50:54Z says:

Yes, there are brilliant reports to be had under task colors, and before you ready ANY further, run the following in a terminal..

 $ task color

 $ task color legend

 $ task color red on white

no.. seriously, if you haven't seen the output of these commands, run them now.. I'll wait..

As you can see, a lot or work has already been been done in the color department, and this feature request seeks to extend that fine work with a couple of tools that will make a complex color themes easier to make and understand.

The special helper command should be dead-simple, similar to task color legend but displaying the available colors (all 256 or 16) monochromatic bands (no this-on-that), with columns for names and numeric values, in the style of other _helper commands, but way more colorful and a bit wider. This is a clear candidate for some external perl script, or something (see the attached file) but looking more like "color legend".

[ colorA ] = rgb### = color### = name (if any)
[ colorB ] = rgb### = color### = name (if any)

this handy color reference chart could be used to "hold up next to" other things on your screen, and with a quick grepping for a certain name or number would display just a band of just that color, and all of it's names.

% tw _colors |grep color123

The attached perl-script, colortest, is sort of the idea (the -r option is no longer working for me) but the sort of thing, available colors in order, not taskwarrior-specific, but showing all of the color-names/codes that taskwarrior can use.

[EX-52] Add a "failed" feature to mark tasks that couldn't be completed successfully

Michele Santullo on 2013-08-29T09:25:41Z says:

It would be nice to have a "failed" feature, as well as "canceled" possibly, to better log if and why a task was completed. "done" means it was completed, and as discussed on IRC annotations could do the job, but consider the following example:
I have to take a train to the beach tomorrow at 10:00 (task 1), then I have to go sunbathing at 16:00 (task 2) and call my friend there at 18:00 to agree on a bar we should meet at (task 3). Tasks 2 and 3 depend on 1. Sadly, I miss the train, so I'm unable to complete task 2 and it should be automatically marked as "canceled due to failed blocking task". However, task 3 should still be unblocked, as I still have to call my friend to tell him we can't meet anymore. I suggest something like this:

add take the train due:20130829-1000
add go sunbathing due:20130839-1600 depends:1s
add call my friend and agree on a bar to meet at depends:1 due:20130829-1800

The "s" in "depends:1s" stands for "strong", so taskwarrior would know that task 2 can't be done unless task 1 is completed successfully. Then as I miss the train I do:

1 failed

and I expect task 2 to be canceled with a reason "can't be done due to blocking task failure", and task 3 to be unblocked as usual. When I look for the completed tasks, it would be useful to clearly see at a glance that task 1 failed, task 2 was canceled and task 3 was done. Also, if possible I wouldn't abuse the annotations as they can become quite much in number, so while an annotation "failed" could do the trick somehow (or a tag even), it could still happen that you add annotations after a task was completed and the "failed" part would get lost in the lot.
Adding a reason to "done" could do the trick. One could mark a task as failed through "1 done failed", done with "1 done" and canceled with "1 done canceled", and even add a custom reason with "1 done reason my co-worker did it for me". I'm not sure custom reasons should be allowed, but it could be considered.

[EX-46] Web API to allow tasks being sent to Taskwarrior

Benjamin Weber on 2013-11-20T18:58:06Z says:

WHAT does the new feature mean or enable?
It enables visitors of a website to enter a task description into a web form. On execution of Taskwarrior it checks for new tasks in pipeline from the web form, asking the user either to accept or to reject the task.

WHICH new reports are required needed?
None.

WHO benefits from this feature?
The Taskwarrior user does not require to enter the task from an external source. Instead, the user is required to reject or accept the task (or modify it as per his wish). Optional: The creator of the task can subscribe to the task status: He may be notified of acceptance, rejection, change, start, stop, done status via RSS feed or email.

HOW does the feature interact with existing features?
A config file setting enables Taskwarrior to parse a given URL which contains the backlog of external task wishes on execution. The user is required to accept or reject each task listed in this file. Thus, it is a distinct feature which may call the mod command. It may increase the code rucksack significantly and should therefore be considered as a plugin.

HOW does the feature retain the simplicity and efficiency of the core features?
It's a plugin.

HOW can I make others realize they cannot live without it?
Code it, test it, experience it.

Is my feature any more than just a built-in UDA?
Yes: It connects a web form to taskwarrior with feedback cycle on the specific task status.

[EX-24] freemind plug-in

David Patrick on 2009-05-30T16:34:39Z says:

This plug-in constrains freemind to mappable attributes. The mindmap hierchy is tranlated to a hiercy of dependent tasks.
I can neither spell nor properly pronounce hi er ar key,
but I've made some doozies.

[EX-7] task backup [ filename.tar [ .gz ] ]

David Patrick on 2011-09-11T16:41:19Z says:

"Back up your files before playing with alphas" says Frederico, and he's right!

so alls we have to do is to make a copy of pending.data and completed.data .. and the .taskrc of course.
and we want to keep our installed plugins.. and included themes.. and holiday files maybe.. and .. ?

This proposed new command would do all of that in one fell swoop.
Without options supplied, the command would create a tar archive called task.backup..tar,
and with options might be named task.backup...tar.gz

this is obviously targeted at the lazy, error-prone linux users amongst us

[EX-56] design journal.txt format

David Patrick on 2009-06-22T12:00:12Z says:

the journal is a cross between a personal diary and a human readable task history file that users can add to and modify. Unlike the other .data files, the journal should have a .txt suffix (to enable more universal edit access) but the header can contain the clues for vim syntax.
date separators should be generated, but only for time periods with activity (eg. only one day break per day, and only for days that have an entry, same applies to weeks or months) because of these breaks, automatically generated items will not need to contain this info.
Automatically generated entries (like tasks completed, deleted etc) should be grouped, compact and properly syntax-highlighted and also support syntax-based folding)
Each entry type should contain a searchable element, except for user generated free-form content.

[EX-33] dtask - a directory-based mode for developers and sysadmins

David Patrick on 2011-01-04T15:34:26Z says:

Not to be confused with taskd, dtask (or devtask) would be an iteration of taskwarrior that worked in a very directory-specific way, starting with pwd and walking all the way down the directory branches, collecting pending.data files. Unless directed otherwise, newly created tasks would be created in a pending.data file in the pwd, newly created, if necessary.

The mode is very much a tip-of-the-hat towards devtodo (http://swapoff.org/DevTodo) yet another task manager, but more targetted towards sysadmins and software developers. The directory-centric behavior allows task to be directly connected, located amongst, the source-files and settings. If your work is around these things, it can help you focus on specific parts of it merely by cd ing to the directory in question before issuing the query.

I would suggest a new executable name (while invoking the same code) as the behaviors and work modes of task vs. dtask would be quite different.

(not my idea, or even new, just remembered hearing it in discussion)

NOTE: this function now available as an External Script at http://taskwarrior.org/projects/taskwarrior/wiki/ExternalScripts#local-tasksh and so status:closed

[EX-11] IF <condition> THEN <action> for new task defaults

David Patrick on 2010-12-14T14:52:14Z says:

Taskwarrior users can already assign default values for newly created tasks.
Default project, priority or tag (I think) are assigned with a simple line in .taskrc

default.project=foo

But in day-to-day use I would almost never use these settings, I just don't have many values that are universally true for all new tasks.
What I would use would be defaults for new tasks that were based on a simple boolean logic test.

default.if.tag.has=home.then.pri=M
default.if.tag.has=TV.then.pri=L
default.if.desc.startswith=call.then.+(at)phone,pri=H

The psudo-syntax used for this example is hideous, but I hope that it is enough to convey this simple but powerful new feature idea. If flexibly implemented, this could streamline personal taskwarrior use, cutting major keystrokes and filling in a lot of the tedious but useful blanks along the way.

see also: http://taskwarrior.org/boards/6/topics/show/977#message-979

[EX-45] contacts support

David Patrick on 2009-07-07T01:22:15Z says:

with full set of contact related attributes, contact related interactive display, mixed task/ contact listings and a "contact" alias for the CLI.

see: [[contacts]]

[EX-6] can "task add" use getline() to get the rest of the task?

Victor Roetman on 2012-04-19T07:45:30Z says:

I don't like having to worry about escaping things like parenthesis and quotes when typing in tasks, but line editing is not working in task shell.

Would it be possible to add functionality so that when I type

task add

it will ask for the rest of the description with something like getline? Maybe like this:

$task add
Description:

and it will wait for my input.
Then the full session could look something like:

$task add
Description: I didn't have to escape any of this (I just typed it in) +useful
Created task 45.
$

[EX-54] Add archived tasks

Andra๏ฟฝ Levstik on 2010-11-16T04:49:34Z says:

hmm would it be possible to add an archive command and archived list...
something like: task archive YYYY-MM-DD would archive all tasks up to that date
task archive YYYY-MM-DD YYYY2-MM2-DD2 would archive all tasks between those two
maybe even allow to archive only some project
i.e. I have all work related things start with work.something
reason is I need to input all those tasks into a time reporting tool at the end of the week/month/whenever... and task completed lists them so I can put them in but once they are in I don't need or want to see them in completed

[EX-51] Drag'n Drop dependency interface

Benjamin Weber on 2014-05-27T16:52:58Z says:

22:45 < mono_1> Hi, I improved a script that graphically maps out task dependencies using graphviz, it maps dependencies       left to right, uses color codes for blocked, done, waiting, etc, http://pastebin.com/9EyvEL0M  , the original script is       somewhere online but didn't really work so well for me, this is python and needs graphviz
22:52 < mono_1> example output (from a complicated set of dependencies) here  http://imgur.com/zipAg
23:47 < pbeckingham> mono_1:  That's great!
23:59 < mono_1> glad you noticed it, if I ever get time, I will do a point&click interface for drag&drop dependencies be      cause in text mode it can get pretty intensive if you modify them a lot
00:41 < mono_1> the script I posted on pastebin, you can do whatever you want with it, it's an improvement on this one (that doesn't really work, prints out uuids) https://gist.github.com/2769821

[EX-18] task repositories

Peter De Poorter on 2011-01-30T03:58:02Z says:

Definition:

   a task repository is a predefined task list.

Goal:

   to be able to re-use task lists:

    * for repeating activities
    * from other users

Allows very fast task building based on previous experiences
Everyone can create a task repository

Usage examples
*  a task repository for documenting all tasks that are required to install ubuntu. This can be used as base for every user
  that's installing a new ubuntu version
*  a task repository for documenting all tasks that are required to build a new house
*  an ICT company with different technology departments. Each department maintains his task repository.
*  a task repository for storing all the tasks required for releasing taskwarrior :-) 

A project is build by copying specific tasks from the different task repositories

task create repos:
task repos
    shows the available repositories
task switch repos:
    switch to repos .
    x becomes the active task repository on which all the known task commands can be used
task list repos:
    list all the tasks in the repository 
task copy repos: proj: 
    copies the proj: tasks from repos: to the active repository
task upload repos:
    uploads the repository to a place (on the internet)
    a central place on the internet could be used for the storage of all task repositories
task download repos:
task connect repos:
task disconnect repos:

See also: http://taskwarrior.org/boards/6/topics/show/1017

[EX-29] *.method.conf add-ins

David Patrick on 2011-01-01T16:41:45Z says:

Is taskwarrior a GTD-centric app ? Can it be used with Steven Coveys "Seven Habits" ? or deBonos "lateral thinking" ?
Can taskwarrior be used in a strict Work Breakdown structure ? or as a full-on software development, bug-tracking environment ?

The answer should be "yes"
and with upcoming User-defined attributes, and scriptability galore, taskwarriors ability to take on a new mode of task management, should be made as easy as pie.

If the core of taskwarrior was method agnostic, catering to the simplest task-list-making users with no methodology other than keeping really good lists.
GTD ? that's a methodology add-on. a gtd.method.conf file that defines new attributes, reserves a set of special-tags, defines a new set of reports, extends the urgency algorithm, adds color-rules, Review scripts, has included chatty verbosity elements, if(condition)then(action) rules, all as normal .rc settings in an !included file. Then taskwarrior will be "GTD compliant", but there's nothing stopping you from also including the software_developer.method.conf file too. etc.

see also: http://taskwarrior.org/boards/6/topics/1065

[EX-22] shell mode extension and enhancement

David Patrick on 2009-07-14T00:05:40Z says:

if I type

task add

I get an error message "Cannot add a task that is blank, or contains or characters."
Considering the stealthy new shell mode, wouldn't it be swell if what actually happened was that task went into "shell add" mode.

task add>

so that I could just type

make pizza +na
mow lawn du:weekend
bay bills pri:h
get a haircut +grooming

until I tire of rapid-fire data entry, and type "quit"

the shell command could be extended to include other commands such as

task shell ls

task ls> - in this mode, just hit enter to see the output of "task ls"
and anything typed in is used as filter upon hitting , allowing a rapid series of filtered lists with almost no syntax construction. just

or, to restrict the focus to just one project, for example;

task shell long proj:foo

Enter filter string
Use "quit" or ctrl-c to leave shell mode
task long project:foo>

or if you have a lot of appending to do;

task append

(which could, depending on user preference, trigger auto-shell, due to absence of required attributes)
resulting in;

Enter ID and text to append
Use "quit" to leave shell mode
task append>

or when working up a longish list of closely related tasks, this is rapid-fire entry mode;

task shell add due:07/21/2010 wait:06/21/2010 proj:camping +gear pre:pack

Use "quit" to leave shell mode
task add project:camping +gear due:07/21/2010 wait:06/21.2010 pack>

so that you can just type

tent [enter] sleeping bags [enter] stove [enter] food [enter] bug stuff [enter] tools [enter] radio [enter]

and a

pack tent due:07/21/2010 wait:06/21.2010 project:camping +gear

will be created for each item

this will save more keystrokes than ANYTHING!

This behavior should be considered as (optional) default whenever a command that expects attributes, doesn't get them. It brings the CLI behavior closer to planned interactive usage, too.

[EX-44] Dependency chains

Arkady Grudzinsky on 2012-05-08T00:27:13Z says:

I discussed this 6 months ago here

http://taskwarrior.org/boards/6/topics/1910#message-1918

Seemed to get some positive feedback. Has this suggestion materialized?

To remind, the suggestion was to create a "chain" command to create dependency chains of existing tasks:

$ task 100,101,102,103,104 chain

would be an equivalent of issuing 4 commands:

$ task 101 dep:100
$ task 102 dep:101
$ task 103 dep:102
$ task 104 dep:104

[EX-26] journal

David Patrick on 2009-07-15T14:49:29Z says:

Somewhere between log-file and personal diary, the journal will become an essential tool.
From the command line, you will be able to jump right into editing the journal with your fave text editor, just by entering "task -j" (same as "task journal" same as "vi ~/.task/files/journal.task) and at any time you will be able to append text with "task journal mytext".

see: [[journal]]

[EX-21] ledger integration

David Patrick on 2009-07-07T00:58:43Z says:

Tight integration will ledger (http://wiki.github.com/jwiegley/ledger) exposing all features to the interactive shell and allowing cross referencing ledger entries with tasks and contacts. While this is deep integration, we should do it without forking ledger, and while leaving ledger CLI usage unchanged.

[EX-53] task ask

David Patrick on 2012-08-21T00:09:48Z says:

task ask is a command designed to trigger prompts for values of specified variables (usually attribute values).
This feature presumes a number of things, including a fully functional twshell.
It uses a file variables.conf as a source for related prompt text and twshell action.

When used in place of task add, "ask" will behave like "add", but will also force prompts for specified values.
It's also desirable to use ask with a behaviour like mod, so that it could define and ask for values accordingly.
I'm using task ask mod for following examples as though it would parse :-) .

Prompts will also be generated without the use of "ask" when any write command catches a record in the that has an attribute:?.
That way unanswered questions will be asked at every opportunity, as a regular part of most write commands. This will help ensure that missing information will get filled in ASAP.

This is also an opportunity to assign a sort of "non-value" for attributes during regular handling.
attribute:? = attribute:"needs an answer, but I don't have a good one yet, please ask me later".

When invoking task ask, whether or not a specific field(s) is indicated, makes a difference.
If you do indicate a field(s) to ask about (pri:?) then the ask command will assume those are the only fields to ask about.
If ask is used but no :? fields are specified in the command, then task ask will assume that you want to be prompted for every attribute not provided in-line.

values provided on the same command line won't be asked for, and get ready for a set of prompts, where you can put in a value or just to leave it blank or leave the default value in place. You can also enter a "?" to be asked later.

(this is an ugly example)

 % tw ask proj:fishing +travel +rent book hovercraft due:\? sched:\? wait:\? until:\?

When does this have to be done by?
due:

When can you actually start doing it?
sched:

When would you like to start being reminded about this task ?
wait:

If not completed, when can this task be deleted?
until:

What priority? (if any) L, M or H?
pri:

etc.

even if you wind up hitting and end up with just the values you first entered, for those who want most of the blanks filled in, and those who forget what blanks there are to fill in, task ask might be an answer.

[EX-40] review script

David Patrick on 2009-07-15T14:31:45Z says:

Straight-on task-doing, starting with the most important/urget things first, is what taskwarrior is about, along with the massive stress reduction that comes from knowing you're not forgetting anything, HOWEVER, if all of your focus is at the top of your lists, then it's still possible for some tasks (those with no date, or project, or tags etc.) to slip through the cracks.
The review script will take the user through a comprehensive set of house-cleaning actions, from looking for stragglers, to identifying problem tasks, to repair of broken tasks.

see: [[review]]
"Forums ยป development & feature ideas ยป GTD Review":http://taskwarrior.org/boards/6/topics/show/1085
"Forums ยป development & feature ideas ยป Implement task review":http://taskwarrior.org/boards/6/topics/2021
"task_review-1.0, First release of task-review script by Nikola Petrov":http://code.google.com/p/taskwarrior-utils/downloads/list (needs updating for 2.0 syntax)

[EX-1] Geo fencing

Benjamin Weber on 2012-12-19T15:07:21Z says:

Geo fencing uses the proximity to the location where you are to let you know which actions can only be done in this context.
It is in dev for the app Things (Mac).
According to GTD "four-criteria model for choosing actions in the moment" (cf. [1]) context is much more important than priority. Following this, why tw offers a property for prio with an extensive algorithm - which in fact makes only sense from the user's perspective if she knows how it works - and not a property of context.

Yes, the tagging would work for basic geo fencing. But real geofencing should deploy the device's locating capabilites (cf. [2]).
I am thinking of a command (at)here@ which tells me what to do in a range up to 3 km, ordered by proximity.

[1] http://pespmc1.vub.ac.be/Papers/GTD-cognition.pdf
[2] http://apple.stackexchange.com/questions/60152/is-there-a-way-to-access-a-macs-geolocation-from-terminal

[EX-41] GIT plug-in

David Patrick on 2009-07-07T14:31:28Z says:

another version control system

task dependency not stored correctly after task server sync

I have task warrior client running on machines A, B and C, and one task server running on client B.
A is my personal laptop,
B is a raspberry pi running 24/7
C is my android phone with taskwarrior app (from google playstore).

When I first setup the clients A and B, I (mistakenly) ran command task sync init on both client A and B (I should have run only on client A). I followed pbeckingham irc recommendations (2018/01/31 at 3:54PM):

  1. backup the data on all clients
  2. delete tx.data on the server
  3. from client A, run "task sync init"
  4. from client B, delete ~/.task/*.data - this is safe because you made a backup
  5. from client B run 'task sync'
  6. repeat steps 4 and 5 for client C
    end

At this point I could run on client A task blocking or task blocked and see blocking and blocked tasks. But on client B the dependency is not reported correctly and no tasks were reported blocked or blocking.

On client C (android app) I did not use it that much to look at blocking/blocked tasks, I can see the various tasks

here are the outputs of task diag on client A and B.

client A: task diag

task 2.5.0
   Platform: Linux

Compiler
    Version: 5.3.1 20160216
       Caps: +stdc +stdc_hosted +LP64 +c8 +i32 +l64 +vp64 +time_t64
 Compliance: C++11

Build Features
      CMake: 3.2.2
    libuuid: libuuid + uuid_unparse_lower
  libgnutls: 3.4.9
 Build type: None

Configuration
       File: /home/nicolas/.taskrc (found), 1673 bytes, mode 100664
       Data: /home/nicolas/.task (found), dir, mode 40775
    Locking: Enabled
         GC: Enabled
     Server: 192.168.0.34:53589
         CA: /home/nicolas/.task/ca.cert.pem, readable, 3557 bytes
      Trust: ignore hostname
Certificate: /home/nicolas/.task/nicolas.cert.pem, readable, 3553 bytes
        Key: /home/nicolas/.task/nicolas.key.pem, readable, 25303 bytes
    Ciphers: NORMAL
      Creds: juco/Nicolas VINCENT/************************************

Hooks
    Scripts: Enabled
             (-none-)

Tests
      $TERM: xterm (275x73)
       Dups: Scanned 16 tasks for duplicate UUIDs:
             No duplicates found
client B: task diag
task 2.5.1
   Platform: Linux

Compiler
    Version: 6.3.0 20170205
       Caps: +stdc +stdc_hosted +c8 +i32 +l32 +vp32 +time_t32
 Compliance: C++11

Build Features
      CMake: 3.7.2
    libuuid: libuuid + uuid_unparse_lower
  libgnutls: 3.5.8
 Build type: None

Configuration
       File: /home/pi/.taskrc (found), 1658 bytes, mode 100644
       Data: /home/pi/.task (found), dir, mode 40755
    Locking: Enabled
         GC: Enabled
     Server: 192.168.0.34:53589
         CA: /home/pi/.task/ca.cert.pem, readable, 3557 bytes
      Trust: ignore hostname
Certificate: /home/pi/.task/nicolas.cert.pem, readable, 3553 bytes
        Key: /home/pi/.task/nicolas.key.pem, readable, 25303 bytes
    Ciphers: NORMAL
      Creds: juco/Nicolas VINCENT/************************************

Hooks
     System: Enabled
   Location: /home/pi/.task/hooks
             (-none-)

Tests
      $TERM: screen (322x76)
       Dups: Scanned 10 tasks for duplicate UUIDs:
             No duplicates found
 Broken ref: Scanned 10 tasks for broken references:
             Task 28b2162b-2bf7-479e-897d-6604189bcc7f depends on nonexistent task: ["44d2cb0c-e13f-45af-a36b-c755e7971f6c"]
             Task d2a336c9-c552-46b4-86ee-f157fc7c1e1d depends on nonexistent task: ["0fd6d085-30d7-48cb-8f13-af49bde0c339"
             Task d2a336c9-c552-46b4-86ee-f157fc7c1e1d depends on nonexistent task: "28b2162b-2bf7-479e-897d-6604189bcc7f"]
             Task 7eb701c6-5f50-4ec5-bb99-ed46de5d946f depends on nonexistent task: ["1e7348f1-de46-4c04-9688-4fdd41b7ea3d"
             Task 7eb701c6-5f50-4ec5-bb99-ed46de5d946f depends on nonexistent task: "ec578082-7d09-4e32-b179-0617c2fa3847"]
             Task cb0f8c6a-4cc8-4b97-b262-e5821eb0fd08 depends on nonexistent task: ["88ee008a-1fd9-487c-a805-084ed0cf7de9"]

I looked at pending.data on client A and B, and on client B I have some weird escaping stuff:

...
[depends:"&open;\"44d2cb0c-e13f-45af-a36b-c755e7971f6c\"&close;" description:"migrate git repos from cubalibre to gitolite" entry:"1516804643" modified:"1516804643" project:"IT" status:"pending" uuid:"28b2162b-2bf7-479e-897d-6604189bcc7f"]
...

where on client A I don't have them:

...
[depends:"44d2cb0c-e13f-45af-a36b-c755e7971f6c" description:"migrate git repos from cubalibre to gitolite" entry:"1516804643" modified:"1516804643" project:"IT" status:"pending" uuid:"28b2162b-2bf7-479e-897d-6604189bcc7f"]
...

[EX-36] tasktutor

David Patrick on 2011-05-04T14:06:01Z says:

A new mode for new taskwarrior users.
Just as vim has vimtutor, task should have a mode where new users can quickly learn the fundamentals, both of taskwarrior and of task-list management best-practices.
It should use a disposable sandbox rc and data set, and scripted action that walks the user through task usage step-by-step.
If arranged in sub-sections, users could go directly to that section in order to brush up on how it works. eg.

% tasktutor colors

[EX-48] task extras [ update | list | install | uninstall | search | show | upgrade ]

David Patrick on 2012-07-24T21:54:54Z says:

Taskwarrior has an ever expanding set of add-ons and external script goodness, it's almost hard to keep track. Some are more mature than others, and a few could be considered "must-haves", for some users.

We're maintaining a dedicated page to list them (see the External Scripts tab above ?) but many taskwarrior users are not going to even try them, as each one has to be researched and installed and used in a different way.

So here's an idea; for those scripts we know and like and trust, maybe we maintain a debian repo and piggyback some dpkg wizardry (we're all using debian variants, right?) or even just proper use of makefiles, to make discovering, installing and removing some of these extras, easier.

the first thing would be local and repository list management, without re-inventing it. then,

% tw extras

would list the associated extensions that were installed, with descriptions.

% tw extras update

would query the repo and download version info updates to a local list.

% tw extras list

would display a list of all available extensions, with installed extras and version gaps highlighted.

% tw extras install < extension >

would do just that, and

% tw extras uninstall < extension >

would do the opposite,

% tw extras search < term >

like apt-cache search, searches full index of titles, descriptions and notes, and lists matching extensions.

% tw extras show < extension >

like apt-cache show, displays version, description and notes for < extension >

% tw extras upgrade [extension]

upgrades the extension to the current version,
or if run without [extension], upgrades all installed extensions, and tw itself, to the current version.

[EX-15] Support 'random' command

Paul Beckingham on 2009-05-25T21:35:41Z says:

Support random command to display a random task. Like pulling a task out of a hat.

David J. Patrick

recurring event completed, no new instances created

To report a bug...

  • What command(s) did you run?
    I did complete a recurring task (eb5dbdbd)
  • What did you expect to happen?

I expected that the task would be marked as completed as well as that the new instances of recurring task are created.

  • What actually happened?

The task's status changed to completed and no new instances were created.

  • Paste the output of the task diag command.
$ task diag

task 2.5.1
   Platform: Linux

Compiler
    Version: 7.1.1 20170718 (Red Hat 7.1.1-6)
       Caps: +stdc +stdc_hosted +LP64 +c8 +i32 +l64 +vp64 +time_t64
 Compliance: C++11

Build Features
      Built: Aug  5 2017 00:01:30
      CMake: 3.9.0
    libuuid: libuuid + uuid_unparse_lower
  libgnutls: 3.5.14
 Build type: 

Configuration
       File: /home/gour/.taskrc (found), 2535 bytes, mode 100644
       Data: /home/gour/task (found), dir, mode 40755
    Locking: Enabled
         GC: Enabled
  rc.editor: /usr/bin/vim
     Server: atmarama.dtdns.net:6544
         CA: /home//gour/task/ca.cert.pem, readable, 3720 bytes
      Trust: strict
Certificate: /home/gour/task/gour.cert.pem, readable, 3710 bytes
        Key: /home/gour/task/gour.key.pem, readable, 24745 bytes
    Ciphers: NORMAL
      Creds: Atmarama/gour/************************************

Hooks
     System: Enabled
   Location: /home/gour/task/hooks
     Active: on-add-pirate    (executable)
             on-modify-pirate (executable)
   Inactive: 

Tests
      $TERM: xterm-256color (324x64)
       Dups: Scanned 5388 tasks for duplicate UUIDs:
             No duplicates found
 Broken ref: Scanned 5388 tasks for broken references:
             No broken references found

Here is the 'info' output in regard to the task involved:

tasksh> eb5dbdbd info
[task eb5dbdbd info]

Name          Value                               
ID            -
Description   zalijevanje Arjune                  
Status        Completed
Project       home.duties                         
Recurrence    3days
Parent task   4d534d7e-bf0c-4dbc-94bc-89258ae8b157
Mask Index    18.000000
Entered       2018-01-29 10:54:09 (10d)           
Due           2018-02-01 10:00:00
End           2018-01-31 19:42:45                 
Last modified 2018-01-31 19:42:46 (7d)
Virtual tags  CHILD COMPLETED UNBLOCKED PROJECT   
UUID          eb5dbdbd-864d-475b-bf8e-193760a3c89d
Urgency       13.05                               

    project      1 *    1 =      1
    due          1 *   12 =     12
    age      0.027 *    2 =  0.055
                            ------
                             13.05

Date                Modification                                 
2018-01-31 19:42:46 End set to '2018-01-31 19:42:45'.
                    Status changed from 'pending' to 'completed'.

and here is the 'info' about the parent task (4d534d7e):

tasksh> 4d534d7e info
[task 4d534d7e info]

Name          Value                               
ID            107
Description   zalijevanje Arjune                  
Status        Recurring
Project       home.duties                         
Recurrence    3days
Mask          +++++++++++++++++++++-              
Entered       2017-12-09 08:52:58 (8w)
Due           2017-12-09 10:00:00                 
Last modified 2018-02-07 16:14:51 (21h)
Virtual tags  PARENT UNBLOCKED PROJECT            
UUID          4d534d7e-bf0c-4dbc-94bc-89258ae8b157
Urgency       13.33                               

    project      1 *    1 =      1
    due          1 *   12 =     12
    age      0.167 *    2 =  0.334
                            ------
                             13.33

Date                Modification                                                           
2017-12-09 08:53:23 Project set to 'home.duties'.
                    Recur set to '3days'.
                    Status changed from 'pending' to 'recurring'.
2017-12-09 08:53:28 Mask set to '-'.                                                       
2017-12-09 10:52:20 Mask changed from '-' to '--'.
2017-12-09 15:37:45 Mask changed from '--' to '+-'.                                        
2017-12-12 10:21:56 Mask changed from '+-' to '+--'.
2017-12-12 12:33:36 Mask changed from '+--' to '++-'.                                      
2017-12-15 14:03:18 Mask changed from '++-' to '++--'.
2017-12-16 12:29:20 Mask changed from '++--' to '+++-'.                                    
2017-12-18 10:08:37 Mask changed from '+++-' to '+++--'.
2017-12-18 13:31:13 Mask changed from '+++--' to '++++-'.                                  
2017-12-21 10:01:09 Mask changed from '++++-' to '++++--'.
2017-12-21 11:34:49 Mask changed from '++++--' to '+++++-'.                                
2017-12-24 10:36:44 Mask changed from '+++++-' to '++++++'.
2017-12-24 10:36:46 Mask changed from '++++++' to '++++++-'.                               
2017-12-27 10:37:37 Mask changed from '++++++-' to '++++++--'.
2017-12-28 21:07:50 Mask changed from '++++++--' to '+++++++-'.                            
2017-12-30 09:10:15 Mask changed from '+++++++-' to '++++++++'.
2017-12-30 10:44:21 Mask changed from '++++++++' to '++++++++-'.                           
2018-01-02 10:05:24 Mask changed from '++++++++-' to '++++++++--'.
2018-01-02 12:41:32 Mask changed from '++++++++--' to '+++++++++-'.                        
2018-01-05 10:07:28 Mask changed from '+++++++++-' to '+++++++++--'.
2018-01-06 16:19:11 Mask changed from '+++++++++--' to '++++++++++-'.                      
2018-01-08 10:16:13 Mask changed from '++++++++++-' to '++++++++++--'.
2018-01-08 10:40:36 Mask changed from '++++++++++--' to '+++++++++++-'.                    
2018-01-11 10:15:02 Mask changed from '+++++++++++-' to '+++++++++++--'.
2018-01-12 22:24:51 Mask changed from '+++++++++++--' to '++++++++++++-'.                  
2018-01-14 10:30:10 Mask changed from '++++++++++++-' to '++++++++++++--'.
2018-01-14 20:19:12 Mask changed from '++++++++++++--' to '+++++++++++++-'.                
2018-01-17 10:44:44 Mask changed from '+++++++++++++-' to '+++++++++++++--'.
2018-01-17 13:46:20 Mask changed from '+++++++++++++--' to '++++++++++++++-'.              
2018-01-20 15:57:02 Mask changed from '++++++++++++++-' to '++++++++++++++--'.
2018-01-20 21:16:27 Mask changed from '++++++++++++++--' to '+++++++++++++++-'.            
2018-01-23 10:10:28 Mask changed from '+++++++++++++++-' to '+++++++++++++++--'.
2018-01-23 10:13:56 Mask changed from '+++++++++++++++--' to '++++++++++++++++-'.          
2018-01-26 10:09:18 Mask changed from '++++++++++++++++-' to '++++++++++++++++--'.
2018-01-26 10:11:15 Mask changed from '++++++++++++++++--' to '+++++++++++++++++-'.        
2018-01-29 10:54:10 Mask changed from '+++++++++++++++++-' to '+++++++++++++++++--'.
2018-01-29 12:01:57 Mask changed from '+++++++++++++++++--' to '++++++++++++++++++-'.      
2018-01-31 19:42:46 Mask changed from '++++++++++++++++++-' to '+++++++++++++++++++'.
2018-02-01 10:43:00 Mask changed from '+++++++++++++++++++' to '+++++++++++++++++++-'.     
2018-02-04 10:28:54 Mask changed from '+++++++++++++++++++-' to '+++++++++++++++++++--'.
2018-02-04 10:39:04 Mask changed from '+++++++++++++++++++--' to '++++++++++++++++++++-'.  
2018-02-07 10:24:55 Mask changed from '++++++++++++++++++++-' to '++++++++++++++++++++--'.
2018-02-07 16:14:51 Mask changed from '++++++++++++++++++++--' to '+++++++++++++++++++++-'.

so I wonder if you can detect something suspicious?

[EX-43] gtd, the daemon

David Patrick on 2012-09-02T16:25:35Z says:

NOTE: this is probably one of the most far-fetched, long-term loopy/ evil ideas I've posted yet. For your amusement :)

The name "gtd" in this case is a recursive acronym that stands for GetThingsDone TM Daemon, and it's ultimate goal is to have an always-on process that manages taskd and cron and notifications and monitors system processes and resources.
As though you were combining David Allen(tm?)s brain with Steven Coveys, and that of a ZenHabits monk, it taking over your computer and driving you inexorably towards the very next most important step.

Like a super-daemon, driven by a productivity algorithm (coined) that could compare a personal task-load (coined) with a computers resources, and when neither the user nor the CPU are "cranking widgets", then gtd (the GetThingsDone TM Daemon) will grab the system notification and tell you what you're doing next.. clock ticking.. let's GO!.

To be expounded upon:

[EX-55] task <filter> move <file>

David Patrick on 2010-09-27T22:05:06Z says:

One of taskwarriors strengths is that one can keep separate .data files, and switch between them with

% task rc:< path-to-alternate-file >

but if one wants to move some tasks from one file to another, that's a different story.
Although .data files are just text files, and some adept editing could do the job,
wouldn't it be swell to have a command to do just that ?
like

% task move proj:feng-shui ~/.task/personal-enlightenment.pending.data

huh? wouldn't it ?

[EX-17] goal-setting script

David Patrick on 2009-07-15T13:20:16Z says:

We all know how important it is to set goals for yourself, but for many people it's the hardest thing.
Happily, methods have been established to make this easier, without re-inventing the process, and this action script will ask all the right questions, and put all the answers in all the right places.

The diag command crashes if a hook script is a broken symlink

The diag command tries to determine execute permission on a broken symlink and this crashes. This may require a libshared/src/FS.cpp change, or at a minimum just the diag command.

Reproduce with:

$ cd ~/.task/hooks/
$ ln -s /missing on-add.missing
$ task diag

[EX-47] API for OTRS

Benjamin Weber on 2014-03-03T20:00:14Z says:

What [1] is for JIRA, Taskwarrior could orchestrate with Taskserver for OTRS [2]: a CLI for an existing web service. The user can adopt UDAs [3] and urgency coefficients [4].

A command line interface for a non-command line enterprise system.

Confer attached illustration.

[1] http://qissuescli.com
[2] http://www.otrs.com/solutions/integrate-otrs/
[3] http://taskwarrior.org/docs/udas.html
[4] http://taskwarrior.org/docs/best-practices.html#how

[EX-50] User Definable Special Tags

David Patrick on 2013-09-11T06:32:46Z says:

Some tags are more special than others, see man taskrc for more details on +nocolor, +nonag, +nocal and +next.

This feature is a way for user to define special-tag-groups in .taskrc, and then to access that list with an associated helper-command.

that way, with this

    udst.context.type=string
    udst.context.values=car,truck,store,home,work,bus,garage,phone,printer,laptop
and maybe
    color.udst.context=on green
    urgency.udst.context.coefficient=8

a special-tag is born!

how do we know?

run the task tags command and see if they're highlighted, or run the automatically-created helper-command;

task _context

will produce a terse list of existing tags that match at least one of the set,
and that's all that context-aware scripts need to tell which tags belong to the context-special-tag-group.

The best part about this arrangement, is that it imposes no changes in tag-handling behavior before or after spacial-tags are defined,
adding and removing context-tags is exactly like regular tags; easy!

One (of many) difference between a UDA and a UDST is that the udst.context.values= part does not constrain any values, just defines the group, and auto-creates the helper-command. Defining a special-tag does not create a new attribute like udas, but groups existing tags.

Interestingly, there's no reason sets of special-tags couldn't overlap, with some tags in more than one group.

[EX-30] helper command _characters

David Patrick on 2012-09-07T17:38:11Z says:

The _characters helper command follows the behaviour of the other helper-commands, and produces a very long output of every available character, including extended characters, as displayable by your current console font-set.

The long (grep-able) list is of

characterA = code = key-combination (if any)
characterB = code = key-combination (if any)

so that extended characters could be adopted for regular use.

This feature could be made even more useful if those characters that were of special meaning to your $DEFAULT-SHELL were highlighted, so that you could be confident that the characters you choose for your indicators, tags and shell-scripts, won't conflict with the shell on your system, whatever that is.

[EX-31] unix shell prompt with task#1

David Patrick on 2012-02-08T00:51:21Z says:

This is an enhancement to your every-day *nix shell prompt, that should be called the you-can-run-but-you-can-not-hide add-on.

We all like to customise our shell prompts a bit, maybe editing .bashrc with the date and full directories and such, we'll I think it would be fun and effective to have taskwarrior integrated into my command prompt!

That's right, every time I start a new shell I think it would be good to add a line with

[tiny tw logo] (like task logo, but much smaller) and the SINGLE HIGHEST URGENCY TASK
djp(at)lemur ~ $

maybe full details, maybe just the description.
It would not only re-enforce the most urgent thing on my list, but will more frequently remind me to review my taskwarrior list.

So if you like playing with that sort of thing, please figure this out and tell us how :-)

[EX-9] twcron

David Patrick on 2012-09-01T00:57:57Z says:

This is an iteration of taskwarrior that interfaces with the cron sub-system of a *nix computer.

From Wikipedia (http://en.wikipedia.org/wiki/Cron) cron is the time-based job scheduler in Unix-like computer operating systems. cron enables users to schedule jobs (commands or shell scripts) to run periodically at certain times or dates.

there is actually surprising crossover between a task, and a cron event, although cron uses far fewer fields.
Interfacing with cron events, the crontab file, and understanding what's going to happen when, is an interesting exercise requiring precise syntax and this feature seeks to make managing cron events as easy as using taskwarrior.

twcron would use cron-related system files as data files, would present cron, anacron, at and batch jobs as tasks, with the ability to perform complex queries, create custom reports and make modifications to cron events, just like taskwarrior tasks, but with a limited set of parameters, and within the constraints of those events.

Having twcron interface the cron sub-system would make it easier to understand and control *nix system events, and it introduces the possibility of "regular" taskwarrior triggering or being triggered by system events.

A most interesting question would be: how might this interface with libtaskd ?
http://tasktools.org/projects/taskd.html

[EX-16] holidays.reports=full

David Patrick on 2011-01-04T12:52:10Z says:

A suggested rc setting that allows included holidays to appear with the "general population" in any report.
options; full sparse or none

[EX-37] productivity rewards

David Patrick on 2009-12-04T07:52:13Z says:

Task will already nag; "Is that all ya got ?" (or whatever you chooses to prod yourself with) but in the same spirit, task could be taught to let you give yourself rewards for certain arbitrary levels of productivity.

Let's say you decide that you want to complete at least ten tasks a day, and that at least four of those have to be High priority.

If you could define your goals in the .taskrc, something like

.### daily productivity rewards
reward.day.4=pri:h
reward.day.6=pri.any:
reward.day.message=Congratulations! You've reached todays productivity targets! Play 1/2 hour of video games guilt-free!
reward.week.12=pri:h
reward.week.20=pri.any:
reward.week.6=proj:baz
reward.week.message=You are a mighty Taskwarrior! Make reservations for 2 at Chez Louis!

you could goad yourself to greatness.

[EX-3] Forked and updated graphdeps.py

John Brickley on 2013-04-17T21:29:47Z says:

I found mono_1's graphdeps.py script very helpful, but was bothered by a few things about it, so forked it and put up a repository at http://github.com/shushcat/taskgv

Changes which others may find useful include display of visually distinct tag and project nodes along with corrected arrow directions to better indicate dependency direction and inclusion.

If anyone would like to contribute, I'd be happy to work with you on making this tool more widely useful.

[EX-34] Display task usage tips

Paul Beckingham on 2009-05-25T21:31:53Z says:

New 'tip' command that randomly pulls tip strings from a file.
Needs a large file of tips.
Should use the 'fortune' file format.

[EX-28] movie.method plug-in

David Patrick on 2013-01-09T03:32:18Z says:

This is an idea for a specialized use of taskwarrior, in the scheduling of movie production, scene-by-scene, tracking locations, characters, props, etc, which is really just a gigantic task-list.
The traditional tool, used since the days of Cecil B. DeMille, was and is a "stripboard".

Imported image

see: http://en.wikipedia.org/wiki/Production_strip
or http://www.homefilmschool.com/2008/10/shooting-schedule.html
in-depth: http://www.solutioneers.net/cinema/preproduction.htm

With a great-big set of UDAs, using established color-rules, a set of custom reports, taskwarrior would make an excellent production-scheduling tool, fast and flexible. Task management, movie-style.
It would be an excellent example of the versatility of UDAs, plug-in.method architecture, virtual-tags, and task syncing capabilities.

any programmer/ filmmakers out there? I think so too.

[EX-39] GTD 'review' functionality

Paul Beckingham on 2012-07-22T03:53:31Z says:

Now that UDAs are here, it is possible to define a new date, called 'review'. Then an external script could run through all the pending tasks, updating 'review' as it goes. Perhaps it would call (at)task < IDs > edit@.

This issue is a placeholder for a discussion about how this should be done.

UPDATE:

We are closer than we think..

In recent discussions.. mostly between me and me.. and Paul, the whole post-2.x landscape is coming into focus.
A lot of work went into taskwarrior to give it capabilities to do cool stuff,
now it's time to do cool stuff.

I'm going to use the "review process" to illustrate how a number of features-in-development might/can/will be used to review. In the process I hope to illustrate how a few of these future-features will work in concert. There are (positive) usage implications from all angles, good stuff coming down the pipe.

To start with, let's set aside the old term "review script" in favour of the term "review process", this because the action of this-thing-after-that-thing will be easily accomplished with (upcoming?) new internal functions and behaviours, specifically (# ) command separators "++". The "internal pipe" that will allow the construction of complex sequences, including random shell execution calls. The ability to "chain" arbitrary, complex task queries interspersed with arbitrary shell commands (mostly echo and cat) obviates the need for an external review "script" in python or perl or anything else. Layer-after-layer of abstraction, a "review", a complex report, and most other things boil down to a "simple" alias call, like review-week-by-project.

The heavy-lifting of the interactivity will be carried by a combination of task ask (#1079) %variables (#1073) and VIRTUALS, (http://taskwarrior.org/boards/6/topics/2414) which will jump onto centre stage as everybodys favourite way to do everything.

The following stack is worthy of a flow-chart, and I will make one when I can, but with it I will try to indicate the levels of abstraction and the degrees of subtlety available to us, in creating a review. Perhaps amusingly, this description will not include the full GTD-specific ramifications, that's a subsequent layer ;-)

so a typical task review process (and most other complex functions) might consist of

* full set of core attributes
* unlimited User Defined Attributes
* rich set of attribute modifiers (attmods)
* full use of regex logic If AND OR GALORE (available at every (?) following step)

   wrapped in

      Complex strings of VIRTUALS; vfilters, vconfigs and vmods, 
      condensing arbitrary-length conditional logic statements and complex modification-sets
      into a set of deceptively simple, modal terms like +DUE, +HOME and +READY.

         wrapped in

            arbitrary-length compound-command strings delimited by "++", allowing any number of 
            task commands and/or shell-calls (echo and cat, etc) to be issued sequentially, 
            accumulating the output into a final result.

               wrapped in

                   command aliases that take the hairiest of that, and calls it by 
                   something logical and easy to remember, like *review-goals*

and you have a stack of layers of abstraction limited only by your imagination.

The stack above is by no means the only way these features could be combined, and in every-day use, different features will be combined at different layers, but this is sort of the conceptual stack I would suggest for us to design complex features around.

... in progress

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.