Rofi Versions Save

Rofi: A window switcher, application launcher and dmenu replacement

1.0.1

8 years ago

Bug fixes

  • Fix typo in manpage.
  • Return old behaviour for rofi placement (#395, #389)
  • Switch desktop when switching window (#393)
  • Remove unneeded use of bash (#391)
  • Make history parser more robust against corrupted files. (#388)
  • Fix desktop number (#386)

1.0.0

8 years ago

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.

1.0.0-RC1

8 years ago

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.

0.15.12

8 years ago

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.

Rofi Keyboard 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.

Rofi Internal Screenshot

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

Rofi Theme Site

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.

Rofi Themenator

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:

  • Improve error message (#290)
  • Correctly switch to next entry on multi-select when list is filtered (#292)
  • Switch FUNCTION for func. (#288)
  • Fix segfault on empty list and moving through it. (#256,#275)
  • Fix one off of colors (#269)
  • Drun fix uninitialized memory (#285)

0.15.11

8 years ago

New features:

  • (Experimental) Desktop file support

Improvement:

  • Add xdg-terminal to rofi-sensible-terminal

Bug fixes:

  • manpage fixes (#261)
  • Crash in error mesg on invalid config
  • Fix urgent and active being activated at same time
  • Fix crasher on empty list

0.15.10

8 years ago

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

8 years ago

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.

0.15.7

8 years ago
  • Bug fixes:
    • Auto-wrap text in message dialog.
    • Fix ellipsiziing in entry box.
    • Fix crash on empty list with custom input (#175).
    • SSH: Ignore comments in Host line (#178).
    • Fix issues with BSD (#180).
  • New feature:
    • Markup support error message.
    • Implement -no-custom as alternative to -only-select (#176).
    • Fuzzy match option. (#133)
  • Improvements:
    • Make more keys user-configurable. (#66)

0.15.5

9 years ago

0.15.5

Bug fixes:

  • Reduce time waiting for keyboard grab (#153)
  • Also grab Key Release on exit. (#167)
    • Fix failing font size estimation code.

New feature:

  • [DMENU] Allow to select line matching pattern from cmdline.(#165)
  • [DMENU] Allow to set filter from cmdline. (#164)
  • [DMENU] Allow output to be formatted (string, filter, index, index 1 based)
  • [DMENU] Only match input lines mode.
  • [DMENU] Custom keybinding for return value.(#154,#156)
  • [DMENU] Allow additional message line. (#166)

Improvements:

  • (Start) adding keybinding support (#131)
  • Cleanup warnings from clang checkers.
  • Fix keybindings on Russian layout (#169)

Open bugs:

  • Urgency hint not always working (#162)

0.15.4

9 years ago

New feature:

  • Number mode for dmenu. allows user to get index back instead of content.
  • Combi mode. Combine multiple views into one.
  • Highlight current window.
  • Highlight urgent and active row in window view.
  • DMenu allow rows to be highlighted. (single, multiple, ranges)
  • New color specification based on I3. (Can be enabled by settings) (#147)
  • /etc/hosts support for ssh mode. (#137)

Bug fixes:

  • On a single item in list disable auto-select.
  • Fix cursor position (#140)
  • Resolving manpage. (#142)
  • Fix pasting cursor one off. (#150)
  • Fix grave key -> ctrl+grave (#151)

Improvements:

  • Better handle input methods.. Now international keyboard layout works as expected: `e ->è
  • Be more verbose about starting in daemon mode.
  • Print a user-understandable error when launching in daemon mode without a key bound.
  • Add Ctrl(Shift)Tab to switch modi's.
  • Auto size number of columns based on available columns.
  • Better way to determine font height.
  • Fix font vertical centering.
  • One-off when pasting text.
  • Improve rendering of boxes (fixed height and margins)
  • Fix modi switcher boxes size+layout.
  • Reduce work on redraws (do not always calculate new size/position), set text, etc.
  • OO-ify the switchers.
  • Remove unneeded filtered array.

Cleanup:

  • Do not lug argc,argv around everywhere.