branch: elpa/casual
commit 35a9a75358a884e40c72f42f74498862c0433366
Author: Charles Choi <[email protected]>
Commit: Charles Choi <[email protected]>
UI Change: Rebind of ‘%’ in Casual Calc Main Menu.
In prior releases of Casual ≤ v2.2.3, the Calc main menu
(`casual-calc-tmenu`)
bound the key ‘%’ to the command `calc-percent`. This however breaks with
the
more common calculator convention of mapping the ‘%’ behavior to actually
calculating a percentage given two numbers, the value and the percent rate.
Also
it is my opinion that the behavior of `calc-percent` is not compelling
enough to
merit placement on the Calc main menu.
This commit changes this behavior so that pressing the ‘%’ key will now
calculate a percentage. For example, if `85` is stored in (2:) and `40` in
(1:),
pressing ‘%’ will leave the result `34` in (1:).
The Financial main menu (`casual-calc-financial-tmenu`) has also been
modified
accordingly. Access to the command `calc-percent` has been moved to this
menu
with the binding ‘P’.
Note that only in both `casual-calc-tmenu` and
`casual-calc-financial-tmenu`,
the ‘%’ key is reserved for percentage calculation. In all other Casual Calc
menus and Calc itself, the ‘%’ key is reserved to be the modulo operator.
---
docs/images/casual-calc-tmenu.png | Bin 370428 -> 385045 bytes
lisp/casual-calc-financial.el | 3 ++-
lisp/casual-calc-utils.el | 25 ++++++++++++++++++++++++-
lisp/casual-calc.el | 4 +---
tests/test-casual-calc-financial.el | 3 ++-
tests/test-casual-calc-utils.el | 2 +-
tests/test-casual-calc.el | 2 +-
7 files changed, 31 insertions(+), 8 deletions(-)
diff --git a/docs/images/casual-calc-tmenu.png
b/docs/images/casual-calc-tmenu.png
index f052332369..c9ebd3a382 100644
Binary files a/docs/images/casual-calc-tmenu.png and
b/docs/images/casual-calc-tmenu.png differ
diff --git a/lisp/casual-calc-financial.el b/lisp/casual-calc-financial.el
index 659900126c..176aa6ea37 100644
--- a/lisp/casual-calc-financial.el
+++ b/lisp/casual-calc-financial.el
@@ -41,7 +41,8 @@
("r" "Rate of Return›" casual-calc-fin-rate-of-return-tmenu)]
["Percentages"
- ("%" "%" calc-percent :transient t)
+ ("%" "𝑎𝑏%" casual-calc--percent-of :transient t)
+ ("P" "%" casual-calc--percent :transient t)
("c" "→%" calc-convert-percent :transient t)
("D" "Δ%" calc-percent-change :transient t)
("=" "=" calc-evaluate :transient t)]
diff --git a/lisp/casual-calc-utils.el b/lisp/casual-calc-utils.el
index 4cde3bc2e5..be72c1786f 100644
--- a/lisp/casual-calc-utils.el
+++ b/lisp/casual-calc-utils.el
@@ -35,7 +35,7 @@
(:power . '("𝑦ˣ" "y^x"))
(:abs . '("|𝑥|" "|x|"))
(:factorial . '(" !" "!"))
- (:percent . '(" ٪" "%"))
+ (:percent . '("%" "%"))
(:percent-change . '(" Δ%" "% change"))
(:pi . '("𝜋" "pi"))
(:e . '("𝑒" "e"))
@@ -145,5 +145,28 @@ plain ASCII-range string."
(casual-calc-undo-suffix)
(casual-lib-quit-all)])
+
+(defun casual-calc--percent-of ()
+ "Apply percentage at top of stack (1:) to value above it (2:).
+
+Given an example stack:
+
+ 2: a
+ 1: b
+
+Executing this function will leave the resultant values on the
+stack:
+
+ 2: a
+ 1: a * b%
+
+The result in (1:) can then be added or subtracted from (2:)."
+ (interactive)
+ (calc-percent)
+ (calc-roll-up 2)
+ (calc-enter 1)
+ (calc-roll-up 3)
+ (calc-times 2))
+
(provide 'casual-calc-utils)
;;; casual-calc-utils.el ends here
diff --git a/lisp/casual-calc.el b/lisp/casual-calc.el
index b7d61fd314..b21f114367 100644
--- a/lisp/casual-calc.el
+++ b/lisp/casual-calc.el
@@ -85,9 +85,7 @@
("!" " !" casual-calc--factorial
:description (lambda () (casual-calc-unicode-get :factorial))
:transient t)
- ("%" " ٪" casual-calc--percent
- :description (lambda () (casual-calc-unicode-get :percent))
- :transient t)
+ ("%" "𝑎𝑏%" casual-calc--percent-of :transient t)
("D" " Δ%" casual-calc--percent-change
:description (lambda () (casual-calc-unicode-get :percent-change))
:transient t)]
diff --git a/tests/test-casual-calc-financial.el
b/tests/test-casual-calc-financial.el
index 75bbd26877..81fa176dee 100644
--- a/tests/test-casual-calc-financial.el
+++ b/tests/test-casual-calc-financial.el
@@ -186,7 +186,8 @@
("t" . casual-calc-fin-periods-to-target-tmenu)
("r" . casual-calc-fin-rate-of-return-tmenu)
- ("%" . calc-percent)
+ ("%" . casual-calc--percent-of)
+ ("P" . casual-calc--percent)
("c" . calc-convert-percent)
("D" . calc-percent-change)
("=" . calc-evaluate)
diff --git a/tests/test-casual-calc-utils.el b/tests/test-casual-calc-utils.el
index e419a4beb7..870b6c4300 100644
--- a/tests/test-casual-calc-utils.el
+++ b/tests/test-casual-calc-utils.el
@@ -66,7 +66,7 @@
(should (string-equal (casual-calc-unicode-get :power) "𝑦ˣ"))
(should (string-equal (casual-calc-unicode-get :abs) "|𝑥|"))
(should (string-equal (casual-calc-unicode-get :factorial) " !"))
- (should (string-equal (casual-calc-unicode-get :percent) " ٪"))
+ (should (string-equal (casual-calc-unicode-get :percent) "%"))
(should (string-equal (casual-calc-unicode-get :percent-change) " Δ%"))
(should (string-equal (casual-calc-unicode-get :pi) "𝜋"))
(should (string-equal (casual-calc-unicode-get :e) "𝑒"))
diff --git a/tests/test-casual-calc.el b/tests/test-casual-calc.el
index 277df8be8c..470708986c 100644
--- a/tests/test-casual-calc.el
+++ b/tests/test-casual-calc.el
@@ -57,7 +57,7 @@
("=" . casual-calc--evaluate)
("A" . casual-calc--abs)
("!" . casual-calc--factorial)
- ("%" . casual-calc--percent)
+ ("%" . casual-calc--percent-of)
("D" . casual-calc--percent-change)
("p" . casual-calc--pi)
("e" . casual-calc--e-constant)