Conditional Text in Keyboard Strings
Introduction
There are times when a fixed keyboard definition is not the best choice. You can 'work around' this by using multiple key assignments, but this can become clumsy. An intelligent key can help.
SPFLite supports a conditional key assignment, where some test can be made and alternate definitions created.
How is it done?
Making an assignment conditional is done by surrounding a normal assignment with a Prefix and a Suffix, as follows
Prefix the assignment with <IF.xxxx> to mark its beginning, and follow it with <> to indicate then end.
For example: <IF.FM>RC Recent<>
Which effectively says - If the current tab is File Manager, Issue a RC Recent command, else do nothing.
What if I want to do something else other than 'nothing'?
Providing an else definition is done as follows:
<IF.xxxx>true-definition||else-definition<>
The true-string and else-string are separated by a pair of | characters. e.g ||
How do I enter an 'IF NOT' condition?
To create an 'IF NOT' condition, simply use the else structure and do not provide a true-string. For example, to perform something if NOT on the File Manager tab:
<IF.FM>||not-definition<>
Can I enter Multiple Conditions?
Yes, conditional entries are processed left to right, and each entry is processed independently.
<IF.test1>test1-definition<><IF.test2>test2-definition<><IF.test3>test3-definition<>
The 3 conditional tests here are performed independently, so the result could be perhaps any one of the 3 definitions, or some or all of the definitions, or none of them.
If none of the 3 above, can I provide a Default?
Yes, one of the <IF.xxxx> tests is specifically designed to support this. Simply add the following test after the previous tests.
<IF.test1>test1-definition<><IF.test2>test2-definition<><IF.test3>test3-definition<><IF.NONE>default-definition<>
Just what ARE all these tests?
Detailed below are the available tests. If, while using these you have another test idea which could be handy, please let us know.
|
The entries below are the xxxx portion of the <IF.XXXX> structure |
|
|
FM |
True if the current tab is the File Manager tab. |
|
!ppppp |
True if the current active Profile for the tab is ppppp. |
|
CMND |
True if the cursor is currently on the Command Line. |
|
LNUM |
True if the cursor is in the Line Number/Command area. |
|
DATA |
True if the cursor is in the text data area. |
|
PATH |
True if the cursor is in the File Manager FilePath area. |
|
MASK |
True if the cursor is in the File Manager Mask area. |
|
LOCKED |
True if the cursor is in a non-typeable area. |
|
KBn |
True if the same named SET variable is defined and is not null. |
|
NONE |
True if all conditional tests to the left have been FALSE |
|
CAPS |
True if CAPS Lock is ON. |
|
SCROLL |
True if SCROLL Lock is ON |
|
NUM |
True if NumLock is on. |
A practical example
Here's a simple example of how useful conditionals can be:
If you program in PL1, the NOT sign is not available directly on the keyboard, making it difficult to type. Here's a definition, which would be entered for the ^ key, making it 'sensitive' to whether you're working on a PL1 source.
<IF.!PLI>[¬]||[^]<>
Yes it looks cryptic, but is simply says - If the current Profile in use is PLI, then enter a ¬ else enter a ^