From 5d9c6f17db619edad416c35559e56319a66333ae Mon Sep 17 00:00:00 2001 From: Jay Belanger Date: Sat, 9 Feb 2013 17:17:05 -0600 Subject: [PATCH] * 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. --- doc/misc/ChangeLog | 5 +++++ doc/misc/calc.texi | 36 +++++++++++++++++++++++++++--------- lisp/ChangeLog | 6 ++++++ lisp/calc/calc-units.el | 10 ++++++++-- lisp/calc/calc.el | 8 ++++++++ 5 files changed, 54 insertions(+), 11 deletions(-) diff --git a/doc/misc/ChangeLog b/doc/misc/ChangeLog index c0a454d31b5..11ff3700da4 100644 --- a/doc/misc/ChangeLog +++ b/doc/misc/ChangeLog @@ -1,3 +1,8 @@ +2013-02-09 Jay Belanger + + * calc.texi (Basic Operations on Units): + (Customizing Calc): Mention the variable `calc-allow-units-as-numbers'. + 2013-02-08 Aidan Gauland * eshell.texi: Fill most of the missing sections. diff --git a/doc/misc/calc.texi b/doc/misc/calc.texi index a5514867a99..da018acffe9 100644 --- a/doc/misc/calc.texi +++ b/doc/misc/calc.texi @@ -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. diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 5a9af8c42a0..b673173bd1f 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,9 @@ +2013-02-09 Jay Belanger + + * 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 * subr.el (buffer-file-type, default-buffer-file-type): Remove. diff --git a/lisp/calc/calc-units.el b/lisp/calc/calc-units.el index 72d51d9241c..b334d7b3b45 100644 --- a/lisp/calc/calc-units.el +++ b/lisp/calc/calc-units.el @@ -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") diff --git a/lisp/calc/calc.el b/lisp/calc/calc.el index c35e7650254..db30d53d537 100644 --- a/lisp/calc/calc.el +++ b/lisp/calc/calc.el @@ -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." -- 2.39.5