Commit 5d9c6f17 authored by Jay Belanger's avatar Jay Belanger
Browse files

* doc/misc/calc.texi (Basic Operations on Units):

  (Customizing Calc): Mention the variable `calc-allow-units-as-numbers'.

* lisp/calc/calc.el (calc-allow-units-as-numbers): New variable.
* lisp/calc/calc-units.el (calc-convert-units): Use new variable.
parent eff1c190
2013-02-09 Jay Belanger <jay.p.belanger@gmail.com>
* calc.texi (Basic Operations on Units):
(Customizing Calc): Mention the variable `calc-allow-units-as-numbers'.
2013-02-08 Aidan Gauland <aidalgol@no8wireless.co.nz>
* eshell.texi: Fill most of the missing sections.
......
......@@ -27866,11 +27866,6 @@ acres per meter-second.) Remainder units are expressed in terms of
``fundamental'' units like @samp{m} and @samp{s}, regardless of the
input units.
 
If you want to disallow using inconsistent units, you can set the customizable variable
@code{calc-ensure-consistent-units} to @code{t} (@pxref{Customizing Calc}). In this case,
if you request units which are inconsistent with the original units, you will be warned about
it and no conversion will occur.
One special exception is that if you specify a single unit name, and
a compatible unit appears somewhere in the units expression, then
that compatible unit will be converted to the new unit and the
......@@ -27880,6 +27875,12 @@ change the @samp{s} to @samp{ms} to get @samp{9.8e-4 cm/ms^2}.
The ``remainder unit'' @samp{cm} is left alone rather than being
changed to the base unit @samp{m}.
 
If you want to disallow using inconsistent units, you can set the
customizable variable @code{calc-ensure-consistent-units} to @code{t}
(@pxref{Customizing Calc}). In this case, if you request units which
are inconsistent with the original units, you will be warned about it
and no conversion will occur.
You can use explicit unit conversion instead of the @kbd{u s} command
to gain more control over the units of the result of an expression.
For example, given @samp{5 m + 23 mm}, you can type @kbd{u c m} or
......@@ -27912,10 +27913,16 @@ Composite units are expanded as if by @kbd{a x}, so that
 
If the value on the stack does not contain any units, @kbd{u c} will
prompt first for the old units which this value should be considered
to have, then for the new units. Assuming the old and new units you
give are consistent with each other, the result also will not contain
any units. For example, @kbd{@w{u c} cm @key{RET} in @key{RET}}
converts the number 2 on the stack to 5.08.
to have, then for the new units. (If the value on the stack can be
simplified so that it doesn't contain any units, like @samp{ft/in} can
be simplified to 12, then @kbd{u c} will still prompt for both old
units and new units. You can ignore the prompt for old units with
@key{RET}, or turn off the prompt by setting the customizable variable
@code{calc-allow-units-as-numbers} to @code{nil}.
@pxref{Customizing Calc}) Assuming the old and new units you give are
consistent with each other, the result also will not contain any
units. For example, @kbd{@w{u c} cm @key{RET} in @key{RET}} converts
the number 2 on the stack to 5.08.
 
@kindex u b
@pindex calc-base-units
......@@ -35694,6 +35701,17 @@ have different dimensions. The default value of @code{calc-ensure-consistent-uni
is @code{nil}.
@end defvar
 
@defvar calc-allow-units-as-numbers
When converting units, the variable @code{calc-allow-units-as-numbers}
determines whether or not values which can be simplified so that
they don't contain units (such as @samp{ft/in} can be simplified to 12)
can be regarded as not containing units. If
@code{calc-allow-units-as-numbers} is non-@code{nil}, then @kbd{u c}
will prompt for both old units and new units when converting an expression
like @samp{ft/in}, otherwise @kbd{u c} will only prompt for the new units.
The default value of @code{calc-allow-units-as-numbers} is @code{t}.
@end defvar
@defvar calc-undo-length
The variable @code{calc-undo-length} determines the number of undo
steps that Calc will keep track of when @code{calc-quit} is called.
2013-02-09 Jay Belanger <jay.p.belanger@gmail.com>
* calc/calc.el (calc-allow-units-as-numbers): New variable.
* calc/calc-units.el (calc-convert-units): Use new variable.
2013-02-09 Eli Zaretskii <eliz@gnu.org>
 
* subr.el (buffer-file-type, default-buffer-file-type): Remove.
......
......@@ -437,17 +437,22 @@ If COMP or STD is non-nil, put that in the units table instead."
(list new-units (car default-units))
math-default-units-table))))))
(defvar calc-allow-units-as-numbers)
(defun calc-convert-units (&optional old-units new-units)
(interactive)
(calc-slow-wrapper
(let ((expr (calc-top-n 1))
(uoldname nil)
(unitscancel nil)
(nouold nil)
unew
units
defunits)
(if (or (not (math-units-in-expr-p expr t))
(setq unitscancel (eq (math-get-standard-units expr) 1)))
(setq unitscancel (and
calc-allow-units-as-numbers
(eq (math-get-standard-units expr) 1))))
(let ((uold (or old-units
(progn
(setq uoldname
......@@ -457,6 +462,7 @@ If COMP or STD is non-nil, put that in the units table instead."
(read-string "Old units: ")))
(if (equal uoldname "")
(progn
(setq nouold unitscancel)
(setq uoldname "1")
1)
(if (string-match "\\` */" uoldname)
......@@ -469,7 +475,7 @@ If COMP or STD is non-nil, put that in the units table instead."
(unless new-units
(setq new-units
(read-string (concat
(if uoldname
(if (and uoldname (not nouold))
(concat "Old units: "
uoldname
", new units")
......
......@@ -426,6 +426,14 @@ when converting units."
:version "24.3"
:type 'boolean)
(defcustom calc-allow-units-as-numbers
t
"If non-nil, allow unit expressions to be treated like numbers
when converting units, if the expression can be simplified to be unitless."
:group 'calc
:version "24.4"
:type 'boolean)
(defcustom calc-undo-length
100
"The number of undo steps that will be preserved when Calc is quit."
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment