* feat: add calculator plugin * add MIT license * fix(calculator): typo * fix(calculator): wrong PANEL_ID * remove LICENSE
100 lines
3.4 KiB
Markdown
100 lines
3.4 KiB
Markdown
# Calculator
|
||
|
||
A calculator for the Noctalia bar. It evaluates whole expressions with operator
|
||
precedence, offers both a keypad and a typed input line in its panel, and keeps
|
||
the last result visible in the bar.
|
||
|
||
## Plugin
|
||
|
||
| Field | Value |
|
||
| --- | --- |
|
||
| ID | `yuuto/calculator` |
|
||
| Entries | Bar widget: `bar`; panel: `panel` |
|
||
|
||
The `panel` entry owns the calculator model and publishes it through Noctalia's
|
||
per-plugin state channel. The `bar` widget is a thin client: it reads that state
|
||
and opens the panel.
|
||
|
||
## Usage
|
||
|
||
Add the `bar` bar widget to your bar. It shows a calculator glyph, plus the last
|
||
result once there is one. Left click opens the panel, right click clears the
|
||
calculator. On a vertical bar only the glyph is shown, with the current
|
||
expression as its tooltip.
|
||
|
||
The panel evaluates as you type. The small line shows the expression, the large
|
||
line the live result, and the copy button next to it puts the result on the
|
||
clipboard.
|
||
|
||
Enter expressions either with the keypad or by typing into the input line, where
|
||
Enter evaluates. Pressing `=` keeps the result in the input, so the next
|
||
operator continues from it. The keypad uses plain text labels (`AC`, `+/-`,
|
||
`DEL`, `*`, `/`) rather than symbol glyphs, so it renders with any bar font.
|
||
|
||
Open the panel over IPC:
|
||
|
||
```sh
|
||
noctalia msg panel-toggle yuuto/calculator:panel
|
||
```
|
||
|
||
### Expression syntax
|
||
|
||
Operators are `+`, `-`, `*`, `/` and `^`, with parentheses and the usual
|
||
precedence; `^` is right associative. A trailing `%` divides by 100, so
|
||
`200*15%` is `30`. The typed input also accepts `×`, `÷` and `−`.
|
||
|
||
Available constants: `pi`, `tau`, `e`.
|
||
|
||
Available functions: `sin`, `cos`, `tan`, `asin`, `acos`, `atan`, `atan2`,
|
||
`sinh`, `cosh`, `tanh`, `ln`, `log`, `log2`, `log10`, `exp`, `sqrt`, `cbrt`,
|
||
`abs`, `floor`, `ceil`, `round`, `trunc`, `sign`, `mod`, `pow`, `hypot`, `min`,
|
||
`max`.
|
||
|
||
`log(x)` is base 10; `log(x, b)` is base `b`. `mod(a, b)` is the remainder, since
|
||
`%` means percent here. The trigonometric functions follow the angle unit
|
||
setting, shown in the panel header as `RAD` or `DEG`.
|
||
|
||
## Settings
|
||
|
||
### Plugin
|
||
|
||
| Setting | Type | Default | Description |
|
||
| --- | --- | --- | --- |
|
||
| `precision` | `int` | `8` | Maximum decimals used when formatting results, 0 to 10. |
|
||
| `angle_unit` | `select` | `rad` | Angle unit for the trigonometric functions. |
|
||
|
||
### Bar Widget
|
||
|
||
| Setting | Type | Default | Description |
|
||
| --- | --- | --- | --- |
|
||
| `show_bar_value` | `bool` | `true` | Shows the last result next to the calculator glyph. |
|
||
| `max_bar_length` | `int` | `9` | Longer results are shortened with a trailing `~`. |
|
||
|
||
## IPC
|
||
|
||
Beyond opening the panel, the `panel` entry accepts three events. The `all`
|
||
target addresses every live instance.
|
||
|
||
```sh
|
||
noctalia msg plugin yuuto/calculator:panel all eval "2+3*4"
|
||
noctalia msg plugin yuuto/calculator:panel all insert "+8"
|
||
noctalia msg plugin yuuto/calculator:panel all clear
|
||
```
|
||
|
||
`eval` replaces the expression and evaluates it, `insert` appends to the current
|
||
expression, and `clear` resets the calculator.
|
||
|
||
## Notes
|
||
|
||
Expressions are tokenized and parsed by the plugin itself, so evaluating never
|
||
runs a shell command and no external tool is required. Results reach the
|
||
clipboard through `noctalia.copyToClipboard`.
|
||
|
||
The panel keeps its model in the plugin state channel rather than in script
|
||
locals, so clearing from the bar widget and reopening the panel stay in sync.
|
||
|
||
## Credits
|
||
|
||
Keypad layout and feature set are modelled on the v4 Quickshell calculator plugin
|
||
by pir0c0pter0 (MIT).
|