Rofi: A window switcher, application launcher and dmenu replacement
Bug fixes
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:
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.
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.
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.
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.
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.
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.
Below is a more complete changelog between the 0.15.12 and the 1.0.0 release.
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.
With the help of SardemFF7 rofi we broke free from the massif xlib and moved to xcb. This resulted in cleaner and faster code.
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.
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.
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.
Below is a more complete changelog between the 0.15.12 and the 1.0.0 release.
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
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.
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).
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.
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.
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
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.
-dump
command for dmenu mode. (#216)NoDisplay
setting (#283)\0
separatorNew 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.
New feature:
Bug fixes:
Improvements:
Cleanup: