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)

Reply via email to