Awesome
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+Return
, and history entries can be selected with Return
. 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
<a href="https://repology.org/project/rofi-calc/versions"><img align="right" src="https://repology.org/badge/vertical-allrepos/rofi-calc.svg" alt="Packaging status"></a>
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:
apt install rofi-dev qalc libtool libtool-bin
- Ubuntu:
apt install rofi-dev qalc libtool
- Solus:
eopkg it rofi-devel libqalculate
- CentOS: Install
qalculate automake libtool
(findrofi-devel
headers yourself) - Fedora:
dnf install qalculate automake libtool cairo-devel rofi-devel
- VoidLinux:
xbps-install -S rofi-devel libqalculate automake libtool
- 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
$ cd rofi-calc/
$ mkdir m4
$ 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}"'
-
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 automatically save last calculation to the history on rofi close, use
-automatic-save-to-history
.:rofi -show calc -modi calc -no-show-match -no-sort -automatic-save-to-history
This means that calculations are put into history even if you don't press
Return
. -
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.
Custom Rofi Theme compatibility
If you are using a custom theme with rofi (e.g. rofi -show drun -theme ~/.config/rofi/mytheme.rasi
) and don't see the result of the calculation, that's because the rofi-calc mode relies on the message
widget that might be hidden by some themes.
In your mytheme.rasi
file or any file, it might @import
, look for the following
mainbox {
children: [...]
}
make sure the list contains message
<br>
for example
mainbox {
children: [inputbar, message, listview]
}
Reference Rofi docs: Layout, Base Widgets, Children
Development
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