Skip to content

Commit

Permalink
deploy: eef3521
Browse files Browse the repository at this point in the history
  • Loading branch information
archseer committed Oct 25, 2023
1 parent c5a0dde commit 4f6b4e0
Show file tree
Hide file tree
Showing 10 changed files with 1,564 additions and 2 deletions.
120 changes: 119 additions & 1 deletion atom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,126 @@
<link href="https://helix-editor.com/atom.xml" rel="self" type="application/atom+xml"/>
<link href="https://helix-editor.com"/>
<generator uri="https://www.getzola.org/">Zola</generator>
<updated>2023-03-31T00:00:00+00:00</updated>
<updated>2023-10-24T00:00:00+00:00</updated>
<id>https://helix-editor.com/atom.xml</id>
<entry xml:lang="en">
<title>Release 23.10 Highlights</title>
<published>2023-10-24T00:00:00+00:00</published>
<updated>2023-10-24T00:00:00+00:00</updated>
<author>
<name>Helix Contributors</name>
</author>
<link rel="alternate" href="https://helix-editor.com/news/release-23-10-highlights/" type="text/html"/>
<id>https://helix-editor.com/news/release-23-10-highlights/</id>
<content type="html">&lt;p&gt;The Helix 23.10 release is finally here! 23.10 introduces some very large
internal changes that enable some powerful features. A very big &lt;em&gt;thank you&lt;&#x2F;em&gt; to
everyone who made this release possible.&lt;&#x2F;p&gt;
&lt;p&gt;New to Helix?
Helix is a modal text editor with built-in support for multiple selections,
Language Server Protocol (LSP), tree-sitter, and experimental support for Debug
Adapter Protocol (DAP).&lt;&#x2F;p&gt;
&lt;p&gt;Let&#x27;s check out this release&#x27;s highlights.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;multiple-language-servers&quot;&gt;Multiple language servers&lt;&#x2F;h2&gt;
&lt;p&gt;23.10 brings a big change to the way we handle language servers.
Previously each language could only support one language server at a time but
now you can configure multiple to work in tandem. For example you might use
the TypeScript language server for JavaScript&#x2F;TypeScript development and also
configure &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;mattn&#x2F;efm-langserver&quot;&gt;efm-langserver&lt;&#x2F;a&gt; for
Prettier formatting and ESLint diagnostics. With the new support for multiple
language servers, you can specify which features to use from each language
server.&lt;&#x2F;p&gt;
&lt;p&gt;This brings a big change to the way language servers are configured in your
language configuration (&lt;code&gt;languages.toml&lt;&#x2F;code&gt;). All language servers are now
specified separately from languages and then each language selects which
language server(s) to use. From the example above, you might configure efm-
langserver and typescript-language-server like so:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;toml&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-toml &quot;&gt;&lt;code class=&quot;language-toml&quot; data-lang=&quot;toml&quot;&gt;&lt;span&gt;[language-server.efm]
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;command &lt;&#x2F;span&gt;&lt;span&gt;= &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;efm-langserver&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;config&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;documentFormatting &lt;&#x2F;span&gt;&lt;span&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;true
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;[language-server.typescript-language-server]
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;command &lt;&#x2F;span&gt;&lt;span&gt;= &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;typescript-language-server&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;args &lt;&#x2F;span&gt;&lt;span&gt;= [&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;--stdio&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;]
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;config&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;hostInfo &lt;&#x2F;span&gt;&lt;span&gt;= &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;helix&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;[[language]]
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;name &lt;&#x2F;span&gt;&lt;span&gt;= &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;typescript&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;auto-format &lt;&#x2F;span&gt;&lt;span&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;true
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;language-servers &lt;&#x2F;span&gt;&lt;span&gt;= [
&lt;&#x2F;span&gt;&lt;span&gt; { &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;name &lt;&#x2F;span&gt;&lt;span&gt;= &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;efm&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;only-features &lt;&#x2F;span&gt;&lt;span&gt;= [&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;format&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;, &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;diagnostics&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;] },
&lt;&#x2F;span&gt;&lt;span&gt; { &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;name &lt;&#x2F;span&gt;&lt;span&gt;= &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;typescript-language-server&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;except-features &lt;&#x2F;span&gt;&lt;span&gt;= [&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;format&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;, &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;diagnostics&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;] },
&lt;&#x2F;span&gt;&lt;span&gt;]
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;See more details in the &lt;a href=&quot;https:&#x2F;&#x2F;docs.helix-editor.com&#x2F;languages.html&quot;&gt;language configuration docs&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;fuzzy-matching-with-nucleo&quot;&gt;Fuzzy matching with Nucleo&lt;&#x2F;h2&gt;
&lt;asciinema-player src=&quot;&#x2F;nucleo-nix-store.cast&quot; cols=&quot;94&quot; rows=&quot;25&quot;&gt;&lt;&#x2F;asciinema-player&gt;
&lt;p&gt;Helix uses &amp;quot;fuzzy&amp;quot; matching to filter as-you-type in components like the file
picker. Previously we used the popular &lt;code&gt;skim&lt;&#x2F;code&gt;&#x2F;&lt;code&gt;fuzzy-matcher&lt;&#x2F;code&gt; crates but in the
23.10 release we&#x27;ve switched to the new
&lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;helix-editor&#x2F;helix&quot;&gt;&lt;code&gt;nucleo&lt;&#x2F;code&gt;&lt;&#x2F;a&gt; crate. Nucleo is
significantly faster than skim and fzf, handles Unicode correctly, and uses a
bonus system that feels more intuitive.&lt;&#x2F;p&gt;
&lt;p&gt;Nucleo also enables us to lazily stream in new items, which is a big boost for
the user experience for pickers. In the asciicast above I&#x27;m scanning through
my computer&#x27;s &lt;code&gt;&#x2F;nix&#x2F;store&lt;&#x2F;code&gt;, a huge directory containing more than twenty
million files. The file picker now works gradually as we scan through the
directory and matches files as we find them.&lt;&#x2F;p&gt;
&lt;p&gt;Nucleo also paves the way for future picker upgrades. Stay tuned to the
upcoming release notes to see where we&#x27;ll take the picker.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;smart-tab&quot;&gt;Smart tab&lt;&#x2F;h2&gt;
&lt;p&gt;Smart tab is a new feature bound to the tab key in the default keymap. When
you press tab and the line to the left of the cursor isn&#x27;t all whitespace,
the cursor will jump to the end of the syntax tree&#x27;s parent node. For example:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;nix&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-nix &quot;&gt;&lt;code class=&quot;language-nix&quot; data-lang=&quot;nix&quot;&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span&gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;key &lt;&#x2F;span&gt;&lt;span&gt;= &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;value&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;;
&lt;&#x2F;span&gt;&lt;span&gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;nested &lt;&#x2F;span&gt;&lt;span&gt;= {
&lt;&#x2F;span&gt;&lt;span&gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;key2 &lt;&#x2F;span&gt;&lt;span&gt;= &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;value2&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;# When the cursor is at the end of the line here, &amp;lt;tab&amp;gt;
&lt;&#x2F;span&gt;&lt;span&gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;# jumps right after the closing brace on the next line.
&lt;&#x2F;span&gt;&lt;span&gt; };
&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;This is useful in languages like Nix for adding semicolons at the end of an
attribute set or jumping to the end of a block in a C-like language:&lt;&#x2F;p&gt;
&lt;asciinema-player src=&quot;&#x2F;smart-tab.cast&quot; cols=&quot;94&quot; rows=&quot;25&quot;&gt;&lt;&#x2F;asciinema-player&gt;
&lt;h2 id=&quot;expanded-support-for-registers&quot;&gt;Expanded support for registers&lt;&#x2F;h2&gt;
&lt;asciinema-player src=&quot;&#x2F;special-registers.cast&quot; cols=&quot;94&quot; rows=&quot;25&quot;&gt;&lt;&#x2F;asciinema-player&gt;
&lt;p&gt;Registers allow you to save and paste values. For example you might select
a paragraph, use &lt;code&gt;&amp;quot;ay&lt;&#x2F;code&gt; to yank it into the &lt;code&gt;a&lt;&#x2F;code&gt; register, and later use &lt;code&gt;&amp;quot;ap&lt;&#x2F;code&gt;
to paste that paragraph. Some registers have special effects when read or
written to though like the &lt;code&gt;_&lt;&#x2F;code&gt; &amp;quot;blackhole&amp;quot; register: any values written are
discarded and nothing can be read. Special registers have been expanded to
include some useful ones from Kakoune and clipboard registers:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;%&lt;&#x2F;code&gt;: the current buffer name&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;#&lt;&#x2F;code&gt;: the number of each selection, 1-indexed&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;.&lt;&#x2F;code&gt;: the contents of each selection&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;*&lt;&#x2F;code&gt; and &lt;code&gt;+&lt;&#x2F;code&gt;: system and primary clipboards&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Also check out the new register statusline element. It appears when you select
a register with &lt;code&gt;&amp;quot;&lt;&#x2F;code&gt;. Notice the &lt;code&gt;reg=#&lt;&#x2F;code&gt; in the bottom-right corner of the
statusline in the asciicast when we select the &lt;code&gt;#&lt;&#x2F;code&gt; register and how it goes
away when we paste that register (&lt;code&gt;p&lt;&#x2F;code&gt;) or increment the selections (&lt;code&gt;C-a&lt;&#x2F;code&gt;).&lt;&#x2F;p&gt;
&lt;h2 id=&quot;initial-support-for-lsp-didchangewatchedfiles&quot;&gt;Initial support for LSP DidChangeWatchedFiles&lt;&#x2F;h2&gt;
&lt;asciinema-player src=&quot;&#x2F;initial-lsp-didchangewatchedfiles.cast&quot; cols=&quot;94&quot; rows=&quot;25&quot;&gt;&lt;&#x2F;asciinema-player&gt;
&lt;p&gt;Some language servers use the DidChangeWatchedFiles notification to discover
changes to related files in other languages. For example, &lt;code&gt;rust-analyzer&lt;&#x2F;code&gt; will
fetch and index new dependencies when you add them to your &lt;code&gt;Cargo.toml&lt;&#x2F;code&gt;.
Helix will now send file change notifications when the file is changed by
Helix itself. Full support for DidChangeWatchedFiles will require a file
watcher but for now we&#x27;re able to support the most common use-case for
DidChangeWatchedFiles.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;syntax-highlight-regex-prompts&quot;&gt;Syntax highlight regex prompts&lt;&#x2F;h2&gt;
&lt;img src=&quot;&#x2F;regex-prompt-highlighting.png&quot; style=&quot;max-width: 80%; display: block; margin-left: auto; margin-right: auto&quot;&#x2F;&gt;
&lt;p&gt;Regex prompts like those created with &lt;code&gt;s&lt;&#x2F;code&gt;, &lt;code&gt;S&lt;&#x2F;code&gt; or &lt;code&gt;|&lt;&#x2F;code&gt; are now syntax highlighted
via tree-sitter-regex. The highlighting makes special characters more obvious
and can catch syntax errors like trailing backslashes.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;wrapping-up&quot;&gt;Wrapping up&lt;&#x2F;h2&gt;
&lt;p&gt;As always, this is just the tip of the iceberg for the 23.10 release. Check out
the &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;helix-editor&#x2F;helix&#x2F;blob&#x2F;master&#x2F;CHANGELOG.md#2310-2023-10-24&quot;&gt;changelog&lt;&#x2F;a&gt; for the full details.&lt;&#x2F;p&gt;
&lt;p&gt;Come chat about usage and development questions in the &lt;a href=&quot;https:&#x2F;&#x2F;matrix.to&#x2F;#&#x2F;#helix-community:matrix.org&quot;&gt;Matrix space&lt;&#x2F;a&gt;
and follow along with Helix&#x27;s development in the &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;helix-editor&#x2F;helix&#x2F;&quot;&gt;GitHub repository&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
</content>
</entry>
<entry xml:lang="en">
<title>Release 23.03 Highlights</title>
<published>2023-03-31T00:00:00+00:00</published>
Expand Down
Loading

0 comments on commit 4f6b4e0

Please sign in to comment.