calculator-mode is an interactive compiled Lisp function in `calculator.el'.


A [not so] simple calculator for Emacs.

This calculator is used in the same way as other popular calculators
like xcalc or calc.exe -- but using an Emacs interface.

Expressions are entered using normal infix notation, parens are used as
normal. Unary functions are usually postfix, but some depends on the
value of `calculator-unary-style' (if the style for an operator below is
specified, then it is fixed, otherwise it depends on this variable).
`+' and `-' can be used as either binary operators or prefix unary
operators. Numbers can be entered with exponential notation using `e',
except when using a non-decimal radix mode for input (in this case `e'
will be the hexadecimal digit).

Here are the editing keys:
* `RET' `=' evaluate the current expression
* `C-insert' copy the whole current expression to the `kill-ring'
* `C-return' evaluate, save result the `kill-ring' and exit
* `insert' paste a number if the one was copied (normally)
* `delete' `C-d' clear last argument or whole expression (hit twice)
* `backspace' delete a digit or a previous expression element
* `h' `?' pop-up a quick reference help
* `ESC' `q' exit (`ESC' can be used if `calculator-bind-escape' is
non-nil, otherwise use three consecutive `ESC's)

These operators are pre-defined:
* `+' `-' `*' `/' the common binary operators
* `\' `%' integer division and reminder
* `_' `;' postfix unary negation and reciprocal
* `^' `L' binary operators for x^y and log(x) in base y
* `Q' `!' unary square root and factorial
* `S' `C' `T' unary trigonometric operators: sin, cos and tan
* `|' `#' `&' `~' bitwise operators: or, xor, and, not

The trigonometric functions can be inverted if prefixed with an `I', see
below for the way to use degrees instead of the default radians.

Two special postfix unary operators are `>' and `<': whenever a binary
operator is performed, it is remembered along with its arguments; then
`>' (`<') will apply the same operator with the same right (left)

hex/oct/bin modes can be set for input and for display separately.
Another toggle-able mode is for using degrees instead of radians for
trigonometric functions.
The keys to switch modes are (`X' is shortcut for `H'):
* `D' switch to all-decimal mode, or toggle degrees/radians
* `B' `O' `H' `X' binary/octal/hexadecimal modes for input & display
* `i' `o' followed by one of `D' `B' `O' `H' `X' (case
insensitive) sets only the input or display radix mode
The prompt indicates the current modes:
* "D=": degrees mode;
* "?=": (? is B/O/H) this is the radix for both input and output;
* "=?": (? is B/O/H) the display radix (when input is decimal);
* "??": (? is D/B/O/H) 1st char for input radix, 2nd for display.

Also, the quote key can be used to switch display modes for decimal
numbers (double-quote rotates back), and the two brace characters
("{" and "}" change display parameters that these displayers use,
if they handle such). If output is using any radix mode, then these
keys toggle digit grouping mode and the chunk size.

Values can be saved for future reference in either a list of saved
values, or in registers.

The list of saved values is useful for statistics operations on some
collected data. It is possible to navigate in this list, and if the
value shown is the current one on the list, an indication is displayed
as "[N]" if this is the last number and there are N numbers, or
"[M/N]" if the M-th value is shown.
* `SPC' evaluate the current value as usual, but also adds
the result to the list of saved values
* `l' `v' computes total / average of saved values
* `up' `C-p' browse to the previous value in the list
* `down' `C-n' browse to the next value in the list
* `delete' `C-d' remove current value from the list (if it is on it)
* `C-delete' `C-c' delete the whole list

Registers are variable-like place-holders for values:
* `s' followed by a character attach the current value to that character
* `g' followed by a character fetches the attached value

There are many variables that can be used to customize the calculator.
Some interesting customization variables are:
* `calculator-electric-mode' use only the echo-area electrically.
* `calculator-unary-style' set most unary ops to pre/postfix style.
* `calculator-user-registers' to define user-preset registers.
* `calculator-user-operators' to add user-defined operators.
See the documentation for these variables, and "calculator.el" for
more information.

key binding
--- -------

C-c calculator-clear-saved
C-d calculator-clear
C-g calculator-quit
C-h calculator-backspace
C-j calculator-enter
RET calculator-enter
C-n calculator-saved-down
C-p calculator-saved-up
C-y calculator-paste
ESC Prefix Command
SPC calculator-save-on-list
" calculator-rotate-displayer-back
' calculator-rotate-displayer
+ calculator-op-or-exp
- calculator-op-or-exp
. calculator-decimal
0 .. 9 calculator-digit
? calculator-help
B calculator-radix-mode
D calculator-dec/deg-mode
H calculator-radix-mode
O calculator-radix-mode
X calculator-radix-mode
[ calculator-open-paren
] calculator-close-paren
a .. d calculator-digit
e calculator-exp
f calculator-digit
g calculator-get-register
h calculator-help
i Prefix Command
o Prefix Command
q calculator-quit
s calculator-set-register
{ calculator-displayer-prev
} calculator-displayer-next
DEL calculator-clear
<C-delete> calculator-clear-saved
<C-insert> calculator-copy
<C-kp-enter> calculator-save-and-quit
<C-return> calculator-save-and-quit
<S-insert> calculator-paste
<backspace> calculator-backspace
<copy> calculator-copy
<delete> calculator-clear
<down> calculator-saved-down
<enter> calculator-enter
<f1> calculator-help
<help> calculator-help
<insert> calculator-paste
<kp-0> calculator-digit
<kp-1> calculator-digit
<kp-2> calculator-digit
<kp-3> calculator-digit
<kp-4> calculator-digit
<kp-5> calculator-digit
<kp-6> calculator-digit
<kp-7> calculator-digit
<kp-8> calculator-digit
<kp-9> calculator-digit
<kp-add> calculator-op-or-exp
<kp-decimal> calculator-decimal
<kp-divide> calculator-op
<kp-enter> calculator-enter
<kp-multiply> calculator-op
<kp-subtract> calculator-op-or-exp
<linefeed> calculator-enter
<mouse-2> calculator-paste
<paste> calculator-paste
<remap> Prefix Command
<return> calculator-enter
<space> calculator-save-on-list
<up> calculator-saved-up

ESC ESC Prefix Command

M-ESC ESC calculator-quit

o B calculator-radix-output-mode
o D calculator-radix-output-mode
o H calculator-radix-output-mode
o O calculator-radix-output-mode
o X calculator-radix-output-mode
o b calculator-radix-output-mode
o d calculator-radix-output-mode
o h calculator-radix-output-mode
o o calculator-radix-output-mode
o x calculator-radix-output-mode

i B calculator-radix-input-mode
i D calculator-radix-input-mode
i H calculator-radix-input-mode
i O calculator-radix-input-mode
i X calculator-radix-input-mode
i b calculator-radix-input-mode
i d calculator-radix-input-mode
i h calculator-radix-input-mode
i o calculator-radix-input-mode
i x calculator-radix-input-mode

This mode runs the hook `calculator-mode-hook', as the final step
during initialization.