rofi-calc
๐ฉ 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.
Installation
Via package manager
From source
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:
dpkg --install rofi-dev qalc libtool
- 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:
$ autoreconf -i
$ mkdir build
$ cd build/
$ ../configure
$ make
$ make install
Advanced Usage
-
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}"'
-
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.
Development
If you're developing this, it might be helpful to start rofi directly with a locally compiled plugin like this:
rofi -plugin-path build/.libs -show calc -modi calc -no-show-match -no-sort