🖩 Do live calculations in rofi!
A rofi plugin that uses qalculate's qalc
to parse natural language input and provide results.
Since this uses qalculate's amazing qalc
you can try natural language queries such 500 + 25%
or 5000 EUR to USD
or 150 to hex
. It can also solve linear equations on the fly. Try 60x + 30 = 50
, for instance.
Run rofi like:
rofi -show calc -modi calc -no-show-match -no-sort
The result of the current input can be selected with Ctrl+Enter
, and history entries can be selected with Enter
. By default this will just output the equation/result.
The history file by default sits at $HOME/.local/share/rofi/rofi_calc_history
in case you ever need to delete it or change it manually.
You can disable persistent history if you don't like that.
You need a C compilation toolchain (a cc
, autoconf
, pkg-config
, ...), rofi
(version >= 1.5) as well as qalculate
(version > 2.0).
You will also need development headers for rofi
. Depending on your distribution these may be included in different packages:
- Arch Linux, Gentoo: included with
rofi
,libqalculate
- OpenSUSE:
zypper in rofi rofi-devel qalculate
- Debian:
apt install rofi-dev qalc libtool libtool-bin
- Ubuntu:
apt install rofi-dev qalc libtool
- Solus:
eopkg it rofi-devel libqalculate
- CentOS, Fedora: Install
qalculate
(findrofi-devel
headers yourself) - Others: look it up :)
Some distributions ship an extremely outdated version of qalculate
so you might have to compile your own. If that is the case, see here.
rofi-calc uses autotools as build system. If installing from git, the following steps should install it:
$ git clone https://github.com/svenstaro/rofi-calc.git
$ autoreconf -i
$ mkdir build
$ cd build/
$ ../configure
$ make
$ make install
-
Use the
-qalc-binary
option to specify the name or location of qalculate'sqalc
binary. Defaults toqalc
. -
Use the
-terse
option to reduce the output ofqalc
to just the result of the input expression. -
Use the
-no-unicode
option to disableqalc
's Unicode mode. -
Use the
-calc-command
option to specify a shell command to execute which will be interpolated with the following keys:{expression}
: the left-side of the equation (currently not available when using-terse
){result}
: the right of the equation
The following example copies the result to the clipboard upon pressing the key combination defined by
-kb-accept-custom
(by default Control+Return). NOTE:{result}
should be quoted since it may contain characters that your shell would otherwise interpret:rofi -show calc -modi calc -no-show-match -no-sort -calc-command "echo -n '{result}' | xclip"
Alternatively, this example would immediately type out the result (using
xdotool
) wherever your cursor currently is (upon pressing Control+Return/-kb-accept-custom
):rofi -modi calc -show calc -calc-command 'xdotool type --clearmodifiers "{result}"'
-
The
-calc-command-history
option will additionally add the output ofqalc
to history when the-calc-command
is run. This will have no effect if-no-history
is enabled. -
It's convenient to bind it to a key combination in i3. For instance, you could use:
bindsym $mod+c exec --no-startup-id "rofi -show calc -modi calc -no-show-match -no-sort > /dev/null"
-
To disable the bold font applied to the results by default, you can use the flag
-no-bold
and run rofi like:rofi -show calc -modi calc -no-show-match -no-sort -no-bold
-
To disable persistent history, use
-no-persist-history
:rofi -show calc -modi calc -no-show-match -no-sort -no-persist-history
This will disable writing and loading the history file and thus you'll lose and entered entries upon quitting rofi-calc.
-
To disable the history entirely, use
-no-history
:rofi -show calc -modi calc -no-show-match -no-sort -no-history -lines 0
The benefit of this is that you can simply enter a term and press return and that'll already act on the result by printing it to stdout or via
-calc-command
if configured. -
To enable thousand separators in the output (e.g.
5 * 12 = 6,000
, rather than6000
) add the following to~/.config/qalculate/qalc.cfg
-
For
,
separator:digit_grouping=2
-
For space separator:
digit_grouping=1
-
-
To use a different output format for numeric representations (for instance, some locales use
,
instead of.
as a decimal separator), setLC_NUMERIC
to a different value like this:LC_NUMERIC=de_DE.UTF-8 rofi -show calc -modi calc -no-show-match -no-sort
-
To set a different default locale, set your
LC_MONETARY
variable:LC_MONETARY=de_DE.UTF-8 rofi -show calc -modi calc -no-show-match -no-sort
Make sure the locale is actually available on your system!
-
Use the
-hint-result
option to specify the text of the hint before result. -
Use the
-hint-welcome
option to specify the welcome text.
If you're developing this, it might be helpful to start rofi directly with a locally compiled plugin like this:
autoreconf -i
mkdir build
cd build
../configure
make
rofi -plugin-path .libs -show calc -modi calc -no-show-match -no-sort