Howl 0.6 released!
We are very happy to announce the release of Howl 0.6, available for download here!
It’s been some time since the last release, but good things come to those who wait :) Highlights of this release are mentioned below and the full changelog since 0.5 is included at the bottom of this blog post. Thanks to all of our contributors!
File search support
One of the major new features in Howl 0.6 is the support for quickly and easily
searching files within the current project. This new feature is supported by two
new commands, the project-file-search
command (bound to ctrl_shift_f
by
default) and the project-file-search-list
command (bound to ctrl_shift_g
by
default). These two commands serves multiple use cases that should make editing
and coding easier.
The project-file-search
command is great for quickly navigating around in your
code base, or to easily preview different usages or occurences. Just press
ctrl_shift_f
on the current word and you’ll see a list of all matching
occurences, allowing you to both see all usages and navigate to the location of
your choice. As you’d expect from Howl in general you’ll get live previews for
all matches in the list (and syntax highlighted matches at that):
You can preview the matches by moving up and down in the list, and choose to
navigate to a specific location by pressing enter
.
There’s also the new project-file-search-list
command. While the previous
project-file-search
command is great for quick navigation and previewing,
another use case (especially when coding) is to process all occurences of a
particular hit. As an example, you might want to refactor a particular function
and need to update or verify all usages of it. In this scenario
project-file-search-list
is your friend. Instead of presenting all hits in a
popup list for navigation, this command will instead show all the matches in a
buffer, allowing you go through and check off each match.
You can navigate the buffer as you would do a normal buffer, and you can
navigate to a specific occurence by pressing enter
. Any visited items are
marked visually in order to help you keep track of what items you have
processed. You can also manually mark results as processed or not processed by
pressing space
on a specific occurence. You can turn on automatic previews for
the search results by pressing p
, and turn them off using escape
.
Under the hood searching is accomplished by utilizing a particular “searcher”. Howl ships with built-in support for the Ripgrep (rg) searcher and the silver searcher (ag), and also provides a native Howl searcher in case neither of those are present. You can of course also provide your own searcher if you like by registering one with the file_search module.
See also: the docs for file searching.
Navigation support
Together with the new file search comes the support for general buffer navigation. Particularly when coding a lot of time is spent navigating back and forth between various files, or between different locations in the same file.
To help with that the 0.6 release ships with three new commands:
navigate-back
, bound toctrl_<
by defaultnavigate-forward
, (bound toctrl_>
by defaultnavigate-go-to
, bound toalt_<
by default
The navigate-back
and navigate-forward
commands allows you to go back and
forth to previous locations of interest, while the navigate-go-to
command will
present you with a list of previous locations that you can choose from. While
it’s easy to see how useful this is coupled with the new file search
functionality, navigation support is useful even when not performing file
searches. There are a lot of other ways for navigating files, such as ordinary
searces, buffer structure navigation, etc. where it’s useful to be able to
quickly go back and forth, so make sure you get into the habit of using the new
feature!
See also: the docs for navigating buffers.
File selector performance improvements
There has been some work spent since the last release on improving the performance of the file selector, as well as improving the user experience for potentially long-running operations. This was documented in a previous blog post, “File selection improvements”, so while we won’t reiterate that here and encourage you to read the blog post instead know that with 0.6 opening files is faster then ever :)
A new theme
0.6 ships with a new built-in theme, Dracula:
Click on the link above to see it in its full glory, and if you’re interested in more then please also have a look at the additional themes listed in the Howl wiki.
The journal buffer
Did you ever wonder if you missed a status update in the status bar, or wondered
about one you saw earlier? Then the new journal buffer comes to the rescue!
Simply run the open-journal
command in the command line to see earlier log
messages .
In closing
As ever, there are a lots of changes that haven’t been mentioned here, so have a look at the changelog since 0.5 below for more information (which is probably not complete either). We’ll aim for doing more timely releases in the future, but we also like to remind every one that the master branch is intended to be stable at all times, so if you want to get the latest developments as they happen then you shouldn’t be afraid to jump on the train.
Code with the pack!
Full Changelog since 0.5
Added
navigate-go-to
command, for going back to a specific previous location.Added support for a “journal” buffer showing the Howl log, available via
open-journal
.Ensure loaded buffers contain valid UTF-8 at all times
C: Support for lexing raw strings
Rust: Improved lexing
Added support for specifying line and column when opening files, e.g.
$ howl my-file:10 $ howl my-file:10:2
Works both when opening a file locally or remotely using --reuse
.
Added support for custom user fonts (place them in
/fonts, e.g. ~/.howl/fonts) Added
project-switch-buffer
command that displays open buffers within the current project.Added two inspectors and a command for documentation to the Go mode
Moving cursor left or right with a selection active now cancels the selection, leaving the cursor at the corresponding end.
Added proper structure support for C/C++ mode
Base scheme support on the newer lisp mode instead of old basic mode
Added the
**popup_menu_accept_key
option, for controlling which key accepts the current option for a popup menu, such as the completion popup. Valid values are ‘enter’ (the default) or ‘tab’.Close completion popup when user activity warrants it (e.g. direction keys, clicking in another location using the mouse, etc.)
Added new built-in theme: Dracula
Added integrated and fast project file search functionality via two new commands:
project-file-search
andproject-file-search-list
Javascript: Support for ES6 templates and new keywords and operators
Performance and functionality improvements for the matcher, used in Howl selection lists, enabling fast matching across much larger data sets.
Performance improvements for recursive file selections (
project-open
and ordinary recursiveopen
command): Between 30x and 32x faster.Respect use_tabs option when commenting
Ensure scrolling works correctly for Gtk+ 3.4
Dart bundle enhancements: improved syntax highlighting
Added support for activities - potentially longer running activities that should run in a apparently blocking way to the user. Example: Loading files from larger directories will now be run as a user visible and user cancellable operation if it takes to long to complete.
Added a new commandline flag,
--run-async
, for running a particular file in a asynchronous Howl context.Added support for shared, low precision after timers
Added options for controlling scrolling speed
Add support for smooth scrolling events (needed for Wayland with two-finger scrolling)
Fixed background drawing for Wayland/Weston/CSD environments (borders outside of the window).
Requested that titlebar is hidden for newer versions of Gnome 3.
Added support for navigating back and forth in a list of previously visited locations. Two new commands,
navigate-back
andnavigate-forward
were added, bound toctrl_<
andctrl_>
respectively.Improved key translation for keys when caps lock is on.
Better Python lexing
Added two new commands,
editor-newline-above
andeditor-newline-below
, that insert a new line above/below the current line. Bound these commands toctrl_shift_return
andctrl_return
.Auto detect line endings when opening a file if possible
Issues resolved
- Issues as seen on Github