manual:Calculations
Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| manual:Calculations [2021/10/04 06:58] – peternlewis | manual:Calculations [2025/02/26 02:04] (current) – [Operators] peternlewis | ||
|---|---|---|---|
| Line 23: | Line 23: | ||
| Operators based on precedence from lowest to highest are: | Operators based on precedence from lowest to highest are: | ||
| - | | Array Separator (`,`) | Allows a text Variable, which has comma separated values, to work somewhat like an Array.\\ Assume `MyKMVariable` contains "value1,value2,value3", then `MyKMVariable[2]` returns "value2". | | + | | Array Separator (`,`) | Allows a text Variable, which has comma separated values, to work somewhat like an Array.\\ Assume `MyKMVariable` contains "12,34,56", then `MyKMVariable[2]` returns "34". | |
| | Ternary Operator (`?`) | a=b ? 3 : 4 | | | Ternary Operator (`?`) | a=b ? 3 : 4 | | ||
| - | | Bitwise OR (`|`), Bitwise AND (`&`) and Bitwise XOR | bitwise operators. | | + | | Bitwise OR (`|`), Bitwise AND (`&`) and Bitwise XOR | bitwise operators, which also act as logical boolean operators for 0 (false) and 1 (true). | |
| | Comparison Operators (`<, ≤, =, >, ≥, ≠`) | compare for (in)equality and return 0 or 1. | | | Comparison Operators (`<, ≤, =, >, ≥, ≠`) | compare for (in)equality and return 0 or 1. | | ||
| | Shift Operators (`≪, ≫`) | shift a number left or right. | | | Shift Operators (`≪, ≫`) | shift a number left or right. | | ||
| | Arithmetic Addition Operators \\ • Add (`+`)\\ • Subtract (`-`) | Basic mathematical operations. | | | Arithmetic Addition Operators \\ • Add (`+`)\\ • Subtract (`-`) | Basic mathematical operations. | | ||
| | Arithmetic Multiplication Operators \\ • Multiply (`*`)\\ • Divide (`/`) | Basic mathematical operations. | | | Arithmetic Multiplication Operators \\ • Multiply (`*`)\\ • Divide (`/`) | Basic mathematical operations. | | ||
| - | | [Modulo](https:// | + | | [Modulo](https:// |
| - | | Integer division (`i DIV n`) (v9.0+)| The integer quotient of the division of `i` by `n`.\\ Both values (`i`, `n`) will be treated as integer.\\ `n` must not be 0.\\ the sign of the result matches the sign of regular division. | + | | Integer division (`i DIV n`) | The integer quotient of the division of `i` by `n`.\\ Both values (`i`, `n`) will be treated as integer.\\ `n` must not be 0.\\ The sign of the result matches the sign of regular division. |
| | Power Operator (`^`) | exponentiation. | | | Power Operator (`^`) | exponentiation. | | ||
| | Unary Prefix Operators (`√`, `-`, `( )` ) | square root, negation, sub-expressions. | | | Unary Prefix Operators (`√`, `-`, `( )` ) | square root, negation, sub-expressions. | | ||
| Line 38: | Line 38: | ||
| | Unary Postfix Operators (`!,%,°`)) | factorial, percent, degrees. | | | Unary Postfix Operators (`!,%,°`)) | factorial, percent, degrees. | | ||
| - | Numbers are in decimal by default, but may use base 16 if they start with `$` or `0x` (eg $5A or 0x5A), or may start with a specific base followed by a `#` (eg 8#007). | + | Numbers are in decimal by default, but may use base 16 if they start with `$` or `0x` (eg $5A or 0x5A), or may start with a specific base followed by a `#` (eg 8#007). Numbers may include underscores, |
| [[Variables|Variables]] can be used if they contain numeric expressions, | [[Variables|Variables]] can be used if they contain numeric expressions, | ||
| - | You can use either `=` or `==` (v8+) for testing for equality. | + | You can use either `=` or `==` for testing for equality. |
| Operators and functions must be in uppercase to minimize conflict with variables. | Operators and functions must be in uppercase to minimize conflict with variables. | ||
| Line 54: | Line 54: | ||
| ===== Variables ===== | ===== Variables ===== | ||
| - | In numeric calculation fields, Variable Names are used without the `%` that are used in text token fields. | + | In numeric calculation fields, Variable Names are used without the `%` that are used in text token fields. |
| - | + | ||
| - | ===== Screen Coordinates ===== | + | |
| - | + | ||
| - | Keyboard Maestro refers to screen coordinates as two or four comma separated numbers in the text of a Keyboard Maestro Variable (which is always a string). | + | |
| - | * Screen object points, like the left,top position of a window, have two values, like 12,34 | + | |
| - | * Screen object rectangles, like the frame of a window, have four values 12,34,56,78 (with a fifth value for fuzz in some instances). | + | |
| - | * You can reference these values by position in the string, as it the Variable were an array: | + | |
| - | * For example: | + | |
| - | if the Variable `myWindow` is " | + | |
| - | then all of these forms of reference will provide a value of 34 in a Calculation field: | + | |
| - | * myWindow[2] | + | |
| - | * myWindow.y | + | |
| - | * myWindow.Top | + | |
| ===== Variable Array Access ===== | ===== Variable Array Access ===== | ||
| Line 77: | Line 64: | ||
| Indices are 1-based, so MyVar[1] is the first element. | Indices are 1-based, so MyVar[1] is the first element. | ||
| - | ===== Variable | + | ===== Screen Coordinates and Dot Notation ===== |
| + | |||
| + | Keyboard Maestro refers to screen coordinates as two or four comma separated numbers in the text of a Keyboard Maestro Variable (which is always a string). | ||
| + | |||
| + | Screen object points, like the left,top position of a window, have two values, like 12,34. | ||
| + | |||
| + | Screen object rectangles, like the frame of a window, have four values 12,34,56,78 (with a fifth value for fuzz in some instances). | ||
| In a Calculation field you can reference the numbers in a Keyboard Maestro Variable (which is always a string) using dot notation: | In a Calculation field you can reference the numbers in a Keyboard Maestro Variable (which is always a string) using dot notation: | ||
| Line 92: | Line 85: | ||
| | Variable.MidX | the horizontal middle of a rectangle | | | Variable.MidX | the horizontal middle of a rectangle | | ||
| | Variable.MidY | the vertical middle of a rectangle | | | Variable.MidY | the vertical middle of a rectangle | | ||
| + | |||
| + | For example if the Variable `myWindow` is " | ||
| + | * myWindow[2] | ||
| + | * myWindow.y | ||
| + | * myWindow.Top | ||
| The Variable Name and Dot reference are case insensitive. | The Variable Name and Dot reference are case insensitive. | ||
| + | |||
| ===== Text Fields ===== | ===== Text Fields ===== | ||
| Line 102: | Line 101: | ||
| However in a text field, since any text is allowed, you must use percent encoded tokens to indicate where more processing is required. | However in a text field, since any text is allowed, you must use percent encoded tokens to indicate where more processing is required. | ||
| - | The result is %Calculate%3 * Count + 7%. | + | The result is %Calculate% 3 * Count + 7 %. |
| + | |||
| + | ===== Examples of Variable Array Reference ===== | ||
| + | |||
| + | === Macro Actions === | ||
| - | ===== Examples of Variable Data Reference ===== | + | {{ window-frame-example-actions.png? |
| - | ** Macro Actions**\\ | + | === Example Results === |
| - | {{: | + | |
| - | **Example Results**\\ | + | {{ window-frame-example-results.png? |
| - | {{:manual:window-frame-example-results-km-7.3.png? | + | |
| - | Some example expressions might be: | + | ===== Example Expressions ===== |
| < | < | ||
| Amount in Dollars * 100 | Amount in Dollars * 100 | ||
| MJD() > 55928 | MJD() > 55928 | ||
| - | NOW() > TIME(2012, | + | NOW() > TIME(2023, |
| - | DOW(TIME(2012,4,4)) = 4 | + | DOW(TIME(2023,4,4)) = 4 |
| Radius*SIN(20°), | Radius*SIN(20°), | ||
| Window Frame[1]+Window Frame[3]/ | Window Frame[1]+Window Frame[3]/ | ||
manual/Calculations.1633330735.txt.gz · Last modified: by peternlewis
