Newsletter #3 - Better Late than Never

September 2014

Welcome to the third (and delayed) newsletter for Neovim, the project that aims to overhaul the Vim codebase.

The next newsletter will be coming out near the beginning of November. It has changed to be every other month as to not overload any sensitive Neovim lovers with too much staggering awe.

General News

Over 1,000 Issues

The Issue tracker on GitHub now has over 1,000 issues/pull requests. The lucky 1000th pull request was opened shortly before August.

As mentioned in last July’s newsletter, the documentation has successfully been moved to neovim.io/doc/.

It features some general documenation links as well as some more specific reports directed towards developers and contributors. These reports have already helped developers contribute and improve the codebase.

Development News

In no particular order, here are the top stories in the last two months.

Implementing system() with Pipes

This issue was mentioned in the June newsletter on things that were yet to come.

@aktau has finished implementing the VimL system() function to use pipes and the job system instead of redirecting to temporary files. The change provides a nice speed boost and avoids some permission issues (mainly affecting Windows, which is not supported yet).

The slowness of the old implementation of system() was especially noticeable when the called process had large output. An example of this is: system('cat largefile') .

Note

There has been one bug report concerning the new system() code: it doesn’t work well with the Selecta plugin as described here.

More Precise Profiling

@aktau leveraged libuv’s ability to provide a high resolution clock on many systems to improve Neovim’s profiling capability with this pull request.

The previous implementation was using gettimeofday() . This was a blocker in getting Neovim to run on Windows (as detailed in the previous section) as this function wasn’t supported in Windows.

For more info on profiling in Vim, just run :help profiling .

Dropping of MoonScript

During the start of of the project, the MoonScript vs Lua debate was a widely discussed one.

MoonScript (a language that compiles to Lua) was chosen to be the language for unit tests. After updating the unit test library, Busted, some unit tests were failing.

Thus it was decided to drop the dependency to simplify the tests and remove a layer of abstraction. @tarruda made the accompanying changes and pull request.

Msgpack RPC

Discussion arose regarding how Neovim wasn’t fully compliant with the specification of msgpack-rpc.

In the last few weeks, @tarruda has completed the implementation to fully support the specification.

He also has been working on upgrading the use of msgpack to the latest version, 2.0, which should be merged soon.

Python Client

In the first newsletter, a Python client was first discussed. Since then, @tarruda has refactored it for various improvements.

Go Client

@myitcv has made a proposal for adding Go integration in a similar way that the Python integration works. The proposal also touches on being language agnostic.

Although too copious to detail here, the link above also includes more details on implementation and discussion regarding that.

More Code Removal

More code that was either dead or for unsupported legacy systems was removed in two different pull requests (1, 2).

The systems that still had code lingering included SGI IRIS, BeOS, and EBCDIC.

Cross Platform Temporary Filenames

The function to create temporary files in Neovim needed features that weren’t in libuv.

@Hinidu, one of Neovim’s contributors, sent a pull request to libuv to add a new function, uv_fs_mkdtemp . The changes (now part of libuv version 0.11.27) are being used by Neovim to provide temporary file/directory creation and the changes work across platforms.

Because the cross-plaform code has been contributed to libuv, all libuv-based projects can benefit from the changes.

First Bounty Claimed!

Back on April 9th, the first bounty on Neovim’s Bountysource was created. The request was to port an existing patch that was written by Christian Brabandt from Vim to Neovim. The patch gives a breakindent option that will match the indentation when a line is wrapped.

@fmoralesc created a pull request to claim the bounty. A bit of discussion took place and some revisions were made. Since then they have been merged into the master branch and @fmoralesc has been awarded the bounty!

More Unit Tests

@war1025 has added unit tests for two existing files: buffer.c and fileio.c. Adding more unit test coverage to the code as it is refactored is part of the goal of Neovim.

Core Service Providers

@tarruda made a pull request that is exposing some of Neovim’s core functionality through the msgpack API.

While still volatile as it evolves, this core functionality includes:

Embeddability Progress

@tarruda has added a --embedded-mode flag which will allow another program to start Neovim in the background and use it as a headless instance.

Technically, it uses msgpack-rpc to talk with the client using stdin and stdout.

Windows Progress

Neovim has successfully been compiled in Microsoft Visual C++ as well as using MinGW, in this issue and this one respectively.

Helping Out

Donating

If you’d like to help support development, you may donate using Bitcoins here: 1Evu6wPrzjsjrNPdCYbHy3HT6ry2EzXFyQ or back the team on the Neovim Bountysource page.

Contributing

If you an experienced developer or inexperienced but wanting to learn, visit the GitHub repo and check out the README, CONTRIBUTING guide, and finally the Wiki to learn more.

There are plenty of opportunities to help out and plenty of things to do.

That’s a Wrap

Do you have any feedback or suggestions regarding this third newsletter? Feel free to reach out through the Neovim Twitter.

Also be sure to subscribe to the RSS feed to stay up-to-date on what is happening in the Neovim world. The next newsletter will be released in two months near the beginning of November.