open source - main projects topic home

25-May-2010 - …

Todo.txt task tracking

Probably due to the simplicity of the task tracking solution, I was drawn into contributing many fixes, enhancements, Wiki edits and quick answers on the mailing list, all of which were greatly appreciated by the community. Enabled by the script's extension points, I initially developed, modified and used 24 small addon scripts to customize the application to my workflow, before publishing them as a separate project (see below).

The great GitHub platform, existence of an automated test suite, and friendly community of partially less technical people made contributing so much fun. My first steps consisted of cleanup of help messages, code consistency and minor bug fixes, in order to learn more about the script and the community. Later I contributed enhancements and then coordinated problem reports and fixes from other developers. This resulted in the v2.7 release on 04-Aug-2010, where I contributed 39 out of 42 commits, and continued with me as the lead developer of the v2.8 release on 14-Sep-2011.

In Aug-2017 (after hiccups with the Android app's sudden loss of Dropbox support), Ali Karbassi offered to pick up the languishing project from Gina Trapani, and I joined the new todotxt organization with direct commit access in consultative capacity.


From the beginning, I had picked up some Todo.txt add-ons from various contributors, and soon wrote my own custom commands, configuration, and special filters. This eventually culminated in a set of matching interdependent extensions that codified my personal approach to task handling. Because there had been keen interest in various pieces of my add-ons, I finally released them as a separate project in Feb-2012.

12-Feb-2002 - …

Vim text editor

I'm an avid user of the Vim text editor since Vim 6.0 in 2002.


Starting Sep-2006, I have published several of my customizations and enhancements as Vim scripts on the community site. Some of them have been downloaded over a thousand times. I'm one of the most prolific script authors, with 90+ published plugins (up from 38 in March-2012). I have been contributing bug reports, patches, and critiques to at least as many plugins by other authors (to some of them regularly as a kind of co-development), and regularly receive (overwhelmingly positive) feedback about them.


Since Dec-2006, I'm a member of the mailing list, where I participate in troubleshooting help, feature discussions, and strategy. I've submitted several bug reports and Vim patches, many of which have been incorporated into the mainline.

Since Dec-2007, I partipate in the Vim Tips Wiki, amassing 104 edits as of Mar-2012. I also frequent the Vim subreddit, and watch questions tagged Vim on Stack Overflow and on the Vi and Vim StackExchange site, answering questions as they come up.

open source - list of contributions

Here are some highlights of my contributions to the open source community (many minor things have been omitted):


Jan-2022 Vim plugins
I had started to convert my Vim plugin sources from my own writebackup tool to Git repositories hosted on GitHub back in 2017. Though the conversion is half-automated and supported by a cheat sheet, it still takes about 10 minutes per plugin. I did the conversion whenever I touched a project, but there wasn't that much active work on all Vim plugins, so it still took more than four years (and a final three-day dash powered by additional automation to convert the last 53 projects) to get all 120 plugins (and 57 unreleased ones) done. Now all of my Vim plugins can be easily consumed from various plugin managers (without downloading the vimball archive from, and users can open issues and submit pull requests instead of contacting me via email. And of course, I can consistently use the feature branches and small frequent commits I've grown so fond of for development.


Feb..Jun-2021 Software
After finally getting a notebook replacement at work, the Ubuntu versions on my workstations outdated, and the intention to move my private stuff to a separate notebook, I was going to do a lot of Linux installations, so I built an abstraction layer over various package managers (apt, yum, pip, npm, etc.) that allows selection, installation, and configuration of software packages. Previously, I had electronically logged all installation and customization actions, and this was a step up from manually going over that list from the predecessor and reapplying it to its successor.
I tried to automate as much as feasible, and developed a toolbox of reusable commands that supported installation (e.g. deb-download-installer, using either my local installation repository or a provided URL to download and update it) and configuration (commands to add autostart entries, cron jobs, icons, etc. for script actions and other commands to add notifications that are shown on each login until acknowledged, to manage the few manual configuration tasks that could not be automated).
I split the software definitions into personal and work-related software (the latter also helped colleagues who were also setting up their new notebooks). The application was so helpful that I extended the scope from Apt / Ubuntu to Yum / CentOS (the distribution of most of our test and cloud systems) and replaced a set of automated installation queries I had developed earlier with software definitions for the new application, benefitting from the nice definition DSL and features like dependency handling and grouping. (The previous queries ran every time I logged in, resulting in a small delay each time, whereas the software setup would only run once, and could later be manually invoked to install additional items.)
The widening of the application's scope brought a modular design, where additional definition types could be plugged in via external scripts. I later found many more useful types, and as there were easy to add (I did several large refactorings of the main application to enable that), I went from 3 hard-coded built-in types to 29 type extensions.
Jan-2021 Apache ActiveMQ Artemis
Found a bug in the precedence of configuration properties (which affected a product at work), submitted a fix, and defended it against its early dismissal.


Apr..Jul-2020 Bash scripts
I've greatly extended and improved my collection of Bash scripts, with a focus on composability and separation of concerns. Almost all non-trivial new scripts are developed in test-driven fashion, using Bash Automated Testing System. Some notable mentions:
Mar-2020 tridactyl
I had meant to submit a small fix already to the predecessor Pentadactyl project (which got killed by radical API retirements in Firefox), and now did so to the project that aims to make current Firefox behave more like Vim. What initially looked like a small documentation fix then had me diving into the TypeScript sources, as the devs suggested to also make this the new default.


Sep-2019 miniDB and executionMarker
Recognizing ad-hoc implementations of a simple configuration store in my shell scripts, I had extracted and generalized a simple file-based columnar database, and a specialization for recording command execution times. These greatly simplified existing tools and also sped up the development of new tools. However, when one use rapidly did multiple updates, I noticed data loss, and had to implement rate-limiting as a workaround, and put down a task to add file locking to the tools later. When I did just that, I realized the complexity of concurrent access (without automated tests (using Bash Automated Testing System) that would have been impossible), but persevered and implemented working locking and simple transaction handling over the course of three days.
Aug-2019 tmux shellcommand
Due to similarities with Vim in design and configuration, I immediately felt at home when trying out tmux, quickly extended the built-in functionality with plugins (which I immediately hacked on and improved), and added my own key mappings, some of which would also make great plugins on their own. The shellcommand extension is the first tweak that was written as a separate, reusable plugin from the start that can be installed from GitHub via the Tmux Plugin Manager.
Apr-2019 git-extensions
I increasingly rely on metaprogramming (i.e. scripts that write scripts), with various git-...-command scripts that allow to easily define groups of related commands. The latest (and most complex) one is git-wcdo, which (often, but can be skipped in the chain) is invoked by git-wcs-in-dir-do, which then is invoked by git-wcdo-command, which is used to build custom commands like my git-all, git-dev (for work) and vimrc-ingo and Unixhome-ingo (for open source projects). This follows Git's own distinction into plumbing commands used for automation and serving as a stable base for implementing porcelain commands that are mostly employed by the user.
Apr-2019 Mutual open source use
After several years of happy use, I submitted three patches to nowrap (a small Perl command-line utility), fearing the tool had been abandoned by its author because the account didn't show any activity for the past two years, only to get a prompt response and to find out that the author is a regular user of some of my Vim plugins. So we're each using the other's open source contributions!
Feb-2019 reldate
Working mainly on Linux systems has produced a private treasure trove of small utilities and tools. Reldate is the first Perl-based tool that I've polished, extended, written automated tests for (and blogged about the approach), and then published on GitHub. More to follow!


Mar..Dec-2018 git-extensions
After switching from Subversion to Git at work, I identified many additional use cases, especially working with several repositories in parallel, reintegrating feature branches, and tracking of change requests and corresponding commits. I've greatly expanded my aliases (adding for example whole families of log variants covering various commit ranges) and also refactored the implementation of many custom commands, in more than 300 individual commits.
Having initially just worked with a cloud installation, doing just some basic monitoring and accessing containers, with development done via docker-compose, I'm now actively developing in (single or multi-node) Kubernetes environments, so I adapted and increased my extensions to a set of 25 commands (and also implemented a lot of supporting infrastructure, like installing my customizations with a single command on all nodes, highlighting and collection of log files).
Stack Overflow
At the end of the year, I'm at 130k reputation, 14/144/195 gold/silver/bronze badges, and an accepted answer rate of 53%, reaching an estimated 3.7 million people with my answers. It's still a great pleasure to be able to help other people, and I also learn a lot myself, even obtain many great ideas for tools or Vim plugins through the community.


Sep-2017 Move Vim plugin development to GitHub
After many requests, I started moving my 120 Vim plugins one by one to GitHub. Many users nowadays use package managers that allow easy consumption from there. With my git-writebackup-ingo-import script, conversion from my home-grown writebackup version control is a mostly automatic step. I use gitflow for branching and releases, and have written a custom converter for my Vim help pages that automatically generate the customary vimscript.
Aug-2017 Joined new todotxt organization
Ali Karbassi offered to pick up the languishing project from Gina Trapani, and I joined the new todotxt organization with direct commit access in consultative capacity, reviewing contributions and commenting on issues.
Jul-2017 Stack Overflow
Received congratuations for reaching 100,000 reputation, and got sent free swag (cup, t-shirt, stickers) to express Stack Overflow's gratitude for participating!
Apr-2017 Vim
Found a regression via my automated test suite (that runs over all of my Vim plugins, and checks those against a base Vim version and the latest source code), and another bug via normal use of my plugins.


Jul-2016 Bash fc -e patch
Noticed a bug in the exit status of the Bash fc -e builtin. Asked about this on Unix & Linux StackExchange, and as first feedback indicated this is a bug, downloaded the source code of Bash, researched the issue, and came up with a patch, which I sent to the maintainer of Bash. Unfortunately, I hadn't used the latest development branch, so it had already been reported and fixed. It was a nice learning experience, anyway.
01-Dec-2016 Stack Overflow community
Reached 100k reputation, and 10/87/134 gold/silver/bronze badges.


Jun-2014 Stack Overflow community
After three years on Stack Overflow, I've gained 59k reputation and 8/28/58 gold/silver/bronze badges. My accepted answer percentage rate is at 51%, significantly more than the average of 39%!
Apr-2014 Adoption of personal Vim plugin fork
I got a pull request on my extended fork of an (apparently unmaintained) Vim plugin, informing me that the developer had taken my modifications and extended those. Out of that friendly exchange arose a couple of mutual extensions.


Dec-2013 Stack Overflow community
After 20 months, I've gained 40k reputation and 6/20/42 gold/silver/bronze badges.
This was a rather calm year; I've mostly answered issues and reviewed all incoming pull requests, which was acknowledged in the 2.10 release announcement.
Todo.txt extensions
I added and improved several actions in what I would call controlled evolution. The suite of add-ons around the Todo list (with currently 600 entries) still form the base of my task management.
Vim plugins
I'm continuously tweaking my personal configuration, adding useful commands and mappings. This year, a lot of inspiration came from questions on Stack Overflow. By giving back (answers and help), I learn and gain a lot (inspiration, ideas to do things differently), too!
Due to my heavy use and extensive automated test suite for my plugins, I was able to report several issues and got most of them quickly fixed by friendly colleagues. In particular, I found several corner case inconsistencies in the new Vim 7.4 NFA-based regexp engine, resulting in patches 7.4a.032 and 7.4a.039.


Dec-2012 Stack Overflow community
After 8 months of following and answering Vim questions on Stack Overflow, I've gained 13k reputation and my first two gold badges for reviewing 1,000 edits and casting 600 votes.
03-Feb-2012 Todo.txt extensions
In addition to a couple of add-ons to Todo.txt provided by other users, I wrote my own customizations: Add-on scripts to adapt the versatile command-line application to my own workflow by introducing shortcuts as well as totally new functionality, and more highlighting for additional syntax that I've invented. Since other users apparently faced similar issues and questions are coming up regularly on the mailing list, I've added a test suite for my add-ons and published my extensions as a separate GitHub project. With this, I can now simply refer such questions to my implementation.


22-Nov-2011 I18N for nowrap / vim_dev
Reported a small issue within the Cygwin terminal to the author, and offered advice on how to make his tool work with <Tab> and double-width characters. Shortly thereafter, a similar discussion came up on the vim_dev mailing list, where I educated the OP about the differences of character widths, number of characters, and bytes to represent the character in a particular encoding.
18-Oct-2011 CamelCaseMotion fork
Noticed through a blog article about Vim plugins that I found through that someone named bkad had created a private fork of my plugin, fixed a small bug, but hadn't sent this to me. I contacted the author just as he was discussing with a collaborator how to contribute back the changes.
14-Sep-2011 Todo.txt
New official release v2.8 that where almost the entire functionality was provided by me. I got a big thank-you for pushing the project forward in the release message.
30-Jul-2011 vcscommand.vim
Contributed three patches to this popular Vim plugin. As I have done more invasive enhancements that I so far use privately (and intend to contribute back), I soon decided to use Git instead of my home-grown writebackup to maintain my modifications in separate branches. This turned out to be so beneficial that I will use GitHub clones for all future contributions to Vim plugins.
29-Mar-2011 Vim
Found out by chance (while browsing other people's public .vimrc configurations) that someone named Lokaltog had used the logic from my StatusLineHighlight plugin for a similar purpose, and has credited me in the comments.


04-Aug-2010 Todo.txt
New official release v2.7 that contains my cleanup of help and error messages, many small bugfixes, several improved commands, and highlighting of done tasks. Overall, I committed 39 out of 42 changesets.
25-May-2010 Todo.txt
Found a couple of inconsistencies and nuisances while adopting this simple script for task tracking. Submitted a set of bug fixes and enhancements (together with accompanying automated tests) via GitHub, which were pulled into upstream a mere four hours later.


30-Jun-2009 English Wikipedia
Commenced editing on Wikipedia by adding explanations to the Vim part of the Text editor support page, then discussed and implemented consolidation of locations for the syntax highlighting script, and added my personal updates and enhancements.
07-Jun-2009 Mark
Continued Vim script which was abandoned by its original author. Added many bugfixes and modernized the main algorithm.
24-Apr-2009 Ubuntu
Reported problems with spinning laptop fan, system hangs and other problems experienced on my wife's Ubuntu 9.04 installation. Contributed improved workarounds and help to other affected users.
25-Feb-2009 Vim
Reported unset v:warningmsg. Submitted patch on 03-Mar-2009. Included as patch 7.2.146 on 18-Mar-2009.
15-Feb-2009 Firefox MAF addon
Submitted a bug and an enhancement request. Latter was fulfilled on 26-Mar-2009.
04-Feb-2009 Vim
Submitted patch to :diffpatch command. Included as patch 7.2.105 on 11-Feb-2009.
21-Jan-2009 Vim
Submitted patch to obsolete help text.
03-Jan-2009 OLPC XO
Published first enhancements, patches and customizations.


09-Jul-2008 Vim Tips Wiki
Another collaborative refinement of a Vim Tip, done less because I actually needed the functionality, but for the fun of working with user Lpb612.
20-Jun-2008 Vim
Added own observations to bug report, then implemented enhancement. Included as patch 7.2.051 on 28-Nov-2008.
09-Jun-2008 Vim
Reported, then fixed bug with partially reversed strings. Included as patch 7.1.325 on 20-Jun-2008.


06-Dec-2007 Vim Tips Wiki
Started contributing to the new home of the Vim Tips by improving the 2006 tip of mine; this led to a beautiful collaboration with user Fritzophrenic.
09-Aug-2007 fuzzyfinder.vim
Reported bug. (Reported some more after that.)
01-Aug-2007 Firebug
Posted solution to common update problem in newsgroup.
03-Jul-2007 Linklint
Adopted abandoned project and published first bugfixes and enhancements.
10-Mar-2007 writebackup
After years of helpful use, published first of the many little helper scripts that I am continually developing and tweaking in order to become more efficient. Had to decide on a license and delivery strategy. Most of my scripts were too small to warrant the formalism of Sourceforge, and GitHub hadn't been invented yet, so I put them into a download area on my website.
2007 - … Vim scripts
Reporting and sending bug(fixes) and enhancements to many script maintainers.
17-Jan-2007 Vim scripts
Emailed bugfix to script maintainer.


05-Dec-2006 Vim
Reported tr() bug. Was fixed two hours later as patch 7.0.175.
03-Nov-2006 Vim tip
Published first vimtip #1376 Folding of vimscript functions.
24-Oct-2006 IndentConsistencyCop
First major Vim script with algorithmic computations in a functional programming style, comprising 100 kb, 1 kLOC, 80 functions.
18-Sep-2006 redocommand
First published Vim script.


20-Nov-2003 JWPce 1.42
Mailed enhancement to enable Kanji input through Windows IME. (Never heard back.)
22-Sep-2003 TWiki
Posted fix for broken rcsdiff under HP-UX when using prebuilt SD-depots.
07-Aug-2003 TWiki ExplicitNumberingPlugin
Submitted patch for repeated page view numbering bug under mod_perl. Patch accepted 12-Aug-2003.
Mar-2003 TWiki
Posted problem report and later fix for running TWiki under mod_perl.


14-May-2002 Vim
Added a visual mode mapping to vimtip #1: the super star.

Ingo Karkat, 28-Mar-2009; last update 16-Mar-2022