Giter Club home page Giter Club logo

taskwiki's Introduction

Taskwiki

Proper project management in vim. Standing on the shoulders of vimwiki and Taskwarrior

GitHub Actions build status Coverage Status Code Health Chat with developers

     a         |_   _|_ _ ___| | _\ \      / (_) | _(_)         a         ~
command-line     | |/ _` / __| |/ /\ \ /\ / /| | |/ / |   personal wiki   ~
 todo list       | | (_| \__ \   <  \ V  V / | |   <| |      for vim      ~
                 |_|\__,_|___/_|\_\  \_/\_/  |_|_|\_\_|                   ~

Installation

Make sure you satisfy the requirements

  • Vim 7.4 or newer, with +python or +python3 (NeoVim is also supported)

  • Vimwiki (the dev branch)

      git clone https://github.com/vimwiki/vimwiki ~/.vim/bundle/ --branch dev
    
  • Taskwarrior (version 2.4.0 or newer), install either from sources or using your package manager

      sudo dnf install task
    
  • tasklib (version 2.4.3 or newer), Python library for Taskwarrior.

      sudo pip3 install tasklib
    
  • For neovim users: Note that pynvim is a required python 3 provider in case you are using neovim

      sudo pip3 install pynvim
    

Python2 support

Taskwiki is slowly deprecating Python 2 support. Future features are no longer developed with Python2 compatibility in mind.

Install taskwiki

Using pathogen (or similar vim plugin manager), the taskwiki install is as simple as:

git clone https://github.com/tools-life/taskwiki ~/.vim/bundle/taskwiki

However, make sure your box satisfies the requirements stated above.

To access documentation, run :helptags taskwiki and then :help taskwiki.

Optional enhancements

The following optional plugins enhance and integrate with TaskWiki. At very least,I'd recommend the AnsiEsc plugin - Taskwarrior charts are much more fun when they're colorful!

  • vim-plugin-AnsiEsc adds color support in charts.

      git clone https://github.com/powerman/vim-plugin-AnsiEsc ~/.vim/bundle/
    
  • tagbar provides taskwiki file navigation.

      git clone https://github.com/majutsushi/tagbar ~/.vim/bundle/
    
  • vim-taskwarrior enables grid view.

      git clone https://github.com/farseer90718/vim-taskwarrior ~/.vim/bundle/
    

How it works

Taskwiki enhances simple vimwiki task lists by storing the task metadata in Taskwarrior. Taskwarrior uses plaintext data files as a back end, and taskwiki uses Taskwarrior as a back end. This allows taskwiki to leverage its powerful features, such as filtering, recurrent tasks, user defined attributes or hooks.

Note: Taskwiki only handles check lists that use the asterisk *. All other lists, i.e. those written with a hyphen - or a pound sign # as well as ordered lists, are left alone. This allows you to define plain lists and even vimwiki check lists that are unrelated to Taskwarrior.

Features

Individual tasks

* [ ] Install Taskwiki

Such tasks get synced to TaskWarrior when the file is saved. Additional metadata, as project, tags, priority, can be stored with this task.

Some of that metadata gets visually represented in vim, and is updated if the representation changes in vim.

* [ ] Install Taskwiki !!! (2015-08-23 19:00)

Task lists

Tasks can be grouped - simply written in one block. This has the advantage of any child tasks being marked as dependencies of the parent tasks.

* [ ] Get married
    * [X] Find a girlfriend
    * [ ] Buy a ring
    * [ ] Propose

Viewports

Viewport is a header with a task query (filter) embedded, generating the corresponding task list. These tasks can be modified and changes will be synced back to task data. A simple viewport can look as follows:

== Home tasks | project:Home ==

Or if you are using markdown syntax it will be

## Home tasks | project:Home

The filter query will be automatically concealed when leaving insert mode.

Upon saving, this will generate the list of matching tasks, in a tree-like fashion (respecting dependencies).

== Home tasks | project:Home ==
* [ ] Feed the dog (2015-08-08)
* [ ] Tidy up the house !!
  * [ ] Wash the dishes
  * [ ] Declare war on the cobwebs

Tasks added (written) to the task list under the viewport inherit the defaults from its filter.

== Home tasks | project:Home ==
* [ ] Feed the dog
* [ ] Tidy up the house !!
  * [ ] Wash the dishes
  * [ ] Declare war on the cobwebs
* [ ] Call the landlord about rent payment (2015-08-23)
      ^ the task above will have project:Home set automatically

For some more complex filters, defaults cannot be automatically derived. In such case, you can specify the defaults explicitly:

== Urgent tasks | +OVERDUE or +urgent | +urgent ==
                                         ^ defaults definition

Viewports can be inspected by hitting [CR] with cursor above them.

Preset headers

A preset header has a similar syntax to a viewport:

== Home tasks || project:Home ==

In contrast to viewports it does not generate a list of associated tasks. Instead it sets a filter for all viewports and default attributes for all new tasks in the corresponding section.

Like with viewports for complex filters the default attributes can be given manually.

== Home tasks || project:house or project:garden || project:house ==

Multiple levels of preset headers are chained. So you can do this:

== Taskwiki development || project:Taskwiki ==
* Non-task notes
=== Bugs || +bugs ===
* [ ] Bug #42
=== Features || +features ===
* [ ] Some Feature

Here both tasks are assigned the Taskwiki project, as well the respective tag.

Report splits

Taskwiki can provide additional information reports on a task list (selected, or part of a viewport) and on individual tasks as well. These reports are shown in dynamic temporary splits.

* [ ] Tidy up the house !! (2015-08-23)

For example, hitting [CR] on the above task runs :TaskWikiInfo and displays:

Name          Value
------------- ---------------------------------------------------------
ID            6
Description   Tidy up the house
                2015-08-22 21:29:35 Tip: Use roomba for vacuum-cleaning
Status        Pending
Project       Home
Entered       2015-08-22 21:27:26 (2 minutes)
Due           2015-08-23 00:00:00
Last modified 2015-08-22 21:30:21 (1 second)
Virtual tags  ANNOTATED MONTH PENDING READY UNBLOCKED YEAR
UUID          448c2fa9-6a06-454e-a2bc-b0c8ae91994f
Urgency       9.895
Priority      H

Date                Modification
------------------- ------------------------------------------------------------
2015-08-14 21:29:35 Annotation of 'Tip: Use roomba for vacuum-cleaning' added.
2015-08-14 21:30:11 Due set to '2015-08-23 00:00:00'.

Running the :TaskWikiSummary can produce side-split like this:

Project            Remaining Avg age  Complete 0%                        100%
------------------ --------- -------- -------- ------------------------------
Work                      18  4 weeks      74% ======================
  Designs
    Feature X              3  4 weeks      89% ==========================
    Feature Y              7  2 weeks      47% =========
  Tickets                  5  3 weeks      79% ======================
  Blog                     1 4 months      50% ===============

There are many more reports (burndown, calendar, history, projects, stats, summary, tags,..), but for the sake of brevity, they will not be described here. They work in a similar fashion.

Task modification commands

Taskwiki provides commands for the all the traditional operation on tasks, such as starting, stopping, completing, deletion, annotation, generic modification, etc.

* [ ] Tidy up the house !! (2015-08-23)

Say we want to postpone this task to tomorrow. This can be achieved by hitting [Leader]tm (:TaskWikiMod) a prompt will show up, where we enter our desired modification:

Enter modifications: due:tomorrow

Task is instantly updated:

* [ ] Tidy up the house !! (2015-08-24)

Task modification commands can be performed on a task currently below the cursor, or on a visually selected group of tasks.

Advanced

  • Viewport flags: Custom data sources / sort orders can be defined for individual viewports.

  • Grid view: If vim-taskwarrior is available, it can be used to display a grid view of available tasks.

  • Tagbar: Can be shown to display a overview of a Taskwiki file

  • Interactive splits: Assign project/tags by picking a option from a split that lists all the already used projects/tags.

Credits

Created by: Tomas Babej.

Design suggestions contributed by: David J Patrick.

Inspired by: vimwiki-tasks plugin.

Taskwiki wouldn't be possible without all the work and support from the Taskwarrior community. Come hang out at #taskwarrior on Freenode.

Contributing

Code and issue tracker is hosted at: https://github.com/tools-life/taskwiki

Feel free to submit pull requests and/or file issues for bugs and suggestions.

Tests

Taskwiki comes with preconfigured docker-based test setup. To run the tests, simply issue:

PYTEST_FLAGS="-n8" make test

To run a single test and show vim errors:

PYTEST_FLAGS="-s -k TestChooseProject" make test

You may also build a docker image with different versions of some dependencies:

docker-compose build --build-arg TASK_VERSION=2.6.0 tests

To run the included tests directly you will require

Note also, that the tests depend on language specific messages. So you might need to install and enable either the en_US or en_GB locale. For example:

LANG=en_US python -m pytest

Finally you might want to have a look at the CI configuration and consider using a virtual machine or Xvfb.

Known issues

When tzlocal library can't detect your local timezone, it has to be set explicitly using the environment variable TZ. For example, before launching vim:

export TZ="Europe/Prague"

taskwiki's People

Contributors

abhinav avatar absala avatar akashin avatar beuerle avatar bharrisau avatar bodograumann avatar daizeng1984 avatar dancingquanta avatar derphilipp avatar djugei avatar fokoid avatar heiderich avatar jasha10 avatar jbaum98 avatar jmtd avatar kaushikgopal avatar linuxcaffe avatar liskin avatar lubcik avatar martylake avatar mhinz avatar mrossinek avatar nadavspi avatar newptcai avatar nkakouros avatar phha avatar ryspace avatar salmanjnr avatar tbabej avatar wolass 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

taskwiki's Issues

backlinks options

(related to #3)

When tasks exist in wikis, there is often benefit in embedding a link in the task data, so that one can easily find the wiki from the task, however there are desirable configuration options. here are a few ideas;

g:taskwiki_backlinks_enabled=1 (or 0=disabled)
g:taskwiki_backlinks_type=annotation (or 'uda: blink')
g:taskwiki_backlinks_prefix='wiki: ' (good for annotation-type, not so good for UDAs)

There are also strong arguments for in-line overrides to the backlinks_enabled config. For example, if I wanted to have a record of my tasking activity in my vimwiki-diary (which I do) and that featured a listing of every task added, completed or due on that day, then that would cause every task to have a link to a diary file, and that would be.. noisy. So, much like the project-default and tag-default inline settings, backlinks on-and-off settings would be great, like;

%backlinks (at the top of the file, with no other over-ride, would turn on backlinks for the whole file)

task, task, task list

%nobacklinks (turns off backlink behavior for tasks that follow)

task, task, task list

%backlinks (and back on again)

traceback link in task annotation

The original vimwiki-tasks features the option to embed a "traceback" link to the wiki file, in an annotation of associated tasks. This enables the user (using tw) to find those tasks that are also represented in a wiki, and b) easily follow those links to the wiki-file, using taskopen. (https://github.com/ValiValpas/taskopen)

The annotation should look something like "wiki: path/to/file.wiki", using the "annotation label" convention.

reduce the number of commands by using trailing annual, monthly, weekly, daily arguments

The recent flurry of TaskWiki commands is stupendous. Now there is a command for everything, but especially if you are using tab-completion, tabbing through the commands, imho, there are now more commands than necessary.

namely;

  • TaskWikiBurndownDaily
  • TaskWikiBurndownMonthly
  • TaskWikiBurndownWeekly
  • TaskWikiGhistoryAnnual
  • TaskWikiGhistoryMonthly
  • TaskWikiHistoryAnnual
  • TaskWikiHistoryMonthly

The way task cli handles it, is to allow "daily, weekly, monthly, annual" as arguments, following the command, and one of them is the default, if no argument is used. So instead;

  • TaskWikiBurndown [daily|monthly|weekly] defaults to weekly
  • TaskWikiGhistory [annual|monthly] defaults to monthly
  • TaskWikiHistory [annual|monthly] defaults to monthly

bugs: unrecognized VP user-default replaces description

In a ViewPort definition that looks like this;

=== Taskwarrior Tasks | +PENDING project:tw | area:it ===

and taskwiki a) does not recognize the user-default UDA, and so b) replaces the description of new tasks with "area:it".

a) taskwiki should recognize UDAs for this purpose
b) taskwiki should never use any VP default to replace the description.

Taskwarrior will do this at the cli, too, if it doesn't recognize an element. will use it as a replacement for the description. Unfortunately, this is almost never the users intention, and it is even less likely to be the right thing in a taskwiki viewport.

Tasklist generation by headings with custom VimwikiLinkHandler

This is a custom vimwiki scheme (see :help vimwiki 5.12. Schemes and VimwikiLinkHandler) that can be used to generate a task list.

The main idea is to provide a link, that causes a list to be generated, showing ALL tasks that match the < filter >. This way, a user could create a heading;

== [[task: proj:tw +bug|Taskwarrior Project Bugs]] ==

and then can be confident that every task matching the filter would be inserted below the heading, in taskwiki format. Changes and additions are then propagated to and from taskwarrior.

:TWWShowTaskInfo command

This command opens a new split window with the full task info, like the 'task info' command, or even more the vim-taskwarrior TaskInfo command.

Make report split height configurable

This configuration sets the hight of the info report window.
Setting "0" leaves the window hight determined by the report, and the available window.

bug: TaskWikiAnnotate crash

to reproduce, cursor over a task, invole :TaskWikiAnnotate, but don't enter a value, hit ESC instead.

I get;

Traceback (most recent call last):
  File "", line 1, in 
  File "/home/djp/.vim/bundle/taskwiki/taskwiki/taskwiki.py", line 96, in annotate
    vimwikitask.task.add_annotation(annotation)
  File "/usr/local/lib/python2.7/dist-packages/tasklib-0.9.0-py2.7.egg/tasklib/task.py", line 666, in add_annotation
    self.warrior.execute_command(args)
  File "/usr/local/lib/python2.7/dist-packages/tasklib-0.9.0-py2.7.egg/tasklib/task.py", line 947, in execute_command
    raise TaskWarriorException(error_msg)
tasklib.task.TaskWarriorException: Using alternate .taskrc file /
Using alternate data.location /home/djp/.task
Configuration override rc.bulk:0
Configuration override rc.confirmation:no
Configuration override rc.data.location:/home/djp/.task
Configuration override rc.context:
Configuration override rc.recurrence.confirmation:no
Configuration override rc.dependency.confirmation:no
Additional text must be provided.

allow reportname, appended to filter, as sort-driver

If the last argument of a ViewPort is a named listing report, then the "report.name.sort=" line is used to drive the sort-order of the ViewPort. This does not use any other aspect of the defined report, and does not affect the metadata that Taskwiki displays.

=== FooBar tasks | project:foo +bar ls | project:foo ===

will use the report.ls.sort= definition, to determine the order that tasks are displayed. This obviously would apply only to those reports that generate task lists (list, ls, long, minimal etc.) unlike summary or graphic reports (ghistory, summary etc) which would be ignored.

warning: "New task $DESCRIPTION may not match ViewPort filter, hit ENTER to continue"

A ViewPort will assign any (simple) attributes in the filter, to any new tasks created under it. That way new tasks won't simply disappear as soon as they are added. If you want to define what attributes are added, you can do so after the second "|", like this;

== ViewPort Title | project:foo +bar | +bazz ==

and this will add "project:foo +bar +bazz" to any new tasks.

But it's easy to define a valid ViewPort filter, with or without added defaults,

== Most Urgent Tasks | +PENDING urgency.over:20 ==

where the new task may or may not match the filter, and it may or may not disappear as soon as it's saved. This is OK, and should be allowed, but it might be mitigating (less disturbing) if a warning message were generated, when a new task is about to be saved, under a ViewPort with no discernible default in the filter.

Create a basic test suite

Manual testing is boring! Also, we have no idea how taskwiki runs on older versions of vim/taskwarrior.

We should leverage Travis CI to run the tests for us.

Displaying IDs / short uuids in front

This issue presumes a number of things, but I thought I would express what I feel might be an optimal layout for a task, in a vimwiki.

== [[task: +test|test tasks]] ==
* [X] bfea17e6 continue testing twwiki                                  :test:
        * this is the first annotation
* [ ] 107 stop screwing around with taskwarrior!                        :test:
        * [ ] 108 take stats                                        :foo:test:
        * [ ] 109 test again Project thing                              :test:
                * [ ] 111 yet another test                          :test:bar:
                        * annotation for above
                        * another bullet point/ ammotation
                * [ ] 115 the last task                         :baz:test:buz:

The heading is shown with the link "open",
the anotations are presented as sub-list points,
the task IDs would be hilighted as links (to uuid), the first one, completed, used [[uuid.short|uuid]]
the tags are shown with the upcoming vimwiki tags format, and right-justified, just like they would be in orgmode.

use "*" in ViewPort to mean "default = filter"

Having some part of the ViewPort filter in the default, makes sense, to prevent new tasks from seeming to disappear. For example;

=== World Domination | project:dominate +world | project:dominate +world ===

and the new tasks created under this ViewPort will be listed.
This RFE is for a short-hand for those cases (like the example above) where the defaults are a duplicate of the filter, which should be a fairly common occurance. The example above could then entered as;

=== World Domination | project:dominate +world | * ===

annotations as indented bullet-points, below a task

Annotations can be logically presented/ created as indented list items, under a task. As long as the text-block remains contiguous, then annotations should not affect dependency/ hierarchy,

* [X] continue testing twwiki                          #bfea17e6-778a-43e0-8508-a7d29b39673d
        * this is the first annotation
* [ ] stop screwing around with taskwarrior!                     #1c5f75ac-8fa6-4913-9305-3f63d21dcde5
        * [ ] take stats          #5e485bd4-576d-40c7-919f-7d02dbc6cf6b
        * [ ] test again Project thing              #ec44828b-e6b8-48f8-9815-43360f57e352
                * [ ] yet another test         #18206957-d35b-43e7-9177-5f20d95a0fc1
                        * annotation for above
                        * another bullet point/ ammotation
                * [ ] the last task  #30783ba1-4262-482c-a983-f7339512fb85

Default values for any attribute in given tasklist

Like the Default Values in teranex's vimwiki-tasks, if the first ten linkes of a wiki-file have

%% Project:
or
%% Tags: +tag1 +tag2

then these values are added to each new project on that wiki page.

new command :TaskWikiShowMeta

This command is a toggle that shows/ hides the ViewPort metadata. ("hide" being the default) This would mostly be for diagnostics.

check requirements

TaskWiki has several requirements, and may not operate correctly if these dependencies are not installed, or at their minimum versions. This RFE is for a diagnostic routine that tests for these requirements, and generates a warning message, or throws an error, if these requirements are not met.

:TaskWikiInfo [ID|UUID]

Currently, invoking ':TaskWikiInfo 142' generates an "E488: Trailing characters" error, but I think it would be swell if it opened the info-window of 142, instead.

new command :TaskWiki < project >

This command makes it easy to open/ create project.wiki files.
Using the configurations;

let g:taskwiki_project_dir = '~/.task/project'
let g:taskwiki_project_ext = '.project.wiki'

and entering

:TaskWiki foo

or using

:TaskWiki(space)< tab >

completion, should offer all top-level projects.
Enter a name or select a project and hit < enter > and the "~/.task/project/foo.project.wiki" file is opened for editing.

UUID as link

imho, the UUID should be presented as a wiki-link in the form of

[[task: bfea17e6-778a-43e0-8508-a7d29b39673d|ID]]

with the task ID (52, in this example) presented as the description.

This could have several advantages

  • less "visual noise", as only a few characters are seen (unless the cursor is over it)
  • task ID is immediately available, so regular tw actions can be performed
  • link gets syntax highlighting
  • special link handler can be used to "follow the link" and get task info.

new command :TaskWikiDelete

Currently, deleting a task in a ViewPort or a wiki, does not delete the task from pending.data, and this is good.
But if you actually wanted to delete a task or tasks, the command :TaskWikiDelete, on a single task or visually-selected group, would make that possible.
The command could also use trailing ID(s) or UUID(s), instead.

new command: TaskWikiSort \<field(s)\>

This command would sort a ViewPort or visually-selected group of tasks, using the <field(s)> argument, perhaps emulating a report.foo.sort= config syntax.
If no arguments provided, the command should sort on description(?).

new global command :TaskWiki < project >

This command makes it easy to open/ create project.wiki files.
Using the configurations;

let g:taskwiki_project_dir = '~/.task/project'
let g:taskwiki_project_ext = '.project.wiki'

and entering

:TaskWiki foo

or using

:TaskWiki(space)(TAB)

completion, should offer all top-level projects.
Enter a name or select a project and hit < enter > and the "~/.task/project/foo.project.wiki" file is opened for editing.

:TaskWikiGrid use vim-taskwarrior, if available

The TaskWikiGrid looks almost exactly like a vim-taskwarrior report, but doesn't act like it, vim-tw has a slew of features, and mappings, that I wouldn't expect TaskWiki to re-implement.

So I would suggest that TaskWikiGrid implement a simplified grid unless vim-taskwarrior is found to be installed, in which case, the command should pass the job off to vim-tw.

bug(?): TaskWikiProjects errors

Love the idea, but seeing errors;

"~/.vim/wiki/index.wiki" 85L, 3849C
Traceback (most recent call last):
File "", line 1, in
File "/home/djp/.vim/bundle/taskwiki/taskwiki/taskwiki.py", line 58, in projects
util.show_in_split(output, name="projects", vertical=True)
File "/home/djp/.vim/bundle/taskwiki/taskwiki/util.py", line 117, in show_in_split
vim.current.buffer.append(lines, 0)
TypeError: bad argument type for built-in operation

Grand command renaming

One of the first things I might suggest, is to rename ALL of the commands!

That's right, all of them!

The original vimwiki-tasks is essentially undocumented, save for the commit messages, as each feature was added by teranex. Now don't get me wrong, the functions are amazingly clever, but the command names are undocumented and undiscoverable, and I think a new command-naming-scheme could really help that.

Take vim-taskwarrior as an excelent (and related) example. Ze He (the author) used "TWXxxXxx" in naming all vim-tw commands, and as a result, all vim-tw commands are easily seen in vim, with ":TW< tab >" completion. I don't consider this a conflict, I'm quite sure that Ze has no great plans to use "TWW" (or any new user-commands, actually) and that would make this program's commands discoverable while using that program!

and so I would nominate ":TWWXxxXxx" for all of this program's user-commands, because

  • it will make all commands easily discoverable
  • it's easy to type
  • it's easy to remember (TaskWarrior Wiki)

for example:

:TaskCmd
becomes (simply)
:TWW

:UpdateTaskList
becomes
:TWWUpdate

:InsertTasks
becomes
:TWWInsert

:DisplayTaskUUID
becomes
:TWWUuid

:CopyTaskUUID
becomes
:TWWCopyUuid

There may be existing commands I don't know about, and tons of room for new features and commands, but that should get the idea across.

allow newly created tasks to be entered with arbitrary metadata

While TaskWiki displays only a limited amount of metadata (description, due:date, started) but tasks could be entered with any metadata. As soon as the new task(s) are processed, that metada will be hidden, like usual.

== Make RFE example | project:taskwiki +RFE | project:taskwiki ==
* [ ] Existing task 1
* [ ] Existing task 2
* [ ] area:software +RFE depends:412 -- New task desciption

Using "--" to precede the description should make it easier (possible) to parse, as soon as taskwiki processes the new task(s), they are displayed as usual, with the extra metadata is hidden, like

* [ ] New task description

message: (no matches)

What's the visual difference between a ViewPort where the filter has no matches, and a regular vimwiki heading? The answer is: none. A ViewPort with matches at least has a group of tasks below it.

A viewPort could still be useful with "no matches", but there should be some indication, and it shouldn't take up any extra lines, so I suggest:

== Booze Business Tasks | +bizz +buz +booze ==

might resolve to:

== Booze Business Tasks == (no matches)

in normal mode

new command: TaskWiki < filter > < command > [ < mods > | < args > ]

This is analogous to the vim-taskwarrior :TW command, which is effectively like having a task-shell within vim. The major difference would be that it will operate on visually-selected tasks, otherwise, it is a global command. It does not normally focus on the task below the cursor, unless it is visually selected.
Just as in task cli, precautions against BBQing you whole data-set, with "This will apply to all tasks in the database, are you NUTS?? (yes/no)" warning messages

taskwiki templating

A task as represented by taskwiki, has two fields displayed by default. This feature request is for a .vimrc config allowing custom task field selection and layout, including left and right justification.

Currently, the default task layout might be represented as;

g:taskwiki_fields = '%desc (%due)

but a custom config might look like;

g:taskwiki_fields = '%desc [%project] | (%due) %tags

those on the right side of the "|" pipe would be right-justified, those on the left, left-justified, so that an example task with the above custom config might look like;

* [ ] call Sue about piano lessons [music]         (2015-03-20) :skills:weekly:txn:

inherited defaults

With the ability to have defaults in headings and sub-headings, as long as the blocks are contiguous (same text-object) the defaults could be inherited. So for example;

== Bake Sale | | project:bakesale == # this header has no filter, or list, but has default
=== Baked goods | project:bakesale +bake | +bake === # (also project:bakesale)
* [ ] pick recipes
* [ ] bla 
* [ ] bla 
==== Shop for ingredients | project:bakesale +shop | +shop === # (also +bake & project:bakesale)
* [ ] get flour
* [ ] get sugar
=== Labeling | project:bakesale +label | +label === # (also has project:bakesale)
* [ ] design labels
* [ ] print labels

Maybe not the most exciting use-case, but just outlining the idea.

new command :TaskWikiMod < mods >

Using this command is like issuing 'task mod < mods > on the task under the cursor, or visually-selected group of tasks, and would allow modification of any attribute, without leaving the wiki and losing focus. Mods should be reflected in any ViewPort on the page, immediately after making changes.

note* User with vim-taskwarrior already installed, can already do something similar :TW < anything >

Use uuid.short instead of full uuids

Probability of clash on 100 tasks in the same taskwiki file is 0.0001%, so using full uuids as metadata might be a overkill.

This should help with vim overeagerly wrapping the lines, since cocealed characters can cause line wrapping too.

Tasks with no due data have eventually due date appearing

Which defaults to the beggining of the unix epoch. Needs investigation.

* [ ] Set goals for the next day (2014-01-13 22:00)  #c23972c9-813a-4c29-b858-acfcaf8b60e3
  * [ ] Set reccurring task in TaskWarrior (1970-01-01 01:00)  #d3cb5ef6-8f78-4ccf-a210-d52e077122fa

bug: ViewPort status:pending and +PENDING ignored

On my box, 'tw proj:tw' yields 20 pending tasks, and 'tw proj:tw all' only shows 27 tasks, but

== Taskwarrior tasks | project:tw ==

generates a list of 80 tasks! (most of them since deleted)
This ViewPort includes some completed tasks, but neither

== Taskwarrior tasks | status:pending project:tw ==

nor

== Taskwarrior tasks | +PENDING project:tw ==

make any difference, still 80 tasks.

conform to vimwiki Todo list conventions

Wherever possible, vimwiki Todo list key-mappings and behavior should be adopted for taskwiki.

(from vimwiki.txt)

Todo lists                                                vimwiki-todo-lists
------------------------------------------------------------------------------

You can have todo lists -- lists of items you can check/uncheck.

Consider the following example: >
 = Toggleable list of todo items =
   * [X] Toggle list item on/off.
     * [X] Simple toggling between [ ] and [X].
     * [X] All list's subitems should be toggled on/off appropriately.
     * [X] Toggle child subitems only if current line is list item
     * [X] Parent list item should be toggled depending on it's child items.
   * [X] Make numbered list items toggleable too
   * [X] Add highlighting to list item boxes
   * [X] Add [ ] to the next list item created with o, O and CR.

Pressing  C-Space  on the first list item will toggle it and all of its child
items: >
 = Toggleable list of todo items =
   * [ ] Toggle list item on/off.
     * [ ] Simple toggling between [ ] and [X].
     * [ ] All of a list's subitems should be toggled on/off appropriately.
     * [ ] Toggle child subitems only if the current line is a list item.
     * [ ] Parent list item should be toggled depending on their child items.
   * [X] Make numbered list items toggleable too.
   * [X] Add highlighting to list item boxes.
   * [X] Add [ ] to the next list item created using o, O or CR.

Pressing C-Space on the third list item will toggle it and adjust all of its
parent items: >
 = Toggleable list of todo items =
   * [.] Toggle list item on/off.
     * [ ] Simple toggling between [ ] and [X].
     * [X] All of a list's subitems should be toggled on/off appropriately.
     * [ ] Toggle child subitems only if current line is list item.
     * [ ] Parent list item should be toggled depending on it's child items.
   * [ ] Make numbered list items toggleable too.
   * [ ] Add highlighting to list item boxes.
   * [ ] Add [ ] to the next list item created using o, O or CR.

Parent items should change when their child items change. If not, use
vimwiki_glr. The symbol between [ ] depends on the percentage of toggled
child items (see also g:vimwiki_listsyms): >
    [ ] -- 0%
    [.] -- 1-33%
    [o] -- 34-66%
    [O] -- 67-99%
    [X] -- 100%

It is possible to toggle several list items using visual mode. But note that
instead of toggling every item individually, all items get checked if the
first item is unchecked and all items get unchecked if the first item is
checked.

Use gl Space (see vimwiki_gl Space) to remove a single checkbox and
gLSpace (see vimwiki_gL Space) to remove all checkboxes of the list the
cursor is in.

use vim-airline, if installed

Vim airline can provide a valuable, information-rich status line.
Vim-taskwarrior can use it very effectively, if it is installed, but it's not a requirement, and I think TaskWiki could take advantage of it too.

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.