What's New in the Open Source Atom and Visual Studio Code Editors

Both the Visual Studio Code and Atom open source code editors, which share technology roots, have come out with updates this week.

Besides being free, open source code editors, the two projects share a lineage to the Electron framework developed by GitHub, which continues to sponsor Atom. In fact, Electron was formerly known as Atom Shell, Wikipedia explains. And Microsoft's VS Code tool also leverages the Electron shell, which was updated along with the code editor in the April release.

Here's a look at new features announced for both projects this week.

Visual Studio Code 1.4
This incremental update of Visual Studio Code is light on features and heavy on bug fixes, but nevertheless incorporates some new functionality in its Workbench, Editor, debugging and extensions.

The most notable recent update to Visual Studio Code actually came with last month's 1.3 update, which for the first time featured the implementation of tabs in the editor, requested by more than 9,000 developers on the UserVoice feature-request site.

The support of tabs followed another oft-requested feature, an integrated terminal, introduced in the May 1.2 update (VS Code gets updated monthly). That feature was requested by more than 6,000 developers.

Tabs in Visual Studio Code
[Click on image for larger view.] Tabs in Visual Studio Code (source: Microsoft)

That new integrated terminal sees "several changes related to polish and compatibility" in the new v1.4 update, Microsoft said in a post this week.

Those terminal improvements include:

  • IME support: Input Method Editor (IME) support has been implemented, allowing input of CJK and Indic characters.
  • Copy and paste support on Windows and Linux: Proper copy and paste support has arrived for Windows and Linux within the terminal. The default keybindings are Ctrl+Shift+C and Ctrl+Shift+V respectively. Note that these command keybindings are not assigned by default on Mac OS X but you can easily add your own keybindings.
  • Context menu: A right-click context menu has been added with the options New Terminal, Copy and Paste.
  • Accessibility: It's now possible to escape focus in the terminal by pressing Ctrl+M to enable Tab focus mode, just like in the editor. When this mode is enabled, Tab and Shift+Tab will not be passed to the terminal but instead change the element that is being focused.

Along with the increased terminal functionality, other highlights of v1.4 listed by Microsoft include:

  • Workbench: Editor actions such as Open Preview and Switch to Changes View are back on the title bar.
  • Editor: Better snippet and suggestions control. New Insert Snippet command with dedicated UI.
  • Debugging: Restart Frame action to rerun a specific stack frame. "Variable paging" feature moved into VS Code and available to all debug extensions.
  • Extension Authoring: New "move" commands to better support VIM gestures. Custom link behavior with the DocumentLinkProvider API. Expanded Debug Protocol.

Microsoft personally thanked by name more than a dozen developers who contributed to the update. "During July, we slowed down feature work in favor of reducing our bug backlog and removing engineering debt," Microsoft said in its post. "However, we were still able to add some improvements."

Atom 1.9 and 1.10 Beta
"Atom is a text editor that's modern, approachable, yet hackable to the core -- a tool you can customize to do anything but also use productively without ever touching a config file," the code editor's Web site declares.

The Atom Code Editor
[Click on image for larger view.] The Atom Code Editor (source: David Ramel)
GitHub, facing a deluge of open issues with the editor, announced that it was implementing new triage mechanisms when it updated the editor -- reportedly used by 1 million developers -- to version 1.7 in April.

The new triage system wasn't mentioned in this week's update announcement, but several new features were added to Atom 1.9. However, this week's post by GitHub's Nathan Sobo announcing the changes focused on a feature that was removed: GitRepositoryAsync.

"Earlier this year, we added an experimental async API for interacting with Git repositories based on libgit2 called GitRepositoryAsync," Sobo explained. "We never officially made this API public, but some package authors started using it anyway based on examples in our bundled packages."

"Unfortunately, our bindings to libgit2 were causing Atom's helper processes to become unstable, leading to hard crashes," Sobo continued. "We apologize to any package authors who may have switched to these new APIs, but we've been forced to back out the async APIs. We'll be trying again soon with a new approach for interacting with Git that's more stable."

Highlighting the features that were actually added, Sobo provided this list:

  • Display Layers, which are going to bring speed improvements as well as new features like free-form folds (via the Fold Selection command) and an improved soft-wrapping algorithm.
  • Electron Upgrade (v0.37.8), which features many performance improvements and enables efficient ligatures rendering on all the platforms.
  • Drag and Drop Layout Management, which provides a very intuitive way for organizing the workspace.
  • Enhanced Reliability When Saving Files, which minimizes the risk of losing files when a hard crash occurs.
  • Shell Commands Compatibility On Windows, which makes the atom command compatible with both Cygwin and Msys.

Sobo noted that those features were first tested in the Atom beta channel. For a sneak preview of what's coming up in that channel for version 1.10, he focused on the Atom Package Manager upgrade.

"We've worked through some challenges with our internal builds that were holding back a much-needed upgrade to apm," Sobo said. "The new version ships with Node 4.4.5 and npm 3.10.5, and solves a variety of issues that occurred when installing Atom packages." Those include:

  • Package dependencies are now flattened by npm 3, preventing problems with paths exceeding the maximum path length on Windows.
  • Packages that depend on native modules now install more reliably.
  • Installing packages behind proxy servers should work now.

Complete compendiums of changes for both channels are available in the 1.9 release notes and 1.10 beta release notes.

About the Author

David Ramel is an editor and writer for Converge360.