Releases: davatorium/rofi
1.3.0
V1.3.0: Dan vs. Greg: The never ending story.
This release mostly focussed on cleaning up and refactoring the internals. One of the big changes is that the gui is no
longer based on hard-coded positions. We introduced a widget system with boxes, scrollbars, separators, listview and
textboxes. The boxes (vertical and horizontal) allows us to nice structure the layout and have them resize according to
rules when the window changes size.
This allowed us to make changes at run-time. In the future I hope we can use this to improve the theming (think css like
themes). The cleanup and refactoring is not finished and will continue for the next release.
Beside this we still managed to get some new features in:
Dynamic window size
Enabled by the refactoring, rofi can now resize the window to fit the number of visible entries, so as you type and the
list of options becomes small, so does the windows (this is disabled by default). Rofi will try to keep the text box at
the same place so you don't have to move focus, this means that at the bottom of the screen the window layout is
reversed so the textbox is at the bottom.
Theme selector
To make it easier to get a good looking rofi, we included a theme-selector script and ship rofi with a set of themes.
The script allows you to preview themes, and make them the default theme.
It seems byzanz (to record the gif) changes the colors a bit. It looks better in real-life.
Fuzzy parser
On many request, the fuzzy matcher has been re-added:
ASync DMENU
Rofi can read input data for dmenu asynchronous from displaying. So if you have something that takes a time to produce,
you can see the progress, start filtering and selecting entries before it finishes.
This can be very useful when searching through large data sets.
In the below screenshot it keeps feeding rofi the content of the directory. Rofi indicates it is still receiving data by
the loading...
text.
Async mode is not always possible, and will be disabled if not possible.
Drawing improvements
In this release rofi is more efficient in drawing its content to the X11 window. The basic redraw on expose has been
speedup by a factor 1000. This was obtained by using a server side copy of the internal surface, instead of painting it
with cairo each time. Especially for large (4k and higher) screens, in fullscreen mode, this reduces redrawing from +-
180ms to 0.1 ms. A second improvement was made by configuring X11 not repaint the window background when resized, this
caused some flickering (it was painted black before being drawn). It now keeps the old content and tells rofi to
repaint. This causes trailing, but overall looks nicer.
Removals
We also removed a deprecated option, -opacity
. Did option did full window opacity, basically it makes the whole window
and text transparent. A very ugly effect. The current argb colors in the theme allow a nice transparency, where only the
background of the window is transparent but not the text (you can still reproduce the old style in the new theme format,
by making all colors transparent).
Detailed Changelog
New Features
- Use randr for getting monitor layout. Fallback to xinerama if not available.
- Re-add fuzzy matcher.
- Restructure internal code to use dynamic sizing widgets. (hbox, vbox and lists)
- Async mode for dmenu.
- Add theme selector script.
- Include 21 themes.
- Dynamically sizing window with content.
- When placed at bottom of screen re-order screen to have entry at bottom.
Improvements
- Fix pasting secondary clipboard. (#516)
- By default use all cores to filter entries.
- Make sure drawing priority is higher then reading input data.
- Improve resizing of window, don't make X whipe background.
- Improve close window (shift-delete) action, by sending NET_WM_CLOSE instead of destroying window.
- Create cache and run directory on startup. (#497)
- Fix unneeded redraws on cursor blinking. (#491)
- Improve time till grabbing keyboard. (#494)
- Better error message when failing to parse keybindings, also continue parsing on error.
- Fix problem with custom layouts (#485)
- Speedup drawing of screen. Works well now for 4k and 8k screens. (factor 1000+ speedup for the flipping of buffer)
(#496) - DRun mode more compatible with specification.
- Debug output via g_log.
- Fix password entry cursor position.
- Use bash instead of sh for get_git_rev.sh (#445)
- Add Control+G for cancel (#452)
- Add padding option to textbox (#449)
- Ctrl-click does alternate accept entry. (#429)
- Hide window decoration in normal window mode.
- Click to exit option. (#460)
- Fix cursor blinking on moving. (#462)
- Remove entry from history if fails to execute (#466)
- Fix margins. (#467)
- Improved documentation of functions in code.
- DRun: Set work directory when executing file. (#482)
- Memory leak fixes.
- Improve scrollbar behaviour.
Removals
- opacity option. The transparency support in the theme can do the same and more.
8397
V1.2.0 - 8397
New Features
Despite me saying after every release that it is mostly feature complete; new Rofi, new features.
However these new features are mostly to improve current functionality and debugging.
Below the 4 most important ones.
Underline Match
A new, hopefully welcome, addition is that Rofi now highlights the match in each row:
To accomplish this, now all matching is done using GRegex, as this returns the exact location in the string of each match.
While I don't see a direct use, it is something a lot of other quick search tools provide, so Rofi could not stay
behind.
Multiline Select
While already existing in a very rudimentary form, we now improved the multi-line select in dmenu mode. It will
allow you to select and unselect rows, selected rows are highlighted with a dot and a small counter indicated the amount
of rows selected.
Customize Window string
You can now specify what the window switcher will show.
It allows for some markup to nicely line up the entries.
For example if the with of the window is specified in characters, this would right align the class name
rofi.window-format: {t:-16} ({c:10})
Track configuration option origin
Rofi now keeps track of how configuration options are set. It will now display if it is the default value, set in
Xresources, configuration file or commnadline.
This should help debugging recent bugs, where people had an invalid pid
path set in the configuration file.
Additionally if you dump the configuration, for using on another pc, it will comment the options that are set to their
default value. (So f.e. pidfile location won't be overriden).
Bug Fixes
As no tool is without bugs, and Rofi not being the exception, we did manage to squash a few.
- Fix current desktop window selector.
- Fix launching application in terminal.
- Support
#include
in config file. - Fix rofi on 30bit 10 bit per channel display.
- Correct
Control-u
behaviour to remove till begin of line.Control-w
now whipes the line. - Add missing
Control-k
keybinding, delete till end of line.
Remove features
- Removed fuzzy finder
- Remove i3 workarounds. As i3 has, for more than a year now, native support for EWMH.
- Remove XLib dependency. The last hard dependency on Xlib has been removed by the use of
xcb-util-xrm.
A trump card
New Features
- Keys mode, showing keybindings.
- Stop cycling option (#407) (Thx to Yaroslav)
- Kill window on delete entry (#316)
Improvements
- Add Control+Backspace as remove word back keybinding.
- Allow user to use X11 background for fake transparency (#390)
- Allow user to specify background image.
- Improved keybinding handling, allowing on-release and modifier only (#384).
- Use display name for prompt (#409)
- Parse subdirectories in drun parser (#416)
- Switch to stop cycling (#407)
Bug fixes
- Grab mouse pointer with keyboard
Release the kraken
Welcome in 2016
V1.0.0 - Welcome in 2016
The new release, after a long development cycle, is finally out. It has a lot of changes that are hopefully invisible to the user. On top of that we decided it is time to deprecate some old stuff left from the simpleswitcher era.
The biggest changes in this version are two major rewrites in the hope to improve maintainability and code quality.
The biggest changes in this release are:
XLib to xcb
With the help of SardemFF7 rofi we broke free from the massif xlib and moved to xcb. This resulted in cleaner and faster code. To offer all the functionality offered by the xlib version, we do depend on a relatively new xkbcommon (0.5.0), luckily most distributions latest releases should be supporting this. In this move we manage to squash several long standing bugs and open a possibility to fix more in the future.
GLib Mainloop
Beside the large xcb move, we also started using a Glib Mainloop. This allowed us to remove several complex code structures. This change should be mostly invisible for the user, beside the fact that the cursor in the entry box now blinks.
Config file
Not everybody seems to like configuration via Xresources, so for those people we now support a configuration file in XDG_CONFIG_HOME/rofi/config
, or passed from the commandline via the -config
option. Settings in the config file will override Xresources and is read on each startup.
Version scheme
Rofi now no longer uses 0.year.month as release number, but switches to a more common scheme:
major.minor.patch. The release number 1.0.0 has no significant meaning, but was a logic followup on 0.15.12. we added features and broke backwards compatibility.
Better locale and UTF-8 handling
In our continious effort of making rofi handle UTF-8 and locales correctly we made the run dialog convert to and from the locale filesystem encoding correctly, made the dmenu input parser more robust for handling invalid UTF-8 and we try to convert coming from Xorg.
"Regression"
There where also some victims of the big rewrite, we decided to remove an old remnants from the simpleswitcher era, namely daemon mode. In our opinion this is duplicate functionality, if you are using rofi it is very likely you are either running a window manager (like i3) that implements global hotkey functionality, or running a keyboard daemon like sxhkd.
A second victim, that had been marked deprecated for more then a year, is the old method of specifying themes where every color option had one commandline flag. This method was very verbose and incomplete. With the theme repository and the online theme generator using and creating new themes should be easy enough.
Changelog
Below is a more complete changelog between the 0.15.12 and the 1.0.0 release.
New Features
- Blinking cursor
- Separate configuration file
- History in drun mode (#343)
- Context menu mode, show rofi at the mouse pointer
Improvement
- auto select and single item on dmenu mode (#281)
- Unlimited window title length.
- Correctly follow the active desktop, instead of active window.
- If requesting modi that is not enabled, show it anyway.
- DMenu password mode. (#315)
- Levenshtein sort is now UTF-8 aware.
- Use xcb instead of large xlib library.
- Use GLib mainloop for cleaner code and easier external event based handling in future.
- Run dialog: Try to convert between locale, fs encoding and utf8. Fixing problems with non-utf8 filesystem encodings.
- Try to display non-utf8 strings as good as possible.
- Autocomplete bang hint in combi mode (#380)
- Remove magic line length limits by switching to getline from fgets.
- Print git version for git builds in version string.
Bug fixes
- Fix subpixel rendering. (#303)
- Fix basic tests on OpenBSD (#272)
- Fix wrong use of memcpy (thx to Jasperia).
- Work around for sigwaitinfo on OpenBSD.
- Ignore invalid entries (non-utf8) in dmenu mode.
- Glib signal handling.
- Fix connecting to i3 on bsd.
- Be able to distinguish between empty and cancel in dmenu mode. (#323)
- Fix memcpy on single memory region. (#312)
- Fix opening file with mode a+ and using fseek to overwrite on bsd.
Regressions
- Removal of old themeing method. Given it was incomplete.
- Removal of daemon mode, given this duplicates Window Manager functionality.
Release Candidate 1.0
V1.0.0 - Welcome in 2016
The new release, after a long development cycle, is finally out. It has a lot of changes that are hopefully invisible to
the user. On top of that we decided it is time to deprecate some old stuff left from the simpleswitcher era.
The biggest changes in this version are two major rewrites in the hope to improve maintainability and code quality.
XLib to xcb
With the help of SardemFF7 rofi we broke free from the massif xlib and moved to xcb. This resulted in cleaner and
faster code.
GLib Mainloop
Beside the large xcb move, we also started using a Glib Mainloop. This allowed us to remove several complex code
structures. This change should be mostly invisible for the user, beside the fact that the cursor in the entry box now
blinks.
Config file
Not everybody seems to like configuration via Xresources, so for those people we now support a configuration file in
XDG_CONFIG_HOME/rofi/config
, or passed from the commandline via the -config
option. Settings in the config file will
override Xresources and is read on each startup.
"Regression"
There where also some victims of the big rewrite, we decided to remove an old remnants from the simpleswitcher era,
namely daemon mode. In our opinion this is duplicate functionality, if you are using rofi it is very likely you are
either running a window manager (like i3) that implements global hotkey functionality, or running a keyboard daemon like
sxhkd.
A second victim, that had been marked deprecated for more then a year, is the old method of specifying themes where
every color option had one commandline flag. This method was very verbose and incomplete. With the theme
repository and the online theme
generator using and creating new themes should be easy enough.
Changelog
Below is a more complete changelog between the 0.15.12 and the 1.0.0 release.
New Features
- Blinking cursor
- Separate configuration file
- History in drun mode (#343)
- Context menu mode, show rofi at the mouse pointer
Improvement
- auto select and single item on dmenu mode (#281)
- Unlimited window title length.
- Correctly follow the active desktop, instead of active window.
- If requesting modi that is not enabled, show it anyway.
- DMenu password mode. (#315)
- Levenshtein sort is now UTF-8 aware.
- Use xcb instead of large xlib library.
- Use GLib mainloop for cleaner code and easier external event based handling in future.
Bug fixes
- Fix subpixel rendering. (#303)
- Fix basic tests on OpenBSD (#272)
- Fix wrong use of memcpy (thx to Jasperia).
- Work around for sigwaitinfo on OpenBSD.
- Ignore invalid entries (non-utf8) in dmenu mode.
- Glib signal handling.
- Fix connecting to i3 on bsd.
- Be able to distinguish between empty and cancel in dmenu mode. (#323)
- Fix memcpy on single memory region. (#312)
- Fix opening file with mode a+ and using fseek to overwrite on bsd.
- Run dialog: Try to convert between locale, fs encoding and utf8. Fixing problems with non-utf8 filesystem encodings.
Regressions
- Removal of old themeing method. Given it was incomplete.
- Removal of daemon mode, given this duplicates Window Manager functionality.
Greg is Luci
Release 0.15.12
The 0.15.12 release of rofi focusses on improving overall user experience. These improvements mostly focussed on
three things, first we (tried to) fix the problems with complex keyboard layouts, second we tried to make theming of
rofi easier. Also we added several speedups. Below I will highlight these bigger changes in more details
Now that rofi reached an acceptable maturity level, we will start using more common
version numbering. Right now rofi uses 0.year.month
for version numbers.
Starting with next version the widely used major.minor.bugfix
scheme will be used.
This means, that next rofi version will either be
- 0.15.13 (bugfix release)
- 0.16.0 (minor release) or (if no major bugs are discovered)
- 1.0.0 (major release)
Keyboard Layouts
Rofi used to have problems with keyboard layouts that used modifier keys to switch between different layers.
These problems should now be a thing of the past.
Note the syntax for binding keys has slightly changed. The Mod1, Mod2, etc. keywords are no longer available.
There was no good way to detect how these keys where mapped and if they could be used as modifiers. E.g. if the right
alt (say Mod3) is configured to switch between layouts, it cannot work as modifier key to make a Mod3-p
keybinding.
Rofi will now check if the current layout has the SuperR,SuperL,AltGr,HyperL,HyperR keys available. If
they are available they can be used for keybindings, if not, the user gets a warning.
Speedups
DMenu reading from stdin
Rofi used to have a custom fgets
implementation that supported custom separators. The has been repaced by the
getdelim
feature of POSIX '08, this gave a speedup of 6x (from 648 ms for 202000 lines down to 108ms).
Multi-Core power
Still disabled by default, rofi can now spawn multiple threads for filtering rows. Depending on the underlying
hardware we saw a 1.5x speedup running on a dual core ARM and up to a 3.5x speedup on a quadcore (8 threads) i7 CPU.
It uses Glib's GThreadPool and will therefore spawn threads as needed and clean them up again afterwards.
To enable this option pass the -threads 0
option, this will autodetect the number number of hw-threads. Pass -threads 4
to force it to use 4 threads. Setting the number to 1, disables it.
Themes
Rofi color themes can be specified in a lot of detail, including the use of transparency to get desired results.
However color syntax proved to be difficult and testing it can be a hassle. To solve this we added a web frontend for writing
themes (with live preview) and a themes repository.
To make things even easier, you can now take screenshots of rofi from within rofi with a simple keybinding.
Theme repository
This has been requested several times and rofi's website actually has a theming page. This however got outdated quickly
and neither the themes or the screenshots are correct anymore. The newly added rofi-themes git repository allows you to
add themes easily: Fork the repository and export your current color theme with rofi -dump-xresources-theme. Place
it in the theme directory of the repository and run the update script. This will automatically generate screenshots and
update the page. Update your fork and send a pull request. This way your theme will appear on official themes page,
once it's merged.
The repository can be found here
Themenator
The second tool is a website allowing you to easily create themes and preview all changes life, the
themenator Big thanks to
SardemFF7 who got tired of me complaining, took the very rough prototype and turned it
into something beautiful.
Hopefully people will make beautiful themes and submit them to the theme repository.
Full ChangeLog
New features:
- Initial
-dump
command for dmenu mode. (#216) - Threading support.
- Parallel checking for ASCII.
- Parallel string matching.
- Autodetect number of HW-threads.
- Disabled by default.
- Highlight multiple selected rows (#287,#293)
- Dmenu can read from file instead of stdin.
- Regex matching (#113)
- Take Screenshot of rofi using keybinding.
- Hotkey for sorting: (#298)
- Option to set scrollbar width.
Improvements:
- Fix return code of multi-select.
- Update manpage (#289, #291)
- Improve speed of reading stdin in dmenu mode.
- Correctly handle modifier keys now. Should now support most weird keyboard layouts and switching between them.
(#268, #265, #286) - Correctly set locale, fixing issues with entering special characters. (#282)
- DRun mode support
NoDisplay
setting (#283) - Pango markup is matched when filtering. (#273)
Bug fixes:
0.15.11
0.15.10
New feature:
- Support for Startup Notification
- Standalone mode in dmenu
- ssh: known_hosts parsing
- Full screen support
- Glob style matching
- Cairo drawing
- Fast ascii filtering (thx to Tom Hinton)
- Combi bang support
- normal window mode for dmenu
- Startup notification support
- Current desktop window mode
Improvements:
- Keep same line selected
- Cleanup menu code by re-using Switcher
- Fix drawing on resize
- Fix rofi -h output
- allow disabling of tokenizing
- Dragging scrollbar
- Allow none type on separator
- Dmenu support markup in fields
Bug fixes:
- dmenu use switcher system
- release keyboard on focus out event, regrab it on focus in event
- Support
\0
separator
0.15.8
New feature:
- Scrollbar.
- More custom keybindings.
Improvements:
- dmenu compatibility.
- Don't refilter on all keypresses.
- Hide Docks and desktops from the window list. (remove i3bar hack)
Bug fixes:
- Fix Desktop numbering.
- Mis-alignment of arrow down box with message (#189)
- Fix issue with mouse interaction needing keyboard press to complete.
- Fix -no-custom still allows escape to quit.
- Fix compiler warnings.
- Fix dmenu mode. (#200)
- Break CMD AI to have dmenu compatibility.
- Fix processing of signals.