Newsletter #1 - A New Hope

June 2014

Welcome to the first newsletter for Neovim, a project that hopes to give a new beginning to a text editor that we all love.

We asked and the support was overwhelming; the community wanted a newsletter.

The plan is to release a newsletter each month to detail the progress and anything else newsworthy for the project.

Future newsletters will be released on the first Friday of every month. That makes the next one scheduled for July 4th.

Playing Catch Up

Let’s take a look at some of the milestones of the months preceding May:

General News

Development News

  • Imported source code was cleaned up.
  • Legacy system support was removed.
  • CMake is now used for building Neovim.
  • The C code is now written according to the C99 standard.
  • Unit tests have been written for some of the refactored portions of the code. Currently there are around 120 tests (more are needed).
  • Job control code that was originally proposed to Vim was improved and implemented in Neovim.
  • A large portion of the OS specific code has been ported to use libuv.
  • Support was added for making remote procedure calls using the new msgpack API.
  • Abstractions for non-blocking reads/writes were introduced.
  • Some format strings used weren’t portable across operating systems. This was addressed in #296, #490, #574.
  • Progress on the newly exposed API has been made. To try it out, check out the test Python client.

At 20,000 Feet

You may be wondering, “just how much has changed since it forked from Vim?” Well, let’s look at some Git statistics.

Taking into account the initial import of Vim which happened January 31, 2014, there have been 1,010 commits across 77 contributors.

This has resulted in: 887 files changed, 575371 insertions(+), 500868 deletions(-) according to git diff --stat.

Using a more sophisticated tool such as gitinspector, we can see some more interesting statistics. The entire report of the analysis can be viewed in this Gist.

Recent Development

Now that we have detailed some of the milestones before the month of May started, we can now look at what has happened in the last month.

Removal of Default Feature Macros

Neovim has turned on some of the features that were optional in Vim at compile time. This has led to various ifdef FEAT_* macros that are no longer needed. These macros were removed.

Removal of Built-in Encryption

Discussion arose regarding Neovim’s inherited crypto code. It was determined that the crypto code should be removed rather than to provide a possibly insecure implementation. The removal was then promptly handled.

Nvim Namespace

Due to name collisions with some of Neovim’s headers, the source code was moved into a ‘nvim’ namespace. It was also determined that nvim would be the internal/technical identifier for the project from that point on.

Improved Logging

Vim did have some logging in place but effort was made to create a better logging utility. The utility uses macros and can log a standard debug message, basic info, a warning message or an error. The logging can be turned on or off depending on if NDEBUG or DISABLE_LOG is defined.

Removing Vim Specific Integer Types

There are Vim specific types that are used where standard types would be better options. The complete information regarding these types can be found in this guideline.

So far short_u, int_u, and long_i types have been removed. long_u removal is currently underway as well with char_u and long types planned for the near future.

Out of Memory Errors

Rather than check to see if malloc returns a NULL when there isn’t enough memory for the allocation, a suite of functions were introduced to handle these out of memory errors.

The functions take care of error handling if this ever were to happen. The removal of the checking for out of memory has spanned many issues (and months) and have been listed in this issue.

The last removal of the memory errors has almost been completed.

Refactor File Functions

A function called mch_stat() was used to populate a struct that contained info about a given filename. The struct contained the stat info regarding the file.

To increase developer clarity, the code for this was refactored into new functions defined in os/fs.c. The existing calls to mch_stat() were then switched over.

Coverity Support

Coverity Scan is a service that performs a static analysis on source code to look for defects and vulnerabilities. It can look at multiple paths through execution and find issues that might only arise under certain conditions.

Neovim now has a Coverity check that runs multiple times a week in addition to the continuous integration that is used with TravisCI.

API Events

You can now listen and register for various API events. This is done by using the API channel id when making the request.

In addition to this, a Wiki page has been created to detail the current look at the plugin architecture. As the top warns, not all the features have been implemented but take a look at it to learn more.

Shape of Things to Come

The following is a list of things that are either in progress or on the roadmap.

  1. Finish porting the rest of the OS layer to libuv.
  2. Continue work on VimL -> Lua translator by @ZyX-I.
  3. Use include-what-you-use to clean up headers and includes as discussed.
  4. Remove the use of temp files when using system() and use pipes instead.
  5. Add the functionality of redraw events.
  6. Add Travis builds for OS X.

A Note on the VimL to Lua Translator

There has been some questioning on the motivation for this feature. The reasoning is that the evaluation of the VimL language is housed in the file called eval.c.

The file currently has 19,164 lines of code. By creating the translator, it would remove the need for this evaluator. Instead the Lua code could rely on the newly developed API that would be properly tested.

First Release

When asked in the mailing list about the progress, Thiago detailed the list of things that’s necessary for the first official release:

  • Finish implementation of redraw events <- doing this right now
  • Use the redraw events to implement a new infrastructure for integration tests based on busted/lua.
  • Write a cross-platform GUI program
  • Compatibility layer for old python plugins on top of the python client(except for plugins that use python features introduced in 7.4)
  • Make it compile/run on windows(I dont think this will be hard since a lot of platform-specific stuff already runs on libuv)

If there’s a volunteer, I’m going to delegate writing the GUI program after I finish implementing redraw events since I’m not very good with designing UIs.

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 first 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 the first Friday of July.

Until next time. :wq

News

Find more updates in the news archive. There's also an RSS feed.

What is Neovim?

Neovim is a Vim-based text editor engineered for extensibility and usability, to encourage new applications and contributions.

Discuss

Visit #neovim:matrix.org or #neovim on irc.libera.chat to chat with the team.