1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2024-11-27 07:37:33 +00:00

* 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.
This commit is contained in:
Jay Belanger 2013-02-09 17:17:05 -06:00
parent eff1c1900f
commit 5d9c6f17db
5 changed files with 54 additions and 11 deletions

View File

@ -1,3 +1,8 @@
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.

View File

@ -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.

View File

@ -1,3 +1,9 @@
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.

View File

@ -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")

View File

@ -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."