Skip to content

Instantly share code, notes, and snippets.

Avatar

Wilhelm Schürmann wbsch

View GitHub Profile
@wbsch
wbsch / on-add.project_pwd.py
Created Mar 5, 2015
Example for an on-add hook that sets the project of newly added tasks to the current directory's name by default.
View on-add.project_pwd.py
#!/usr/bin/env python
import json
import os
import sys
t = json.loads(sys.stdin.readline())
if not 'project' in t:
t['project'] = os.path.basename(os.getcwd())
@wbsch
wbsch / on-add_interactivity.py
Created Mar 21, 2015
Proof of concept for an interactive Taskwarrior hook. Hackish and potentially problematic, but it works.
View on-add_interactivity.py
#!/usr/bin/env python
#
# PoC: Interactive on-add hook
import json
import sys
t = json.loads(sys.stdin.readline())
real_stdin = open("/dev/tty", "r")
View on-modify_macro_expand.py
#!/usr/bin/env python
# Proof of Concept for expanding aliases in annotations.
#
# See https://bug.tasktools.org/browse/TW-77
import json
import re
import sys
old = json.loads(sys.stdin.readline())
new = json.loads(sys.stdin.readline())
@wbsch
wbsch / on-add_inline_tags.py
Last active Sep 4, 2015
Proof of concept for a Taskwarrior on-add hook that allows for "inline tags" when adding tasks
View on-add_inline_tags.py
#!/usr/bin/env python
#
# PoC for "inline tags", as described in TW-1357
# https://bug.tasktools.org/browse/TW-1357
#
# Turns
# $ task add I saw @bob in the @garden
# Into the equivalent of
# $ task add I saw bob in the garden +bob +garden
@wbsch
wbsch / datefilter.py
Created May 5, 2013
Filter Taskwarrior tasks completed before a certain time. Reads from STDIN, outputs to STDOUT. Backups recommended ;)
View datefilter.py
#!/usr/bin/env python
import re
import sys
import time
if len(sys.argv) < 2:
print "Example usage:"
print sys.argv[0], "2013-05-05 < ~/.task/completed.data > ~/.task/completed.data.tmp && mv ~/.task/completed.data.tmp ~/.task/completed.data"
sys.exit(1)
@wbsch
wbsch / filter.py
Last active Dec 17, 2015
Filter Taskwarrior tasks completed/deleted before a certain time. Reads from STDIN, outputs to STDOUT. Backups still recommended. More detailed documentation and options.
View filter.py
#!/usr/bin/env python
import re
import sys
import time
if len(sys.argv) < 3 or sys.argv[2] not in ["all", "completed", "deleted"]:
sys.stderr.write("Reads data in Taskwarrior format from STDIN and writes to STDOUT only those tasks completed/deleted after the supplied date.\n\n")
sys.stderr.write("### Usage: " + sys.argv[0] + " <Y-m-d> <all|completed|deleted>\n")
sys.stderr.write("Where \"all\" filters all tasks and \"completed\"/\"deleted\" only those with the status set to the keyword specified.\n\n")
sys.stderr.write("### Example usage:\n")
@wbsch
wbsch / taskwarrior_xmpp_bot.py
Created Nov 19, 2012
taskwarrior <---> XMPP bridge in python. Proof of concept, no error checking :)
View taskwarrior_xmpp_bot.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sleekxmpp
import subprocess
import time
class TWBot(sleekxmpp.ClientXMPP):
def __init__(self, jid, password, whitelist):
@wbsch
wbsch / on-launch_stopstarted.sh
Last active Jun 1, 2019
Taskwarrior hook that stops all active tasks when "task FILTER start" is run. PoC for https://bug.tasktools.org/browse/TW-1712
View on-launch_stopstarted.sh
#!/usr/bin/env bash
# Stops all previously active tasks on "task FILTER start"
#
# Only pending tasks are checked/stopped. If you really want to stop
# started tasks that are completed/deleted, remove the status:pending
# filter. Note that this will decrease performance, and should not
# be necessary.
tw_command=""
for i in "$@"; do
View on-add_annotate.py
#!/usr/bin/env python3
#
# Save as on-add_annotate.py in hooks directory, then:
# $ chmod +x ~/.task/hooks/on-add_annotate.py
#
# Anything after "annotate:" in a new task's description is added as an
# annotation:
# $ task add this is the description annotate:this is an annotation
import json
@wbsch
wbsch / on-modify.timetrack.py
Last active Nov 12, 2020
Time tracking hook script for Taskwarrior that outputs ledger timelog formatted data.
View on-modify.timetrack.py
#!/usr/bin/env python
#
# Writes task start/stop times to a timelog formatted file.
# You might need to adjust LEDGERFILE, or set the TIMELOG environment variable.
#
# Example reports, after using start/stop on a task:
# ledger -f /path/to/timelog.ledger print
# ledger -f /path/to/timelog.ledger register
#
# Projects, tags, and UUIDs are fully supported and queryable from ledger.
You can’t perform that action at this time.