pedit Manual written by [1]Paul Nevai [2]Paul Nevai [still under construction - and so is the manual since pedit keeps evolving constantly] NOTE. This very same manual can be found online [3]here (HTML) and [4]here (text). You can also download them from [5]here (HTML) and [6]here (text). NOTE. If you are new to pedit, then you may want to start with the pedit Tutorial whose archived version you can find [7]here together with other material. WARNING Since [8]pedit, LapTopHack, and pToolSet share components, if you use more than one of them, then they all must be of the same version, preferably the latest one. Table of Contents * [9]Abstract * [10]Introduction to the pedit Family of Palm Text Editors * [11]Minimum Requirements * [12]Compatibility Issues + [13]The Palm Operating System Emulator [POSE] vs. LapTopHack and pedit + [14]Fitaly with LapTopHack and pedit * [15]Downloading pedit * [16]Installation * [17]Registering pedit * [18]Technical Support * [19]Troubleshooting * [20]The peditors Forum and Mailing List * [21]For Palm Software Developers: the pedit SDK * [22]Terminology * [23]Text Processors vs. Word Processors * [24]pedit and External Keyboards * [25]The Escape Key Mechanism * [26]Common ESC Commands * [27]pedit vs pedit32 * [28]Which pedit is my pedit? * [29]The truth about pedit04! and pedit32! * [30]About pedit * [31]buttonPanels * [32]editPanels * [33]pRotatorTool * [34]The FIND SilkScreen button * [35]Setting the Preferences * [36]Batch Processing of Memos * [37]ListView + [38]Navigating ListView + [39]ListView's Record Menu + [40]ListView's Options Menu + [41]ListView's Navigate Menu + [42]ListView's buttonPanel * [43]EditView + [44]instantHelp + [45]Navigating EditView + [46]buttonShifts + [47]buttonSlides + [48]doubleTaps + [49]The Titlebar Statistics + [50]Startup pScripts + [51]Segmented Memos + [52]magiPad + [53]scriptPad + [54]EditView's Fonts + [55]Finding and Replacing Text o [56]Regular Expressions (REGEXP) + [57]Moving Text + [58]Sorting Text + [59]EditView's Record #1 Menu + [60]EditView's Record #2 Menu + [61]EditView's Edit Menu + [62]EditView's Edit+ Menu + [63]EditView's Options Menu + [64]EditView's Navigate Menu + [65]EditView's Pad Menu + [66]EditView's buttonPanel + [67]EditView's "Category" PopUp Trigger * [68]pedit Memos and Text Files on the DeskTop (for "newbies") * [69]pScripting pedit, pToolSet, and LapTopHack (for soon-to-be "experts") + [70]The Rules of pScripting + [71]Some pScriptorial Definitions + [72]pComments in pScripts + [73]pScriptorial pGoToLabels + [74]Whitespaces in pScripts + [75]The pScript Activation Mechanism + [76]The Quick pScript Activation Mechanism + [77]The pScriptorial globalMacroMode + [78]The pScriptorial currValue + [79]Text Insertion + [80]Text Capturing + [81]pScriptorial pFunctions + [82]pSwitches of pScriptorial pFunctions + [83]pScriptorial pVariables o [84]pNumericalVariables o [85]pStringVariables + [86]pScriptorial pStrings + [87]pScriptorial pStringTokens + [88]pScriptorial pTokens o [89]pNumberTokens o [90]pTextTokens + [91]pScriptorial pExpressions + [92]pScriptorial pMacros + [93]pScriptorial pScriptAliases + [94]The single key invocation mechanism for pScripts + [95]The Customizable pScriptButtons + [96]The pScriptRunner mini-applications + [97]pScripting with Fitaly * [98]List Navigation * [99]Bits and Pieces * [100]More Bits and Pieces * [101]Frequently Asked Questions [which have not yet been dealt with] * [102]Useful Macros * [103]Disclaimer and Legal Statement * [104]Acknowledgement * [105]Closure * [106]Index * [107]Index of ESC keys * [108]More from PaulComputing * [109]pedit's Development History + [110]Recent Changes Abstract The pedits are innovative, scriptable, keyboard/thumbboard friendly, and extraordinarily powerful text editors for Palm Powered handhelds. Introduction to the pedit Family of Palm Text Editors Dear [111]peditor: Thank you for having made such an intelligent decision. In case you are one of those self-assured people who never read manuals [just like yours truly], then go ahead and experiment on your own. I know you won't regret it. On the other hand, if you want to be a savvy, intelligent, and educated customer prior to immersing yourself into the limitless features of pedit, then please set aside a few minutes of your precious time to read this [relatively speaking] short introduction to pedit. The word pedit stands for Palm editor, and/or Paul's editor, and/or programmers' editor, and/or whatever else you prefer. It must be spelled with a lower cased p as in pedit. If you are a certified [112]peditor, then you pronounce pedit as a 3-syllable word as in pee-edit. By definition, a peditor is a person who installed pedit on his or her Palm computing device. A true peditor duly [113]REGISTERS pedit. In case you happen to have a shorter than normal attention span [just like yours truly], let me repeat that a true peditor... pedit is based on Palm Computing's built-in Memo Pad and is meant to replace it [just like DateBk made "Date Book" obsolete]. It packs a myriad highly customizable features which makes it a perfect tool for anyone using the Palm for serious text editing. pedit also imports and exports industry standard Palm-style [114]DOC files so that it is a perfect replacement for all Palm based text editors known to mankind. Even casual writers will appreciate its simple but rich and efficient interface. Due to overwhelming popular demand, the pedit family of editors consists of several applications, namely, pedit [aka pedit04], pedit32, peditPro, and peditLight. pedit [aka pedit04] is for those peditors who want a hasslefree and super sophisticated Memo Pad replacement with 100% Memo Pad compatibility, and who don't want to be bothered and/or concerned with HotSync and DeskTop issues. In what follows, sometimes I will refer to pedit as pedit04 since the word pedit is also used as a generic term for any member of the pedit family. If a specific feature relates to a specific pedit, then it will be emphasized. pedit04 and pedit32 are essentially identical in practically every form and function with the exception that pedit32 breaks the infamous 4K barrier, and it works with memos of size up-to 32K [well, it is really 32K - 1, i.e., 0X7FFF, i.e., 2^15-1, i.e., 32767 bytes]. pedit32 is for those peditors who want to be able to create files which are bigger than the regular Memo Pad files are. Those peditors who want to access their pedit32 memos on the DeskTop, will have to do some additional steps involving [115]exportation [see [116]here too] of pedit32 memos to pedit04 or [117]DOC files, and [118]importation of [119]DOC files to pedit04. Prior to installing pedit32, you should read the section [120]pedit04 vs pedit32 so that you would be fully aware of the subtle and not so subtle differences between the two. peditPro is the flagship of the pedit family. It combines pedit04 and pedit32 into one convenient application whose RAM demand is more than 200K less than that of pedit04 and pedit32 combined. peditPro has two modes. If it is in pedit04 mode then it looks like pedit04, smells like pedit04, and behaves like pedit04. Similarly, if it is in pedit32 mode then it looks like pedit32, smells like pedit32, and behaves like pedit32. If I may suggest so, use peditPro and forget all the other pedits. NOTE. Only peditPro has extensive Dynamic Input Area [DIA] support. No other flavor of pedit supports the DIA. If your Palm is short of free RAM, then you can save approximately 100K if you use peditLight instead of pedit04. peditLight is identical to pedit04 in almost all essential editing functions. However, many of the "high end" feature of pedit04 are unavailable in peditLight. More precisely, those "high end" features are visually indicated but are functionally disabled in peditLight. For instance, all menu items starting with ! are disabled. This way, based on your editing needs, you can decide whether or not you want to upgrade to another pedit04. pedit04 and Memo Pad can and do co-exist peacefully. Although pedit04 uses the Memo Pad database "MemoDB" with creator ID 'memo', it does not alter its structure in any way whatsoever so that the user can switch back and forth between the two with no harm done [see [121]Clear History and [122]Clear Preferences]. To be quite honest, once you try pedit04, you will probably never ever want to go back to Memo Pad. Still, if you wish, you may. In addition, deleting pedit04 from your hand-held device, does not remove the database MemoDB created by Memo Pad, although it will delete pedit04's own preference record and its own peditDB database. In particular, you don't need to worry about HotSync and conduit issues in conjunction with your memos since they all reside in MemoDB. The peditDB database holds the contents of your [123]magiPad, [124]scriptPad, and some records related to [125]Find'n'Replace. For your protection, peditDB gets backed up by HotSync. pedit32 and the Memo Pad can and do co-exist peacefully as well. However, pedit32 uses its own memo database which is called Memo32DB with creator ID 'pn32', and, therefore, pedit32 is almost 100% incompatible with everything imaginable which uses Memo Pad although each developer supporting the Memo Pad database can easily reconfigure her software for pedit32 support as well. Please see [126]pedit04 vs pedit32 for more details. If you are a Palm or pedit "newbie", and if you already feel overwhelmed by this sizeable manual, then it may be a good idea for you to visit James Seigel's, Harvey Gatlin's, Peter Grierson's, and Lee Hauser's pedit Tutorial whose archived version you can find [127]here together with other material. Minimum Requirements If your Palm's operating system is below 3.0 you are out of luck. I designed pedit to work with OS 3.0 and above. It was tested with all operating systems above 3.0. There are many peditors with Visors and TRGPros [including yours truly], and there seems to be absolutely no problem with using pedit on them. I believe that pedit will work practically flawlessly on all Palms and all Palm Powered handhelds as well as long as the operating system is at least 3.0. There are a few pedit features which are available only on Palms with operating system 3.5 and above. However, they are minor features and I seriously doubt that you will miss them. There is one feature of pedit which I like very much and which is only available if your Palm operating system is below 3.5. Namely, you can have [128]inverted or black buttons only if your Palm OS is below 3.5. If I may give you some unsolicited advice, as of July 7, 2000, my choice for a Palm OS is 3.3. It is the fastest and the most bug-free [or least bug ridden]. Alas, it is a fact of life that all but the simplest computer programs have scores of bugs, and this includes the Palm OS as well. If I may give you another unsolicited advice, as of August 25, 2000, I have been using Palm OS 3.5.2 on my Palm Vx and Palm OS 3.5.1 on my TRGPro for a couple of weeks now, and the only problem I encountered so far was that it takes longer than I wish to go to the Application Launcher. If I may give you yet another unsolicited advice, as of January 1, 2002, I have been using Palm OS 4.0 with great success as well. Whether or not you want another piece of advice from me, here it is. If your Palm Powered handheld is upgradable, that is, it has a flash ROM, then please do not procrastinate and upgrade it. I must admit that even pedit may have some bugs. If you find any, please e-mail a bug report to [129]me. pedit was written with a 100% compliance with the Palm software developers' general guidelines. It was built with the latest version of MetroWerks' and Palm's CodeWarrior on a Power Macintosh G3. Well, I did improve upon the standard Palm interface on several occasions. For instance, my tips dialogs are more legible then Palm's. Another example is that even my simplest dialogs can take keyboard inputs and they even react visually to such inputs. I also introduced a number of new concepts such as [130]buttonPanel, [131]instantHelp, [132]magiPad, [133]Find'n'Replace, and so forth. Compatibility Issues pedit was written with a 100% compliance with the Palm software developers' general guidelines. Therefore, there are absolutely no compatibility issues whatsoever except the following. First, the Palm OS itself is not entirely bug-free, and therefore, pedit, just like any other Palm application is at the mercy of Palm's software engineers. Second, there are a great number of applications which themselves are not exactly bug-free and which may effect the behavior of other applications. Unfortunately, there is no way that pedit can defend itself against problems introduced into the Palm operating environment by other applications. In particular, there are a number of HackMaster extensions which are defective. Moreover, there are a number of defective applications which patch the OS even though they are not installed using the standard HackMaster mechanism. Third, pedit itself is a rather complicated program, and, therefore, it also must contain a large number of bugs despite the fact that it passed tens of millions of gremlin test with various hardware and operating system configurations on the [134]Palm OS Emulator [POSE]. pedit should work perfectly with every bug-free HackMaster extensions as long as either [135]HackMaster or a reputable replacement is used as the HackMaster extension installer application. As long as the HackMaster extension is bug-free and it is flash ROM certified, pedit doesn't care whether your HackMaster extension is installed into the regular RAM or the flash ROM. Beware of applications which play tricks with your Palm's operating system. Some users of pedit reported some problems with the following HackMaster extensions and applications: AportisDoc, ClipHack, Clipper, EVPlugBase, FindHack 3.8, GoType!'s keyboard driver, PPK's keyboard driver, TakeNote!, and TrapWeaver. Please note that when I polled the peditors regarding the above mentioned HackMaster extensions and applications, there were quite a few who have never experienced any problem with them whatsoever. However, for instance, if you have ClipHack and the "wrong" Palm OS [newer than 3.0], then the following procedure, as described by David Sommers, leads to a guaranteed crash which has nothing to do with pedit. 1) Open a small memo in pedit. 2) Select a small amount of text. 3) Press the "[136]X" button in [137]EditView's [138]buttonPanel to cut the selected text. 4) Press the SilkScreen "MENU" button. You have a crash with a "HwrRes.c, Line:215, Menu rsrc not found" error message. The author of ClipHack told me on June 16, 2000, that he is working on trying to figure it out how to fix the problem. The problem with AportisDoc and TakeNote! is that they treat [139]DOC files differently than all the other [140]DOC related applications. It is somewhat unfair to accuse AportisDoc with anything since [141]Rick Bram invented the [142]DOC format in the first place. Nevertheless, if you use AportisDoc to read a [143]DOC file prior to [144]importing it to pedit, then all bets are off. In practically all cases you will not experience any problem at all. Nevertheless, there are scenarios under which the [145]import procedure may fail. The problem with TakeNote! is more innocent but, at the same time, it is more serious. As of July 17, 2000, when TakeNote! opens a [146]DOC file, it modifies it in such a way that the file may no longer be interpreted by any other [147]DOC related application in the proper way. While TakeNote! has every right to do so, it should also leave a message that it modified the [148]DOC file so that the other [149]DOC applications would have a chance of re-reading the [150]DOC file prior to interpreting it. For instance, TakeNote! could [should] change the creator ID of all [151]DOC files it modifies. This would send a clear message to the other [152]DOC applications. I hope that TakeNote!'s authors will take note of this very unfortunate behavior of TakeNote!, and that they will take steps to fix their program. Although I have notified them of this problem, as of July 17, 2000, TakeNote! has not been fixed yet. As soon as I get notified by the TakeNote! people that the problem has been fixed, I will update this discussion. At this point, it must be clear to you that resolving compatibility problems is more like a subtle excursion into fine art than a rigorous scientific exercise. SergioG told me FindHack 3.8 will crash your Palm if you use some "fancyFind" features of pedit. I verified his claim and indeed this happens since FindHack modifies the Palm OS TxtFindString() function and the modification may have been done incorrectly. I suggest that you either stop using "fancyFind" or switch to [153]superFinderHack. The Palm Operating System Emulator [POSE] vs. LapTopHack and pedit It is my understanding that the latest versions of POSE, effective with perhaps version 3.2, limit the size of the ClipBoard to a maximum of 1000 characters. This limit is hardcoded into POSE and cannot be changed. Therefore, you should never ever use POSE for serious work with either LapTopHack or pedit since POSE may truncate your text without any warning. It is perfectly all right to test LapTopHack and pedit with POSE but please do not perform text related tasks with your essential data. Fitaly with LapTopHack and pedit As HenkK pointed out, [154]Textware Solutions' Fitaly and FitalyStamp have a "slide" mode which may result in some unexpected behavior, since instead of entering a letter, say, "A", sliding enters "a" first, then deletes it, and then enters "A". Hence, please read the following advice which was contributed by JohnH. In addition to the regular "slides", Fitaly and FitalyStamp users can also assign text strings of up to 25 characters to each letter of the alphabet through a "Custom Left Slide" feature. This is perfect for starting [155]pScripts or doing other actions in LapTopHack and pedit, if the first character of the assigned string is the appropriate "ESC" character. Note however that by default, the lower case letter character itself is immediately sent to the current application at the pen-down motion. If that pen-down motion is turned into a slide (even a slide to simply capitalize the letter), then thelowercase letter is quickly erased and replaced by the "correct" one(s). Unfortunately, if the current application can respond to a single character (like LapTopHack and pedit do in certain cases), Fitaly cannot always retract it by deleting. The result is unexpected behavior. The solution is to use Fitaly or FitalyStamp's Key Options menu to "Set letters at pen up". That way, nothing is sent to the application until the slide is done, at which time the correct character(s) are sent. According to the Fitaly manual, the "Set letters at pen up" option may slow Fitaly or FitalyStamp down. However, this has not been observed in actual usage. Downloading pedit I suggest that you use the official [156]pedit web page which always has the most recent versions of all pedits. However, please keep reading. NOTE. If you download pedit from Palm sites go such as Handango, I can't guarantee that you always get the latest version from them. You can download the latest version of this very same manual as [157]pedit_man.zip right here, or you can read [158]pedit_man.html on-line here. You can download [159]pedit.zip or [160]pedit.tgz right here. You can download [161]pedit32.zip or [162]pedit32.tgz right here. For your convenience, pedit and pedit32 are available in one combination package as well. You can download [163]peditCombo.zip right here. You can download [164]peditPro.zip or [165]peditPro.tgz right here. You can download [166]peditLight.zip or [167]peditLight.tgz right here. You can download [168]peditFixer.zip right here. It is also included in all of the pedit packages. If you are a Mac user, then you can download [169]pedit.hqx, [170]pedit32.hqx, [171]peditPro.hqx, [172]peditLight.hqx, and [173]peditFixer.hqx here. NOTE. The latest (perhaps beta) version of all pedits is [174]here. I encourage you to install this version which is usually (but not necessarily always) quite stable, and which is always much better than the "officially" released version. Installation All pedits install the usual way via a HotSync job. If you are not sure how to install Palm applications, please study the manual which came with your Palm. pedit can run both from the regular RAM and from the flash ROM as well. It may be useful to remind you that if you already have any of the pedits installed, and if they happen to be in the flash ROM, then please move them back to your regular RAM prior to installing the newer versions. If you are about to install peditLight then use [175]peditFixer first to delete pedit04, and then do a normal installation job. If you delete pedit04 using Palm's built-in deletion mechanism, then you will lose your [176]magiPad. If you are about to install a pedit over an older version of the same pedit, then there is no need to delete your pedit prior to installing the new version. Otherwise, you will lose your corresponding pedit preferences, including your pedit registration [see the [177]here and [178]here]. If you are installing a new version of pedit32 over an existing pedit32, then you must not delete your current pedit32 prior to installing the new version. Otherwise, you will lose your pedit32 memos. If you are about to install peditPro then please read the following paragraphs very carefully. It is safe [but not recommended] to use Palm's built-in deletion mechanism to delete pedit04 prior to installing peditPro, but you will lose your [179]magiPad if you do so. In addition, you will also lose your pedit04 preferences, including your pedit registration [see the [180]here and [181]here]. If you have pedit32 memos then do not delete pedit32 via Palm's built-in deletion mechanism before you install peditPro. Otherwise, you will lose your pedit32 memos. In addition, you will also lose your pedit32 preferences, including your pedit registration [see the [182]here and [183]here]. If this is the first time you install peditPro, please install peditPro over your existing pedit and/or pedit32. Then run peditPro and the first thing to do is to use the [184]Total Cleaner Upper command in [185]ListView's [186]Options to delete pedit and/or pedit32 without deleting your pedit04 memos and/or pedit32 memos. QUESTION. What are pedit04! [pedit04Launcher] and pedit32! [aka pedit32Launcher]? ANSWER. Please see the truth about pedit04! and pedit32! [187]here. NOTE. If your current pedit is prior to version 5.43 then please delete the outdated "pedit!" [with exclamation mark and aka peditLauncher] and "pedit32!" [also with exclamation mark and aka pedit32Launcher] from your Palm prior to installing the new pedit04Launcher.prc and pedit32Launcher.prc with version numbers at least 5.43. You can use your Palm's built-in deletion mechanism for this job [see [188]here]. QUESTION. Which flavor of pedit should I install? ANSWER. I recommend peditPro although the truth is that all pedits are equally powerful [except perhaps peditLight] and your own editorial needs should determine which one to pick. It may be useful for you to review the [189]differences between pedit04 and pedit32. If you can't decide, get peditPro. WARNING. If you use version 7.xx or newer of any of the [190]pedits, LapTopHack, or pToolSet, then all your pedits, LapTopHack, and pToolSet must be 7.xx or newer since they are not compatible with version 6.xx or older. In addition, since pedit, LapTopHack, and pToolSet constantly exchange information, it may be necessary that they be of the same version number. NOTE. I suggest that you keep a backup copy of your peditDB.pdb which is somewhere in your HotSync backup directory on your desktop computer since you may need it in the highly unlikely event that you decide go back to versions 6.xx of pedit, pToolSet, and LapTopHack. NOTE. Only peditPro has extensive Dynamic Input Area [DIA] support. No other flavor of pedit supports the DIA. Registering pedit Now a few words about the benefits of registering pedit. If you shell out the registration fee, then, in return, most, but not necessarily all, future versions will be made available to you for free on [191]pedit's web page or [192]here. For practical purposes and for legal reasons, I reserve the right to change this policy [the latter happened when version 6.00 was released]. Please keep in mind that I will always notify the [193]peditors Forum if there is an update [[194]subscribe]. For some details about the peditors Forum see [195]here. If you wish, then we can work out a deal that I will always e-mail you the most recent updates. Here is another excellent reason for registering pedit. If you do so, then you will never see my friendly reminders which, eventually, will make even the most stubborn conscientious objectors follow the directions in the next paragraphs. Upon registration you will be issued a personal password which you should enter using the [196]Register button in the [197]About pedit window. Please note that you are not allowed to share registered versions of pedit and/or pedit passwords with anyone, including [but not limited to] your friends, relatives, colleagues, and neighbors. However, your immediate family members [spouses, significant others, children, and parents living in the same household under the same roof] are allowed to use your registered pedit, as long as they agree to abide by the same rules as regular registered users. If you have not registered pedit yet, then please do so without any delay. Registering pedit and pedit32 will set you back by $US20.00, peditCombo and peditPro by $US32.00, whereas peditLight costs $US9.00. NOTE. Please see [198]www.paulcomputing.com for occasional discounts, ongoing promotions, and money-saving deals. You can always upgrade/downgrade/sidegrade from one pedit to another by contacting [199]me. There is an upgrade fee, whereas downgrades and sidegrades are usually free. For instance, if you are registered for peditCombo then peditPro is free for you, and vice versa, whereas, going from pedit to peditPro costs $US12.00. If you honestly cannot afford the registration fee but you must have my Palm products anyway, then please contact [200]me for discount rates. [201]PayPal is the strongly preferred, easiest, and fastest way to register pedit. Please register pedit pedit32 pedit and pedit32 combo peditPro peditLight at PayPal right now. A working alternative is to mail a check for US$20.00 [pedit or pedit32] or US$32.00 [peditCombo and peditPro] or US$9.00 [peditLight] to Paul Nevai, 3346 Mansion Way, Columbus OH 43221-1573, USA. Please include your e-mail or your mailing address if you have no e-mail. You can also register pedit at [202]eSellerate: [203]browse all, [204]pedit, [205]pedit32, [206]peditCombo, [207]peditPro, [208]peditLight, [209]peditUpgrade. QUESTION. I am a Palm-procrastinator, and I allowed my unregistered pedit to expire. Now I realize that I can't live without pedit, and I quickly registered it. However, I am unable to start up pedit since it refuses to run. What can I do? Am I doomed for good? ANSWER. Do not panic! You did the right thing when you registered pedit. Now wait for your password to arrive. Once you have the password, [210]download the latest release of pedit and then go ahead and run it on your Palm. It will allow you to register it even if your trial time has run out. Technical Support First, please read the section about [211]troubleshooting. Second, if the advice given in the section on [212]troubleshooting did not solve your problem, then please contact [213]me. Please state clearly the name of your pedit, the version number, and compilation time'n'date of your pedit, the exact name of your Palm hardware, the version number of you Palm operating system, and please describe the problem you have experienced. NOTE. The [214]About pedit dialog has all the information you need about your pedit. If you live in North America, please provide your phone number, your time zone, and the times which are convenient for you. If possible, please write your phone number in the form 1-XXX-YYY-ZZZZ which makes it easier for me to process it automatically. Please use civilized language when writing to me. Otherwise, I may not respond. In the past year I received thousands of messages and about a handful of them were abusive. The latter did not please me at all. Please note that you can also obtain help by contacting the [215]peditors Forum. In fact, as it turns out, the collective mind of all peditors works better than mine alone. Therefore, in most if not all cases, it makes sense to write to the [216]peditors Forum prior to contacting [217]me. On the advice of JohnH, I recommend that you use the following template when contacting me. DO: Your Name (yourname@yourisp.com) year/month/day [such as 2001/09/11] Short description of the problem such as "I start up peditPro and my Palm crashe s." Application: [LapTopHack | peditPro | pedit | pedit32 | peditLight] Version: [such as 5.73] Compilation time'n'date: [11:01:43 EST on Jan 19 2002] Handheld hardware: [such as TRGPro] PalmOS version: [such as 3.5.1] Other hardware (keyboard, expansion memory, etc.): Free memory: [such as 2Mb] Other HackMaster extensions active: [such as FitalyStamp] Other OS patching applications: [such as QuickBits] Steps to reproduce: Other comments: [such as "I love your stuff"] Troubleshooting First, please read the section about [218]compatibility issues. Second, turn off all your HackMaster extensions and other OS patching applications you may have, and see if the problem goes away. If it did, then turn on your HackMaster extensions and/or OS patching applications one by one and isolate the problem. NOTE. Unfortunately, many peditors don't realize that they are running OS patching applications and they keep insisting that pedit crashed even though they uninstalled all their HackMaster extensions. This is making life real difficult for me despite their good intentions. EXAMPLE. Our veteran peditors, Bill, Joe, and HenkK kept insisting that pedit crashed if they used the Monaco font and the text had a ShortCut symbol in it. I kept saying that I don't see why this should happen since it made no sense to me. Finally, it dawned on me that they must be using an application which behaves like a HackMaster extension and they forgot about it. Bingo. It turned out that they all used QuickBits which patches the OS. Once they adjusted the parameters in QuickBits [they turned off "BltDrawChars"], everything was back to normal. The corollary of this story is that if you have a problem, then you also need a certain degree of ingenuity in helping me to hunt the problem down. The funny thing is that I can't even blame the QuickBits guys since I am sure they include a warning in their manuals that QuickBits may mess cause incompatibilities the system. UPDATE. Dafydd told me on January 7, 2002, that the crash may be due to bad font specifications in the Monaco font and QuickBits may be completely innocent. Once you identified the guilty party, please contact their technical support and explain the problem. I know from personal experience that most Palm developers provide superior support. However, there are some exceptions. If you happen to experience the latter, then please be persistent. Being polite can't hurt you. It may help your case if you send a copy of your correspondence to the [219]peditors Forum and to some of the Palm related newsgroups such as comp.sys.palmtops.pilot and alt.comp.sys.palmtops.pilot. You may also try Calvin's [220]PGHQ FAQ. Some of my own Palm knowledge comes from studying this FAQ database. Third, use the [221]Clear History and [222]Clear Preferences commands in [223]ListView's [224]Options menu. Fourth, run [225]peditFixer peditFixer and try to delete some or all pedit components. Then reinstall your particular version of pedit and reenter your [226]password. It is always safe to delete all pedit components except MemoDB and Memo32DB which contain your pedit04 and pedit32 memos, respectively. Delete the latter only if you did a HotSync job prior to running peditFixer. NOTE. Deleting [227]pedit04! and pedit32! is done via Palm's built-in deletion mechanism. EXAMPLE. Sometimes peditDB which houses [228]magiPad and [229]scriptPad gets corrupted. This may lead to crashes when attempting a [230]Find'n'Replace job. If so, just copy the contents of [231]magiPad and [232]scriptPad to a 32K memo, use [233]peditFixer to delete peditDB [check the "magiPad" box], and then open up your pedit and restore [234]magiPad and [235]scriptPad. That should fix the problem. This advice has been tried out and worked several times in the past. WARNING. Please keep in mind that pedit04 memos and Memo Pad memos are exactly the same animals. Next, check out the [236]peditors Forum or write to [237]peditors Forum since, as I mentioned it already, the collective mind of all peditors works better than mine alone. If the problem still persists then contact pedit's [238]Technical Support. QUESTION. My pedit refuses to start up. When I tap on the icon, the screen looks for pedit but then returns to the launcher program I am running on my Palm. What is going on? ANSWER. I don't have the faintest idea what is going on. This happened to three peditors only out of thousands. One of them disappeared from the pedit the scene before I could investigate it, whereas the second one, Elwood Matthews, solved the problem by deleting [239]magiPad with [240]peditFixer so that I never had a chance to be able to find out the reasons. I suspect that you may have a corrupted [241]magiPad but I can't be sure until I am able to complete a case study. I told the third person what Elwood did, and I also told him to delete all the pedit preferences with [242]peditFixer as well. It worked and I was again robbed the opportunity to investigate it. The peditors Forum and Mailing List Please check out [243]Paolo Amoroso's [244]peditors Forum for details [[245]subscribe]. You can post messages to the peditors Forum [246]here. As I mentioned already, if you are a Palm or pedit "newbie", and if you already feel overwhelmed by this sizeable manual, then it may be a good idea for you to visit James Seigel's, Harvey Gatlin's, Peter Grierson's, and Lee Hauser's pedit Tutorial whose archived version you can find [247]here together with other material. Whether or not you are an "expert", you will greatly benefit from visiting [248]peditors.com which was created by John Kershaw and is maintained by him and by a growing number of [249]enthusiastic peditors. For Palm Software Developers: the pedit SDK The pedit Software Developer Kit [SDK] is available [250]here. In addition, all legitimate Palm software developers can count on my absolute and enthusiastic cooperation in providing mutual support for each others' software. Terminology As I already mentioned it, the word pedit is used as a generic term for any member of the pedit family. When pedit refers to the actual pedit application, then I will use the term pedit04. In what follows, Palm refers to any Palm computing device or any clones thereof. DeskTop refers to your computer which is used when you HotSync files. It is irrelevant whether it is a Macintosh or a PC or a Unix/Linux box. The only thing what matters is that it holds your backed up files after a HotSync operation. When I refer to a keyboard, I mean an actual piece of hardware, and not Palm's built-in virtual keyboard. A DOC file has nothing to do with dot.doc files which are used in the DeskTop universe in conjunction with some word processors. In the Palm universe, a DOC is a special file [or a file structure] which allows to install and view [large] text files on your Palm. Quoting from [251]Rob Tillotson: The Doc format is the de facto standard for large text documents on the Palm Computing Platform. It enjoys wide support in both software and content, but documentation is sparse. I suggest that you read Rob Tillotson's [252]The Doc Format as an introduction. A pedit04 memo refers to a memo created by pedit04 or peditLight as opposed to a pedit32 memo which is created by pedit32. Of course, peditPro can create either of these. WARNING. Please keep in mind that pedit04 memos and Memo Pad memos are exactly the same animals. When I refer to a memo created by any of the pedits and in the given context it is irrelevant which pedit was the particular pedit which created it, then I use the expression pedit memo as a generic term. Memo or text vitals refer to a snapshot of your current memo, or text in general, such as current text selection, cursor location, scroll bar position, and so forth. As pedit evolves, memo vitals get more and more sophisticated. Somne vitals even include current font and ruler selections. When I say sister pedit, then I am referring to the other pedit. In other words, if you are running pedit or peditLight then pedit32 is the sister pedit, whereas if you run pedit32 then pedit is the sister pedit. If you are running peditPro then the sister pedit depends on the current mode you are in. Also, in what follows, using the original Palm terminology, I call ListView the window with title p04Memos..., and I call EditView the other one with title p04 #xxx of yyy [more or less]. ListView separator EditView If your run pedit32 then instead of p04Memos... you will see p32Memos... and so forth. NOTE. If your Palm Powered handheld allows to create native 32K memos in the built-in "Memo Pad" which also could be called "Memos", then the letters "p04" are replaced by "m32" such as m32Memos.... You can think of ListView as the table of contents, and of EditView where the actual editing takes place. For our understanding of what a memo title is, please look [253]here. Text Processors vs. Word Processors pedit is a text processor, and therefore, it does not have the formatting features of word processors such as allowing different fonts in a memo. If you expect such features then pedit may not be the right editor for you. pedit creates text files which are 100% compatible with with all computers and all applications which use text files, whereas word processors create proprietary files which can be read by applications with special capabilities. Most word processors allow you to save your file as a plain text file but then all the formatting is lost. On the other hand, as you will see, pedit allows you to manipulate text in ways which is way beyond the capabilities of most word processors. It is up-to you to decide what is more important for you, and if you choose to go for a text processor, then pedit will not disappoint you. pedit and External Keyboards pedit absolutely loves all external keyboards, including the Palm Portable Keyboard [aka PPK or Stowaway or Targus] and GoType!, and greatly enhances their ability to enter text. In response to many peditorial inquiries, I want to state it clear and loud that I think both GoType! and PPK are absolutely first rate, and I consider each an engineering marvel. I endorse both of them when used with pedit. However, please keep reading... Even though the software drivers of some of the keyboards are less than perfect and more than buggy, it is totally irrelevant as far as pedit goes, since pedit uses its own internal mechanism to utilize the keyboards. As long as the driver of your keyboard is able to recognize the letters you type on the keyboard, you are set for good. If I may suggest so, please do write to the manufacturer of your external keyboard whenever you discover a bug. Otherwise, you may never see a bug fix. In what follows, when I refer to a keyboard, I mean an actual piece of hardware, and not Palm's built-in virtual keyboard. So please do not try to use any of our tricks on the latter. As it turns out. even some of the third party software implemented virtual keyboards behave as if they were a piece of hardware. This is good news for pedit users although there will be no performance benefits since every function can also be accessed via menus and/or tapping at the right time in the right place. In almost all dialogs, unless there is a text field accepting alphabetical input, all buttons and check boxes can be activated by entering the lower cased version of the first letter of their label. This is the reason for ".Cancel" and why some labels are misspelled intentionally such as "K" standing for capitalization and "Qopy" for "Copy". When there is no text field, many times even the upper cased version of that letter works. If there is a bold framed button in a dialog, then it can be activated by your keyboard's RETURN key or by the equivalent / Graffiti character [stroke from NE to SW] or by "ESC RETURN". If there is a multi-line text field in the dialog such as the one activated by the "[254]F" button then "RETURN" is no longer available for this purpose, and use "ESC RETURN" only. The explanation of the [255]ESC key mechanism is an important basic concept so that please do not skip it. This default button concept is well familiar to all Macintosh and Windows users. pedit has full GoType! keyboard support as well. If the installed keyboard driver version is at least 1.5, then all buttons can be activated by depressing the first letter of the button label while simultaneously depressing the "Command" and "Alt" keys on the GoType! keyboard. There is similar approach if you use the Palm Portable Keyboard, although, as of July 8, 2000, the current software driver for PPK is not yet able to recognize all buttons on the screen. Therefore, I find the [256]ESC key approach preferable to trying to use the particular keyboard's built-in functions. If in a dialog all the text fields are numeric only, then entering either a space or a tab character rotates the focus between the fields. In addition, if underlined letters are visible, then entering one of them makes the cursor jump to the corresponding field. If in a dialog there is more than one text field, then entering either "ESC SPACE" or "ESC TAB" rotates the focus between the fields. The Escape Key Mechanism The user defined escape character ESC [the default value is the backquote character "`"] allows the peditor to activate almost any button and check box from external keyboards and/oir thumbboards and/or via Graffiti input. It is very important to understand that in pedit's terminology ESC is NOT a hard key on your keyboard such as one labelled with Ctrl, or Alt, or Cmd or whatever, but it is an ordinary key playing the role of ESC . By default I call the backquote key "`" the ESC key although you can change it in the [257]pedit preferences dialog to any other key. The way it works is as follows. First you hit ESC and then the required letter. Do it consecutively and not simultaneously. Of course, this is a very familiar concept to emacs, vi, and joe users, and to others as well. EXAMPLE. "ESC ." activates the ".Cancel" button. EXAMPLE. "ESC h" = "ESC H" = "ESC ?" = "ESC i" = "ESC I" invokes HELP in most [but not all] dialogs even if there is no HELP button present on the current screen. Did you notice that there is a visual confirmation when you use ESC to activate a button? Isn't that cool? To use ESC itself as a regular character in the text, just enter ESC twice as in "``". You can determine if a menu command has an ESC key equivalent by examining the command in the dropped down menu. All the equivalent ESC keys are listed next to the command. ESC keys in Menu NOTE. On GoType! and on almost every other standard keyboard, "`" is an ideal choice for ESC. On the Palm Portable Keyboard, I recommend using "1" or "\" for ESC, although, I must admit that neither are absolutely perfect choices from the ergonomic point of view. NOTE. As BruceM correctly pointed it out, if you ever intend to use [258]pScripting, then stay away from the forward slash "/" as an ESC key candidate. Common ESC Commands In addition to "ESC h" = "ESC H" = "ESC ?" = "ESC i" = "ESC I" = help both [259]ListView and [260]EditView share the following [261]ESC commands. "ESC =" = drop menu "ESC C" = menu command "ESC F" = SilkScreen FIND "ESC L" = BackLight NOTE. If you have [262]LapTopHack, then you can navigate inside all menus via keyboard and Graffiti input [see [263]here for details]. pedit vs pedit32 It is crucially important to understand clearly and fully that pedit works with the built-in Memo Pad memo database which is called MemoDB with creator ID 'memo', and, therefore, pedit is 100% compatible with everything imaginable which uses Memo Pad. On the other hand, pedit32 uses its own memo database which is called Memo32DB with creator ID 'pn32', and, therefore, pedit32 is almost 100% incompatible with everything imaginable which uses Memo Pad. One important consideration is that pedit32 loses some of its snappiness when editing files whose size approaches 32K. By the way, Palm's built-in SilkScreen FIND button works perfectly with pedit and so does [264]grepHack and [265]superFinderHack and FindHack. Further good news is that, if you choose to install both, then pedit and pedit32 can simultaneously co-exist on your Palm. They share the same magiPad database called peditDB, but otherwise they have their own creator IDs, preferences, and so forth. So go ahead and install both pedit and pedit32. However, if I were you, I would rather have peditPro on my Palm than pedit and pedit32, since the former saves approximately 200K is RAM real estate. Additional good news is that, after you did a HotSync job, if you wish, you can open up your huge pedit32 memos residing in Memo32DB on your DeskTop computing device with any competent text editor such as emacs, vi, joe, BBEdit, and so forth. I leave the rest to your imagination and creativity. Of course, you should follow this advice only if you are the kind of person who does not follow any advice anyway. On the other hand, if you want to access your pedit32 memos in a professional and elegant manner then please keep reading. QUESTION. How can I move a large text file from my DeskTop computer into pedit or pedit32? ANSWER. Convert your text file to [266]DOC format using one of the many widely available utilities [see, for instance, [267]Document Conversion Tools and Utilities at MemoWare, or [268]MakeDoc at Aportis, PalmGear, or Handango]. Then HotSync it to your Palm. Then import it to pedit or pedit32 using the [269]Import Doc File command in [270]ListView's [271]Record menu. QUESTION. How can I move a memo [and its [272]sister segments] from my beloved pedit or pedit32 to my DeskTop computer? ANSWER. Open up your memo [or one of its [273]sister segments] using the [274]Export Memo command in [275]EditView's [276]Record #1 menu. Then export it to a [277]DOC file. After your next HotSync operation, you will find your memo [as a [278]DOC file] in the backup directory on your DeskTop computer. Now use your [279]DOC converter to turn it into a humanly readable text file. NOTE. Pleae check out peditDesk, a small DOS application by [280]Jerry Skelley for extracting pedit memos from both databases MemoDB.pdb and Memo32DB.pdb, which is available at the [281]files section of the [282]peditors Forum. Unlike the standard Palm DeskTop software, peditDesk rejoins your [283]segmented memos, sending them to the Windows text editor of your choice. Memos may be exported singly or in groups, by category, or all at once. The intuitive interface even resembles pedit's [284]ListView. Features include full-screen preview of memo text, your choice of Windows text editors, and high speed "Turbo" throughput. Screen messages and command keys may be edited for use by non-English speaking peditors. NOTE. I also recommend [285]Jesse Jacobsen's [286]MemoCircus which is a utility for listing and extracting memos from database files on the DeskTop. These files are found in the directory where your handheld's data is backed up, and will probably be named MemoDB.pdb and Memo32DB.pdb. A special option allows pedit's [287]segmented memos to be treated as a single memo. MemoCircus currently uses a UNIX-style command line interface, though a graphical interface is planned for the future. According to JesseJ, some day, MemoCircus will allow adding memos to the databases, and direct-to-handheld operation via the HotSync cradle. If you have problems, questions, or suggestions concerning MemoCircus, please e-mail the author at [288]jmatjaco@yahoo.com. By the way, MemoCircus is [289]free software, written in [290]Python, and should be usable on any platform where Python can be installed. To run it, you will need [291]Python on your DeskTop computer first. More information and downloads are [292]here. NOTE. EXpedit is a similar Windows utility by Casper Lassenius which is currently [as of November 3, 2000] under closed testing. Hopefully, a public beta version will be available soon. In the meantime, you may peek at a screen shot at the [293]links section of the [294]peditors Forum. Once EXpedit becomes available, you will find it at the [295]files section of the [296]peditors Forum. So far, I have received no reports whatsoever of any problems with pedit32 which were not present in pedit [with the exception of some performance degradation with large memos]. In fact, the great news is that, at least in principle, pedit and pedit32 should share the same bugs, no more and no less. But, as we all know, even if theory and practice are the same in theory, they are definitely different in practice. [I thank the author of pedit for allowing me to include this deep thought, and Daniel D. for taking time to polish it]. NOTE. Of course, pedit is 100% bug-free. It just may have some unexpected, undocumented, and perhaps inexplicable features. [smiley] Which pedit is my pedit? Since there are several pedits, it is not at all simple to keep track of them. If you want to figure out which pedit is the pedit which you are running at the moment, please examine the title bar. If the title starts with the letter p [or m], then your are in pedit04. If the title starts with the letters .p [or .m], then your are in pedit32. If the title starts with the letters !p [or !m] then you are in peditPro. If the title starts with the letters :p [or :m] then you are in peditLight. NOTE. If your Palm Powered handheld allows to create native 32K memos in the built-in "Memo Pad" which also could be called "Memos", then the letters "p04" are replaced by "m32" such as !m32Memos.... In addition, you can also find out if your current memo in [297]EditView is a 4K or 32K memo. Just look at title bar. If the title has p04 [or m32] in it then your memo is a pedit04 memo. If the title has p32 in it then your memo is a pedit32 memo. If you are in [298]EditView and if you are running stats in the title bar, then look carefully at the upper right area of your Palm's screen just below the title bar. If you see a small black square [2*2 pixels], then you have a pedit32 memo. Otherwise, it's a pedit04 memo. Similarly, if you are in [299]ListView, look for p04 [or m32] or p32 in the title bar, and you will know which mode you are in. These considerations are especially relevant if you are running peditPro where you can switch between pedit04 and pedit32 memos. The truth about pedit04! and pedit32! The peditPro package includes two tiny applications called pedit04! [aka pedit04Launcher] and pedit32! [aka pedit32Launcher]. In order to differentiate between them and the pedit/pedit32 package, they both have an exclamation mark "!" at the end of their titles. Think of them as "aliases" for peditPro. You can use them to start up peditPro in either pedit or pedit32 mode. You can assign them to hard buttons, and to GoType! and PPK function keys as well. I use the word alias with quotation marks since the concept of aliases is unknown in the Palm universe, at least as of July 18, 2000. It is a shame since aliases work perfectly in the Macintosh and PC environments. In unix, the concept of soft and hard links goes way beyond the concept of Mac and PC aliases. For the technically oriented, pedit04! and pedit32! fakes soft link to peditPro, and peditPro behaves like, for instance, vi in unix. Here is a part of our /bin directory which shows the edit, ex, vedit, vi, and view are, in fact, the same application. 78088 -r-xr-xr-x 5 root 206948 Jan 5 2000 edit 78088 -r-xr-xr-x 5 root 206948 Jan 5 2000 ex 78088 -r-xr-xr-x 5 root 206948 Jan 5 2000 vedit 78088 -r-xr-xr-x 5 root 206948 Jan 5 2000 vi 78088 -r-xr-xr-x 5 root 206948 Jan 5 2000 view Of course, here we have hard links, but they are functionally equivalent to soft links as in our /opt/local/bin 150230 lrwxrwxrwx 1 root 5 May 19 12:37 ftp -> ncftp 150224 -rwxr-xr-x 1 root 213588 May 31 07:55 ncftp I hope that Palm will seriously consider the implementation of aliases and/or links in its upcoming OSs. The installation of pedit04! and pedit32! is optional. Deleting pedit04! and pedit32! is done via Palm's built-in deletion mechanism. About pedit Start out with our About pedit dialog which can be accessed from the [300]Options menus in both [301]ListView and [302]EditView. Among others, you will see the expiration date of your particular copy of pedit. Of course, if your pedit has already expired, then a clever dialog will inform you of your next moves prior to having a chance to see the About pedit box. Please explore the Credits, Abstract, and Register buttons, and please tap i in the upper right corner. If you have a keyboard, then you can use the first letters of the buttons. Please use this occasion to enter your pedit password via the Register button. Once you invoke Register, just type your password as it was given to you. Make sure that you enter the right lower/upper case letters, and that you do not add additional space or tab characters. Before you contact me that the password did not register, please make 100% sure that you are entering the password of your particular pedit into the correct pedit, and not into another pedit. It may sound incredible, but about 5% of the registered peditors try to enter their password into the wrong pedit. As a registered user, you will get periodic [but not at all obnoxious] friendly reminders of the expiration date but panic no more since you will have the option of continuing using your copy of pedit even if it expired, and even if it became 100% obsolete, and even if it is full of bugs. Of course, if you were smart enough to register, then you are also smart enough to make sure that you always download the freshest and practically bug free version of [303]pedit. buttonPanels Upon entering [304]ListView or [305]EditView you will see a row of buttons on the bottom of the screen. They constitute the [306]ListView and [307]EditView buttonPanels [© copyright [308]Paul Nevai 1999-2002 & all rights reserved]. ListViewButtons separator EditViewButtons Think of them as the instrument panel in your Palm's cockpit and that you are the pilot of your Palm. As a default, the buttons are displayed in black. If you don't like it, then please go to the [309]General Preference Panel and check the white buttons... box. All buttons in the buttonPanels are tied to an [310]ESC key to facilitate activation via [311]keyboards. I hope the buttonPanel concept will become standard in all Palm applications. Any interested party should contact [312]me regarding licensing questions and the buttonPanel SDK. editPanels The editPanel [© copyright [313]Paul Nevai 1999-2002 & all rights reserved] editPanel is a cluster of several buttons which allows access to the basic editing operations both by tapping the buttons on the screen or by using [314]ESC keys. For instance, "ESC c" copies the selected text, and "ESC g" brings up Graffiti Help. Isn't it cool? I hope the editPanel will become standard in all Palm applications. Any interested party should contact [315]me regarding licensing questions and the editPanel SDK. pRotatorTool * Following a recommendation of JoachimS, [316]pRotatorTool was originally introduced in LapTopHack in November, 2000, years before the makers of the Palm OS came up with the idea of object navigation [the "halo" thingie]. Then, after having been perfected in pToolSet from March 2003, it became part of pedit in April, 2005. * You can use pRotatorTool to activate "objects", that is, dialog titles [menus], controls such as buttons, push buttons, check boxes, and repeating buttons, and also focus text fields either by using the 5-way button, or via keyboard and Graffiti input. * The concept of pRotatorTool is very simple. First, identify your object structure, and then activate it. * Please either tap in a 5 pixel wide strip at the top of the screen or type "?" for onboard help when in pRotatorTool. In particular... + pRotatorTool can buttonSlide. + hard button #1 = cancel the operation + hard button #2 = move the rotator to the home [first] position + hard button #3 = move the rotator to the end [last] position + hard button #4 = activate the "OK", or "Done", or "Find", or "Get" or "1: via..." or "Add", or "Run", or ";Go", or "Exit", or "Close", or "Cancel", or the first button starting with ".", in this order or priority * In many pToolSet modules, pRotatorTool can be invoked directly via 5-way select, or by typing "ESC ~" or "~", depending whether the given dialog uses ESC keys. These modules include pEditTool and pInfoTool, see the "i-Tips" help files of the individual modules. * Similarly, pedit has direct pRotatorTool support in some of its primary dialogs such as EditView, ListView [via "ESC ~" only], and in the "F" [find], "J" [jump], and "S" [select] dialogs [to see which additional dialogs have direct pRotatorTool support, just try 5-way select, or type "ESC ~" or "~"]. * In addition, in certain text editing pToolSet modules and pedit dialogs, pRotatorTool might be automatically invoked via 5-way up if the cursor as at the beginning of the text, and via 5-way down if the cursor is at the very end. * In many but not all Palm Powered handhelds, pressing the power button for more than 1 second and less than 2 seconds puts the Palm in the pRotatorTool mode [if this option has been enabled via pMasterTool's "Opt" menu, see the "pRotator Power Btn on|off" menu command]. NOTE. Some Palms, such as the Tungsten T3 and Tungsten T5 do not allow to use the power button feature since the OS hijacks long presses of the power button and uses them for some device specific features. The FIND SilkScreen button Now let's talk for a little while about Palm's built-in FIND SilkScreen button and its interaction with pedit. As you will see soon, I put a number of twists on the search process via Palm's built-in FIND SilkScreen button. First, FIND can be invoked by typing "ESC F" [upper case "F"] in both [317]ListView and [318]EditView. Second, FIND can find any string in your memos via pedit unlike via the built-in Memo Pad where it finds the beginnings of words only. Third, whether you initiate the FIND process inside or outside pedit, you can add modifiers [options] to your search string to change the behavior of the search process of pedit memos. These modifiers work whether or not you have FindHack installed in your Palm. Effective with [319]superFinderHack 1.21 and pedit 5.997, superFinderHack automatically disables pedit's "fancyFind" while it searches pedit so that you don't need to worry about anything. Hence, there is complete compatibility between superFinderHack and pedit. Just use superFinderHack's much more powerful searching capabilities. In addition, effective with [320]grepHack 1.21 and pedit 5.997, grepHack also automatically disables pedit's "fancyFind" while it searches pedit. Just use grepHack's much more powerful searching capabilities. There is one exception though. Namely, unlike superFinderHack, grepHack cannot tell pedit to search the current category. NOTE. These modifiers will have no effect on your search of databases created by applications other than pedit. Simply put, they will not recognize these modifiers. Here is how it works. You can add one or more of the modifiers '@' ["at" sign or "commercial at"] '.' [period] '^' [caret] '+' [plus sign] ':' [colon] to the beginning of the search string [in an arbitrary order]. The "at" sign "@" means that your string will not be processed [successfully] by Memo Pad or any other application except for pedit so that you get no duplicate matches by both pedit and Memo Pad. By the way, there are some exceptions to this rule, so that if you happen find one, then please do not dump pedit. This option is not likely to influence the speed of your search. The period "." means that the search in pedit is performed only in your current category. I borrowed "." from unix where it refers to the current directory [unlike in pattern matching where "." means exactly one character which is not a line terminator]. This option is likely to speed up your search. The caret "^" means that the search in pedit is restricted to the first line of the memos. I borrowed "^" from pattern matching where it refers to the beginning [well, it's the beginning of a line and not that of a file, but it is still a good way to remember it]. This option is likely to speed up your search significantly. By the way, many peditors like to refer to the first line of a memo as its [321]title, so that you could say that "^" searches the table of contents. The plus sign "+" means that the search in pedit is not case-blind, unlike the search in Memo Pad which always ignores cases. This option is likely to slow down your search significantly. The colon ":" means that the search in pedit is no longer restricted to the beginnings of words as in Memo Pad, and partial words can be found as well. This option is likely to slow down your search significantly. I want to emphasize that if you use either of the options "+" or ":", be prepared to be patient if you have many large memos. Having pointed out the superiority of our implementation of "FIND" as opposed to Memo Pad, here are some examples: "@^.pedit" finds in pedit but not in Memo Pad all memos in the current category which contain in their first line [the [322]title] one of the words "pedit", "Pedit", "pEDit", and so forth. On the other hand, "@+^.pediT" does the same for the word "pediT" but not for "pedit", "Pedit", and so forth. If you don't care for these fancy FIND features and you wish you could turn them off so that the FIND button would regain its pre-pedit [lack of] functionality, worry no more! In fact, for the fancy mode to be active you need to turn it on by opening up the [323]General Preference Panel, and by checking the fancy silk-screen "FIND" box. Fourth, all pedits, except for peditLight, support [324]REGEXP via the built-in FIND SilkScreen button, as long as the find process was initiated from inside pedit and the fancy silk-screen "FIND" box is checked [see the [325]here]. Just start your search string with ")" [right parenthesis], and then your search will be via REGEXP in a case-blind mode. EXAMPLE. ")pedit[^ ]*". NOTE. If your pedit is running, and if you set the ")" magic greptivator [grep activator], then your other "fancy" options will be ignored. NOTE. If you want to use [326]REGEXP from outside pedit via the FIND SilkScreen button, then just install [327]superFinderHack or [328]grepHack. The magic activator option for grepHack is "R" [upper case "R" as in REGEXP]. NOTE. If you happen to have both peditPro and some other pedits installed on your Palm simultaneously, then FIND will search your memos only via peditPro. This is the case even if peditPro is dormant and another pedit is currently running. Setting the Preferences You can set pedit's preferences using either the [329]Preferences command in [330]EditView's [331]Opt[ions] menu or the [332]Preferences command in [333]ListView's [334]Options menu both of which take you to the pedit preferences dialog. These two commands are the same and both invoke the same dialog. The only difference is that some of the options are available only if you invoke the dialog from [335]ListView. NOTE. Since pedit keeps evolving, the preference panels shown below may differ from the actual panels in your pedit. NOTE. There is extensive on-line help available by pressing the "i-Tips" button in the "pedit preferences" dialog. The "pedit preferences" dialog consists of several "panels" each of which can be invoked either by tapping on it by entering the first upper case letter of its label. The only exception is the myNotes push button which can be activated by "N". All check boxes, buttons, push buttons, and so forth, can be activated by entering the first [case sensitive] letter of their labels. Use the SPACE, TAB, left arrow, and right arrow keys to cycle through the push buttons, Use the up arrow, down arrow, page up, page down, up repeating button, and down repeating button to scroll the text fields. This is the General panel. General Preferences If the escape character is box is checked then the [336]ESC key mechanism is activated, and the character following this check box is defined as your [337]ESC character. NOTE. If you want either SPACE or TAB to be the [338]ESC character, then please enter "S" [upper case "S"] or "T" [upper case "T"], respectively. NOTE. If the current [339]ESC character is either SPACE or TAB, then it will not show up in the text field following the escape character is check box since it is invisible. However, you can highlight it, and then it becomes visible. If create memos on top is checked and memo sorting is set to manual, then new memos are created at the top of the memo database. Otherwise, they are all created at the very end [unless they are alphabetically sorted]. If the fancy silk-screen "FIND" box is checked, then the search routine via the SilkScreen [340]FIND button allows to use certain options as described [341]here. Regarding the save text in magiPad check box, please see [342]magiPad for the details. If the white buttons under memos box is checked, then the [343]buttonPanels are displayed in white. Otherwise, they are black. This is the EditView panel. EditView Preferences The allow double taps in the text check box and the Ticks between double taps text field are explained [344]here. If the cursor moves via 5-way button box is checked then the 5-way navigator button, if available, moves the cursor left/right/up/down. NOTE. Due to the nature of the Palm OS, automatic capitalization only works in conjunction with text input via Graffiti. Neither the built-in virtual keyboard nor external keyboards are affected by it. In addition, the algorithm which decides whether or not to capitalize is not 100% foolproof. If the enable statistics in title bar box is checked then the [345]stats are enabled [see [346]here for the details]. If the move cursor via btnSliding "J" box is checked, then left/right/up/down buttonSliding the "[347]J" button moves the cursor left/right/up/down. This is the ListView panel. ListView Preferences NOTE. The ListView panel is functional only if you invoked the "pedit preferences" dialog from [348]ListView. Selecting the alphabetic sort option makes pedit to sort all the memos in alphabetic order. Picking this option will overwrite the current sort order. Selecting the manual sort option allows manual sorting of memos by dragging them up and down the list. To drag, first pen down on a memo, then drag it to the desired order, and, finally, lift up the pen. The Edited/Visited memos move to top/move to bottom option allows reverse and forward chronological ordering of edited [changed] and visited [read] memos. Please see [349]here for help on navigating the popped up list. NOTE. The [350]leftButtonSlided [351]PopUp Font Trigger in [352]EditView touches the current memo, that is, it pretends as if the memo were edited. Selecting the new option means that if you enter a printable character while in [353]ListView, then a new memo starts automatically whose first letter is the given character. This mimics Memo Pad's behavior. Selecting the seek option means that if you enter a printable character while in [354]ListView, then the table of contents scrolls to the first memo, after the currently shown top memo, whose [355]title starts with the given character. The seeking process wraps around, that is, the search continues at the top once it has reached the bottom [see the related navigational commands [356]here]. Selecting the direct [as in "direct action"] option means that you don't need to use the [357]ESC key mechanism while in [358]ListView. Instead, just entering the appropriate character activates your commands. If the ! starts read only categories box is checked, then you can use readOnlyCategories. Please see the [359]Lock|Unlock Memo command in [360]EditView's [361]Record #1 menu for the details. This is the myNotes panel. myNotes Preferences If the category of myNotes is fixed box is unchecked, then 000.myNotes inherits the current category in [362]ListView every time it is invoked via the [363]myNotes button. Otherwise, the category 000.myNotes remains fixed. If the date stamped myNotes box is checked, then 000.myNotes gets a new date'n'time stamp every time it is invoked via the [364]myNotes button. The actual formatting of the date'n'time stamp uses the preferences set in the "Formats" Preference Panel. If the top starting myNotes box is checked, then every new entry in 000.myNotes is placed in the beginning of the file as long as it was invoked via the [365]myNotes button. This is the Options panel. Options Preferences If the capitalization is automatic box is checked then each sentence will automatically start with a capital [upper case] letter. If the ignore case during search box is checked then all text search and/or replace operations are case blind [case insensitive]. Please see [366]herefor more details. The linefeed is considered invisible option is used by the visibilator. Please see the [367]Visibilator command in [368]EditView's [369]Edit+ menu for more details. If the search is "wrap around" box is checked then all text search and/or replace operations continue at the beginning [top] once they reached the end [bottom] except for the "All R" [Replace All] command which stops at the end. Please see [370]here for more details. If the words are "Forth style" box is checked then all text search, replace, jump, and selection operations use a special definition of [371]words. Please see [372]here, [373]here, and [374]here for more details. In addition... * Typing "D" toggles on/off the Dynamic Input Area [DIA] support [only in peditPro and only if the Palm Powered handheld has a DIA]. This is the Modes panel. Mode Preferences For left-handed users, the scroll bars are positioned on the left-hand side of the screen, whereas for right-handed users, the scroll bars are positioned on the right-hand side of the screen. WARNING.Unless you know what you are doing, you should always stay in normalMode. You can turn on either the advancedMode, or the expertMode, or the normalMode by selecting the appropriate push button. If one of your [375]pScripts left a dangling [376]globalMacroMode, then you can get rid of it by using the turn off globalMacroMode button which is only visible when appropriate. NOTE. All the modes are sticky which survive quitting and relaunching pedit. NOTE. If you are in the advancedMode or expertMode which happened to suppress the display of a dialog, then you should use Graffiti ShortCuts with extreme care. Neither I nor pedit accepts any responsibilities for any unexpected behavior. However, it would be very considerate of you if you reported such events to the [377]peditors Forum. NOTE. I must admit that, although I tried very hard to mess up pedit with Graffiti ShortCuts in both advancedMode and expertMode, pedit resisted all my attempts. However, I am sure that most advanced and/or expert peditors are much more ingenious than I am, and I have no doubts that they will succeed where I failed. NOTE. I started implementing advancedMode and expertMode on April 7, 2001, and you will be able to find out what they accomplish by searching this [378]manual for the expressions "expertMode" or "advancedMode", and "(advanced || expert)" or "(advanced && expert)". Since you are an advanced and/or expert peditor, I am sure that you do not want me to provide lengthy explanations. Please let [379]me know if you find them too terse. Batch Processing of Memos The memo batch processor allows you to edit all or some of your memos in one fell swoop using commands which you collect in designated [380]pScripts. Only your imagination sets limits to what can be accomplished with this tool. NOTE. The initial implementation of the memo batch processor was introduced in version 6.28. The final version will have a truly sophisticated user interface with numerous options. However, in order to make sure that it will work properly, the initial version comes with no options and no user interface whatsoever. Once it had been fully tested and I had feedback from more than just a handful of peditors, I will add the fancy stuff to it. WARNING. Batch processing is a powerful weapon and it must be used with extreme care. Among others, it allows you to screw up all your memos as fast as you can say "pedit" [well, depending on the number of memos you have, it may take a little longer]. You can activate the batch processor via the Batch Processor commands in the [381]Options menu in [382]ListView [[383]here] and in the [384]Opt[ions] menu in [385]EditView [[386]here]. NOTE. Temporarily, [387]ESC % [percent] also activates the batch processor. However, this option may be removed from the final version since I view batch processing a "hazardous" activity requiring full attention of the operator. Of course, if you have no "defaultBatchScript" [see below], then you are in no danger of acidentally running amok with your pedit. Batch processing is subject to the following rules. * peditLight does not do batch processing. * Only registered pedits can do batch processing. This is not a punishment but rather a way to avoid interference by the friendly nagger during batch processing. * Prior to processing the eligible memos, the batch processor applies the purely optional [388]pScript with [389]pScriptNameIdentifier defaultInitBatchScript. If the latter does not exist, then the batch processor simply goes to the next step. * The batch processor applies the [390]pScript with [391]pScriptNameIdentifier defaultBatchScript to every memo which is eligible for batch processing. If the latter does not exist, then the batch processor gracefully exits. EXAMPLE. The pScript {defaultBatchScript::/GZ /xEpro s1ac Z /xz} will replace the first character of every eligible memo by "Z". * The batch processor loads each eligible memo in a standard state which consists of no text selection and the cursor being at the very beginning of the memo. * If you start from [392]ListView, then only memos in the currently shown category are eligible for batch processing unless pedit shows all categories. NOTE. The "Unfiled" category counts as a regular category whose name is simply "Unfiled". * If you start from [393]EditView, then only memos in the category of the current memo are eligible for batch processing. NOTE. The "Unfiled" category counts as a regular category whose name is simply "Unfiled". * Deleted and/or archived memos are not eligible for batch processing. * Private memos are not eligible for batch processing whether they are hidden or just masked [Palm OS 3.5+]. On the other hand, if they show up as regular memos in [394]ListView, then they are not exempt from batch processing [see Palm's built-in "Security" application and the [395]Security command]. * Memos which are [396]readOnlyMemos or are in [397]readOnlyCategories are not eligible for batch processing. * [398]Segmented memos are not eligible for batch processing. * Each batch processing pScript must start and end in regular [399]EditView, that is, neither in [400]ListView, nor in [401]magiPad, nor in [402]scriptPad, nor in any dialog. * Each batch processing pScript must start and end in the same memo DB. You can't start with, say, MemoDB which uses 4K memos, and end up in Memo32DB4K with 32K memos. NOTE. While the batch processing pScript is being performed you are allowed to jump from memo to memo and even to [403]switch between memo DBs as long as you start and end up in the same place. NOTE. Technically speaking you are not required to start and end up in the very same memo but try not to flirt with disaster. * Batch processing requires that the manual sort option must be used in the [404]ListView Preference Panel. EXPLANATION. With the alphabetic sort option the order of your memos would constantly change if your pScript had changed the [405]titles of your memos which would result in a chaos. * You must not delete memos, create new memos, split memos, backup memos, segment memos, change the "read only" status of either memos or categories, or in any other way change the total number of batch processing eligible memos and/or the order of your memos during the batch processing. You are responsible for this since pedit has no way of observing such an illegal activity. * pedit tries to prevent recursive batch processing but it may not always be able to do so. If you manage to fool pedit into recursive batch processing, then it may lead to unpredictable consequences. * During the batch processing, you get a visual feedback after every ten memos which have been processed. * During the batch processing, the "auto-power-off" timer is turned off. * You can always interrupt [kill] the batch processing by pressing the page up button on your Palm Powered handheld. WARNING. Therefore, your batch processing itself must not programmatically press the page up button or else it will self-terminate. * While your pedit batch processes your memos, you should sit back, relax, and you must not touch your Palm Powered handheld's screen and/or Graffiti area, and/or play with the external keyboard. Otherwise, additonal actions will be generated. The only exception to this rule is that you can interrupt the process as described above. Please let [406]me know how it works. Have fun... ListView If you are in [407]EditView, then you can enter [408]ListView by pressing the "OK" button, or by using the [409]"OK" & ".C" buttons" command in the [410]Navigate menu. What you see is your pedit's table of contents. Many peditors will refer to what you see as the titles of your memos. I beg to differ. What you see is [a perhaps abbreviated version of] the first line of your memo. As a matter of fact, there is no such concept as the title of a memo in the Palm universe. Although some memo editors do create titles, these title are stored separately from the memo database, and, therefore, extra bookkeeping is required which can slow down ListView's startup significantly. Nevertheless, for the lack of better terminology, I will refer to what you see as the title of your memo. Once you graduate to [411]segmented memos, you will realize that [412]ListView makes a smart decision when displaying titles of such memos. I have no doubts that you will appreciate pedit's native intelligence. As soon as you enter ListView, please visit the [413]Preferences dialog which is located in the [414]Options menu. Navigating ListView In addition to [415]ListView's [416]Navigate Menu, you have a number of other ways of exploring it. As expected, the page up and page down buttons help you to navigate in [417]ListView. In addition, please memorize this table and you will no longer have any problems in finding the memo you are looking for. page up = up arrow = scroll one page up left arrow = scroll one one line up page down = down arrow = scroll one page down right arrow = scroll one one line down space = select the next memo title backspace = select the previous memo title carriage return = open the memo whose title is currently selected NOTE. The memo title selection process wraps around in the sense that the selection continues at the top once it reached the bottom of the screen if it was invoked with space, and it goes the opposite direction if it was invoked with backspace. NOTE. If no memo title is currently selected, then both space and backspace select the top title shown on the screen. NOTE. Please do not forget to study the effects of the [418]seek option. Please look up in your Graffiti reference how to enter the left arrow and right arrow characters. Basically, they consist of a left-right or a right-left job. Please see the definition of memo titles [419]here. For additional tricks, please see the information about the SilkScreen [420]FIND button. Let us discuss the menus in [421]ListView now. ListView's Record Menu New Memo This command creates a new memo. Open Memo This command is just a way to get out of the [422]batcher modes which are defined as the [423]Preview Memo, [424]Delete Memo, [425]Categorize Memo, [426]Privatize Memo, [427]Beam Memo, and [428]Print Memo commands. Go to Memo This is the same as the [429]Go to Memo menu command in [430]EditView's [431]Record #1 Menu. This pops up a dialog where you can enter either the index or some text of a memo you want to open. Go to Memo NOTE. If you are in the [432]expertMode, then this dialog will not show up at all except for its title, although you can enter your commands as usual. It also has more options than you will ever need. You can use the following shortcuts. * ESC e = the "Text" selector button = the "Item pEditor" menu command * ESC R = the "recent" selector button * ESC F = the "favorite" selector button * ESC b c i m s u = the "Begin...", "Current...", ... , check boxes * ESC B C I M C U = force checking the "Begin...", "Current...", ... , check boxes * TAB = ESC TAB = previous/next field chars = 5-way right = switch the focus between the fields * ESC # = focus the memo index field * ESC t = focus the memo text field * ESC < = the "<" button = "Go to Start of Memo" menu command * ESC @ = the "@" button = leftButtonSlided "Open" button = "Go to Matched Text" menu command * ESC | = the "|" button = rightButtonSlided "Open" button = "Go after Matched Text" menu command * ESC > = the ">" button = downButtonSlided "Open" button = "Go to End of Memo" menu command * ESC & = the "&" button = the pScript entry dialog * ESC Z = turn on globalMacroMode and open the silent pScript entry dialog * ESC o [oh] = ESC O [Oh]= ESC ENTER = ENTER = 5-way select = the "Open" button * ESC . = 5-way left = the ".Cncl" [Cancel] button * ESC a = the "AddFav" button = add current text in the memo text field to the favorite list * ESC h = ESC H = ESC ? = the "Help" button * If the memo index field is focused, then... + f = ESC f = set the index of the first memo + l = ESC l = set the index of the last memo + page up = ESC up arrow = up arrow = 5-way up = increase the current memo index + page down = ESC down arrow = down arrow = 5-way down = decrease the current memo index NOTE. When using the "Begin Search at Current Memo" option, then the actual search starts right after the current memo. NOTE. The memo text search can be interrupted by tapping, or by typing ".", or by a page up/down or 5-way up/down press, depending on the particular Palm Powered handheld. NOTE. Masked secret memos are never found by text matching unless no password has been assigned. Otherwise, this would be a security breach. NOTE. Many of the options have been disabled in peditLight. NOTE. This command can also be invoked via the [433]upButtonSlided "[434]New" button in [435]ListView's [436]buttonPanel. NOTE. This command has [437]expert mode. The Batcher Modes [438]Preview Memo, [439]Delete Memo, [440]Categorize Memo, [441]Privatize Memo, [442]Beam Memo, and [443]Print Memo commands share the same underlying interface. Namely, they all look like the regular [444]ListView on the surface, but when you are in one of the batcher modes and if you hit the title of the memo then you are placed into a special dialog where on one hand you can preview the current memo and perform certain operations, and on the other hand, you can navigate between memos via the arrows and/or the page up|down key and/or via keyboard action. Please look at the tips in the dialogs which can be invoked via the "i" button in the upper right corner of the screen or by entering one of the letters "h", "H", "?", "i", and "I". For your convenience, the title of the batcher dialogs shows the size of the current memo. Navigation in the Batchers The "<=" button = "p" or "P" or "SPACE" characters = left or up arrow keys on keyboard = scroll up hard key = preview previous memo in current category The "=>" button = "n" or "N" or "BACKSPACE" characters = right or down arrow keys on keyboard = scroll down hard key = preview next memo in current category Typing ENTER results in the same action applied to the currently selected memo as if tapping on a memo [445]title. NOTE. When privatizing or printing then "p" and "P" are used for [de]privatizing or printing so that use "b" and "B" instead for switching to the previous memo. Preview Memo In this mode, tapping on the title of the memo pops up the memo previewer dialog from which you can easily decide which memo to open up. Delete Memo In this mode, tapping on the title of the memo pops up the memo deleter dialog where you can decide whether or not to delete the selected memo and its [446]sister segments as well. When deleting memos, the save archive copy on PC option will store deleted memos in an archive file on your DeskTop at the next HotSync operation. NOTE. In pedit32 archiving of records is not implemented and it is not necessary since there is no DeskTop conduit associated with it. Categorize Memo Strictly speaking, this is not a [447]batcher operation since there is no [448]batcher dialog associated with it. Nevertheless, it also allows a batch job on changing the categories of your memos. When in this mode, then tapping on the title of the memo makes the category list drop down, and thereby you can do quick change of category without the need of opening up the memo whose category is being changed. Move Memo to Top This is not a formal [449]batcher operation either. In this mode, tapping on the title of the memo puts moves to the top in its own category. Of course, this works only if the memo sort order is manual [see the manual sort option in the [450]ListView Preference Panel]. Privatize Memo In this mode, tapping on the title of the memo pops up the memo privatizer dialog where one can decide whether or not to change the private property of the selected memo and its [451]sister segments as well. NOTE. A private memo can be seen and edited only when your Palm is set to show private records. The latter can be set from the [452]Security item in [453]ListView's [454]Options menu, or via Palm's built-in Security application. NOTE. If your Palm's OS is at least 3.5, then you have a third option. Namely, in addition to hiding and showing private records, you can also mask them so that they will show up in [455]ListView but you will not be able to peek at them unless you enter your Palm password. NOTE. The concept of private records is useful only if your Palm's password has been assigned. The latter can be set from the [456]Password item in [457]ListView's [458]Options menu, or via Palm's built-in "Security" application. NOTE. I should point it out to you that Palm's security is not something I would count on. I will probably not break news if I tell you that any hacker worth her salt would find any of your hidden records in a jiffy as long as your Palm is turned on and is unlocked. Depending on the circumstances, you can think of this as good news since forgetting your password is no big deal as long as you do not lock your Palm when you turn it off. Beam Memo In this mode, tapping on the title of the memo pops up the memo beamer dialog where one can decide whether or not to beam the selected memo and its [459]sister segments as well. NOTE. All beaming operations require that both the beaming and the beamee Palm have the same type of pedit installed. Of course, if you want to beam a 4k memo, you can always use Palm's built-in Memo Pad. Print Memo If you have [460]Stevens Creek Software's [461]PalmPrint, or [462]TealPoint's [463]TealPrint installed in your Palm, then pedit provides a number of customizable ways of printing your memos and/or parts of it to any device which is supported by your print software. In the Print Memo mode tapping on the title of the memo pops up the memo print dialog where one can decide whether or not to print the selected memo and its [464]sister segments as well. You can also decide whether the headers of [465]segmented memos should be printed. In addition, the number of copies to be printed can be determined by entering any number between 1 and 9. You can enter the number either via Graffiti or an external keyboard, but not by using the built-in virtual keyboard. Beam Category As opposed to [466]Beam Memo, this command allows you to beam an entire category of memos to another Palm in one fell swoop. When selected then all memos in [467]ListView's currently visible category get beamed. If [468]ListView shows all categories, then all memos get beamed. NOTE. All beaming operations require that both the beamer and the beamee Palm have the same type of pedit installed. Export Category Exporting provides a means to communicate between your pedit and its sister pedit. You can move memos back and forth with minimal effort. The analogous [469]Export Memo command in [470]EditView's [471]Record #1 menu also allows to export your memos to [472]DOC files. Although the Export Category command is pretty much self explanatory, it is worthwhile to summarize it. First, this command allows exporting either all memos which are in [473]ListView's currently displayed category or all your memos in one fell swoop from one pedit to its sister pedit. There are only two exceptions to this rule. * If a memo is [474]segmented then it will not be exported from pedit32 to pedit. * If a memo is [475]segmented and the total size of all its segments is greater than 32K then it will not be exported from pedit to pedit32. Well, there are two more exceptions. Namely, the sister pedit's memo database must be installed, and sufficient free RAM real estate must be available for performing the export operation. NOTE. If a pedit32 memo is [476]segmented but it consists of one single [477]segment only, then you can delete its [478]segment header so that it would become exportable from pedit32 to pedit. However, you will loose the information which was kept in the [479]segment header. In order to be able to manage both pedit and pedit32 simultaneously, and in order to keep pedit32 memos apart from pedit04 memos, please keep the export segmented memos only box checked all the time when exporting from pedit to pedit32. This way your regular pedit04 memos will never end up in pedit32. If you choose to delete exported memos and if you are in pedit04, then the $ave archive copy on your PC option will store deleted memos in an archive file on your DeskTop at the next HotSync operation. Exporting is as smart as it [or, should I say, yours truly] could be. In particular, it will place the exported memo in the same category where it resided originally. If that category name does not yet exists in the sister pedit and if the will clone category names too box is checked, then it will create one. If the sister pedit has no vacancies for new category names, then the exported memo will go into the Unfiled category. If a memo is [480]segmented, then exporting it from pedit to pedit32 will assemble your memo and its sister segments into one pedit32 memo. A pedit32 memo will turn into a [481]segmented memo in pedit04 after an export operation unless your memo is less than 4K and you check the no segmenting if less than 4K box. Each segment will fill up only 75% of pedit's 4K capacity so that you will have plenty of capacity available for changes and further additions. NOTE. I should point out that the exported memos get deleted from pedit only after the export operation went flawlessly so that your precious data are as safe as possible. Here is a neat hint for you. If you want that all of your memos show up in your DeskTop Palm application, then do an export job of all of your pedit32 memos, then HotSync, then work on your memos on your DeskTop, then HotSync again, then export all your [482]segmented memos from pedit04 back to pedit32. Just make sure that you always choose to delete your exported memos. Otherwise, you may end up with multiple copies. NOTE. The "Please create MemoDB/Memo32DB first..." message means that you have never been in the pedit04/pedit32 mode yet. Go to [483]ListView and use the [484]Switch command in the [485]Navigate menu or tap in the left 1/8th of the title bar, to the left from the small pixel visible just under the title bar. Import Doc File Importing [486]DOC files provides a means to move your pedit memos from the DeskTop to pedit with minimal effort. Using [487]DOC files is especially recommended if your pedit memo, together with its [488]sister segments, is longer than 4K so that using the standard route via your DeskTop Palm application becomes cumbersome since it was not designed the handle large memos. The command [489]Export Memo in [490]EditView's [491]Record #1 menu allows you to export your memos to [492]DOC files. Although the Import Doc File command is pretty much self explanatory, it is worthwhile to summarize it. Invoking Import Doc File takes you to [493]magiPad where all your installed [494]DOC [including TealDoc] files are listed. Once you familiarize yourself with [495]EditView, you will be able to navigate here using all the powerful tools in it. The list tells you the title of your [496]DOC files [with the memory card number and the uncompressed size listed as well]. You can think of a card as a hard drive. We can all foresee the near future when we will have dozens of cards sitting in our Palm computing devices providing zillions of bytes of available memory. Although no two different Palm files sitting on the same card can have the same name, files on different cards do not need to have uniquely defined names. Therefore, it is essential to know which card is the host of your file to be able to identify it uniquely. It is interesting to note that many Palm aplications ignore this fact and, unlike pedit, they are hardcoded to use card #0 no matter what. As of July 11, 2000, all Palms have one built-in card only. If you see an exclamation mark "!" before the title of a [497]DOC file, it means that the file is read-only and it cannot be deleted after you complete the import operation. Tapping on the title of a [498]DOC file pops up the pedit import dialog which is also self-explanatory except perhaps for the no segmenting if fits one memo check box. If you choose the no segmenting if fits one memo option then your pedit will try to place the [499]DOC file into one memo. Otherwise, it will break the file up into segments where each segment will occupy roughly speaking 75% of the maximum available memo size. This way you will have plenty of real estate left for editing your memos. If you choose the no segmenting if fits one memo option, then you can also decide if you want to forgo adding a [500]segment header to the imported [501]DOC file by setting the add no header if fits one memo check box. After you initiate the import operation you can sit back and relax. Depending on the size of your [502]DOC file, the operation may take longer than you wish it did. For instance, a 1Mb [503]DOC file import job on my Palm Vx takes about 60 secs. Depending on your [504]DOC file, you may end up being confronted by another dialog starting with "Hmm...". If you ever see it, I have no doubts that you will know what to do. In case you end up never seeing this dialog, here is what it says: I believe that this file uses a unix [DOS] style end-of-line notation. Would you like me to convert it to the one used by the Palm OS? ListView's Options Menu Font This command allows you to change the display font in [505]ListView. If Hands High Software's FontBucket is installed, then pedit automatically lists all your FontBucket fonts. Please see FontBucket's web page for a large collection of fonts. Batch Processor This command is the same as the [506]Batch Processor command in [507]EditView's [508]Opt[ions] menu. Please see [509]here for the details. Security This command allows you to Show and Hide your private memos on the fly. If you use OS 3.5+ then you will also have yet another option which allows you to mask off your private records without removing them from [510]ListView. Palm's built-in Security application can also accomplish the same task. Use the [511]editPanel while entering your Palm password. Password This command allows you to change and/or delete your Palm password on the fly provided that you are a registered user of pedit and you know your pedit password. Use the [512]editPanel while entering your passwords. Clear History If you edited any of your memos with a program other than this particular pedit, whether on the Palm or on the DeskTop, it may be a good idea to clear the history of recently visited memos since pedit keeps track of information which may have been altered by the other programs such as cursor position and so forth. If you fail to clear your pedit's history, you may face unpredictable consequences such as incorrectly selected text or even a crash now and then. If you experience a crash which you think may be related to your pedit's history file, and if you are unable to start up pedit after the crash then use [513]peditFixer which can do the same Clear History job and more... For the technically inclined, the history of pedit04 and pedit32 memos is kept in the Palm database called MemoHIST and Memo32HIST, respectively. Clear Preferences If you edited any of your memos with a program other than this particular pedit, whether on the Palm or on the DeskTop, it may be a good idea to clear pedit's preferences since they keep track of information which may have been altered by the other programs such as cursor position and so forth. If you fail clear your pedit's preferences, you may face unpredictable consequences such as incorrectly selected text or even a crash now and then. If you experience a crash which you think may be related to your pedit's preferences, and if you are unable to start up pedit after the crash then use [514]peditFixer which can do the same Clear Preferences job and more... Clear Deleted Records Regarding this command I note that you want to use it only if you do not use a DeskTop conduit for your pedit04 memos. If you do then the conduit takes care of removing the footprints of your deleted pedit04 memos. Otherwise, these footprints keep accumulating in your database, and it is a good spring house-cleaning practice to remove them periodically. Please note that Clear Deleted Records has no effect on pedit32 memos since there is no DeskTop conduit associated with them, and, therefore, whenever you delete a pedit32 memo, it's gone for good. Total Cleaner Upper This command operates on peditPro only it performs duties similar to [515]peditFixer [see [516]troubleshooting]. Tuner Upper This command bring us the pedit tuner upper dialog which is an invaluable aid for serious users of [517]pScripts and [518]REGEXP. If you are unfamiliar with these two notions, then you probably will never need to use this command. First, this command allows you to customize the [519]key-event-queue-size which, of course, can also be achieved by the appropriate [520]pFunction. If you want to increase the current key-event-queue-size, then use the Boost KeyEventQueue Size button, which adds to the current key-event-queue-size the number which you entered into the text field next to the button. The number you see next to the Boost KeyEventQueue Size button is the difference between the current and the default values of the key-event-queue-size. The default value is usually 55. If you want to go back to the default key-event-queue-size, then you can either use the Set Default KeyEventQueue Size button, or just use the Soft Reset - Reboot button, which does a paper clip reset on your Palm. A soft reset is considered a safe procedure which should not harm your data at all [as opposed to a hard-reset which wipes out the contents of all your RAM]. I recommend doing a soft reset on a regular basis, say, once a week. NOTE. You need to use the Boost KeyEventQueue Size button after every soft, warm, and hard reset of your Palm, since all such operations reset the key-event-queue-size to its default value. NOTE. Palm OS 5+ no longer supports the "Boost KeyEventQueue Size" command since the Palm OS function "EvtSetKeyQueuePtr()" stopped being supported. Similarly, if you want to increase the current stack, then use the Boost Stack Size button, which adds to the current stack size the number which you entered into the text field next to the button. The number you see next to the Boost Stack Size button is the difference between the current and the default values of the stack size. The default value is 8192 [0x2000] plus a couple of hundred of overhead. NOTE. Just to be on the safe side, pedit will not allow you to set the stack size to anything greater than 32768 [0x8000] although, in principle, the stack size could be almost twice as large. If you pick a larger number, then the stack size will be set to 32768. In addition, the stack size must be an even number, but you don't need to worry about it since pedit will evenate [sic!] your number anyway. If you are an expert, then you can examine [and edit?] the 'pref' #0 resource in pedit using RsrcEdit which contains the default stack size value. Read [521]here for the details of what a 'pref' #0 resource is. WARNING. As the most recent [522]POSE reveals, RsrcEdit 1.017b is full of memory leaks [bugs] which may cause serious problems. Hence, it is prudent to use utmost care when playing with RsrcEdit. If you want to go back to the default stack size, then you can use the Set Default Stack Size button. NOTE. If you change the stack size, then your pedit will be relaunched so that the new stack size could take effect immediately. WARNING. If you change the stack size, then your pedit application gets modified. Therefore, you will need to change the stack size every time you install a new version of pedit. In addition, you should set your stack size prior to moving pedit into a read-only memory such as the flash ROM or a CompactFlash card. NOTE. There is no built-in keyboard support in the pedit tuner upper dialog. This was a deliberate design choice. If you use this dialog so frequently that you miss the keyboard support, then you must be doing something I could not have foreseen. QUESTION. Why would I want to change the key-event-queue-size? ANSWER. Because your [523]pScripts are longer than the built-in 55 character limit. QUESTION. Why would I want to change the stack size? ANSWER. Because your [524]REGEXPs tend to be long and/or complicated, and you have experienced either a crash or an unexpected termination while searching text. QUESTION. What is a stack anyway? ANSWER. Excellent question. First, "officially" it is called "application stack space". Second, you could start, for instance, with the [525]manual of [526]TealMemBrain, and then move to [527]here or [528]here. In short, it is a small portion of your regular RAM where many of the peditorial computations take place. As it turns out, pedit does a great memory optimization job with the exception of possibly two cases. Namely, when working with long and/or complicated [529]REGEXPs, or when importing very-very-very long [530]DOC files. In fact, these [531]DOC files need to be so long that you would not even have enough memory to store them anyway so that we can ignore the latter. The Encyclopedia Britannica would be a good candidate for crashing pedit when importing it into a memo. QUESTION. What are the absolutely-positively-definitely safe ranges for the key-event-queue-size and the stack size? ANSWER. This is another excellent question. In short, I don't know. It depends on several factors such as your hardware, your OS, and the stuff on your Palm. I would say that adding a couple of hundred to the key-event-queue-size may not hurt. Some peditors and LapTopHackers have even used low 4 digit boosts. As far as the stack size goes, this has not been explored yet. You may want to try a couple of thousands first before moving to the very low 5 digits. You may want to read portions of the [532]manual of [533]TealMemBrain which can help you too when making these quintessential decisions. QUESTION. SOS! After I changed the stack size, something must have gone wrong since I can't launch pedit anymore. What should I do? ANSWER. Just re-install a fresh copy of [the latest version of] pedit. System Info This command does precisely what it promises. Among others, it gives the exact time and yields quintessential information about the battery status. The battery info may be refreshed by entering the letter "r". With enough patience, one can watch the voltage tank go from full to empty. With a rechargeable Palm device, one can also play with the cradle and refreshing the display after each movement. I will spare the reader from the details of the game. Preferences This command brings up the [534]pedit preferences dialog. Please see [535]here for the details. About pedit This command is explained [536]here. ListView's Navigate Menu Visit Top This is self-explanatory, isn't it? It takes you to the top of [537]ListView. Jump to This command allows you to jump to memos very quckly in [538]ListView. You enter a number between 0 and 99, and upon activating the OK button, you will be taken to that area of [539]ListView which corresponds the entered number interpreted as a percentage of the total number of currently displayed memos. You can use the following shortcuts. . = the ".Cancel" button g = G = ENTER = the "Go" button f = first memo l = last memo page up key = up arrow = increase the index page down key = down arrow = decrease the index Visit Bottom This is self-explanatory, isn't it? It takes you to the bottom of [540]ListView. Script Please see the section about [541]pScripting pedit for details on this command. As a convenient shortcut, "ESC Z" turns [542]globalMacroMode on and then invokes a silent version of this command. Find This command pops up Palm's built-in SilkScreen "FIND" dialog. I provided this command for [543]keyboard users. scriptPad This command is described [544]here. magiPad This command is described [545]here. Recent This command takes you to [546]magiPad where all your recently visited files are listed in reverse chronological order. Once you familiarize yourself with [547]EditView, you will be able to navigate here using all the powerful tools in it. This command is the same as the [548]Memo Switcher [">"] button in [549]EditView's [550]buttonPanel. pedit keeps track of the last 30 or so memos you have visited since you last [551]cleared pedit's history. Tapping on any of the memo titles, pedit transfers you to the selected memo instantaneously. Please see the [552]Memo Switcher for more details. The Memo Switcher can also be activated by "ESC 0" [zero] or by "ESC >" from [553]EditView and by "ESC r" [lower case "r"] or by "ESC >" from [554]ListView. As a related and very convenient shortcut, if you enter "ESC }" in [555]ListView then you are immediately taken to the memo which you visited most recently. Switch This command is functional on peditPro only. It switches between pedit04 memos and pedit32 memos. Please note that there is an even easier way to invoke Switch. Namely, tap in the left 1/8th of [556]ListView's title bar, to the left from the small pixel visible just under the title bar. ListView's buttonPanel ListViewButtons The "New" Button You start a new memo by tapping on the New button. This command is the same as the [557]New Memo command in [558]ListView's [559]Record #1 menu. You can also start a new memo by simply entering any printable letter which becomes the first letter of your new memo. The upButtonSlided "New" Button This command is the same as the [560]Go to Memo menu command in [561]ListView's [562]Record #1 Menu. The "myNotes" Button In addition, [563]ListView displays the myNotes button which takes you immediately to a memo called 000.myNotes. If such a memo doesn't exist yet, then it will be created upon tapping on the myNotes button. Once inside 000.myNotes", you can add quick notes to it. Please keep in mind that peditPro has two modes, and the those two modes operate independently of each other. Therefore, you have two separate 000.myNotes". One in pedit04 mode and one in pedit32 mode. The variety of uses of myNotes is limited only by the peditor's imagination. I use it for making quick reminders on how to improve pedit, for jotting down some really deep thoughts which come to my mind, and for keeping track of important world events such as how many Ann Landers messages deal with the quintessential toilet tissue in or out problem. A great feature of myNotes is an optional date'n'time stamp which can be configured through the [564]myNotes Preference Panel. The actual formatting of the date'n'time stamp uses the preferences set in the "Formats" Preference Panel. You can also decide in the [565]myNotes Preference Panel whether you want your new entry added to the top or to the bottom of your 000.myNotes". If your 000.myNotes gets filled up, simply rename it, say 001.myNotes, and then the game starts all over again. NOTE. If you have an optional user defined startup [566]pScript of the form "{.myNotesrc::whatever}", then it gets executed every time you enter 000.myNotes via the myNotes button. EXAMPLE. If you put "{.myNotesrc::Paul Nevai is the coolest Palm guru...}" into your [567]scriptPad then every time you hit the 000.myNotes button, you will end up with a true [but space-challenged] statement. You can find many more albeit perhaps less truthful [but more useful] examples at the [568]peditors Forum [see [569]here]. WARNING. Do not even think of "{.myNotesrc::Paul Nevai is a pain in the butt...}" since pedit has been programmed to recognize such derogatory statements in a variety of languages, and then you may end up loosing your pedit license for life. EXAMPLE. If you disable myNotes's optional date'n'time stamp, and if you put "{.myNotesrc::[/ED, /xs /dM///dD///dY]/0x0A}" into your [570]scriptPad, then can you guess what you will have every time you visit myNotes? HINT. Try it. NOTE The [571]startup pScripts are disabled when you enter 000.myNotes via the myNotes button. NOTE You can activate myNotes with "ESC N" and not with "ESC m" since the latter is reserved for [572]magiPad. NOTE myNotes is the same as [573]EditView's "[574]N" button. The "Export" Button This button is the same as the [575]Export Category command in [576]ListView's [577]Record menu. Another way of accessing it is via the "ESC e" command. The "Docs" Button This button is the same as the [578]Import Doc File command in [579]ListView's [580]Record menu. Another way of accessing it is via the "ESC i" command. The directionally buttonSlided "Docs" Button [581]upButtonSliding it is the same as the [582]magiPad command in [583]ListView's [584]Navigate menu. The "Recent" Button This button is the same as the [585]Recent command in [586]ListView's [587]Navigate menu. This command can also be activated by "ESC 0" [zero] or by "ESC >" from [588]EditView and by "ESC r" [lower case "r"] or by "ESC >" from [589]ListView. The directionally buttonSlided "Recent" Button This button can be [590]leftButtonSlided and [591]upButtonSlided resulting in two different but closely related commands. [592]leftButtonSliding it is the same as the [593]Script command in [594]ListView's [595]Navigate menu. [596]upButtonSliding it is the same as the [597]scriptPad command in [598]ListView's [599]Navigate menu. EditView When entering a memo from [600]ListView, you will notice that the cursor is located at the beginning of your memo so that it is visible as opposed to Memo Pad where it is always blinking at the end, and, therefore, it is invisible much of the time. I have removed Memo Pad's "feature" that the page up and page down buttons move to the previous and the next memo, respectively. I personally found this "feature" quite annoying but who am I to judge? Whether this was annoying or not, the issue is moot since these buttons have been assigned new roles which is explained [601]here and [602]here. I have also added a useful feature that the characteristics of a particular memo such as cursor position, text selection, and scroll bar position are preserved when switching back and forth between pedit and other applications [why didn't they think of this?]. As soon as you enter EditView, please visit the [603]Preferences dialog which is located in the [604]Opt[ions] menu. instantHelp Let us discuss a new concept which I named instantHelp [© copyright [605]Paul Nevai 1999-2002 & all rights reserved]. Use [606]EditView's [607]? button or "ESC ?" to invoke instantHelp. instantHelp Once instantHelp is active, tap any button for an explanation of its function. Tapping "ESC ?" again terminates instantHelp and you are back to regular [608]EditView. Tapping anywhere while an instantHelp message is displayed, terminates the message. Therefore, you don't need to wait until the countdown in the title bar reaches 0. I hope the concept of instantHelp will become standard in all Palm applications. Any interested party should contact [609]me regarding licensing questions and the instantHelp SDK. Navigating EditView Here is a short summary of the appropriate navigation commands in [610]EditView page up = ESC up arrow = ESC backspace = page up [611]buttonShifted page up = ESC left arrow = one line up page down = ESC down arrow = ESC space = page down [612]buttonShifted page down = ESC right arrow = one line down and within your memo use these shortcuts jump to the beginning of current word = "ESC j b w" = "ESC s w left arrow" = "ESC W left arrow" jump to the end of current word = "ESC j f w" = "ESC s w right arrow" = "ESC W right arrow" jump to the beginning of current sentence = "ESC j b z" = "ESC s z left arrow" jump to the end of current sentence = "ESC j f z" = "ESC s z right arrow" jump to the beginning of current [613]screenLine = "ESC A" = "ESC j b s" jump to the end of current [614]screenLine = "ESC E" = "ESC j f S" jump to the beginning of current [615]line = "ESC j b l" = "ESC s l left arrow" jump to the end of current [616]line = "ESC j f l" = "ESC s l right arrow" jump to the beginning of current [617]paragraph = "ESC j b l" = "ESC s l left arrow" jump to the end of current [618]paragraph = "ESC j b p" = "ESC s p right arrow" Please look up in your Graffiti reference how to enter the left arrow and right arrow characters. Basically, they consist of a left-right or a right-left job. Please note that [619]buttonShifted page up and [620]buttonShifted page down are sticky, that is, until the next [621]buttonShift, they do not change their currently assigned behavior unless you quit [622]EditView. Isn't this cool? For other methods of jumping from one place to another, please see the [623]Jump to command in [624]EditView's [625]Navigate menu or the "[626]J" button in [627]EditView's [628]buttonPanel. In addition, you can find some useful navigational macros [629]here too. buttonShifts Let me speak for a moment of a revolutionary concept which I named buttonShift [© copyright [630]Paul Nevai 1999-2002 & all rights reserved]. Using buttonShifts, some of the buttons in the [631]buttonPanel can perform double duty roles. The way it works is as follows. The bottom right corner area of the [632]EditView screen, where the Graffiti shift indicator resides, just right to the [633]buttonPanel, is the sweet spot for initiating a buttonShift. NOTE. If your Palm OS supports the Graffiti 2 engine, then the above "sweet spot" is relocated just to the right of the "[634]H" button so that it would not interfere with the Graffiti 2 enabler little bluish square. Once you tap there, a black rectangle shows up for a short period of time, and then a 2*2 pixel sized tiny black square indicates that buttonShift is on. You will see that a number of buttons will get inverted and remain inverted for approximately 2.5 seconds. Congratulations. You have just performed a buttonShift. buttonShift If you don't press a button for which the buttonShift is functional for 2.5 seconds or you perform an unrelated action, then the buttonShift gets deactivated until you activate it again. However, if you do press a buttonShift friendly button, then, as explained at the appropriate button descriptions, the action associated with that particular button will correspond to the shifted state. Please note that once buttonShifted, the page up and page down hard keys are [635]sticky. I hope the concept of buttonShifts will become standard in all Palm applications. Any interested party should contact [636]me regarding licensing questions and the buttonShift SDK. buttonSlides The peditorial [637]buttonShifts received a new interface in [638]LapTopHack via [639]buttonSlides. I wish I could say that I am the inventor of this powerful idea, but, alas, I am not. In fact, I stole it from Jean Ichbiah of the ADA programming language fame [with his kind permission] who uses a similar but not identical concept in his [640]Fitaly family of virtual keyboards. buttonSlides are nothing but pen strokes generating a ctlExitEvent which is a rather rarely used event in the Palm universe. In laymans terms, you create a buttonSlide by 1. Press a button with your stylus so that it gets selected. 2. Without lifting up your stylus move it outside the boundaries of the button. 3. Now lift up your stylus. 4. Congratulations, you just slided the button. EXAMPLE. The "[641]K" and "[642]M" buttons in [643]EditView's [644]buttonPanel are slidable. Once you mastered the concept of buttonSlides, the next step is to learn about directional buttonSlides, such as leftButtonSlides, rightButtonSlides, upButtonSlides, and downButtonSlides. For instance, you create a leftButtonSlide by 1. Press a button with your stylus so that it gets selected. 2. Without lifting up your stylus move it to the outside of the button by going to the left by at least 5 pixels from the left boundary of the button. 3. Now lift up your stylus. 4. Congratulations, you just left-slided the button. EXAMPLE. The "[645]C" button in [646]EditView's [647]buttonPanel is left-slidable, right-slidable, and up-slidable. I hope the concept of buttonSlides will become standard in all Palm applications. Any interested party should contact [648]me regarding licensing questions and the buttonSlide SDK. doubleTaps The [649]pedit preferences dialog allows you to activate doubleTaps and to determine the time period during which the doubleTap indicator remains activated after the first leg of a doubleTap [100 ticks are equal to 1 second]. If doubleTaps are allowed, then, after each tap on a portion of the text, a small indicator shows up right above the scroll bar, and, while this indicator is active, a second tap activates the [650]Select command in [651]EditView's [652]Opt[ions] menu with the location of the taps properly filled in. If you have MagicText installed in your Palm, then you can avoid undesired tap conflicts by performing the second tap sufficiently far away from the first one so that MagicText would not process it, and, therefore, pedit can take care of the double tap. In the latter case, you should study the ins and outs of MagicText so that you would know precisely if and when MagicText hijacks doubleTaps. The Titlebar Statistics The displayable statistics is a summary of the state of your memo's capacity, the total number of bytes, the current cursor location, the coordinates of the current selection, if any, and the location of the cursor within the current line. The stats are displayed in [653]EditView's title bar. Here is an example: Stats means that 8% of your memo's capacity is filled, there are 346 bytes in your memo, the text between bytes 104 and 109 is selected, and the cursor is at position 4 in the current line. As long as you have enabled the statistics by checking the enable statistics in title bar box in the [654]pedit preferences dialog, the statistics can be toggled via the [655]Stats on|off command in [656]EditView's [657]Opt[ions] menu, or, even better, by tapping in the left 1/8th of the title bar [to the left from the small pixel visible just under the title bar]. While in [658]magiPad, the statistics are always displayed, and, therefore, the above described pixel is invisible. If there are more than 10,000 bytes in your memo [which only happens in pedit32] then pedit is running out of real estate in the title bar, and, therefore, the capacity information is omitted. Maybe I should explain that if there is no current text selection, then both the beginning and the end of the selection are defined as the coordinate of the current cursor position. If the statistics are hidden, then pedit looks like the good old Memo Pad so that, for instance, the current memo's category can be changed directly via the category trigger in the title bar [in addition to [659]EditView's "[660]D" button]. By the way, pedit is 100% MenuHack friendly. MenuHack users should tap the title area to the right from the above mentioned pixel. The same goes for the built-in MenuHack support in OS 3.5 and up. As an experienced Palm operator, you know that both MenuHack and OS 3.5+ allow you to access the menu bar by tapping on the title of your memo, don't you? Startup pScripts If you have an optional user defined startup [661]pScript of the form "{.peditrc::whatever}", then it gets executed every time whenever either an already existing regular memo is opened up directly from [662]ListView or when launching pedit and it goes directly into [663]EditView. In addition, if you have an optional user defined startup [664]pScript of the form "{.peditrc04::whatever 04}", then it also gets executed after "{.peditrc::whatever}" if the latter exists and if you are in the pedit04 mode. If "{.peditrc::whatever}" does not exist, then "{.peditrc04::whatever 04}" gets executed instead of the former. The user defined optional startup [665]pScript of the form "{.peditrc32::whatever 32}" works similarly to "{.peditrc04::whatever 04}" in the pedit32 mode. Please see [666]here about pedit04 versus pedit32. EXAMPLE. In addition to the messages, this also moves the cursor to the end of the opened memo for 32K memos. Here "/GZ" turns on the macro mode and "/xz" turns it off. This eliminates the animation of the "J" [jump] dialog. {.peditrc::/&mess@[@@I am .peditrc@@]} {.pedit04rc::/&mess@[@@I am .pedit04rc@@]} {.pedit32rc::/&mess@[@@I am .pedit32rc@@] /GZ /xEpro je /xz } Segmented Memos Whether you use 4K memos or 32K memos, eventually you will find out that they fall short of your expectations of being able to edit [or write] "War and Peace" on your Palm. Unfortunately, as of September 25, 2000, the Palm operating system allows no larger than 32K text fields, and, to make matters worse, [a little less than] 64K is the size of the largest record you can create. In terms of a memo and in terms of a "newbie's" terminology, this means that the largest memo you could create can have no more than 64K characters in it, and even if you have such a huge memo, you can only view it. In order to be able to edit it, your memo must have no more than 32K characters. Even if you managed to create a large memo, after a HotSync job, your Palm DeskTop application would butcher [truncate] the poor soul. There are several options to circumvent this limitation. One solution is to create "virtual" memos. Such memos are, in fact, a collection of a number of memos which appear to be one from certain, but not all, points of view. This is the approach taken by all the [667]DOC editors. This works but, alas, all the current [668]DOC editors are low on both features and speed, and they all fall short of [my admittedly not low] minimal expectations. EXAMPLE. Open up a large [669]DOC file with either a [670]DOC editor or a [671]DOC reader, and try to select the entire text. Did you succeed? Enter pedit. Just like [672]DOC editors, pedit can create "virtual" memos of practically arbitrary size, but, unlike [673]DOC editors, pedit does not completely hide the technical details of such memos from the user. I call such "virtual" memos segmented memos, and I refer to the memos making up a segmented memo as sister segments. Another way of conceptualizing such "virtual" memos is to think of them as a book with individual chapters, or sections, or pages. A segmented memo is called multi-segmented if it has at least two sister segments. Timeout: Segments vs Chapters Even though from the purely technical point of view segments and chapters of a memo refer exactly to the very same concept, I will still use both words in conjunction with segmented memos. NOTE. Once you learn pedit's [674]export/[675]import [see also [676]here] business, and you start to examine your segmented memos, you will realize that, effective with version 5.07, the files have been split up at logical pauses in the text such as [677]paragraphs, [678]new lines [carriage returns], or spaces [in this order of priority]. Such operations allow you to move your memos between pedits, and between your Palm and the DeskTop. I will refer to such memos as segmented memos. On the other hand, when you write your great Aborigine novel, and you decide to start a new section or chapter, then you will use the [679]New Chapter command in [680]EditView's [681]Edit+ menu. This will place you into a new memo which is a logical continuation of your previous memo, and which will be treated as such by many of pedit's functions. When you are sitting on an important presentation, and you are taking notes with [682]SkyIsLimit engaged, then your memos will be split up when you type a space or add a [683]line. The resulting segments are more structured. You could say that you started a new page. In order to not confuse the situation even further, I will refer to the latter type of memos as consisting of segments. End of Timeout Just like chapters in a book have headers, so do segmented memos. A Segmented Memo Some peditors will view this as an annoyance, and some even asked me to hide such details from the user. Let me explain [some would say "rationalize"] my approach. Just like with the entire Palm OS, one of pedit's underlying philosophy is that speed and efficiency are essential. Very few peditors will read "War and Peace" patiently while their Palm and pedit are processing their precious memos. Therefore, pedit takes the approach that the segment information is kept with the memo itself in form of a segment header. This allows to minimize time spent on bookkeeping. For instance, when starting up pedit, there is practically no time spent on searching various sister files where bookkeeping information is kept, and there is no need to update such information. NOTE. There are two exceptions. First, pedit's preferences are loaded every time pedit is started. Second, pedit keeps track of the last 25 memos you have visited since you last [684]cleared pedit's history [see the [685]Recent command in [686]ListView's [687]Navigate menu]. Of course, if pedit gave up Memo Pad compatibility, then each memo could easily store extra information hidden from the user right with the memo itself. However, the rules of the game are set by Memo Pad and new rules can be defined only in accompanying sister files such as MemoHIST for pedit and Memo32HIST for pedit32. The structure of a segment header is as follows. 123456... #segment.0020# 2000/04/08 11:54:42 00DB2152 Title: [and here come the first 64 letters of the first line of your memo]. Category: [here is the category of your memo] !DO NOT TOUCH THIS LINE OR ABOVE! Here "123456" are the first 6 letters of your segmented memo, the four digit non-negative integer "0020" is the segment index, and "2000/04/08 11:54:42 00DB2152" is the timestamp which shows the creation date, time, and the unique ID number of the first member of your segmented memo. Note. The segment index must be a four digit non-negative integer. For instance "0000", "0001", and "1776" are valid, whereas "999" is invalid. pedit relies on the correctness of the information stored in the segment header. Therefore, I beg you that under no circumstances change anything in it. However, if you are a technically oriented peditor, then I tell you that you could change the title and the category in the header as long as you don't exceed the length limitations. If you do, then please keep in mind that in most operations pedit uses the title and category as defined in the very first segment of a segmented memo. Note. As of Palm OS 3.5, Palm file names can have no more than 31 characters, whereas Palm category names can have no more than 15 characters [plus a null terminator]. You can also change the first 6 letters ["123456" in the above example] but if you do then you better change it in all the sister segments to the same. The following diagram, created by Paolo, is a visual representation of the structure of a segmented memo. ___________ | | | | | sister #1 | | ......... | | ..text... | |___________| ___________ | | | | | sister #2 | | ......... | | ..text... | |___________| . . . ___________ | | | | | sister #N | | ......... | | ..text... | |___________| Tip. If you have a segmented memo and you want to disassociate one or more of its sister segments from the memo, just change the header a little bit. For instance, you could change "00DB2152" to "tmp 00DB2152" in the above [688]example. Tip. If you have a segmented memo and you want to re-segment it [in order to even out the segment sizes], the easiest way to do it via [689]exporting it and its sister segments to a [690]DOC file, and then [691]re-importing it. Tip. If you want to combine several of your pedit04 memos into one pedit32 memo, or several memos into one [692]DOC file, then please read [693]here. Tip. If you want to combine existing memos by adding segment links to them, then please read [694]here. Tip. For the most convenient way to transport your segmented memo from pedit to your DeskTop and vice versa, please read [695]here. Among others, segmented memos are used in exporting pedit32 memos to pedit04 memos [see the [696]Export Category command in [697]ListView's [698]Record menu, and the [699]Export Memo command in [700]EditView's [701]Record #1 menu], in [702]importation [see [703]ListView's [704]Record menu] of [705]DOC files to pedit, and in the [706]SkyIsLimit command in [707]EditView's [708]Edit+ menu. NOTE. peditLight does not create and handle [709]segmented memos. If you used another pedit to create [710]segmented memos, then peditLight, just like any other memo editing Palm application, is very much capable of messing them up. Please be careful not to destroy your [711]segmented memos. magiPad The "[712]M" button in [713]EditView's [714]buttonPanel is a story on its own. Hence, I will discuss them separately from the general description of [715]EditView's [716]buttonPanel. It allows you to enter magiPad [© copyright [717]Paul Nevai 1999-2002 & all rights reserved]. magiPad separator asciiPad Think of magiPad as a gigantic scratch pad which can save up to 32K [= 32767 or 2^15 - 1] characters. You can keep anything you wish in magiPad. It is always at your fingertips, and it allows you to paste anything from it back to your current memo. The way it works is as simple as possible. Here are the details. If you are in [718]EditView, then you can enter [and leave] magiPad using the [719]magiPad in|out command in the [720]Navigate menu. You can also enter magiPad using the "[721]M" button in [722]EditView's [723]buttonPanel. If you are in [724]ListView, then you can enter magiPad using the [725]magiPad command in the [726]Navigate menu. You can also enter magiPad by [727]upButtonSliding the [728]Docs button in [729]ListView's [730]buttonPanel. NOTE. In peditLight the [731]Docs button is renamed to "Jump". NOTE. pedit remembers your magiPad [732]vitals, and upon subsequent re-entries the state of the previous magiPad visit will be restored. Once in magiPad, you can select any text, and then tap the [733]Qopy'n'Paste button ["ESC Q"]. You will be instantaneously transferred back to your current memo, your selected text will be pasted into your memo, and, depending on the choice you made with the [734]Qopy'n'Paste Selects on|off menu command, either the newly pasted text will be shown highlighted, or the cursor will be placed right after the pasted text. If, prior to entering magiPad, you already selected some text, then upon returning via a [735]Qopy'n'Paste job from magiPad, your selected text gets replaced by the new newly pasted item. NOTE. If you entered magiPad via the "[736]ASCII Table" command, that is, you have an ASCII table, then the [737]Qopy'n'Paste button operates even if you have no current text selection in magiPad. Namely, hitting the [738]Qopy'n'Paste button automatically selects the character in front of your cursor before you are transfered back to your current memo for a pasting job. NOTE. When doing a [739]Qopy'n'Paste job, the usual 1000 character limit of the Palm OS on the size of copying to the ClipBoard does not apply, and you can copy and paste as much as the size of your current memo allows. NOTE. Right after a [740]Qopy'n'Paste job, the [741]Undo command in [742]EditView's [743]Edit menu and its sister "[744]U" button in [745]EditView's [746]buttonPanel are not functional. NOTE. If you change your mind after having accomplished a [747]Qopy'n'Paste job, you can always undo it by using the [748]Restore Memo command in [749]EditView's [750]Record #1 menu. Of course, you should keep your favorite phrases in magiPad so that they are always available for instant pasting into your memos. For instance, you could keep a short dictionary in it, or a thesaurus, or your publication list, or your CV, and so forth. The opportunities are limitless, up to 2^15-1. Some [751]peditors go even further. For instance, Margret has a magiPad category in her pedit which allows her to have the functionality of multiple magiPads. The "OK" button enables you to leave magiPad without any further action except saving its current contents. The ".C" [.Cancel] button, if you see it, enables you to leave magiPad without any further action and without saving its contents. scriptPad If you are in [752]EditView, then you can enter [and leave] scriptPad using the [753]scriptPad in|out command in the [754]Navigate menu. You can also enter scriptPad by [755]upButtonSliding the "[756]M" button in [757]EditView's [758]buttonPanel. If you are in [759]ListView, then you can enter scriptPad using the [760]scriptPad command in the [761]Navigate menu. You can also enter scriptPad by [762]upButtonSliding the [763]Recent button in [764]ListView's [765]buttonPanel. scriptPad looks like, smells like, and acts like [766]magiPad so that it is de facto a secondary [767]magiPad. However, there is a difference between scriptPad and [768]magiPad. Namely, scriptPad is the place to keep your [769]pedit pScripts. Apart from this difference, [770]magiPad and scriptPad are the same. NOTE. pedit remembers your scriptPad [771]vitals, and upon subsequent re-entries the state of the previous scriptPad visit will be restored. NOTE. If you use [772]peditLight, then you can't use [773]pedit pScripts. Nevertheless, you can use scriptPad as a fully qualified secondary [774]magiPad. NOTE. All pedits prior to version 5.33 used [775]magiPad to store [776]pedit pScripts. Please do not forget to move them to scriptPad. EditView's Fonts The PopUp Font Trigger in the bottom right corner of [777]EditView's screen and the [778]Font, command in [779]EditView's [780]Options menu allow you to change the display font in [781]EditView. NOTE. You can switching between the last two display fonts in [782]EditView [even while in an editable [783]magiPad] via the [784]buttonShifted "[785]U" button in [786]EditView's [787]buttonPanel or by "ESC U" [upper case "U"]. Thanks to Rick Bram, Steve C. Gilardi, Carl Osterwald, Ken Hancock, Harry Konstas, Greg Parker, Michael J. Rider, and Andrew Welch who allowed me to use their fonts and/or font utilities, pedit [except peditLight] has a number of custom fonts. fonts separator more fonts NOTE. The high resolution fonts appear on your font lists only if the OS version of your Palm Powered handheld is at least 5.0. I strongly recommend using the mono-spaced fonts for regular text editing. The only [some would say fatal] flaw of the original Profont family of mono-spaced fonts is that they are almost completely screwed up when it comes to non-standard characters, including the international characters [ASCII 128 and up, and even some between 1 and 31]. The reason for this defect is that that they were designed originally for the Macintosh, and then they were converted to the Palm as an afterthought. So, if you have a pre-4.09 version of pedit, please do not blame the creators of Profont. As of September 10, 2000, and as of version 4.09, I have great news for all Profont lover peditors. Michael J. Rider got fed up with the above described situation, and, with the generous permission of Steve C. Gilardi and Carl Osterwald, he fixed all of them. Hence, the Profont family in all current pedits is as perfect as the other mono-spaced fonts, that is, Monaco, Courier, and TinyFont [aka HKFont] are. I am not in the font designing business. Therefore, please do not expect me to create new fonts for pedit. On the other hand, you are more than welcome to volunteer your services to the peditor community... NOTE. The [788]leftButtonSlided PopUp Font Trigger touches the current memo, that is, it pretends as if the memo were edited. Finding and Replacing Text pedit includes the Find'n'Replace and Select'n'Search technologies. In addition, I put a twist on the search process via Palm's built-in FIND SilkScreen button. The latter is discussed [789]here. All find functions in pedit are unrestricted as opposed to Palm's built-in SilkScreen "FIND" which matches the beginnings of words only. One enters the Find'n'Replace dialog either via the [790]Find command in [791]EditView's [792]Navigate menu or by tapping the "[793]F" button in [794]EditView's [795]buttonPanel. Find'n'Replace which has two text fields. Find'n'Replace The top one displays Please enter search string... or, if your memo in [796]EditView has a text selection, then it displays that particular text, or, if a search string has already been defined, then it displays that search string. For pedit's purposes, a string is any combination of characters in the 256 character ASCII table [excluding the '\0' character], including carriage returns and so forth (see [797]magiPad). Once you are Find'n'Replace, you can create an arbitrary search string of length not exceeding 255. First, I tell you how to use the Find component or Find'n'Replace. Once you finished composing your search string, and, optionally, your replacement string, and after all the check boxes such as Ign[ore] Case, Top Start[er], Wrap, and so forth, have been set appropriately, hit the FindIt button. NOTE. The "<= above: find" and "=> below: repl" buttons allow you to recycle up to 128 of your old search and replacement strings, respectively. * "ESC SPACE" = "ESC TAB" = switch between the two text fields * "ESC <" = the "<= above: find" button * "ESC =" = "ESC >" = the "=> below: repl" button NOTE. Use the menu command in the "Options" menu to manage your recent strings. You can sort them, delete them one-by-one, or delete all of them. If the second text field in Find'n'Replace was left untouched or it is empty, then Find'n'Replace assumes that you initiated a search only operation and no automated replacement will take place. Thus you will be transported back to your memo in [798]EditView, and then Find finds the first occurrence of the search string in your memo. Then use either the [799]Find More command in [800]EditView's [801]Navigate menu or the "[802]G" button in [803]EditView's [804]buttonPanel to find more occurrences of the same search string. Please note that Find works in context in the sense that the found string always shows up in the middle of the text field. GNU aficionados will see the similarity between this and "grep --context". In case [no pun intended] you did not figure it out yet, the Ign[ore] Case check box allows you to decide whether or not the search process should be case sensitive. For the benefit of non-native [broken] English speaking peditors, "case" refers to lower and/or upper case such as "pedit" as opposed to "pEdIt". "ESC i" [lower case] = toggle the Ign[ore] Case box "ESC I" [upper case] = check the Ign[ore] Case box [a [805]pScript friendly operation] The Top Start[er] check box allows you to decide whether to start the search at the beginning [top] of your memo, or at the current cursor position. "ESC t" [lower case] = toggle the Top Start[er] box "ESC T" [upper case] = check the Top Start[er] box [a [806]pScript friendly operation] Similarly, Wrap means that all text search and/or replace operations continue at the beginning [top] once they reached the end [bottom] except for the "All R" [Replace All] command which stops at the end. "ESC w" [lower case] = toggle the Wrap box "ESC W" [upper case] = check the Wrap box [a [807]pScript friendly operation] Selecting the All Segs check box means that if your memo is [808]segmented, then the search and replacement process extend to all the sister segments as well. In addition, in this case, the [809]segment headers are excluded from both the search and replacement operations. "ESC a" [lower case] = toggle the All Segs box "ESC A" [upper case] = check the All Segs box [a [810]pScript friendly operation] NOTE. For your convenience, the [811]upButtonSlided [812]G button toggles the [813]All Segs variable. NOTE. If the All Segs option is on and your memo is [814]segmented, then the replacement operation is not a [815]pScript friendly operation since it generates events which interfere with [816]pScripting. NOTE. If the All Segs option is on, then the search and replacement operations will be slightly slower since there is additonal overhead involved in keeping track of the sister segments [whether or not they actually exist]. However, it is quite possible that you will need an accurate stopwatch to be able to see the actual difference in speed. Regular Expressions. As of version 5.77, all pedits, with the exception of peditLight, include support for a peditorial flavor of regular expressions [REGEXP]. If you are not yet familiar with REGEXPs, then [817]this may be a good place to start although there is a practically unlimited amount of free literature available as well. NOTE. Both "REGEXP" and "REGEX" are accepted abbreviations of the term "regular expression". If you check the RegEx box, then your search strings are interpreted as a regular expressions. "ESC r" [lower case] = toggle the RegEx box "ESC R" [upper case] = check the RegEx box [a [818]pScript friendly operation] NOTE. For your convenience, the [819]downButtonSlided [820]G button toggles the [821]RegEx variable. Currently supported standard REGEXP symbols [metacharacters] are as follows. * "^" [match at the beginning of a line only]. This is the start-of-line and start-of-string anchor. * "$" [match at the end of a line or at the end of the entire text only]. This is the end-of-line and end-of-string anchor. * "." [match one arbitrary character]. * "?" [match zero or one time the preceding character]. Please see below for the meaning of "?" as a perl-style [822]minimal match flag. * "*" [match zero or more times the preceding character]. * "+" [match one or more times the preceding character]. * "{", ",", and "}" which are used in matching [823]intervals. Please note that "," is a REGEXP symbol only when used inside intervals. * "?" [perl style local [824]minimal match if used after any of the quantifiers "?", "*", "+", and "}"]. Please see above for the meaning of "?" as a quantifier. * "[", "^", "-", and "]" which are used in matching [825]character classes. Please note that "-" is a REGEXP symbol only when used inside character classes. * "(" [start a group], "|" ["alternative"], and ")" [end a group] which are used in matching [826]groups. * "@:" [capture this group] right after the [827]group starting "(" symbol, as in "...(@:...)...", has been reserved for future use. * "@x:" [capture this group with index "x"] right after the [828]group starting "(" symbol, where "x" is a hexadecimal single digit, that is, x = 0, 1, ... , 9, a or A, b or B, ... , f or F , as in "...(@1:...)...", has been reserved for future use. The peditorial implementation of REGEXP is [829]line oriented. Hence, "^" refers to the beginning of a line, whereas "$" to the end of it. For the purposes of REGEXP, the very last line of a memo is considered as a full line even if it does not end with a linefeed character. NOTE. If you want to use the above symbols in their literal sense, then you need to escape them using "\" [backward-slash], such as "\^", "\.", "\*", and "\$". NOTE. In pedit, "\" [backward-slash] always literalizes [sic] as opposed to other implementations of REGEXP where "\" plays a dual duty role which I think is not a good idea. For instance, "\t" may mean a TAB elsewhere, whereas in pedit it is simply a plain "t". NOTE. Unlike in some flavors of REGEXP, in the peditorial implementation "^" and "$" are always metacharacters no matter where they are located in your REGEXP. Hence, you always need to escape them with "\" [backward-slash] if you want to use them in their literal sense. NOTE. In the peditorial REGEXP error checking, the group alternative symbol "|" is almost always perceived as a metacharacter no matter where it is located in your REGEXP. Hence, to be on the safe side, you should always escape it as in "\|" if you want to use it in its literal sense. EXAMPLE. The REGEXP "\$x$y*z*" will match the string "$x". NOTE. If you are Japanese, then I am sure you know that the "backward-slash" sign shows up as a "yen" sign on your screen and on your keyboard. For a literal backward-slash use "\\". NOTE. Among others, the following constructs are illegal. * A REGEXP starting with "{". * A REGEXP starting with "?". * A REGEXP starting with "*". * A REGEXP starting with "+". * A REGEXP starting with "^{". * A REGEXP starting with "^?". * A REGEXP starting with "^*". * A REGEXP starting with "^+". * A REGEXP containing two consecutive characters each of which is a quantifier, that is, either "{" [or "}", depending on the position], or "?", or "*", or "+", unless the first of them is literal, that is, comes from "\}", "\?", "\*", or "\+". EXCEPTION. If "x" is a quantifier, that is, one of "?", "*", "+", or "}", then "x?" is the legitimate perl-style local [830]minimal match flag. EXAMPLE. "a++b" is illegal whereas "a\++b" is valid. EXAMPLE. "a*+b" is illegal whereas "a\*+b" is valid. * A REGEXP containing a linefeed [carriage return]. * A REGEXP ending with "\" [backward-slash] unless it ends with an even number of backward-slashes. * The REGEXPs which are equal to "[]" and "[^]" are illegal. More generally, a REGEXP containing "[" or "[^" without being followed by a character class closing right bracket "]" is illegal unless "[" is a literal character preceded by an odd number of "\" escape characters. There must be at least one character between "[" or "[^" and the character class closing right bracket "]" since otherwise "]" is viewed as an ordinary member of the character class. EXAMPLE. The REGEXPs "a[]bc", "a[^]bc", and "a[bc" are all illegal, whereas "a[]b]c", "a[^]b]c", and "a[b]c" are all legitimate. * A REGEXP with "(" without a matching ")" is illegal. * A REGEXP with a quantifier after a [831]group starting "(" or an alternative "|" is illegal. EXAMPLE. "(?pedit)", "(pedit|+)", and "(@:*pedit)" are all illegal. NOTE. Naturally, as the peditorial implementation of REGEXP gets more mature, the number of illegal constructions grows steadily. Hence, the above list should not be viewed as complete. However, pedit has a number of error checking and error announcing mechanisms built in. NOTE. The peditorial REGEXP has two different error checking mechanisms. First, your REGEXP is checked for some obvious errors such as two consecutive quantifiers as in "**". Second, pedit also does an on-the-fly error checking. However, the latter may never get performed if there was a no-match situation before pedit has a chance to check the local syntax. For instance, "a[:MicroSoft:]" is an illegal REGEXP but if your text consists of "bbb", then you get a no-match message before pedit ever has a chance to process "[:MicroSoft:]". NOTE. The peditorial implementation of REGEXP reads and processes all regular expressions from left to right ["[832]first come first served"] so that literal characters are never viewed out of context. For instance, "\\*" does not yield a literal "*" as opposed to "\\\*". NOTE. It is perfectly safe and legitimate [although it may be unnecessary] to escape any character using "\". For instance, "\a" is the same as "a. HOMEWORK. What do "\\a" and "\\\a" mean? Options in peditorial Regular Expressions. Each REGEXP may contain some options which could also be called switches or flags. The syntax is as follows. If a REGEXP starts with "-[...]", then all the letters between "[" and "]" are considered options, and the actual REGEXP starts right after closing bracket "]". EXAMPLE. "-[v]ped.tPro", "-[n]a*", and "-[nv5]a*". Currently the following options are supported. * "c" is the "case is significant" option as in "-[c]LapTopHack". If this option is set, then the search process is case sensitive. This option takes precedence over the setting of the Ign[ore] Case check box. This option is the opposite of the "i" option. If both are set, then the one which was occurs later in the list of the options will count. * "d" is the "debugger mode" option as in "-[d]a*". If this option is set, then pedit will announce you pieces of information which can be useful when trying to figure out how pedit does REGEXP searches, and what possibly could have gone wrong. * "dx" where "x = 1 ... 9" is the same as the "debugger mode" option except that the message will last exactly "x" seconds. * "i" is the "ignore case" option as in "-[i]lAPTophack". If this option is set, then the search process is case insensitive. This option takes precedence over the setting of the Ign[ore] Case check box. This option is the opposite of the "c" option. If both are set, then the one which was occurs later in the list of the options will count. * "l" is the "current line" option as in "-[l]a*". If this option is set, then pedit will search the current line only starting with the current cursor, or the end of of the current text selection, or the top of your memo, whichever is appropriate. * "lx" where "x = 1 ... 9 0" is the same as the "current line" option except that instead of the current line, no more than "x" lines are search starting with the current one. When "x" is equal to 0 [zero], then "x" denotes 10 [ten]. NOTE. As opposed to all the other options, "lx" is cumulative. Hence, for instance, "l0l6" will search this and the next 15 lines, 16 altogether. * "m" is the perl-style "[833]minimal match" option as in "-[m]a*". If this option is set, then pedit will try to find the shortest match instead of being "[834]maximal matching" which is its default value. * "n" is the "null" option as in "-[n]a*". If this option is set, then pedit will find null-matches as well. * "q" is the "query mode" option as in "-[q](pedit)\@". If this option is set, then pedit will make some announcements during the search process which assist me in developing and debugging REGEXP. Its role is similar to the "[835]Q" button. You never need to use this option unless you are either curious or are helping me to perfect the REGEXP "engine". Using this option is a safe procedure. * "qx" where "x = 1 ... 9" is the same as the "query mode" option except that the message will last exactly "x" seconds. * "t" is the "test mode" option as in "-[t](pedit)\@". If this option is set, then pedit will make certain actions during the search process which assist me in developing and debugging REGEXP. You should NOT use this option unless I explicitly asked you to do so. Otherwise, it may do things you would not appreciate such as appending stuff to the end of your memos which may be helpful for me but could be undesirable for you. However, if you are curious, then go ahead and use it as long as you try it on a "test" memo. Using this option is a safe procedure only if your current memo is disposable. EXAMPLE. Try "-[t](@:.+)" on a (disposable) memo. * "v" is the "verbose" option as in "-[v]a*". If this option is set, then pedit will announce you when it finds null-matches with a message lasting one second. * "vx" where "x = 1 ... 9" is the same as the "verbose" option except that the message will last exactly "x" seconds. * "!" is the "force not to verify the REGEXP" option which is needed internally by the peditorial REGEXP engine. If this option is set, then pedit does not perform an initial verification of the correct syntax of your REGEXP. It will accelerate the search procedure by about 0.001 sec so that it should be clear to you that you should not use it. However, there are circumstances when pedit has already verified the REGEXP once, and then this option is used to stop performing the same task again and again. * "*" is a dummy placeholder option which is needed internally by the peditorial REGEXP engine but has no effect whatsoever. You may use it but why. Null-matches. A null-match is a match of length 0 [zero]. For instance, if your text is "bbb" and your REGEXP is "a*", then every position in your text yields a match of length zero, since there are "zero or more" copies of the letter "a" at every position. Usually you would consider null-matches a nuisance and you would prefer ignoring them. By default, pedit ignores null-matches unless you explicitly request them using the "n" option. NOTE. pedit will skip the "obvious" null-match which is at the end of the current text selection and/or cursor position. This practice is in agreement with the current implementation of most text editors although there is no such a thing as a set of generally accepted rules carved into stone. NOTE. Not even professional [Macintosh] DeskTop editors such as BBEdit and CodeWarrior, just to mention a few, are perfect in implementing REGEXP. If you must find all null-matches, then please use the verbose option such as "-[nv]a*" which will announce all the null-matches correctly. NOTE. It is legitimate to have the same option listed several times as in "-[vvvvicicicicici]test" although it may be difficult to justify the need for that except with the "lx" option. By the way, this is the same as "-[vi]test". NOTE. If you want your REGEXP to start as "-[..." but you don't want it to be interpreted as an option, then start it as "\-[..." which turns the hypen "-" into a literal character. Intervals. This is pretty much standard stuff except that the peditorial implementation is a little more user friendly than the ones I am familiar with since it allows to add any number of whitespaces [except linefeeds] inside the braces which may make it more readable. As usual, "{min,max}" means that you want to match at least "min" but no more than "max" times the "stuff" just prior to "{min,max}". EXAMPLE. "pedit{3,5}" matches "pedittt", "peditttt", and "pedittttt", but not "pedit" or "peditttttt". Here is some useful information. * "{m}" is the same as "{m,m}". * "?" is the same as "{0,1}". * "*" is the same as "{0,infinity}" * "+" is the same as "{1,infinity}". * "{}" is the same as "{0,infinity}". * "{,}" is the same as "{0,infinity}". * "{,max}" is the same as "{0,max}". * "{min,}" is the same as "{min,infinity}". * "{0,0}" is illegal. * "{min,max}" with "min" greater than "max" is the same as "{min,infinity}". * "{min,max}" with either "min" or "max" greater than 65535 is illegal except when pedit itself uses "infinity" in place of "max". * "{min,max}" with either "min" or "max" negative is illegal. * "{min,max}" with either "min" or "max" not an integer number is illegal. NOTE. You need to write "{min,max}" and not "\{min,max\}" as some flavors of REGEXP require. Character Classes. This is pretty much standard stuff, and, as far as I know, there are no more than a couple of dozens of different interpretations of it [seriously]. Hence, I was free to follow whatever rules I wanted to. I chose the easy path which leads to the least amount of unexpected surprises. Hence, I just need to point out some nuances which are illustrated by the examples below. The peditorial character classes use "[" [opening left bracket], "^" [do not match the elements of the character class], "-" [range definer dash operator], and "]" [closing right bracket] pretty much the same way as every other implementation does it except that there are some variations in the "non-trivial" cases. I suggest that you study the [836]ASCII table for understanding how the range definer dash operator "-" works in Palm OS specific character classes [see [837]here too]. The character class operations also include a limited but essential subset of POSIX compliant character classes. Namely, the following POSIX expressions are supported: ":alnum:", ":alpha:", ":blank:", ":cntrl:", ":delim:" [this is not part of POSIX, and it the same as ":punct:" or ":space:"], ":digit:", ":graph:", ":lower:", ":print:", ":punct:", ":space:", ":upper:", and ":xdigit:". See [838]here for more details. In addition, you can also negate all the above POSIX expressions by adding the caret "^" right after the first colon ":" as in :^alnum:", :^punct:", and so forth. This is probably a well-known perl extension. However, it took me hours to find a [839]reference for it. For instance, the most recent [840]BBEdit uses this feature [version 6.5 and up]. WARNING. In true POSIX, you need to add extra brackets such as "[abc[:blank:]xyz]" whereas in the peditorial implementation the additional brackets should not be added so that you need to replace the previous example by "[abc:blank:xyz]". QUESTION. Why is it necessary to use "[[:blank:]]" in true POSIX? If you know the answer, please let [841]me know. I may have missed some finer points, and I may have to fix up the peditorial implementation of POSIX compliant character classes. Character Class Specials. The character class operations also include a few peditorial specials of the form "@...@". The syntax is as follows. * The "@...@" specials are valid only inside the character class delimiter brackets "[...]". * The expression "@D@" where "D" is a number between 1 and 65535 [0xFFFF] matches the character whose decimal ASCII value is precisely "D". EXAMPLE. "@9@" matches the TAB character and "@65@" matches "A". * The expressions "@0xH@" and "@0XH@" where "H" consists of no more than 4 letters each of which is hexadecimal digit, matches the character whose hexadecimal ASCII value is precisely "0xH". EXAMPLE. "@0xA@", "@0x0A@", "@0x00A@", and "@0x000A@" match the TAB character, whereas "@0X41@", "@0X041@", "@0X0041@" match "A". * The value of the ignore case variable and that of the "c" and "i" [842]options are ignored [no pun intended] when the "@...@" specials are used. * pedit ignores anything between a valid "@D", "@0xH", or "@XH", and the special closing "@". EXAMPLE. "@80@" "@80pedit@" both match "@P@". EXAMPLE. "[:digit::lower:]" matches digits and lower case letters, including those non-standard lower case letters which appear in many languages such as "ö". By the way, in "normal" POSIX, you would have to write "[[:digit:][:lower:]]". EXAMPLE. The expression "[]]" matches "]" because "]" is in the first position of the character class so that it is not viewed as the closing right bracket metacharacter. Similarly, the expression "[^]]" matches everything but "]". EXAMPLE. The expression "[-]" matches "-" because "-" is in the first position of the character class so that it is not viewed as range defining metacharacter. Similarly, the expression "[^-]" matches everything but "-". EXAMPLE. The expression "[a-]" matches "a" and "-" since "-" is followed by a character class closing right bracket metacharacter "]". HOMEWORK. How does one match a range of characters from, say "A" to "]", or from "[" to "]"? EXAMPLE. The expression "a-e-h" is a legitimate range of characters which is the same as "a-ee-h", that is, "a-h". EXAMPLE. The expression "z-a" is a legitimate range of characters which happens to be empty so that nothing matches it since nothing is between "z" and "a". EXAMPLE. The expression "[a]]" matches "a]" because the first right bracket is a metacharacter which closes the character class, and the second right bracket is already a regular literal character. More Specials. The peditorial REGEXP has a few more specials of the form "@." both inside and outside [843]character classes. They behave very much like in many other implementations of REGEXP except that pedit uses the "@" [at-sign] metacharacter as opposed to the usual "\" [backward-slash]. The syntax is as follows. * The expression "\@" matches the literal character "@" if it is outside a character class. * The expression "@@" matches the literal character "@" if it is inside a character class. * The expression "@" matches the literal character "@" if it is inside a character class and it is the last item in the list as in "[...@]". * The expression "@" matches the literal character "@" if it is inside a character class, it is the next to the last item in the list, and it is followed by "-" [minus sign] as in "[...@-]". * The expression "@-x", if it is inside a character class, matches a range of characters between the literal "@" and "x" so that the minus sign "-" behaves like a range definer dash operator. * The anchor expression "@A" matches the very beginning of your text. It is more restrictive than "^". * The anchor expression "@b" matches all word boundaries in your text, that is, cursor positions between "@W" and "@w" [end of a word] or between "@w" and "@W" [start of a word]. * The anchor expression "@B" matches all characters which are not word boundaries in your text, that is, cursor positions which are neither between "@W" and "@w" [end of a word] nor between "@w" and "@W" [start of a word]. * The expression "@d" matches decimal digits, that is, it is the same as "[0-9]" or "[:digit:]" except that it is also valid outside character classes. * The expression "@D" matches all characters which are not decimal digits, that is, it is the same as "[^0-9]" or "[:^digit:]" except that it is also valid outside character classes. * The expression "@s" matches whitespaces that is, it is the same as "[:space:]" except that it is also valid outside character classes. * The expression "@S" matches all characters which are not whitespaces, that is, it is the same as "[:^digit:]" except that it is also valid outside character classes. * The expression "@t" matches TABS. * The expression "@T" matches SPACES and TABS, that is, it is the same as "[:blank:]" except that it is also valid outside character classes. This is a non-standard peditorial feature. * The expression "@w" matches word characaters, that is, it is the same as "[:alnum:_]" [including underscore] except that it is also valid outside character classes. * The expression "@W" matches all characters which are not word characaters, that is, it is the same as "[^:alnum:_]" [including underscore] except that it is also valid outside character classes. * The anchor expression "@z" matches the very end of your text. It is more restrictive than "$". In perl and some other flavors of REGEXP, this is denoted by "\Z" [upper case "Z"]. * The anchor expression "@Z" matches the very end of your text or a trailing LINEFEED at the very end of your text. It is different "$". This is the same as [844]BBEdit's "\Z". NOTE. The pToken "@" is used both for REGEXP [845]specials and [846]text capturing. When a given REGEXP can be interpreted both ways, then the latter takes precedence over the former. For instance, "(@A:x)" could be interpreted both as matching ":x" at the beginning of the text or as capturing "(x)" to the variable "\A", and the actual meaning is the latter. Groups. This is also pretty much standard stuff. Hence, I just need to point out some nuances. Since the peditorial implementation of REGEXP reads and processes all regular expressions from left to right ["[847]first come first served"], this may have a drastic effect on how groups are matched and gives a new meaning to the words "[848]greedy" and "[849]lazy", especially when the groups contain alternative subREGEXPs and quantifiers. Many times you will be puzzled when your REGEXP full of alternatives and quantifiers matches contrary to your expectations, and it will take a great deal of reflection to realize that pedit is right and your expectations were wrong. Frequently it will help you to solve the puzzle if you turn on the "n" ["null"] option. However, sometimes you may indeed find a bug. If you do, then please contact [850]me with a full description of the example demonstrating the bug. The example should be as concise as possible. As of version 5.87, the REGEXP groups support all quantifiers such as "(...){min,max}..." and "unlimited" nesting such as "(...(...)...)*..." as well. NOTE. The peditorial implementation of REGEXP groups was a formidable challenge for an amateur programmer such as I am, especially since I did this without "cheating", that is, without dissecting and/or reverse engineering the publicly available source codes of programs which employ REGEXPs such as [gn]?awk, ed, emacs, grep, joe, perl, sed, just to name a few. I have no doubts that all peditors will agree that there is more fun in creating a REGEXP engine as opposed to copying one. One of the primary disadvantages of this method is that I don't have decades of the REGEXP community's experience behind me. In particular, I was happy to be able to accomplish things, and optimization was out of the question on many occasions. NOTE. One sure way to slow down your Palm is to use nested groups with quantifiers. EXAMPLE. The expression "(peditPro|LapTopHack) sucks*" matches "peditPro sucks" and "LapTopHack sucks". EXAMPLE. The expression "pedit(|Pro|32|Light) sucks*" matches "pedit sucks", "peditPro sucks", "pedit32 sucks", and "peditLight sucks", but not "peditProPlus sucks". HOMEWORK. Why is "pedit sucks" matched by "pedit(|Pro|32|Light) sucks*"? HOMEWORK. What is matched by "(peditPro|LapTopHack){1,2} sucks*"? Is "peditPro LapTopHack suck" matched by it? If not, then why not and how to modify the REGEXP so that there would be a match? NOTE. You need to write "(...|...)" and not "\(...|...\)" or "\(...\|...\)" or "(...\|...)" as some flavors of REGEXP require. Capturing Text. In principle, this is also pretty much standard stuff. However, in practice, the peditorial implementation is different. Some could say that to some extent the peditorial captures are superior to some other flavors of REGEXP. The rules and the syntax are as follows. * You can capture 16 different groups of the form "(...)" to 16 capture variables named "\0", "\1", "\2", ... , "\9", "\A", "\B", ... , and "\F". * The capture variables are case-blind, that is, instead of writing "\A ... \F", you can also use their lower case versions "\a ... \f" which mean exactly the same. * As opposed to other flavors of REGEXP, peditorial groups "(...)" do not get automatically captured. * You capture a group "(...)" to a capture variable "\x" of your choice by adding "@x:" right after the group opening parenthesis "(", such as "(@7:...)". * As a shortcut, "@:" captures to "\0", as in "(@:...)". * Capturing is case-blind too, that is, you can use both lower case and upper case letters. For instance, both "(@b:...)" and "(@B:...)" capture to "\B" which is the same as "\b". * In order to save precious memory, as opposed to other flavors of REGEXP, your complete match is not captured automatically to the variable "&". If you need to capture your full match, use, say, "(@:REGEXP)" which captures it to "\0". * You can use any of the 16 capture variables any number of times in your replacement strings [as long as you don't exceed the maximal size of your memo]. EXAMPLE. Your search REGEXP is "(@1:pedit[:alpha:]*|(@a:LapTopHack)*)", and you replacement string is "replace \1 and \A with \1s and \As". However, "replace \2 and \A with \1s and \As" will generate an error condition since "\2" has not been captured. * In order to use literal "\0" and so forth, escape them as in "\\0". NOTE. The peditorial captures work only in replacement strings (see the "Find/Repl" component of the [851]Find'n'Replace operations) and cannot be used for "backtracking" in search strings [whatever that may mean]. NOTE. As mentioned already, the pToken "@" is used both for REGEXP [852]specials and [853]text capturing. When a given REGEXP can be interpreted both ways, then the latter takes precedence over the former. For instance, "(@A:x)" could be interpreted both as matching ":x" at the beginning of the text or as capturing "(x)" to the variable "\A", and the actual meaning is the latter. REGEXP Replacement Strings. This is also pretty much standard stuff with just a few caveats. The current rules and the syntax are as follows. * In all REGEXP replacements strings "\x" denotes a literal "x" unless it has a special meaning such as a capture variable. In particular, "\\" is a simple back backward-slash "\". * In order to use literal versions of the capture variables and other replacement specials such as "\0", escape them as in "\\0". NOTE. The original peditorial implementation of REGEXP had its roots in [854]grep.c taken from [855]The Practice of Programming (a great book) by Brian W. Kernighan and Rob Pike. Subsequently, it went through a series of transformations so that the current implementation no longer resembles the original one. It is somewhat recursive in nature, and it is not completely clear to me how the memory management of the Palm OS reacts to recursive functions in the long run. It is a fact of life that using REGEXP is slower than pedit's normal search procedures. On the other hand, you will experience the slow down only when you search very large [856]segmented memos such as [857]Les Miserables. Therefore, I advise to use REGEXP only when you actually need it unless you don't care whether it takes a full tenth of a second to find your match when you could have done the same job in less than one twentieth of a second. Alas, if you use many quantified groups, then the above mentioned "tenth of a second" may turn into minutes or perhaps even hours. HOMEWORK. Find'n'time with a stopwatch both "ejaculated Cosette" and "((ejac)*ul(ate){1}).*Cosette" in [858]Les Miserables starting from the top. For the second one, be prepared to wait patiently a very long time. NOTE. If you ever experience either a crash or an unexpected termination while doing a search job using a long and/or complicated REGEXP, then use the [859]Tuner Upper command in [860]ListView's [861]Options menu to increase the stack. That should solve the problem. NOTE. The peditorial implementation of REGEXP is * It is based on the "first come first served" rule, that is, all REGEXPs are read and processed from left to right. Sometimes this is called "the match that begins earliest wins" principle * It is "greedy" or "maximal matching", that is, when given a choice with a quantifier mate character, it tries to find to longest match possible. * Unless the "n" ["null"] option is set, it will not find [862]null-matches. The opposite of "greedy" is "lazy" or "minimal matching" [see, for instance, [863]here for more details]. As you saw above, pedit can do "lazy" matching both globally and, in the spirit of perl, locally as well. NOTE. Although you practically never need to be aware how the REGEXP search mechanism works under the hood when it is case insensitive, there are occasions when it will not hurt you to know some details. In short, when the search is case insensitive, then pedit coverts all characters which are about to be compared to lower case prior to the comparison, and then tries to see if there is a match. Examples, when it is good to be aware of this are character classes such as a REGEXP containing "[A-^]" or "[A-z]" or "[0-Z]" or something similar which drastically differ from their case sensitive versions. As I said already, I suggest that you study the [864]ASCII table for understanding how the range definer dash operator "-" works in Palm OS specific character classes [see [865]here too]. NOTE. At this point please do not contact me with suggestions of new REGEXP features. On the other hand, if you find bugs in the current implementation [which I am sure abound], then please do contact [866]me with a full description of the problem. The complete example demonstrating the bug should be as concise as possible. NOTE. I will be very much surprised if you can use the peditorial implementation of REGEXP on Palms with exotic OSs such as Chinese, Hebrew, Japanese, or Russian. Nevertheless, for the time being, I decided not to disable it on such Palms since it may turn out to be better than 100% useless. However, for the record, all the REGEXP routines assume that the Palm operates in a "single-byte" mode, that is, all characters are assumed to use exactly 8-bits, as opposed to the regular search routines which are supposed to be working whether your Palm's OS is "single-byte" or "multi-byte". If I recall correctly, Palm itself supports only one "multi-byte" system currently, namely, the Japanese one, but this may change as the Palm gains popularity. NOTE. If you are a Japanese peditor using REGEXP, then please post your impressions to the [867]peditors Forum. QUESTION. DFA or NFA? ANSWER. Excellent question. Alas, I don't have the faintest idea. I don't even know what these words really mean. Probably neither. According to [[868]Friedl, p. 160], it is not NFA since it passes the "=XX========================" test with flying colors [which doesn't necessarily mean that it is good or bad]. On the other hand, according to [[869]Aalto] it is not DFA, since it acts exactly as NFA under certain circumstances [see [870]here]. Do you want to learn more about REGEXP? I recommend Jeffrey E. F. Friedl's [871]Mastering Regular Expressions [see also [872]here] as an excellent place to start [and to finish]. If you just want a plain vanilla quickie overview, then [873]GNU's [874]grep may help you. [875]This is also excellent, and so is [876]BBEdit's manual. SHORTCUT. If the RegEx variable is set to false, then there is also a straightforward plain-vanilla way to search without entering the Find'n'Replace window, namely via the double duty Select'n'Search [877]Find More command in [878]EditView's [879]Navigate menu or the "[880]G" button in [881]EditView's [882]buttonPanel Just select a string and invoke [883]Find More or hit the "[884]G" button. This action will find the first occurrence of the same string in your memo located after the selected string. This can be repeated as many times as one wishes. When the end of your memo is reached, the search starts at the beginning of your memo again unless the Wrap option has been deselected. NOTE. I repeat that this fast search works only if the RegEx option is set to false, that is, the RegEx box in the Find'n'Replace dialog is left unchecked. If the RegEx option has been selected, then using the [885]Find More menu command or the "[886]G" button will find the next match of your regular expression provided that there is already one defined. If you do not have a currently defined regular expression, then both the [887]Find More menu command and the "[888]G" button will take you to the Find'n'Replace dialog. Please note that both Ign[ore] Case and Wrap can be controlled from both [889]EditView's [890]Opt[ions] menu (see [891]Case yes|no and [892]Wrap yes|no) and from Find'n'Replace as well. So far I explained the case when the second text field in Find'n'Replace was left untouched or was empty so that you searched your memo only. On the other hand, if you entered a replacement string into this second text field, then Find'n'Replace assumes that you want to conduct a full featured Find'n'Replace operation, that is, a "global search and replace" operation in professional lingo, and, assuming that there is at least one proper match, it takes you to the Find'n'Replace View form where a row of buttons on the bottom gives you full freedom whether to find [Find], replace [Peplace], replace and find [R & F], or replace all [All R]. WARNING. Prior to version 6.59, if the RegEx box is checked, and if the [893]REGEXP "n" ["null"] [894]option is on, then you should take extra precautions prior to using the All R button. Otherwise, you may unintentionally create a vicious circle. However, you can always interrupt it by tapping anywhere either on the screen, or the Graffiti input area of your Palm, or by typing ".", or by using the page Up/Down or 5-way up/down keys, and then, the [895]Restore Memo command in [896]EditView's [897]Record #1 menu may save the day for you. As of version 6.59, such vicious circles have been eliminated. NOTE. I strongly urge you to experiment with the above scenario. It is both educational and fun to watch. For instance, create a memo with text "pedit", and then replace "-[n]x*" with "LapTopHack" in it. Sit back and enjoy the show. Find'n'Replace The "H" button is there for help. Just hit the Done button when you are finished to get back to your memo in [898]EditView. If your search string has no match in your memo, then, instead of Find'n'Replace View, you are taken back immediately to your memo in [899]EditView. In addition, the bottom row of buttons, Find'n'Replace View also displays the usual [900]stats on the top, and gives you a summary of the search [F:] and replacement [R:] strings right above the buttons at the bottom. NOTE. If you initiated a replace all [All R] operation, you can always interrupt it by tapping anywhere either on the screen, or the Graffiti input area of your Palm, or by typing ".", or by using the page up/down or 5-way up/down keys. As a side effect, sometimes such an operation gets self-interrupted on certain Palms since the system itself may occasionally generate events which pedit interprets as if they were taps. However, this is very unlikely to happen if your pedit is at least of version 5.72. NOTE. If the replacement string is defined as "\x" [delete], then the matched string will be deleted from the memo. Here is a neat trick which works if the RegEx variable is set to false. First copy a string, say "replace with" with the "[901]C" button. Then select another string, say "replace me". Now use the "[902]G" button to find occurrences of "replace me" and then hit the "[903]P" button to replace it with "replace with". This can be repeated as many times as one wishes. The "[904]G" button keeps searching for "replace me" and the "[905]P" button keeps replacing it with "replace with". If the RegEx variable is set to true, the an analogous procedure works as long as you have a currently defined REGEXP. However, the same can be accomplished in a more professional way via the "[906]F" button. HINT. If the Ign[ore] Case option is turned off, then the "[907]F" button is displayed in bold font. Similarly, if Wrap is turned off, then the "[908]H" button is displayed in bold font, if All Segs is turned on, then the "[909]G" button is displayed in bold font, and if RegEx is turned on, then the "[910]Q" button is displayed in bold font. NOTE. peditorial [911]pScripts allow automating your [912]Find'n'Replace operations. Please see [913]here for examples. NOTE. If you are in the [914]expertMode, then the pedit Find'n'Replace dialog will not show up at all, although you can enter your commands as usual. On the other hand, if you are in the [915]advancedMode, then you will experience a slight speed improvement compared to the [916]normalMode. If you are in the [917]globalMacroMode, then the pedit Find'n'Replace dialog remains invisible. Enjoy... Moving Text As of version 5.13, I added the ability to move blocks of text around your memo. This feature can be invoked by [918]directional buttonSlides as described below and also either by entering "ESC X" [upper case "X"] or by [919]upButtonSliding the "[920]X" button in [921]EditView's [922]buttonPanel. The [923]directional buttonSlides bring up specialized text mover dialogs such as, char mover whereas latter two bring up the general text mover dialog. text mover Some of the text moving commands could be better described as transpositions, but I decided to stick to the more general terminology of moving [a block of] text. NOTE. In the following discussion "|" indicates the cursor. EXAMPLE. If you typed "thsi" accidentally, then you can correct it by putting the cursor between "s" and "i" so that it looks like "ths|i", and then [924]rightButtonSliding the "[925]C" button in [926]EditView's [927]buttonPanel. This will result in "ths|i" changing to "this|". Congratulations, you just performed a right-move of a character. EXAMPLE. If you typed "thsi" accidentally, then you can correct it by putting the cursor between "s" and "i" so that it looks like "ths|i", and then [928]leftButtonSliding the "[929]C" button in [930]EditView's [931]buttonPanel. This will result in "ths|i" changing to "th|is". Congratulations, you just performed a left-move of a character. Can you see the subtle difference in the two examples above? In the first, you moved the letter "s" to the right and the cursor stayed ahead of "s". In the second, you moved "i" to the left, and the cursor stayed to the left of "i". NOTE. "C" stands for "character" so that [932]leftButtonSliding the "[933]C" button moves the character just after the cursor to the left, and [934]rightButtonSliding the "[935]C" button moves the character before the cursor to the right. The cursor travels with the character. This should be easy to remember. However, this is only the beginning of the story. You can select a block of text in your memo, and then [936]leftButtonSliding the "[937]C" button moves the text selection by one character to the left. Similarly, you can select a block of text in your memo, and then [938]rightButtonSliding the "[939]C" button moves the text selection by one character to the right. The formal rules governing [940]leftButtonSlides of the "[941]C" button in [942]EditView's [943]buttonPanel are as follows. * If there is no text selection in your memo, then [944]leftButtonSliding the "[945]C" button moves the character in front of the cursor backward by one character and leaves the cursor unchanged relative to the character which was moved. * If there is a text selection in your memo, then [946]leftButtonSliding the "[947]C" button moves all the characters which are in the text selection backward by one character and leaves the text selection unchanged relative to the characters which were moved. The rules governing [948]rightButtonSlides of the "[949]C" button in [950]EditView's [951]buttonPanel are analogous except that they result in forward movements of characters. QUESTION. How do I move a text selection by 37 characters to the left? ANSWER #1. Repeat 37 times the above desribed procedure. ANSWER #2. First, activate the char mover dialog by [952]upButtonSliding the "[953]C" button [see the picture below], then enter "37" into the Repeat # field, and, finally, hit the "B <=" button, or enter "b" or "B". char mover NOTE. If there is no text selection in your memo, you can transpose the two letters surrounding your cursor and leaving the cursor in its current position by entering "0" into the Repeat # field of the char mover dialog [[954]upButtonSlided "[955]C" button]. Now let us discuss how to move words around your memo. Please see, for instance, [956]here regarding the rules which define words. The definition depends on the Forth word setting which you can adjust both via the "[957]S" and "[958]J" buttons in [959]EditView's [960]buttonPanel. The title of your dialog tells you what the current Forth word setting is. If you see "!FW" in it, then the variable Forth word is set to false. Otherwise, you will see "&FW" in the title. If you are either in the general text mover dialog or in the specialized word mover dialog, then you can also use these shortcuts. "o" [lower case "oh"] = the Forth word variable is set to false [a [961]pScript friendly operation] "O" [upper case "Oh"] = the Forth word variable is set to true [a [962]pScript friendly operation] Let me summarize the rules governing [963]leftButtonSlides of the "[964]WC" button in [965]EditView's [966]buttonPanel. * If there is no text selection in your memo and your cursor is inside a word, then [967]leftButtonSliding the "[968]WC" button moves the entire word backward by one word and leaves the cursor unchanged relative to the word which was moved. * If there is a text selection in your memo and it is not fully inside a word gap, then [969]leftButtonSliding the "[970]WC" button moves all the words which intersect with the text selection backward by one word and leaves the text selection essentially unchanged relative to the words which were moved. * If there is no text selection in your memo and your cursor is in between words or if there is a text selection it is fully inside a word gap, then [971]leftButtonSliding the "[972]WC" button moves the word which is to the right from the cursor or from the right end of the text selection backward by one word and puts the cursor in front of the word which was moved. NOTE. At first try, some of these rules [and some of the rules described below] may be somewhat counterintuitive. However, after a little reflection, you will understand that the rules are logical. NOTE. Do you wonder what I mean by leaving the text selection essentially unchanged [above and in some of the rules described below]? Please experiment and you will see that if the original selection started or ended in between words, then it needs to be truncated to create a proper fit. Before you panic, I tell you that only the [visually displayed] selection is truncated and not the characters themselves covered by the selection. SUMMARY. If the cursor is inside a word or you have parts of words selected, then moving word[s] backward will move only the word[s] effected by the cursor or the selection. However, if the cursor or text selection is fully in between words then the word beyond the cursor or text selection is moved only. The rules governing [973]rightButtonSlides of the "[974]WC" button in [975]EditView's [976]buttonPanel are analogous except that they result in forward movements of words. If you want to move your words by more than just one word at a time, then [surprise - surprise] you should [977]upButtonSlide the "[978]WC" button which reveals the word mover dialog, and then use the Repeat # field. NOTE. If there is no text selection in your memo and your cursor is in between two words, then you can transpose the two words surrounding your cursor and leaving the cursor in between them by entering "0" into the Repeat # field of the word mover dialog [[979]upButtonSlided "[980]WC" button]. Next, let us discuss how to move sentences around your memo. Here is a summary of the rules governing [981]leftButtonSlides of the "[982]S" button in [983]EditView's [984]buttonPanel. * If there is no text selection in your memo and your cursor is inside a sentence, then [985]leftButtonSliding the "[986]S" button moves the entire sentence backward by one sentence and leaves the cursor unchanged relative to the sentence which was moved. * If there is a text selection in your memo and it is not fully inside a sentence gap, then [987]leftButtonSliding the "[988]S" button moves all the sentences which intersect with the text selection backward by one sentence and leaves the text selection essentially unchanged relative to the sentences which were moved. * If there is no text selection in your memo and your cursor is in between sentences or if there is a text selection it is fully inside a sentence gap, then [989]leftButtonSliding the "[990]S" button moves the sentence which is to the right from the cursor or from the right end of the text selection backward by one sentence and puts the cursor in front of the sentence which was moved. The rules governing [991]rightButtonSlides of the "[992]S" button in [993]EditView's [994]buttonPanel are analogous except that they result in forward movements of sentences. If you want to move your sentences by more than just one sentence at a time, then you should [995]upButtonSlide the "[996]S" button which reveals the sentence mover dialog, and then use the Repeat # field. NOTE. If there is no text selection in your memo and your cursor is in between two sentences, then you can transpose the two sentences surrounding your cursor and leaving the cursor in between them by entering "0" into the Repeat # field of the sentence mover dialog. NOTE. The very last sentence in your memo may not end with an end-of-sentence mark, that is, with one of "." [period], "!" [exclamation mark], or "?" [question mark], so that when you move it, then you may end up with a missing end-of-sentence mark. If this happens, then please don't forget to add the appropriate missing end-of-sentence mark. Next, let us discuss how to move [997]screenLines around your memo. NOTE. I beg you to read very carefully my comments [998]here and [999]here about [1000]screenLines. In particular, please always keep in mind that they are nothing but a figment of your Palm's imagination. Since moving [1001]screenLines may result in somewhat unexpected results, the following general principles apply. * Only visible [1002]screenLines can be moved. * You can't move [1003]screenLines off the visible screen. * I put the process into slow motion so that you can see exactly what was moved to where. Here is a summary of the rules governing [1004]leftButtonSlides of the "[1005]K" button in [1006]EditView's [1007]buttonPanel. * If there is no text selection in your memo and your cursor is either inside a [1008]screenLine or at the end of a [1009]screenLine but the [1010]screenLine ends with a linefeed [carriage return], then [1011]leftButtonSliding the "[1012]T" button moves the entire [1013]screenLine backward by one [1014]screenLine and leaves the cursor unchanged relative to the [1015]screenLine which was moved. * If there is no text selection in your memo and your cursor is in between [1016]screenLines, but the [1017]screenLine does not end with a linefeed [carriage return], then [1018]leftButtonSliding the "[1019]K" button moves the [1020]screenLine which is to the right from your cursor backward by one [1021]screenLine and leaves the cursor unchanged relative to the [1022]screenLine which was moved. In other words, the [1023]screenLines located on each side of your cursor are transposed. * If there is a text selection in your memo and the right end of the text selection is either inside a [1024]screenLine or at the end of a [1025]screenLine but the [1026]screenLine ends with a linefeed [carriage return], then [1027]leftButtonSliding the "[1028]K" button moves all the [1029]screenLines which contain the text selection backward by one [1030]screenLine and leaves the text selection essentially unchanged relative to the [1031]screenLines which were moved. * If there is a text selection in your memo and the right end of the text selection is in between [1032]screenLines, but the [1033]screenLine does not end with a linefeed [carriage return], then [1034]leftButtonSliding the "[1035]K" button moves all the [1036]screenLines which contain the text selection and the [1037]screenLine which is to the right from the right end of the text selection backward by one [1038]screenLine and leaves the text selection essentially unchanged relative to the [1039]screenLine which were moved. The rules governing [1040]rightButtonSlides of the "[1041]K" button in [1042]EditView's [1043]buttonPanel are analogous except that they result in forward movements of [1044]screenLines. If you want to move your [1045]screenLines by more than just one [1046]screenLine at a time, then you should [1047]upButtonSlide the "[1048]K" button which reveals the screenLine mover dialog, and then use the Repeat # field. NOTE. If there is no text selection in your memo and your cursor is in between two [1049]screenLines, then you can transpose the two [1050]screenLines surrounding your cursor and leaving the cursor in between them by entering "0" into the Repeat # field of the screenLine mover dialog [[1051]upButtonSlided "[1052]K" button]. Next, let us discuss how to move [1053]lines around your memo. Here is a summary of the rules governing [1054]leftButtonSlides of the "[1055]L" button in [1056]EditView's [1057]buttonPanel. * If there is no text selection in your memo and your cursor is inside a line, then [1058]leftButtonSliding the "[1059]L" button moves the entire line backward by one line and leaves the cursor unchanged relative to the line which was moved. * If there is no text selection in your memo and your cursor is in between lines, then [1060]leftButtonSliding the "[1061]L" button moves the line which is to the right from your cursor backward by one line and leaves the cursor unchanged relative to the line which was moved. In other words, the lines located on each side of your cursor are transposed. * If there is a text selection in your memo and the right end of the text selection is inside a line, then [1062]leftButtonSliding the "[1063]L" button moves all the lines which contain the text selection backward by one line and leaves the text selection essentially unchanged relative to the lines which were moved. * If there is a text selection in your memo and the right end of the text selection is in between lines, then [1064]leftButtonSliding the "[1065]L" button moves all the lines which contain the text selection and the line which is to the right from the right end of the text selection backward by one lines and leaves the text selection essentially unchanged relative to the lines which were moved. The rules governing [1066]rightButtonSlides of the "[1067]L" button in [1068]EditView's [1069]buttonPanel are analogous except that they result in forward movements of lines. If you want to move your lines by more than just one line at a time, then you should [1070]upButtonSlide the "[1071]L" button which reveals the line mover dialog, and then use the Repeat # field. NOTE. If there is no text selection in your memo and your cursor is in between two lines, then you can transpose the two lines surrounding your cursor and leaving the cursor in between them by entering "0" into the Repeat # field of the line mover dialog [[1072]upButtonSlided "[1073]L" button]. Next, let us discuss how to move [1074]paragraphs around your memo. Here is a summary of the rules governing [1075]leftButtonSlides of the "[1076]P" button in [1077]EditView's [1078]buttonPanel. * If there is no text selection in your memo and your cursor is inside a paragraph, then [1079]leftButtonSliding the "[1080]P" button moves the entire paragraph backward by one paragraph and leaves the cursor unchanged relative to the paragraph which was moved. * If there is a text selection in your memo and it is not fully inside a paragraph gap, then [1081]leftButtonSliding the "[1082]P" button moves all the paragraphs which intersect with the text selection backward by one paragraph and leaves the text selection essentially unchanged relative to the paragraphs which were moved. * If there is no text selection in your memo and your cursor is in between paragraphs or if there is a text selection it is fully inside a paragraph gap, then [1083]leftButtonSliding the "[1084]P" button moves the paragraph which is to the right from the cursor or from the right end of the text selection backward by one paragraph and puts the cursor in front of the paragraph which was moved. The rules governing [1085]rightButtonSlides of the "[1086]P" button in [1087]EditView's [1088]buttonPanel are analogous except that they result in forward movements of paragraphs. If you want to move your paragraphs by more than just one paragraph at a time, then you should [1089]upButtonSlide the "[1090]P" button which reveals the paragraph mover dialog, and then use the Repeat # field. NOTE. If there is no text selection in your memo and your cursor is in between two paragraphs, then you can transpose the two paragraphs surrounding your cursor and leaving the cursor in between them by entering "0" into the Repeat # field of the paragraph mover dialog [[1091]upButtonSlided "[1092]P" button]. NOTE. If you leave the Repeat # field blank in any of the text mover dialogs, then you are going to be moving your text to the beginning or to the end of your memo depending which direction you are moving. NOTE. If your memo is [1093]segmented, then the [1094]segment header is excluded from the text moving procedure. NOTE. Since the text selection is kept unchanged relative to the block of text moved, under rare circumstances you may end up with unexpected text selections. NOTE. At first reading, the above rules may appear somewhat complicated but once you start moving text, you will see that they are quite logical. NOTE. Activating buttons via keyboard an/or Graffiti input in the text mover dialogs such as the one pictured below is according to the standard peditorial rules. text mover In particular, typing the first letter of any of the regular buttons or push buttons [in either lower or upper case] activates them, typing linefeed [carriage return] activates the default button "F =>" [forward], whereas entering SPACE or TAB rotates the selection among the push buttons. NOTE. If you feel that the manual is not sufficiently clear and explicit regarding the text movement rules, please let [1095]me know. NOTE. If you are in the [1096]expertMode, then the text mover dialog will not show up at all, although you can enter your commands as usual, including the "repeat" number which may have no more than five digits. On the other hand, if you are in the [1097]advancedMode then an abbreviated version of the text mover dialog appears in place of the original one which works exactly the same way as the full dialog. In both modes, the title of the dialog will tell you what type of text you are about to move. If you are in the [1098]globalMacroMode, then the text mover dialog remains invisible. Enjoy... Sorting Text As of version 5.14, I added the ability to sort blocks of text in your memo. This feature can be invoked by either by entering "ESC Y" [upper case "Y"] or by [1099]downButtonSliding the "[1100]X" button in [1101]EditView's [1102]buttonPanel. This pops up the text sorter dialog. text sort Although currently text sorting is limited to line sorting, I may eventually implement other text sorting commands such as word and paragraph sorting as well. PRINCIPLE #1. Before any sorting procedure, pedit backs up your memo so that if anything goes wrong during the process such as your Palm runs out of memory [which is unlikely], then your memo will be restored to its original state. PRINCIPLE #2. If you have some text selected in your memo then all the text sorting functions operate on the text selection, more precisely on a logical extension of your text selection, that is, on all the lines which contain parts of your original text selection. Otherwise, the entire memo gets sorted. PRINCIPLE #3. After the text sort is completed, the entire sorted text will get selected so that you will have a visual feedback of what happened. NOTE. If you don't like the results of the sorting then you can restore your current memo to its last saved state with the [1103]Restore Memo command [1104]EditView's [1105]Record #1 menu. However, please keep in mind that the last saved state of your memo may not be the same as the state of your memo just prior to sorting. Therefore, you may want to use the [1106]Save Memo command [1107]EditView's [1108]Record #1 if you plan a complicated text sorting job such as sorting the fifth chapter of [1109]Les Miserables in reverse alphabetical order while skipping the first 4 words of each line. NOTE. Before you ever contemplate sorting lines, please read the about the essential differences between [1110]lines and [1111]screenLines. Otherwise, I guarantee you that you will be deeply shocked and disappointed after your first line sorting job. Once you made your text selection in your memo and you invoked your text sorter dialog, you need to set the sorting parameters. In pedit whitespaces are defined as SPACE, TAB, LINEFEED [carriage return], and a few more similar characters. In pedit, fields defined as a collection of characters not containing whitespaces, and they are separated from each other by whitespaces. NOTE. The careful peditor will observe that fields are the same as [1112]Forth words, and that my definition of whitespaces and fields is pretty standard except that some more sophisticated systems such as awk and gawk allow you to redefine these notions according to your individual needs. In pedit, a column is the same as a character [with perhaps a few very rare exceptions]. Enter "0" in the # of skipped fields: text field if you don't want to skip any field. Otherwise, enter the number of fields you want to skip when comparing lines. Enter "0" in the + # of skipped columns: text field if you want to compare your lines right after the skipped fields. Otherwise, enter the number of columns you want to skip after the skipped fields when comparing lines. Enter "0" in the # of compared columns: text field if you want all columns to be used in the line comparison after the skipped columns. Otherwise, enter the number of columns you want to use in the line comparison right after the last skipped column. Check the ignore case box if you want the text sorting to be case-blind. Check the skip lead blanks box if you want to ignore leading whitespaces after the skipped fields right before the skipped columns. You can sort your text both alphabetically or numerically in both forward [normal] and reverse directions. NOTE. If your memo is [1113]segmented, then the [1114]segment header is excluded from the text sorting procedure. NOTE. While pedit sorts your lines, you may [or may not] see a progress window showing you the number of comparisons made. NOTE. When you sort text the very first time, the parameters which you see in your text sorter dialog will most likely be junk. Once you set them, pedit will always remember the latest settings. NOTE. Probably 99% of all peditors will use only "0" parameters in all their sorting jobs. NOTE. Activating buttons via keyboard an/or Graffiti input in the text sorter dialog is according to the standard peditorial rules. In particular, typing the first letter of any of the regular buttons, push buttons, or check boxes [in either lower or upper case] activates them, typing linefeed [carriage return] activates the default button "Forward", whereas entering SPACE or TAB rotates the selection among the push buttons. You can also rotate the focus between the text fields using the page up or page down buttons on your Palm, and by entering up arrow or down arrow via your keyboard. NOTE. The "Reverse" button can also be activated by "b" and "B" [backward]. NOTE. If you feel that the manual is not sufficiently clear and explicit regarding the text sorting rules, please let [1115]me know. NOTE. According to pedit's beta testers, sorting text is very easy and very natural even for "newbie" peditors. NOTE. The top message on your screen shows the number of comparisons performed while sorting your lines [in increments of hundreds]. I strongly suggest that you take an example with very many, say, a few hundred line breaks, and then watch the show. If you have peditPro, then you could even sort a memo with a few thousand line breaks. It is really educational. NOTE. You can interrupt [cancel] the sorting process according to the following rules. * When you see only message on your screen, you can interrupt [cancel] the sorting process by hitting the page up/down keys. * When you see two messages on your screen, you can still interrupt [cancel] the sorting process by hitting the page up/down keys but the interruption will take place only after the second message goes away, that is, the sorting process will be completed although the sorted text will not replace your original text. * Please note that the rules for interrupting text sorting are somewhat different in [1116]pToolSet's pTextTool which gives you less options. NOTE. Neither the [1117]expertMode nor the [1118]advancedMode have an effect on the text sorter dialog except that you will experience a slight speed improvement compared to the [1119]normalMode. However, if you are in the [1120]globalMacroMode, then the text sorter dialog remains invisible. EditView's Record #1 Menu Since menubar real-estate is a precious commodity, this menu appears as "R1" in the menubar. New Memo This command saves your current memo, and then it creates a new one. Delete Memo This command allows you to delete your current memo and its [1121]sister segments. It is the [1122]non-batch version of the [1123]Delete Memo command in [1124]ListView's [1125]Record menu. Please see [1126]Delete Memo for further details. NOTE. This command can also be invoked via the [1127]upButtonSlided "[1128]D" button in [1129]EditView's [1130]buttonPanel. Go to Memo This is the same as the [1131]Go to Memo menu command in [1132]ListView's [1133]Record Menu. NOTE. This command can also be invoked via the [1134]upButtonSlided "[1135]OK" button in [1136]EditView's [1137]buttonPanel. Beam Memo This command allows you to beam your current memo to another Palm. Even if your memo is [1138]segmented, it will beam only the currently displayed segment of your memo. For a more sophisticated beaming operation of individual memos, whether [1139]segmented or not, please see the [1140]Beam Memo command in [1141]ListView's [1142]Record menu for further details. The [1143]Beam Category command in [1144]ListView's [1145]Record menu is also related to this operation. Print Memo This is the [1146]non-batch version of the [1147]Print Memo command in [1148]ListView's [1149]Record menu. Print Selection If you have [1150]Stevens Creek Software's [1151]PalmPrint, or [1152]TealPoint's [1153]TealPrint installed in your Palm, then this command prints out the currently selected text of your memo. It is related to the [1154]Print Memo command in [1155]EditView's [1156]Record #1 menu and the [1157]Print Memo command in [1158]ListView's [1159]Record menu. Export Memo This command operates similarly to [1160]Export Category command in [1161]ListView's [1162]Record menu except that (i) it exports memos individually, (ii) it also exports to [1163]DOC format, and (iii) it allows you to create an export header. For the latter, please see the [1164]Add a Header command in [1165]EditView's [1166]Edit+ menu. When you see this dialog Export to pedit then you are in the pedit export mode. Please see the [1167]Export Category command in [1168]ListView's [1169]Record menu for a detailed discussion. When you see this dialog Export to doc then you are in the doc export mode. This mode is the inverse of the [1170]Import Doc File command in [1171]ListView's [1172]Record menu. First, select a title [file name] for your [1173]DOC file. Second, decide if you want to delete your memo and its [1174]sister segments after the export operation has completed. Third, if your memo is a pedit memo, then decide if you want to have an archival copy left on your PC. Once you have made these decisions, hit the export memo + all its segments button and pedit takes care of the rest. For your convenience, pedit is smart enough to pick a proposed [1175]DOC file name. If the memo originated from a [1176]DOC file, then the original name is shown. If the memo is [1177]segmented, then the [1178]header title is picked. If there is a current text selection, then it is used as the basis of a proposed name. Otherwise, the [1179]memo title is used. In each case, the proposed file name is subject to truncation since they can have no more than 31 letters. In addition, at the proposed file name stops at the first linefeed, if any. QUESTION. Why can't I export my memo into a compressed [1180]DOC file? ANSWER. Quoting one of the US presidents, it is the speed, stupid. Simply put, crunching your memo into a compressed [1181]DOC file would take too much time. HINT. If you want to combine several of your pedit04 memos into one pedit32 memo, or several memos into one [1182]DOC file then proceed as follows. First, open up the intended first segment of your memo in pedit. Second, create an [export] header using either the create export header button in this [1183]Export Memo command, or the [1184]Add a Header command in [1185]EditView's [1186]Edit+ menu. Third, copy this header into those memos which you want to export to as one single memo. Adjust the segment number 0010 appropriately. Finally, export one of them to pedit32 or a [1187]DOC file. NOTE. Entering a linefeed [carriage return] activates the exporter button. NOTE. I should point out that the exported memo gets deleted from pedit only after the export operation went flawlessly so that your precious data are as safe as possible. NOTE. The "Please create MemoDB/Memo32DB first..." message means that you have never been in the pedit04/pedit32 mode yet. Go to [1188]ListView and use the [1189]Switch command in the [1190]Navigate menu or tap in the left 1/8th of the title bar, to the left from the small pixel visible just under the title bar. Insert Memo This command allows you to insert into your current memo text from any other pedit04 or pedit32 memo or a selection thereof. The way it works is as follows. First, place your cursor in your current memo to the position where you want to insert text from another memo. NOTE. If you wish, you can also select text in your current memo and then the inserted text will overwrite your selection. Second, invoke the Insert Memo command [aka "ESC <"]. This will place you into [1191]ListView where you can see p04Insert... or p32Insert... depending on what pedit you are currently running. Third, go to the memo you want to insert into your current memo. You can use any of the navigational tools, including the [1192]Switch command in [1193]ListView's [1194]Navigate menu which allows you to visit memos in the sister pedit. Fourth, either hit the Insert Memo button [aka "ESC i"], or make a text selection, and then hit the Insert Selec'n button [again aka "ESC i"]. NOTE. In addition, to the Insert Memo or Insert Selec'n buttons, the title bar also reminds you that you are in the midst of an insertion operation. That's all. You will be taken back to you original memo where the insertion operations gets autoMagically completed right in front of your eyes. NOTE. pedit makes sure that you do not overstep the size limits of your current memo, and depending on the circumstances, it will warn you if you decide to insert too much text. NOTE. If you change your mind and you want to abort the insertion operation at any time, just go to [1195]ListView, and hit the bottom button labelled .Return to the Open Memo Mode, or pick any of the [1196]batcher commands in [1197]ListView's [1198]Record menu with the exception of the [1199]Preview Memo command which can assist you in finding the memo you want to insert into your current memo. NOTE. If you change you mind after the facts, then you can always use the [1200]Restore Memo command in [1201]EditView's [1202]Record #1 menu to alleviate the situation. Script Memo Please see the section about [1203]pScripting pedit for details on this command. As a convenient shortcut, "ESC Z" turns [1204]globalMacroMode on and then invokes a silent version of this command. Back Up Memo This command backs up either the current memo or, if there is a text selection, the selected text in the current memo [as long as it is not too long], and puts a generic date'n'time stamp on the backed up copy. Backed up memo Most users will never experience a situation that their memo is too long to be backed up, but, if they do, then a clever dialog will pop up which explains why the operation cannot be accomplished. If I may suggest, use the "[1205]}" button [aka quickSwitcher] after a back up job to return to your original memo. Save Memo When you open up your current memo, a copy of it is saved automatically in a temporary file. That temporary file contains what I call last saved state of your memo. Such a saving takes place every time you open your current memo, that is, it also includes the times when you return from [1206]magiPad or you switch to your memo [see the [1207]Memo Switcher (aka ">") command in [1208]EditView's [1209]buttonPanel]. As you edit your memo, there is absolutely no need whatsoever to use this command to save your memo, since when you quit pedit, or switch to [1210]ListView, or open up another memo, your current memo is automatically saved. This is different from DeskTop applications where you must make decisions whether or not to save your files. However, it happens occasionally that you want to save your current memo after a few editing steps so that later on you could restore it to its last saved state. You can restore your current memo to its last saved state with the [1211]Restore Memo command [1212]EditView's [1213]Record #1 menu. This command is related to the [1214]Back Up Memo command [1215]EditView's [1216]Record #1 menu. Restore Memo This command restores your current memo to its last saved state. Please see the [1217]Save Memo command [1218]EditView's [1219]Record #1 menu for further details. This command is the same as the [1220]leftButtonSlided "[1221]X" button in [1222]EditView's [1223]buttonPanel. Lock|Unlock Memo A memo is called readOnlyMemo, if it is locked so that it cannot be edited. Otherwise, it is read'n'WriteMemo. If a memo is in a readOnlyCategory then it is automatically a readOnlyMemo. This command allows you to switch the state of your memo between readOnlyMemo and read'n'WriteMemo. Being able to make your memo a readOnlyMemo is essential if you use your memo as a reference and you want to make sure that you will not change it accidentally. Programmers are especially keen on locking down their files. Because programmers are very finicky [read: pain-in-the-butt] people, I had to find a way which will satisfy the seemingly impossible conditions such as Memo Pad compatibility and various restraints imposed by different programming languages. I am very happy that I found the ideal solution which will most likely please every peditor, whether a programmer or just a regular normal person. Here are the rather complex rules. DEFINITION. A category is a readOnlyCategory if and only if the ! starts read only categories box has been checked via the [1224]ListView Preference Panel and if the name of the category starts with "!" [exclamation mark]. DEFINITION. A memo is a readOnlyMemo if and only if either the first 256 characters of the memo contain the word $READ_ONLY$ [dollar signs included] or it is in a readOnlyCategory. That wasn't difficult, was it? The way it works out is as follows. When pedit loads a readOnlyMemo, it turns off all the text editing functions, and, in addition, it also displays the "[1225]R" button in [1226]EditView's [1227]buttonPanel in bold font which gives you a visual reminder that your memo is locked. QUESTION. How do I unlock a readOnlyMemo? ANSWER. Use the Lock|Unlock Memo menu command which unlocks your memo so that it becomes temporarily a read'n'WriteMemo. In addition, it will also highlight [the first occurrence of] the word $READ_ONLY$ so that with the strike of a pen [stylus] you can permanently unlock it. QUESTION. How do I lock a read'n'WriteMemo the very first time? ANSWER. Use the Lock|Unlock Memo menu command. It will place the word $READ_ONLY$ at the current cursor [or the beginning of your text selection] if it fits within the first 256 characters of your memo. If your cursor is farther from the beginning of your memo, then the word $READ_ONLY$ will be placed at the very beginning of your memo. Once this has been done, pedit locks your memo. QUESTION. What happens if I change the category of my memo to or from a readOnlyCategory? ANSWER. pedit will automatically lock or unlock your memo as necessary. NOTE. You can also manually place the word $READ_ONLY$ in your memo as long as it is within the first 256 characters, and then the Lock|Unlock Memo menu command simply locks your memo without adding the word $READ_ONLY$ to it. NOTE. In order to help you to identify readOnlyMemos, their [1228]titles are marked [prepended] with "!" [exclamation mark] in [1229]ListView. Since "!" takes up hardly any space at all, the visible portion of the [1230]titles of your memos will not be effected at all. NOTE. Although it doesn't seem to make much sense, pedit allows to lock blank memos as well. There are two reasons for this. First, I checked other DeskTop software such as BBEdit, and they also allow to do it. Second, it was easier to make the whole concept of locking and unlocking memos to work smoothly and to be as free of bugs as possible. NOTE. The dollar signs in $READ_ONLY$ are not meant to imply that pedit gives preference to peditors whose countries use dollars in their monetary system. Instead, it is a small pToken [pun intended] of appreciation of my infinite admiration towards anything that resides in /bin and ends with sh, that is, matches ^/bin/[^/]*sh$. HOMEWORK. Can you find a readOnlyMemo or a readOnlyCategory bug? If yes, then please let [1231]me know. EditView's Record #2 Menu Since menubar real-estate is a precious commodity, this menu appears as "R2" in the menubar. Encrypt/Decrypt Memo pEncryptTool Please use the "Help" button for the "i-Tips" help file regarding this command. In particular... * Only the first password is necessary for the encryption. * If an optional second password is supplied, then a triple encryption process [DES3] is used which is a little slower than the single one [DES]. * The passwords must be between 2 and 9 characters long, they are case-sensitive, and they can consist of any printable character. * The first letter of each password serves as a mnemonic to help to remember the password and they are not part of the encryption process itself. * The passwords themselves are not stored anywhere, except for their first letters [mnemonic]. NOTE. A clear text memo can be encrypted if it has a title ending with a RETURN character, followed by a non-blank body. The title itself is allowed to be blank. Only the body gets encrypted. NOTE. Once a memo has been encrypted, you can freely add new text and/or delete text before and after the encrypted text. pEncryptTool will recognize the encrypted portion and it will decrypt it when asked to do so. NOTE. Although pEncryptTool tries hard, it can't accurately predict in advance if the encrypted text is going to be too long for the given text field so that it may abort during the encryption process. NOTE. Encrypted text is appr. 25% longer than its unencrypted source. NOTE. pEncryptTool has an extensive but not at all fool-proof user error detection mechanism built into it. NOTE. pEncryptTool's encryption is based on the encryption mechanism supplied with the Palm OS. Google "EncDES", "DES", "DES3", and "3DES". NOTE. If, in the future, the makers of the Palm OS decide to change the encryption function "EncDES()", then it will no longer be possible to decrypt text which originally was encrypted on Palms using the current "EncDES()". WARNING. Although pCryptTool's encryption mechanism is not unbreakable, there is no way for you or for me to recover your text if you supply the wrong password[s] (unless you find a relentless encryption wizard). This command is the same as the [1232]upButtonSlided "[1233]H" button in [1234]EditView's [1235]buttonPanel. EditView's Edit Menu Undo This is Palm's built-in undo operation. It undoes [reverts] some of your most recent editing operations such as typing some letters, or entering backspaces, or deleting text, and the [1236]Paste, or [1237]Cut operations. NOTE. Palm's undo capabilities are rather limited. As of October 22, 2000, when 3.5.2 is the latest version of the Palm OS, the undo buffer still holds no more than 100 characters. NOTE. When undo doesn't work, sometimes you can save the situation by using the [1238]Restore Memo command in [1239]EditView's [1240]Record #1 menu. This command is the same as the "[1241]U" button in [1242]EditView's [1243]buttonPanel. Cut This is Palm's built-in cut operation. It copies the current selection to the text ClipBoard, and deletes the selection from the field. This command is the same as the "[1244]X" button in [1245]EditView's [1246]buttonPanel. Copy This is Palm's built-in copy operation. It copies the current selection to the text ClipBoard. NOTE. The usual 1000 character limit of the Palm OS on the size of copying to the ClipBoard has been removed. This command is the same as the "[1247]C" button in [1248]EditView's [1249]buttonPanel. ClipBoard Appender If your Palm OS is at least 3.3, then this command complements Palm's built-in copy operation. It appends the current selection to the text ClipBoard. Of course, appending is just that. Nothing more and nothing less. Do not expect the old text and the new text to be separated in any meaningful way. NOTE. If your Palm OS is at most 3.1, then you cannot append to the ClipBoard. Paste This is Palm's built-in paste operation. It replaces the current selection in the text, if any, with the contents of the text ClipBoard. This command is the same as the "[1250]P" button in [1251]EditView's [1252]buttonPanel. Select All This command selects the entire text in your memo. Select As of October 11, 2000, this has replaced the original [1253]Select command [aka "ESC s"] in [1254]EditView's [1255]Edit menu. Text Selector It has been my experience that it is usually the sophisticated peditor [as opposed to "newbies"] who uses this command. Therefore, many of the text selector commands are quite sophisticated themselves in nature. If you are willing to invest a little extra time to get acquainted with them, they will provide for you an easy way to select text within your memo very fast and very efficiently. It may be a good idea to study carefully the description of the various text selector commands since not all of them operate in a completely self-evident fashion. I also recommend that you study the [1256]Select and [1257]Jump to commands [see [1258]EditView's [1259]Navigate menu] simultaneously since they share many features. Please do not forget to read [1260]this either. It explains how to repeat the last text selection. First, let us discuss the top line in the pedit ... selector dialog. When you start up the pedit ... selector dialog, you will see two numbers displayed in the vrom [from] and to fields. They represent the location of the first and last characters of the text which was selected [highlighted] just before entering the pedit ... selector dialog. If no text was selected, then these numbers coincide with the current cursor location. NOTE. Please do not forget to read about [1261]doubleTaps which help you to fill in the vrom and to fields fast and efficiently. Pressing the Select button ["ESC s"] takes you back to [1262]EditView and selects a range of characters in your memo starting with the value of the vrom field, and ending with the value of the to field. The vrom [from] field allows you to enter a non-negative integer which will be used as the location of the first character of the text selection to be performed when pressing the Select button. You may also pick the value of vrom field by pressing the vrom button [lower case "v"] which takes you back to [1263]EditView. Now you can either place your cursor anywhere in your memo, or make a text selection manually. Upon getting back into the pedit ... selector dialog again via the normal invocation of the dialog, the vrom field will be changed to the current location of your cursor in the former case, whereas in the latter case the value of the vrom field will be the beginning of the text selection you made in your memo. NOTE. This may sound more complicated than it is. Just go ahead and try it. I am pretty sure that after the first experiment it will become rather self-evident. HOMEWORK. Why did I spell from as vrom? Hint. Enter "f" and watch carefully. Similarly, the to field allows you to enter a non-negative integer which will be used as the location of the last character of the text selection to be performed when pressing the Select button. Again, you may also pick the value of to field by pressing the to button ["lower case "t"] which takes you back to [1264]EditView. Now you can either place your cursor anywhere in your memo, or make a text selection manually. Upon getting back into the pedit ... selector dialog again via the normal invocation of the dialog, the vrom field will be changed to the current location of your cursor in the former case, whereas in the latter case the value of the vrom field will be the end of the text selection you made in your memo. NOTE. The current values shown in the vrom and to fields are used by the various commands in the pedit ... selector dialog as the values of the start and the end of the current text selection in your memo. NOTE. Although you can enter any [at most 5 digit] non-negative integer in the vrom and to fields, pedit is smart enough to recognize when the number in the vrom field is greater than the number in the to field. If the latter happens, then, prior to any action, the to numbers are switched. In addition, pedit also recognizes if these numbers are greater than the size of your memo. If this is the case, then again, prior to any action, the numbers are reduced to the size of your memo. In other words, in what follows, we may assume without loss of generality that the number in the vrom field is no greater than the number in the to field, and that the number in the to field is at most the size of your memo. EXAMPLE. When you learn to use the Home button, you will see that the selection in your memo will end at the current value of the to field instead of the last highlighted character which was selected just prior to entering the pedit ... selector dialog. Of course, if you did not change the number in the to field, then the latter two values are the same. Next, let us discuss the second line in the pedit ... selector dialog. The Repeat # field allows you to enter a non-negative integer which will be used as the number of times the selected command will be performed. NOTE. Just to make your pedit experiences more pleasant, entering "V", "T", or "R" [upper case "V", "T", and "R"] always selects the number displayed in the vrom, to, or Repeat # fields, respectively, and makes that field focused. In addition, have fun using the following shortcuts. page up = up arrow = increases the number in the field which is focused page down = down arrow = decreases the number in the field which is focused NOTE. Just to make your pedit experiences even more rewarding, entering SPACE or TAB will rotate the focus between the three number fields. EXAMPLE. For instance, if the Repeat # field contains the number "5" and the abs => push button is highlighted, and then you select the Word button, then the fifth word of your memo will be selected counting from the home position, that is, from top of your memo. EXAMPLE. For instance, if the Repeat # field contains the number "5", and you select the bWord button, then you will end up selecting the range of characters as defined by vrom and to fields, and, in addition, five more words will be selected backward counting from the character whose position is equal to the number in the vrom field. This may sound somewhat complicated and intimidating. However, just a few taps will convince you that it is easy and natural. NOTE. If you are an experienced peditor, then it is self-evident to you that the [1265]ESC key version of the above two examples are ESC s R 5 a w and ESC s R 5 b w respectively. HOMEWORK. What should and will happen if you enter ESC s f V 0 T 10 R 5 w as an [1266]ESC key shortcut? NOTE. When wanting to use the [1267]ESC key mechanism, please keep in mind that there is no need for an [1268]ESC key within the pedit ... selector dialog since there is no text field in it accepting alphabetical input [see [1269]here]. Now I will discuss the Home and End buttons. The Home button selects all the text between the top [beginning] of your memo and the end of the current text selection as defined by the to field. ESC s h = selects from the beginning of your memo to the end of the current text selection ESC s T NUMBER h = selects from the beginning of your memo to the character whose location is "NUMBER" ESC s ST ST NUMBER h = selects from the beginning of your memo to the character whose location is "NUMBER" where ST stands either for a SPACE or TAB character. NOTE. In this case the value in the vrom field is irrelevant. EXAMPLE. "ESC s T 13 h" selects the first 13 characters of your memo. The End button selects all the text from the start of the current text selection, as defined by the vrom field, to the bottom [end] of your memo. ESC s e = selects from the start of the current text selection to the end of your memo ESC s V NUMBER e = selects from the character whose location is "NUMBER" to the end of your memo ESC s ST NUMBER e = selects from the character whose location is "NUMBER" to the end of your memo where ST stands either for a SPACE or TAB character. NOTE. In this case the value in the to field is irrelevant. EXAMPLE. "ESC s V 13 e" selects from the 13th character to the end of your memo. Next, let us discuss the groups of triplet buttons in the pedit ... selector dialog. Looking at the pedit ... selector screen, you can see three columns of five buttons each with labels bP%, P%, and fP%. In each of the rows the button labels are very similar, except that the buttons in left column start with the letter "b" [backward], and in the right column they start with the letter "f" [forward]. In fact, typing the letter "b" once, puts you into a backward mode, whereas typing the same letter "b"again, takes you out of the backward mode and places you back to the default symmetric mode. Similarly, typing the letter "f" once, puts you into a forward mode, whereas typing the same letter "f" again, takes you out of the forward mode and places you back to the default symmetric mode. In addition, there are two push buttons in the bottom right corner of the pedit ... selector screen called abs => and x <=>. Pushing abs => or typing "a" puts you into the absolute mode, whereas pushing x <=> or typing "x" puts you into the symmetric mode. Another way of changing modes is by typing "b", "f", or "a" [absolute], or "x" [symmetric] in any order you wish. The title bar of the pedit ... jumper screen always tells you which mode you are in. NOTE. If you use your stylus to tap buttons on the screen then you don't need to be concerned about the above described backward and forward modes although you still need to be able to differentiate between the absolute and symmetric modes. For the latter, just use the abs => and x <=> push buttons. If you are in the symmetric mode, then the middle column allows you to perform various text selections in a symmetric direction, that is, both left and right, starting from the current text selection, as defined by the vrom and to fields. This is what I define as a text selection in symmetric mode. If you are in the absolute mode, then the middle column allows you to perform various text selections starting from the home position, that is, from top of your memo. This is what I define as a text selection in absolute mode. NOTE. The home position of your memo is always the beginning [top] of your memo and the end is the very end of it [bottom]. The left column allows you to to perform various text selections backward starting from the current text selection, as defined by the vrom and to fields. This is what I define as a a text selection in backward mode. The right column allows you to to perform various text selections forward starting from the current text selection, as defined by the vrom and to fields. This is what I define as a a text selection in forward mode. Notation. In the following discussion and tables "#" stands for the number which you entered in the Repeat # field. If the Repeat # field is empty or contains the number "0", then, depending on the function of the selected button, you may get a warning dialog reminding you to enter a number into that field. Notation. In addition, I also use the notation "x" and "y" for the values of the vrom and to fields, respectively. Now let us discuss the buttons themselves. The three "Character" buttons bChar, Character, and fChar allow you to select "#" characters counting from the current text selection, as defined by the vrom and to fields. The details are as follows. The bChar button selects the range of characters as defined by vrom and to fields, and, in addition, "#" characters backward counting from the character whose position is equal to the number in the vrom field. If you are in the default symmetric mode, then the Character button selects the range of characters as defined by vrom and to fields, and in addition, "#" characters are selected backward and forward counting from the characters whose positions are equal to the the numbers in the vrom and to fields, respectively. If you are in the absolute mode, then the Character button selects "#" characters counting from the beginning of your memo. NOTE. In this case the values in the vrom and to fields are irrelevant. The fChar button selects the range of characters as defined by vrom and to fields, and, in addition, "#" characters forward counting from the character whose position is equal to the number in the to field. ESC s NUMBER b c = selects from "x - NUMBER" to "y" ESC s NUMBER c = ESC s NUMBER x c = selects from "x - NUMBER" to "y + NUMBER" ESC s NUMBER a c = selects from the beginning of your memo to the character whose location is "NUMBER" ESC s NUMBER f c = selects from "x" to "y + NUMBER" where "x" and "y" are defined [1270]here. The three "Word" buttons bWord, Word, and fWord allow you to select "#" words counting from the current text selection, as defined by the vrom and to fields. The details are as follows. The bWord button selects the range of characters as defined by vrom and to fields, and, in addition, "#" words backward counting from the character whose position is equal to the number in the vrom field. If you are in the default symmetric mode, then the Word button selects the range of characters as defined by vrom and to fields, and in addition, "#" words are selected backward and forward counting from the characters whose positions are equal to the the numbers in the vrom and to fields, respectively. If you are in the absolute mode, then the Word button selects "#" words counting from the beginning of your memo. NOTE. In this case the values in the vrom and to fields are irrelevant. The fWord button selects the range of characters as defined by vrom and to fields, and, in addition, "#" words forward counting from the character whose position is equal to the number in the to field. NOTE. If the repeat number "#" is equal to "0" and you select word backward [bWord], then you will end up selecting from the beginning of the current word to the end of the current selection. Similarly, if the repeat number "#" is equal to "0" and you select word forward [fWord], then you will end up selecting from the beginning of the current selection to the end of the current word. EXAMPLE. If there is no current text selection in your memo, that is, "x" = "y" [see [1271]here] then ESC s 0 f w = selects at most one [partial] word from the current cursor to the end of the current word NOTE. However, there is a [useful] exception to the above rule when the repeat number "#" is equal to "0". Namely, if both the beginning and the end of the selected text happen to be inside the very same word gap, then that particular word gap is selected. This can be used to delete word gaps, that is, to join words. NOTE. If the repeat number "#" is equal to "0" then the Word button is not functional. NOTE. See also [1272]here for the effects of the status of the Smart [select] check box. ESC s NUMBER b w = selects from "x" to "y" and "NUMBER" words backward from "x" ESC s NUMBER w = ESC s NUMBER x w = selects from "x" to "y" and "NUMBER" words backward from "x" and "NUMBER" words forward from "y" ESC s NUMBER a w = selects "NUMBER" words from the beginning of your memo ESC s NUMBER f w = selects from "x" to "y" and "NUMBER" words forward from "x" ESC s 0 b w = selects selects from "x" to "y" and at most one word backward from "x" [the last word is the selection may be partial] ESC s 0 f w = selects selects from "x" to "y" and at most one word forward from "y" [the first word is the selection may be partial] where "x" and "y" are defined [1273]here. NOTE. Typing the number "NUMBER" above is optional. If you leave it out then its default value "1" is used as the "NUMBER". The three "Sentence" buttons bZent, Zentence, and fZent allow you to select "#" sentences counting from the current text selection, as defined by the vrom and to fields. The details are as follows. The bZent button selects the range of characters as defined by vrom and to fields, and, in addition, "#" sentences backward counting from the character whose position is equal to the number in the vrom field. If you are in the default symmetric mode, then the Zentence button selects the range of characters as defined by vrom and to fields, and in addition, "#" sentences are selected backward and forward counting from the characters whose positions are equal to the the numbers in the vrom and to fields, respectively. If you are in the absolute mode, then the Zentence button selects "#" sentences counting from the beginning of your memo. NOTE. In this case the values in the vrom and to fields are irrelevant. The fZent button selects the range of characters as defined by vrom and to fields, and, in addition, "#" sentences forward counting from the character whose position is equal to the number in the to field. NOTE. If the repeat number "#" is equal to "0" and you select sentence backward [bZent], then you will end up selecting from the beginning of the current sentence to the end of the current selection. Similarly, if the repeat number "#" is equal to "0" and you select sentence forward [fZent], then you will end up selecting from the beginning of the current selection to the end of the current sentence. EXAMPLE. If there is no current text selection in your memo, that is, "x" = "y" [see [1274]here] then ESC s 0 f z = selects at most one [partial] sentence from the current cursor to the end of the current sentence NOTE. If the repeat number "#" is equal to "0" then the Zentence button is not functional. NOTE. See also [1275]here for the effects of the status of the Smart [select] check box. ESC s NUMBER b z = selects from "x" to "y" and "NUMBER" sentences backward from "x" ESC s NUMBER z = ESC s NUMBER x z = selects from "x" to "y" and "NUMBER" sentences backward from "x" and "NUMBER" sentences forward from "y" ESC s NUMBER a z = selects "NUMBER" sentences from the beginning of your memo ESC s NUMBER f z = selects from "x" to "y" and "NUMBER" sentences forward from "y" ESC s 0 b z = selects selects from "x" to "y" and at most one sentence backward from "x" [the last sentence is the selection may be partial] ESC s 0 f z = selects selects from "x" to "y" and at most one sentence forward from "y" [the first sentence is the selection may be partial] where "x" and "y" are defined [1276]here. NOTE. Typing the "NUMBER" above is optional. If you leave it out then its default value "1" is used as the "NUMBER". NOTE. I am sure you know that "Sentence" is spelled as "Zentence" above because "z" is the activator letter. The three "LineFeed" buttons bLine, LineFeed, and fLine allow you to select "#" [1277]lines counting from the current text selection, as defined by the vrom and to fields. The details are as follows. The bLine button selects the range of characters as defined by vrom and to fields, and, in addition, "#" lines backward counting from the character whose position is equal to the number in the vrom field. If you are in the default symmetric mode, then the LineFeed button selects the range of characters as defined by vrom and to fields, and in addition, "#" lines are selected backward and forward counting from the characters whose positions are equal to the the numbers in the vrom and to fields, respectively. If you are in the absolute mode, then the LineFeed button selects "#" lines counting from the beginning of your memo. NOTE. In this case the values in the vrom and to fields are irrelevant. The fLine button selects the range of characters as defined by vrom and to fields, and, in addition, "#" lines forward counting from the character whose position is equal to the number in the to field. NOTE. If the repeat number "#" is equal to "0" and you select line backward [bLine], then you will end up selecting from the beginning of the current line to the end of the current selection. Similarly, if the repeat number "#" is equal to "0" and you select line forward [fLine], then you will end up selecting from the beginning of the current selection to the end of the current line. NOTE. See also [1278]here for the effects of the status of the incl[ude] EOL check box. EXAMPLE. If there is no current text selection in your memo, that is, "x" = "y" [see [1279]here] then ESC s 0 f l = selects at most one [partial] line from the current cursor to the end of the current line NOTE. If the repeat number "#" is equal to "0" then the LineFeed button is not functional. ESC s NUMBER b l = selects from "x" to "y" and "NUMBER" [1280]lines backward from "x" ESC s NUMBER l = ESC s NUMBER x l = selects from "x" to "y" and "NUMBER" [1281]lines backward from "x" and "NUMBER" lines forward from "y" ESC s NUMBER a l = selects "NUMBER" [1282]lines from the beginning of your memo ESC s NUMBER f l = selects from "x" to "y" and "NUMBER" [1283]lines forward from "y" ESC s 0 b l = selects selects from "x" to "y" and at most one [1284]line backward from "x" [the last line is the selection may be partial] ESC s 0 f l = selects selects from "x" to "y" and at most one [1285]lines forward from "y" [the first line is the selection may be partial] where "x" and "y" are defined [1286]here. NOTE. Typing the "NUMBER" above is optional. If you leave it out then its default value "1" is used as the "NUMBER". NOTE. Please do not forget that [1287]lines and [1288]screenLines are not the same objects. The three "Paragraph" buttons bPar, Paragraph, and fPar allow you to select "#" [1289]paragraphs counting from the current text selection, as defined by the vrom and to fields. The details are as follows. The bPar button selects the range of characters as defined by vrom and to fields, and, in addition, "#" paragraphs backward counting from the character whose position is equal to the number in the vrom field. If you are in the default symmetric mode, then the Paragraph button selects the range of characters as defined by vrom and to fields, and in addition, "#" paragraphs are selected backward and forward counting from the characters whose positions are equal to the the numbers in the vrom and to fields, respectively. If you are in the absolute mode, then the Paragraph button selects "#" paragraphs counting from the beginning of your memo. NOTE. In this case the values in the vrom and to fields are irrelevant. The fPar button selects the range of characters as defined by vrom and to fields, and, in addition, "#" paragraphs forward counting from the character whose position is equal to the number in the to field. NOTE. If the repeat number "#" is equal to "0" and you select paragraph backward [bPar], then you will end up selecting from the beginning of the current paragraph to the end of the current selection. Similarly, if the repeat number "#" is equal to "0" and you select paragraph forward [fPar], then you will end up selecting from the beginning of the current selection to the end of the current paragraph. EXAMPLE. If there is no current text selection in your memo, that is, "x" = "y" [see [1290]here] then ESC s 0 f p = selects at most one [partial] paragraph from the current cursor to the end of the current paragraph NOTE. However, there is a [useful] exception to the above rule when the repeat number "#" is equal to "0". Namely, if both the beginning and the end of the selected text happen to be inside the very same paragraph [1291]trailer, then that particular [1292]trailer is selected. If [1293]EOLs are not included then the first linefeed is deselected. This can be used to delete [1294]trailer, that is, to join paragraphs, with or without joining lines. NOTE. If the repeat number "#" is equal to "0" then the Paragraph button is not functional. NOTE. See also [1295]here for the effects of the status of the incl[ude] EOL check box. ESC s NUMBER b p = selects from "x" to "y" and "NUMBER" [1296]paragraphs backward from "x" ESC s NUMBER p = ESC s NUMBER x p = selects from "x" to "y" and "NUMBER" [1297]paragraphs backward from "x" and "NUMBER" paragraphs forward from "y" ESC s NUMBER a p = selects "NUMBER" [1298]paragraphs from the beginning of your memo ESC s NUMBER f p = selects from "x" to "y" and "NUMBER" [1299]paragraphs forward from "y" ESC s 0 b p = selects selects from "x" to "y" and at most one [1300]paragraph backward from "x" [the last paragraph is the selection may be partial] ESC s 0 f p = selects selects from "x" to "y" and at most one [1301]paragraphs forward from "y" [the first paragraph is the selection may be partial] where "x" and "y" are defined [1302]here. NOTE. Typing the "NUMBER" above is optional. If you leave it out then its default value "1" is used as the "NUMBER". NOTE. Please do not forget to check what [1303]paragraphs really are. If the Smart [select] box [upper case "S"] is checked, and you are selecting words or sentences, then all trailing whitespaces are also included in the selection. A whitespace is defined as a regular SPACE, TAB, or LINEFEED [carriage return] character, and a few additional exotic space-like characters which may depend on the particular Palm operating system. "S" [upper case] = toggle the Smart [select] box "M" [upper case] = check the Smart [select] box [a [1304]pScript friendly operation] If the Forth w[ord] box [upper case "F"] is checked then, by definition, words are separated from each other by whitespaces only unlike in regular spoken languages where punctuation signs also separate words. For instance, if Forth rules, then this sentence contains ten words only. "F" [upper case] = toggle the Forth w[ord] box "O" [upper case "oh"] = check the Forth w[ord] box [a [1305]pScript friendly operation] If the incl[ude] EOL [EOL means "end-of-line"] box [lower case "i"] is checked, and you are selecting lines, then the text selection will also include the nearest trailing carriage return characters. This is useful when selecting text which extends over several lines. If the incl[ude] EOL box [lower case "i"] is checked, and you are selecting paragraphs, then the text selection will also include the nearest paragraphs trailers. This is useful when selecting text which extends over several paragraphs. NOTE. What the heck is a paragraphs trailer? It refers to the stuff you cannot see between paragraphs. It consists of SPACE, TAB characters squeezed between linefeeds [carriage returns]. "i" [lower case] = toggle the incl[ude] EOL box "I" [upper case] = check the incl[ude] EOL box [a [1306]pScript friendly operation] The .Cncl [.Cancel] button ["ESC s." - but why] aborts the text selection operation and takes you back to [1307]EditView. The Marker button ["ESC sm"] selects text in your memo depending on the current text selection, as defined by the vrom and to fields, and the marker [see the [1308]Set Marker command in [1309]EditView's [1310]Navigate menu]. The rules are as follows. If there is no text selection in your memo, that is, both the vrom and to fields have the same value, then tapping the Marker button selects text between the marker and the current cursor location as defined by the vrom field. EXAMPLE. If both the vrom and to fields contain the number 1918 and the marker is located at position 1939, and you enter "ESC sm" then the text selection will contain all the characters from 1918 to 1939. HOMEWORK. What will happen if you enter "ESC sV1945T1945m" instead of "ESC sm" in the above example? When there is a text selection in your memo then the situation is a little more complicated. If the marker position is outside the range of the selected text, as defined by the vrom and to fields, then tapping the Marker button extends the selection of the text to the marker. EXAMPLE. If the vrom field contains the number 1914 and the to field contains the number 1918 and the marker is located at position 1939, and you enter "ESC sm" then the text selection will contain all the characters from 1914 to 1939. HOMEWORK. What will happen if you enter "ESC sV1945T1956m" instead of "ESC sm" in the above example? If the marker position is inside the range of the selected text, as defined by the vrom and to fields, then tapping the Marker button has no effect. If you have a better idea what should happen in the latter case, please let [1311]me know. EXAMPLE. If the vrom field contains the number 1914 and the to field contains the number 1945 and the marker is located at position 1939, and you enter "ESC sm" then the text selection will contain all the characters from 1914 to 1945. NOTE. All the text selection commands are sticky in the sense that the last text selection command can be repeated by simply either doing a [1312]buttonShifted "[1313]S" job in [1314]EditView's [1315]buttonPanel, or by entering "ESC S" [upper case "S"]. Of course, once you quit your memo or [1316]magiPad, the last text selection becomes history. NOTE. If you are in the [1317]expertMode, then the pedit ... selector dialog will not show up at all, although you can enter your commands as usual, including the "vrom", "to", and "repeat" numbers which may have no more than five digits. On the other hand, if you are in the [1318]advancedMode, then an abbreviated version of the pedit ... selector dialog appears in place of the original one which works exactly the same way as the full dialog. If you are in the [1319]globalMacroMode, then the pedit ... selector dialog remains invisible. Enjoy... The original version of "Select..." As of October 11, 2000, this has been replaced by the brand new [1320]Select command in [1321]EditView's [1322]Edit menu. I kept the old version of "Select..." in this manual for two reason. First, there are many peditors who are somewhat slow in upgrading their pedits. Second, this gives a chance to see pedit in progress. This command pops up the text selector window which allows a myriad customizable text selections. Text Selector All buttons and check boxes can be activated by entering the first letters of their labels. Switching between the number fields can be achieved by entering SPACE or TAB. Here is a neat example. Perform a [1323]doubleTap with the consecutive component taps in two different areas of your text. This pops up the text selector window where you hit the Word button. Voila, the words containing the two taps and, in addition, all the words between the two taps become selected. If the smart select box is checked then all trailing strict spaces are also included in the selection. A strict space is defined as a regular space or tab character and a few exotic space-like characters which may depend on the particular Palm operating system. If the Forth word box is checked then, by definition, words are separated from each other by whitespaces only unlike in regular spoken languages where punctuation signs also separate words. If the include EOL [EOL means "end-of-line"] box is checked then the text selection will also include the nearest trailing carriage return character. This is useful when selecting text which extends over several lines. As a convenient shortcut, in [1324]EditView "ESC S" selects all text in the memo just like the [1325]Select All command in [1326]EditView's [1327]Edit menu so that there is no need to open up the text selector window for this operation [which, by the way, responds to "ESC s"]. Another time saving shortcut in [1328]EditView is "ESC W" which selects the word surrounding the cursor. Move This command pops up the [1329]text mover dialog which allows you to move blocks of text around your memo. Please see [1330]here for more details. This command is the same as the [1331]upButtonSlided "[1332]X" button in [1333]EditView's [1334]buttonPanel. NOTE. This command has [1335]expert && advanced modes. Sort This command pops up the [1336]text sorter dialog which allows you to sort blocks of text in your memo. Please see [1337]here for more details. This command is the same as the [1338]downButtonSlided "[1339]X" button in [1340]EditView's [1341]buttonPanel. Keyboard This command pops up Palm's built-in virtual keyboard so that you can edit your memo while pretending that you are in fact typing. Graffiti Help This command pops up the Graffiti Reference Dialog. Help This command opens the help dialog which is mostly [but not always] context sensitive. EditView's Edit+ Menu Since menubar real-estate is a precious commodity, this menu appears as "Ed+" in the menubar. Insert Char This command gives you an ASCII table in the form of a scrollable list. It provides an elegant way to insert an arbitrary ASCII character into your text at the current cursor location [or replace the current text selection]. It pops up an ASCII list which shows both decimal and hexadecimal values of the ASCII characters. If you tap on a character, then it will be inserted into your current text at the current cursor position. If instead of a blinking cursor you have some text selected, then it will be replaced by the picked character. NOTE. Unlike with [1342]magiPad's [1343]Qopy'n'Paste command which selects the inserted text, the Insert Char command places the cursor right after the character which was inserted into your text. NOTE. Only the character gets inserted. The additional numbers such as "[065 0x41] A" are given for informational purposes only. Please see [1344]here for help on navigating the ASCII list. This command is the same as the [1345]upButtonSlided "[1346]U" button. The characters on the list are the same as given by the "[1347]ASCII Table" command. However, the user interface is completely different. ASCII Table This command gives you an ASCII table. It is described in details where [1348]magiPad is discussed. You can get another ASCII table in the form of a scrollable list via the [1349]Insert Char command which is the same as [1350]downButtonSlided "[1351]U" button. This command is the same as the [1352]downButtonSlided "[1353]U" button. NOTE. If you are in [1354]magiPad, then this command is the same as the [1355]Insert Char command. Auto Indent This command pops up the Automatic Indentation list. Auto Indent Auto indenting allows your Palm to be used as a serious program source code and text editing tool. The opportunities outside the scope of programming are limited by your imagination only. If you are a programmer or a writer, then you don't need any explanation whatsoever. If you aren't, then let me just say that after you adjusted your preferences using items "9" ans "0" in the list, and if you enabled automatic indentation using items "2" through "8", then every new line inherits the indentation [the whitespace characters] of the previous line as long as neither Palm's built-in virtual keyboard nor pasting is used for entering text. Since it is much easier to explain this on an example, here is one. For instance, typing # comment the next line will have an autoMagic "# " ["#" and "SPACE"] in the beginning of it as long as you activated either the auto indent ON w SPACE & EX or the auto indent ON w ALL item on the list and you picked "#" using the change EXTRA char... item. If you enter a carriage return after the word "comment" and then you enter "pedit" then you will have # comment # pedit Did you get it? If not, please try it. We will define the collection of characters which get reproduced by entering a carriage return to be the line indentation header. In the example above the line indentation header consists of "SPACE" and "#". If items "2" through "8" are activated then automatic indentation in enabled. QUESTION. How do I know if I enabled automatic indentation? ANSWER. Look for the small 2*2 pixel sized black square just above [1356]EditView's scroll bar. The more EXTRAS... item allows you to define up to 16 additional whitespace characters which are used by automatic indentation. Use the turn more EXTRAS ON/OFF to activate/deactivate the additional whitespace characters. For instance, if you define the letters in "pedit" as additional extra characters, then you can produce text such as #pedit# blahblah one... #pedit# blahblah two... #pedit# blahblah three... automatically. NOTE. I bet you already figured it out that defining the letters in "peditblah" as additional extra characters, makes the above example even easier to produce. NOTE. You can use space, backspace, arrows, the 5-way navigator, the numbers/letters in front of the list items to navigate the list. Use ENTER to activate the highlighted item, and "." [period] to cancel the list. Please see [1357]here for full help on navigating the Automatic Indentation list. NOTE. Not only [1358]EditView, but also each and every [1359]magiPad/scriptPad remembers its own automatic indentation preferences. Block Shift This command pops up the Block Shift list. Block Shift This command is related to what many programmers and professional writers would call block indentation or block shifting. I recommend that you use one of the [1360]mono-spaced fonts while shifting so that you would have a perfect visual feedback of what you have accomplished. * If no text is selected in the current memo, then activating items "1" through "0" on this list will (i) select the line where your cursor is currently located, and (ii) shifts the entire line to the right/left. * If there is a text selection in the current memo, then activating items "1" through "0" on this list will (i) select all the lines surrounding your current text selection, and (ii) shifts those lines to the right/left. Please keep in mind that a line is not necessarily what you think a line is. Please check out the definition of lines [1361]here. Use the change EXTRA char... item to define an additional character which can be used in conjunction with SPACE and TAB to perform block shifts. Use the change => SHIFT SIZE... and change <= SHIFT SIZE... items to define the number of shift characters which are added/deleted when performing block shifts. NOTE. When shifting to the right, blank lines are left unchanged if the right-shift character is either SPACE or TAB. NOTE. In order to make block shifting a little more user friendly, I deviated from the widely accepted standards of block shifting in the sense that if only one single line is shifted, then the cursor is placed at the end of the shifted line instead of selecting the entire line. NOTE. In view of the combination of the above two notes, if you right-shift more than one line and all but one are blank, then the cursor may end up at the end of a blank line instead of the end of the non-blank line. I hope you can live with this minor inconvenience. NOTE. You can use space, backspace, arrows, the 5-way navigator, the numbers/letters in front of the list items to navigate the list. Use ENTER to activate the highlighted item, and "." [period] to cancel the list. Please see [1362]here for full help on navigating the Block Shift list. NOTE. Not only [1363]EditView, but also each and every [1364]magiPad/scriptPad remembers its own block shifting preferences. NOTE. This command can be also be invoked using the [1365]buttonShifted "[1366]T" [aka "[]"] button. EXAMPLE. Right-shifting pedit LapTopHack pToolSet with the extra character "#" [item 3] yields ###pedit ###LapTopHack ###pToolSet if the ...=> SHIFT SIZE... is set to 3. Shift Left This command is a shortcut for the last left shift command made while using the [1367]Block Shift command in [1368]EditView's [1369]Edit+ menu. NOTE. This command can be also be invoked using the [1370]buttonShifted "[1371]L" [aka "["] button. The analogous right shifts are performed by invoking the [1372]Shift Right command in [1373]EditView's [1374]Edit+ menu. Shift Right This command is a shortcut for the last right shift command made while using the [1375]Block Shift command in [1376]EditView's [1377]Edit+ menu. NOTE. This command can be also be invoked using the [1378]buttonShifted "[1379]K" [aka "]"] button. The analogous left shifts are performed by invoking the [1380]Shift Left command in [1381]EditView's [1382]Edit+ menu. SkyIsLimit on|off If SkyIsLimit is on then a "*" [sky => star] appears right next to the "[1383]H" button in [1384]EditView's [1385]Button Panel. SkyIsLimit allows you to create 4Mb and 32Mb virtual memos in pedit and pedit32, respectively. Please note that I am referring to "Mb" and not "Kb". Of course, as most of you will find out, 32Mb is rarely reachable unless your sister works for one of those companies which make Palm clones. This feature was primarily created for those peditors who hook up their Palm to an external keyboard [or the other way around, depending one's outlook on life], and then they pretend that they have a full featured laptop computer. Boy, they are right! With SkyIsLimit you can take notes at meetings lasting hours and hours and/or you can write the great American [or any other nation's] novel right on your Palm. The way this works is as follows. If you are typing into a memo [except for the built-in virtual keyboard], and (i) if your cursor is located at the very end of your text [where it should be unless you are editing an existing memo], and (ii) if you filled up 75% of your current memo's capacity, and (iii) if and you type a space or newline character or if you are at the very and of your memo's capacity, then a new memo A Segmented Memo is created autoMagically which starts like 123456... #segment.0020# 2000/04/08 11:54:42 00DB2152 Title: [and here come the first 64 letters of the first line of your memo]. Category: [here is the category of your memo] !DO NOT TOUCH THIS LINE OR ABOVE! and then you can continue typing where the cursor is. Here "123456" are the first 6 letters of your memo. When you fill up segment.0020, then segment.0030 is created, and so forth. It is easier to experience this than to describe it, so please go ahead and play with it. Since each of your memos is filled up to 75% of its maximum capacity, you have plenty of real estate for additions, corrections, editing, and so forth. QUESTION. How do I know if my 75% limit is approaching? ANSWER. Turn on the displayable [1386]statistics. When you do a HotSync job, you can join your segments on your DeskTop any way you want it. Of course, you can also export your segmented memo and its [1387]sister segments into a [1388]DOC file using the [1389]Export Memo command in [1390]EditView's [1391]Record #1 menu, and then, by the time it hits your DeskTop, it will be a single [1392]DOC file. Needless to say, this process is reversible. I can almost guarantee you that you will love SkyIsLimit. Here is a tip. If you don't care for it, then don't use it. NOTE. When in [1393]myNotes [see also [1394]EditView's "[1395]N" button], or, more generally, when the memo starts with "xxx.myNotes" followed by a blank line, then SkyIsLimit is temporarily disabled which prevents the current "myNotes" and allso all archived "myNotes" from being split up. New Chapter We use the word chapter and segment interchangably. If you are writing a novel, then chapter is the right word. If you take notes, then segment [or even page] is perhaps more appropriate. There is a subtle difference between chapters and segments. Usually, but not always, chapters are broken at logical interruptions, whereas segments may be broken anytime whenever pedit decides that it is time to start a new segment. Please see [1396]here for a more detalied discussion of segments vs chapters. With this command, whether or not [1397]SkyIsLimit is active, you can always force the creation of a new [1398]segment whose segment index will be right after the segment index of your current memo. After invoking this command, you will see a dialog which allows you to decide whether you want a brand new blank [text free] chapter or you want to split up your current memo and you want to move the text which is located after the cursor in your memo to the new chapter. If you have some text selected, then it is assumed that the cursor is at the very start of the selection. If your current memo is not yet [1399]segmented then it will be given a [1400]header prior to placing you into a new segment. Whenever you use this command, the [1401]segment indices of your memo and its [1402]sister segments get automatically readjusted so that if you added some segments manually to your memo then the new segment indices will be again in multiples of ten. NOTE. If your cursor happens to be either at the start of your memo or inside the [1403]header of your memo, then it doesn't make much sense at all to move the text after the cursor to a new chapter so that the operation will abort if you requested pedit to move text too. Go to Prev Chap If your current memo is [1404]segmented and the current segment is not the first one, then this command takes you to the bottom of the previous segment of your memo. If you are at the top of your memo then hitting the page up button has the same effect as this command. NOTE. If the previous segment was already visited and it is invoked via the [1405]segmentSwitcher ["$"] button in [1406]EditView's [1407]buttonPanel, then the previous memo [1408]vitals are restored. Go to Next Chap If your current memo is [1409]segmented and the current segment is not the last one, then this command takes you to the top of the next segment of your memo. If you are at the bottom of your memo then hitting the page down button has the same effect as this command. NOTE. If the next segment was already visited and it is invoked via the [1410]segmentSwitcher ["$"] button in [1411]EditView's [1412]buttonPanel, then the previous memo [1413]vitals are restored. Reindex Chaps With this command, if your current memo is [1414]segmented, then the [1415]segment indices of your memo and its [1416]sister segments get automatically readjusted so that if you added some segments manually to your memo then the new segment indices will be again in multiples of ten. Add a Header A memo header A Header contains all the essential information regarding your memo which is used both in the SkyIsLimit feature and in exporting several memos into one pedit32 memo or DOC file. The details are explained [1417]here. QUESTION. Why do I need to create header? ANSWER. So that you can create segments manually which can be combined into one pedit32 memo or DOC file via an export job. Once you have a header, you can use it as a template to paste it to the top of other memos so that they would create one family of [1418]segmented memos. Please make sure that you adjust the segment number appropriately in each of the segments so that they would be ordered exactly the way you want it. Any (exactly) 4 digit number can be used such as 0002 and 1976. Edit Selection This command allows you to edit the current text selection separately in a setting similar to [1419]magiPad. Once you finished editing your text, you can use the [1420]Qopy'n'Paste button or "ESC Q" [upper case "Q"] to paste your text back into your current memo. Once you finished editing your text in [1421]magiPad you can either select some text in it and then hit the [1422]Qopy'n'Paste button ["ESC Q"] or just have a blinking cursor while you do a [1423]Qopy'n'Paste job. If you have text selection then the [1424]Qopy'n'Paste button acts normally and pastes the current text selection back to your current memo. If you have a blinking cursor, then you will have a dialog coming up which will allow you to select the entire text and then paste it back to your current memo. NOTE. If there is no current text selection in your current memo then you are still taken to a blank copy of [1425]magiPad where you can create new text and then later you can use the [1426]Qopy'n'Paste button or "ESC Q" to paste it back at your current cursor position in your current memo. EditView's Options Menu Since menubar real-estate is a precious commodity, this menu appears as "Opt" in the menubar. Font This command yields another way of changing fonts in [1427]EditView. Please see [1428]EditView's Fonts for more details. Add a DateStamp This command inserts a date'n'time stamp of the form 2000/04/08 11:54:42 into your memo at the current cursor location if there is no current text selection in your memo, and replaces the latter by a date'n'time stamp if there is one. The actual formatting uses the preferences set in the "Formats" Preference Panel. Batch Processor This command is the same as the [1429]Batch Processor command in [1430]ListView's [1431]Options menu. Please see [1432]here for the details. Visibilator This button invokes the visibilator command. It can also be invoked via "ESC !". Have you ever wondered if that gap thing right there in your text is two spaces, or three spaces, or, maybe, is it a tab or a combination thereof? Worry no longer! Just invoke the visibilator and it shows you the spaces and tabs by replacing them with "·" [middle dot] and "»" [right pointing double angle quotation mark, similar to ">>"], respectively. The Visibilator NOTE. As of version 6.46, the visibilator acts on the selected range of text only unless there is no text selection at all. In the latter case, the entire text gets acted upon. Feel free to edit your invisible characters as you wish. Then use the visibilator again, and you are back to "normal". If you want to see the carriage returns [linefeeds] too then please set the linefeed is viewed as invisible check box in the [1433]pedit preferences dialog and you are all set. The next time you invoke the visibilator, all your carriage returns will show up as ¶ [the pilcrow or paragraph sign, similar to the mirror image of "P"]. QUESTION. When my invisible characters were shown, I edited my memo, and now I have a mixture of spaces, tabs, linefeeds, and their visibilator equivalents in my memo. What a mess. How can I get my memo back to normal? ANSWER. Just make sure that there is no text selection in your memo and then use the visibilator twice. That should fix your memo. Case yes|no This is just a handy shortcut to toggling the Ign[ore] Case check box in the Find'n'Replace dialog which is explained [1434]here where the [1435]Find command in [1436]EditView's [1437]Navigate menu is discussed. In a nutshell, this controls whether all find and search operations are case sensitive. Wrap yes|no This is just a handy shortcut to toggling the Wrap check box in the Find'n'Replace dialog which is explained [1438]here where the [1439]Find command in [1440]EditView's [1441]Navigate menu is discussed. In a nutshell, this controls whether all search and replace operations are going to stop once they reach the end of your memo, or else, they will go back to the start of your memo and continue what they are engaged in. The only exception is that "All R" [Replace All] command which stops at the end. Stats on|off This command toggles the [1442]statistics displayed in the title bar. Buttons on|off This command allows you to toggle [1443]EditView's [1444]buttonPanel on and off. When it is off, that is, when you are in the full screen edit mode, then the text editing field is slightly larger which seems to please many pedit aficionados. I personally love the [1445]buttonPanel and would never turn it off. This selection is sticky in the sense that it survives visits to [1446]ListView and to other applications. NOTE. If you happen to have an empty memo in a [1447]readOnlyCategory while turning the buttons on or off, then you will be transported to [1448]ListView which is the sensible thing to do since there is no point in ending up with a blank memo in a [1449]readOnlyCategory. Phone Lookup This command calls Palm's built-in Address Book application to lookup a phone number. If there is some selected text in your memo and if there is a match, then the selected text will be replaced with the phone number. If there is no selected text and there is a match, then the phone number is placed to the current cursor location. If there is no match, the function displays the Address Book short list. Preferences This command brings up the [1450]pedit preferences dialog. Please see [1451]here for the details. About pedit This command is explained [1452]here. EditView's Navigate Menu Since menubar real-estate is a precious commodity, this menu appears as "Nav" in the menubar. Visit Top This command allows you to examine the beginning of your memo. The location of the cursor remains unchanged. If you want to move your cursor as well, then please use the [1453]Jump to command in [1454]EditView's [1455]Navigate menu. Jump to As of September 11, 2000, this has replaced the original [1456]Jump to command in [1457]EditView's [1458]Opt[ions] menu. Jumper It has been my experience that it is usually the sophisticated peditor [as opposed to "newbies"] who uses this command. Therefore, many of the jumper commands are quite sophisticated themselves in nature. If you are willing to invest a little extra time to get acquainted with them, they will provide for you an easy way to navigate within your memo very fast and very efficiently. It may be a good idea to study carefully the description of the various jumper commands since not all of them operate in a completely self-evident fashion. I also recommend that you study the [1459]Select [see [1460]EditView's [1461]Opt[ions] menu] and [1462]Jump to commands simultaneously since they share many features. Please do not forget to read [1463]this either. It explains how to repeat the last jump. The Repeat # field allows you to enter a non-negative integer which will be used as the number of times the selected command will be performed. NOTE. Just to make your pedit experiences more pleasant, entering "r" always selects the number displayed in the Repeat # field. In addition, please don't hesitate to use the following shortcuts. page up = up arrow = increases the number in the Repeat # field page down = down arrow = decreases the number in the Repeat # field For instance, if the Repeat # field contains the number "5", and you select the Word button, then your cursor will jump to the fifth word of your memo counting from the home position, that is, from top of your memo. If the Forth w[ord] box [upper case "F"] is checked then, by definition, words are separated from each other by whitespaces only unlike in regular spoken languages where punctuation signs also separate words. For instance,if Forth rules, then this sentence contains ten words only. "F" [upper case] = toggle the Forth w[ord] box "O" [upper case "oh"] = check the Forth w[ord] box [a [1464]pScript friendly operation] Looking at the pedit ... jumper screen, you can see three columns of six buttons each and another set of three buttons under them with labels bP%, P%, and fP%. In each of the rows the button labels are very similar, except that the buttons in left column start with the letter "b" [backward], and in the right column they start with the letter "f" [forward]. In fact, typing the letter "b" once, puts you into a backward mode, whereas typing the same letter "b"again, takes you out of the backward mode and places you back to the default absolute mode. Similarly, typing the letter "f" once, puts you into a forward mode, whereas typing the same letter "f" again, takes you out of the forward mode and places you back to the default absolute mode. Another way of changing modes is by typing "b", "f", or "a" [absolute] in any order you wish. The title bar of the pedit ... jumper screen always tells you which mode you are in. NOTE. If you use your stylus to tap buttons on the screen then you don't need to be concerned about the above described backward, forward, and absolute modes. The middle column allows you to jump to various cursor positions starting from the home position, that is, from top of your memo. This is what I define as a jump in absolute mode. NOTE. The home position of your memo is always the beginning [top] of your memo and the end is the very end of it [bottom] with the exception of [1465]screenLine jumps when home and end refer to the top and bottom of the currently visible screen on your Palm. The left column allows you to jump backward to various cursor positions starting from the current position of your cursor. This is what I define as a jump in backward mode. The right column allows you to jump forward to various cursor positions starting from the current position of your cursor. This is what I define as a jump in forward mode. NOTE. If there is a text selection in your memo, then, in the context of jumping, the current cursor position depends on the direction of your jump. If you jump backward, then I define the current cursor position as the beginning of your text selection, whereas otherwise the current cursor position is defined as the end of your text selection. NOTE. As of September 25, 2000, the only exception to this rule is when you perform [1466]screenLine jumps. As soon as I figure out a meaningful implementation of [1467]screenLine jumps with text selections, I will update this rule as well. EXAMPLE. For instance, if the Repeat # field contains the number "5", and you select the bWord button, then your cursor will jump backward to the fifth word of your memo counting from the current cursor position. EXAMPLE. For instance, if the Repeat # field contains the number "5", and you select the fWord [no pun intended whatsoever] button, then your cursor will jump forward to the fifth word of your memo counting from the current cursor position. NOTE. If you are an experienced peditor, then it is self-evident to you that the [1468]ESC key version of the above two examples are ESC j 5 b w and ESC j 5 f w respectively. HOMEWORK. What should and will happen if you enter ESC j 5 w as an [1469]ESC key shortcut? NOTE. When wanting to use the [1470]ESC key mechanism, please keep in mind that there is no need for an [1471]ESC key within the pedit ... jumper dialog since there is no text field in it accepting alphabetical input [see [1472]here]. Notation. In the following discussion and tables "#" stands for the number which you entered in the Repeat # field. If the Repeat # field is empty or contains the number "0", then, depending on the function of the selected button, you may get a warning dialog reminding you to enter a number into that field. Now let us discuss the buttons themselves. The three "Character" buttons allow you to jump backward [bChar] or forward [fChar] exactly "#" characters from your current cursor position, or to jump to the "#th" character [Character] counting from the top of your current memo. ESC j NUMBER b c = jump the cursor backward by "NUMBER" characters relative to the current cursor position ESC j NUMBER c = jump the cursor forward by "NUMBER" characters counting from the top of your memo ESC j NUMBER f c = jump the cursor forward by "NUMBER" characters relative to the current cursor position The three "Word" buttons allow you to jump backward [bWord] or forward [fWord] exactly "#" words from your current cursor position, or to jump to the "#th" word [Word] counting from the top of your current memo. ESC j NUMBER b w = jump the cursor backward by "NUMBER" words relative to the current cursor position ESC j NUMBER w = jump the cursor forward by "NUMBER" words counting from the top of your memo ESC j NUMBER f w = jump the cursor forward by "NUMBER" words relative to the current cursor position NOTE. Typing the number "NUMBER" above is optional. If you leave it out then its default value "1" is used as the "NUMBER". The three "Sentence" buttons allow you to jump backward [bZent] or forward [fZent] exactly "#" sentences from your current cursor position, or to jump to the "#th" sentence [Zentence] counting from the top of your current memo. ESC j NUMBER b z = jump the cursor backward by "NUMBER" sentences relative to the current cursor position ESC j NUMBER z = jump the cursor forward by "NUMBER" sentences counting from the top of your memo ESC j NUMBER f z = jump the cursor forward by "NUMBER" sentences relative to the current cursor position NOTE. I am sure you know that "Sentence" is spelled as "Zentence" above because "z" is the activator letter. NOTE. Typing the number "NUMBER" above is optional. If you leave it out then its default value "1" is used as the "NUMBER". The three [1473]screenLine buttons are perhaps the trickiest components of my beloved pedit. NOTE. If you don't yet know what a [1474]screenLine is, please read about it [1475]here before you continue. If you are brave enough to explore, you will be amazed to find out that, in fact, these three buttons hide no less [and no more] than six buttons. Namely, each of the three is spilt into two buttons. The reason is simple. Each [1476]screenLine has two ends, namely, a left end and a right one. Since the Palm screen real-estate is at a premium, I had to do a splitter-upper job to be able to accommodate jumping to both the right and left ends of a [1477]screenLine. ESC j NUMBER b s = jump the cursor to the beginning of the [1478]screenLine which is by "NUMBER" [1479]screenLines backward relative to the current [1480]screenLine ESC j NUMBER s = jump the cursor to the beginning of [1481]screenLine number "NUMBER" relative to the top of the current screen. ESC j NUMBER f s = jump the cursor to the beginning of the [1482]screenLine which is by "NUMBER" [1483]screenLines forward relative to the current [1484]screenLine NOTE. Typing the number "NUMBER" above is optional. If you leave it out then its default value "1" is used as the "NUMBER". Identical commands allow you to jump to the "end" of [1485]screenLines except that you have to replace the lower cased "s" by the upper cased "S". Namely, ESC j NUMBER b S = jump the cursor to the end of the [1486]screenLine which is by "NUMBER" [1487]screenLines backward relative to the current [1488]screenLine ESC j NUMBER S = jump the cursor to the end of [1489]screenLine number "NUMBER" relative to the top of the current screen. ESC j NUMBER f S = jump the cursor to the end of the [1490]screenLine which is by "NUMBER" [1491]screenLines forward relative to the current [1492]screenLine NOTE. Typing the number "NUMBER" above is optional. If you leave it out then its default value "1" is used as the "NUMBER". QUESTION. How come that if the cursor is at the beginning of a [1493]screenLine and the previous [1494]screenLine does not end with a linefeed [carriage return], and I want to move to the end of the same [1495]screenLine, then I end up at the end of the previous [1496]screenLine instead of the current one? There is a similar problem if I use a repeat number "#" different from "1". ANSWER. The Palm OS does not differentiate between the beginning of a [1497]screenLine and the end of the previous [1498]screenLine if the previous [1499]screenLine does not end with a linefeed [carriage return] so that the word wrapping mechanism decided to break the visual display of the line. All peditors can verify this by turning on the [1500]stats in the title bar, and then by going to the beginning of a [1501]screenLine and entering a left arrow-character or a BACKSPACE Graffiti character. You will see that, if the previous [1502]screenLine did not end with a linefeed, then the [1503]stats remain unchanged, that is, the cursor position remained the same. SOLUTION. Move your cursor to the right, and then do the jump. The three "Line" buttons allow you to jump backward [bLine] or forward [fLine] exactly "#" [1504]lines from your current cursor position, or to jump to the "#th" line [LineFeed] counting from the top of your current memo. ESC j NUMBER bl = jump the cursor backward by "NUMBER" [1505]lines relative to the current cursor position ESC j NUMBER l = jump the cursor forward by "NUMBER" [1506]lines counting from the top of your memo ESC j NUMBER f l = jump the cursor forward by "NUMBER" [1507]lines relative to the current cursor position NOTE. Typing the number "NUMBER" above is optional. If you leave it out then its default value "1" is used as the "NUMBER". NOTE. Please do not forget that [1508]lines and [1509]screenLines are not the same animals. The three "Paragraph" buttons allow you to jump backward [bPar] or forward [fPar] exactly "#" paragraphs in your memo starting from your current cursor position, or to jump to the "#th" paragraph in your memo [Paragraph] counting from the top of your current memo. NOTE. Please do not forget to check what [1510]paragraphs really are. NOTE. If the repeat number "#" is equal to "0" and you jump backward [bPar], then you will end up at the beginning of the current paragraph. Similarly, if the repeat number "#" is equal to "0" and you jump forward [fPar], then you will end up at the end of the current paragraph. NOTE. If the repeat number "#" is equal to "0" and you are not inside a paragraph, then jumping backward [bPar] or forward [fPar] is not allowed. NOTE. If the repeat number "#" is positive and you jump backward [bPar], then you will end up at the end of the chosen paragraph. Similarly, if the repeat number "#" is positive and you jump forward [fPar] or you are in the absolute mode [Paragraph], then you will end up at the beginning of the chosen paragraph. ESC j NUMBER b p = jump the cursor backward by "NUMBER" [1511]paragraphs relative to the current cursor position ESC j NUMBER p = jump the cursor forward by "NUMBER" [1512]paragraphs counting from the top of your memo ESC j NUMBER f p = jump the cursor forward by "NUMBER" [1513]paragraphs relative to the current cursor position NOTE. Typing the number "NUMBER" above is optional. If you leave it out then its default value "1" is used as the "NUMBER". The three "Percent" buttons allow you to jump backward [b%] or forward [f%] exactly "#" percent of the total number of characters in your memo starting from your current cursor position, or to jump to the "#th" percent of the total number of characters in your memo [%] counting from the top of your current memo. ESC j NUMBER b % = jump the cursor backward by "NUMBER" percent relative to the current cursor position ESC j NUMBER % = jump the cursor forward by "NUMBER" percent counting from the top of your memo ESC j NUMBER f % = jump the cursor forward by "NUMBER" percent relative to the current cursor position The Home and End buttons ["ESC j h" and "ESC j e"] move the cursor to the top and the bottom of your current memo, respectively. The .Cncl [.Cancel] button ["ESC j ." - but why] aborts the jumper operation and takes you back to [1514]EditView. The Gursor [Cursor] button ["ESC j g"] makes you jump directly to the current location of the cursor. This is especially useful when you visited another part of your [huge] memo, and you wish to get back to your current editing position. The TopLeft button ["ESC j t"] jumps the cursor to the top left corner of the currently visible screen. The Marker button ["ESC j m"] jumps the cursor to the marker location [see the [1515]Set Marker command in [1516]EditView's [1517]Navigate menu]. In this case the marker will move to the current cursor, and the cursor moves to the original location of the marker. In other words, the marker and the cursor exchange their coordinates. NOTE. When jumping, the cursor always ends up where one jumps to. This is in contrast to the [1518]Visit Top and [1519]Visit Bottom commands in [1520]EditView's [1521]Navigate menu which only visit the corresponding locations without actually moving the cursor there. NOTE. Here are three convenient shortcuts [a la emacs] which can be used directly from [1522]EditView. ESC A = jump the cursor to the beginning of the current [1523]screenLine ESC E = jump the cursor to the end of the current [1524]screenLine ESC { = jump the cursor to the top of the currently visible screen NOTE. Whenever it is feasible, the jumper functions work in context in the sense that the cursor shows up in the middle of the text field. NOTE. Please keep in mind that the enumeration starts with "1". Hence, for instance, if you wish to jump the cursor to the beginning of the second line on the currently visible screen then you need to enter "2" into the Repeat # field. The corresponding keyboard command is "ESC j2bs". NOTE. All the jumper commands are sticky in the sense that the last jumper command can be repeated by simply either doing a [1525]buttonShifted "[1526]J" job in [1527]EditView's [1528]buttonPanel, or by entering "ESC J" [upper case "J"]. Of course, once you quit your memo or [1529]magiPad, the last jump becomes history. NOTE. If you are in the [1530]expertMode, then the pedit ... jumper dialog will not show up at all, although you can enter your commands as usual, including the "repeat" number which may have no more than five digits. On the other hand, if you are in the [1531]advancedMode, then an abbreviated version of the pedit ... jumper dialog appears in place of the original one which works exactly the same way as the full dialog. If you are in the [1532]globalMacroMode, then the pedit ... jumper dialog remains invisible. Enjoy... The original version of "Jump to..." As of September 11, 2000, this has been replaced by the brand new [1533]Jump to command in [1534]EditView's [1535]Navigate menu. I kept the old version of "Jump to..." in this manual for two reason. First, there are many peditors who are somewhat slow in upgrading their pedits. Second, this gives a chance to see pedit in progress. This command needs no explanation, except that the myriad fields can be rotated by entering SPACE or TAB, and, in addition, a la Windows style, they can also be accessed directly by entering the underlined letters. Jumper When jumping, the cursor always ends up where one jumps to. This is in contrast to the [1536]Visit Top and [1537]Visit Bottom commands in [1538]EditView's [1539]Navigate menu which only visit the corresponding locations without actually moving the cursor there. NOTE. A handy shortcut is "ESC {" which places the cursor to the top of the currently visible screen. The cursor button makes you jump directly to the current location of the cursor. This is especially useful when you visited another part of your [huge] memo, and you wish to get back to your current editing position. Visit Bottom This command allows you to examine the end of your memo. The location of the cursor remains unchanged. If you want to move your cursor as well, then please use the [1540]Jump to command in [1541]EditView's [1542]Navigate menu. Find This command is the same as the "[1543]F" button in [1544]EditView's [1545]buttonPanel. Please go to [1546]here for more details. NOTE. This command has [1547]expert && advanced modes. Find More This command is the same as the "[1548]G" button in [1549]EditView's [1550]buttonPanel. Please go to [1551]here for more details. Set Marker Use this command to set the marker at the current cursor position. If you have some text selected while you use this command then the marker is set to the beginning of your selected text. Once a marker is set, you can always jump back to it from an arbitrary location via a tap on the "[1552]J" button in [1553]EditView's [1554]buttonPanel, and then selecting the [1555]Marker button, or simply by entering "ESC jm". In this case the marker will move to the current cursor, and the cursor moves to the original location of the marker. In other words, the marker and the cursor exchange their coordinates. Once a marker is set, you can always select text from the marker by tapping the "[1556]S" button in [1557]EditView's [1558]buttonPanel, and then selecting the [1559]Marker button, or simply by entering "ESC sm". Please see [1560]here in the description of the [1561]Select command in [1562]EditView's [1563]Opt[ions] menu for more details about selecting text from the marker. NOTE. If the size of text of your memo which is located in front of the marker or the character sitting at the marker change, then the marker is deselected automatically, and, therefore, it becomes history. NOTE. If you are in the [1564]normalMode, then pedit will occasionally give you some visual feedback regarding the marker situation. Visit Marker If you have already [1565]set the marker, then use this command to visit it. It takes you to the marker, blinks it for a couple of fractions of a second, and then takes you back to your current cursor location. NOTE. This command is different from jumping to the marker [see the [1566]Set Marker command in [1567]EditView's [1568]Navigate menu]. "OK" button If you are in [1569]EditView [but not in [1570]magiPad] then it takes you to [1571]ListView. If you are in [1572]magiPad then it takes you to [1573]EditView. This command is especially handy when [1574]EditView's [1575]buttonPanel was removed via the [1576]Buttons on|off command in [1577]EditView's [1578]Opt[ions] menu. For you convenience, if you are in [1579]EditView, then "ESC ENTER" also activates this command. In addition, if your current memo is empty, then "ESC ." [period] takes you to [1580]ListView as well. ".C" button This command allows you to quit [1581]magiPad and [1582]scriptPads, and to return to [1583]EditView without saving the contents of magiPad. This command is the same as the "[1584].C" button in [1585]EditView's [1586]buttonPanel which is not always visible. This command is especially handy when [1587]EditView's [1588]buttonPanel was removed via the [1589]Buttons on|off command in [1590]EditView's [1591]Opt[ions] menu. EditView's Pad Menu magiPad in|out This command is the same as the "[1592]M" button in [1593]EditView's [1594]buttonPanel, and it is described in details where [1595]magiPad is discussed. When you are in [1596]magiPad, then this command acts like the "[1597]OK" button in [1598]EditView's [1599]Navigate menu. scriptPad in|out This command is described [1600]here. When you are in [1601]scriptPad, then this command acts like the "[1602]OK" button in [1603]EditView's [1604]Navigate menu. The [1605]upButtonSlided "[1606]M" button in [1607]EditView's [1608]buttonPanel is closely related to this command. magiPad Switcher This command allows you to switch between [1609]magiPads. This command is the same as the "[1610]^" button in [1611]EditView's [1612]buttonPanel. If you are in [1613]magiPad, then this command is the same as the [1614]upButtonSlided [1615]Qopy'n'Paste button in [1616]EditView's [1617]buttonPanel. scriptPad Switcher This command allows you to switch between [1618]scriptPads. This command is the same as the [1619]upButtonSlided "[1620]^" button in [1621]EditView's [1622]buttonPanel. If you are in [1623]scriptPad, then this command is the same as the [1624]upButtonSlided [1625]Qopy'n'Paste button in [1626]EditView's [1627]buttonPanel. This button is under construction... Previous Pad This command allows you to jump quickly back and forth between the current pad and the last pad of the same type you visited before the current one. This command is not operational in the memo editing mode of [1628]EditView. Enable/Disable Pad Stats This command allows to enable and disable the [1629]stats in [1630]magiPad and [1631]scriptPad. As long as you have enabled the stats, the stats can be toggled via the [1632]Stats on|off command in [1633]EditView's [1634]Opt[ions] menu, or, even better, by tapping in the left 1/8th of the title bar [to the left from the small pixel visible just under the title bar]. Please see [1635]here for the details. NOTE. Each [1636]magiPad and each [1637]scriptPad has its own stats preferences. This command is not operational in the memo editing mode of [1638]EditView. Name of Current Pad This command announces the full name of the current pad which might be longer than what you see in the titlebar. If you are in [1639]magiPad or [1640]scriptPad, then this command is the same as the [1641]rightButtonSlided [1642]Qopy'n'Paste button in [1643]EditView's [1644]buttonPanel. This command is not operational in the memo editing mode of [1645]EditView. Rename Current Pad This command allows you to rename the current pad. This command is not operational in the memo editing mode of [1646]EditView. Qopy'n'Paste Selects on|off This command allows you to control whether the [1647]Qopy'n'Paste command will also select the pasted text in your memo or else it will just place the cursor after the pasted text. EditView's buttonPanel EditViewButtons The "U" Button This command is the same as the [1648]Undo command in [1649]EditView's [1650]Edit menu. The upButtonSlided "U" Button This command is the same as the [1651]Insert Char command in [1652]EditView's [1653]Edit+ menu. Just like the [1654]downButtonSlided "[1655]U" button, it allows to insert an arbitrary ASCII character into your text at the current cursor location [or replace the current text selection]. Please see [1656]here for more details. The downButtonSlided "U" Button This command is the same as the [1657]ASCII Table command in [1658]EditView's [1659]Edit+ menu. Just like the [1660]upButtonSlided "[1661]U" button, it allows to insert an arbitrary ASCII character into your text at the current cursor location [or replace the current text selection]. Please see [1662]here for more details. The "X" Button This command is the same as the [1663]Cut command in [1664]EditView's [1665]Edit menu. The upButtonSlided, downButtonSlided, and leftButtonSlided "X" Button [1666]upButtonSliding this button or entering "ESC X" [upper case "X"] pops up the [1667]text mover dialog which allows you to move blocks of text around your memo. Please see [1668]here for more details. This command is the same as the [1669]Move command in [1670]EditView's [1671]Edit menu. NOTE. This command has [1672]expert && advanced modes. [1673]downButtonSliding this button or entering "ESC Y" [upper case "Y"] pops up the [1674]text sorter dialog which allows you to sort blocks of text in your memo. Please see [1675]here for more details. This command is the same as the [1676]Sort command in [1677]EditView's [1678]Edit menu. [1679]leftButtonSliding this button is the same as the [1680]Restore Memo command in [1681]EditView's [1682]Record #1 menu. The "C" Button This command is the same as the [1683]Copy command in [1684]EditView's [1685]Edit menu. The directionally buttonSlided "C" Button This button can be [1686]leftButtonSlided, [1687]rightButtonSlided, and [1688]upButtonSlided resulting in three different but closely related commands which allow you to move characters around your memo. Please see [1689]here in the section about [1690]moving text for more details. The "P" Button This command is the same as the [1691]Paste command in [1692]EditView's [1693]Edit menu. The buttonShifted "P" Button If you have [1694]Stand Alone's [1695]Clipper installed, then a [1696]buttonShifted tap on the "[1697]P" button sends Clipper into action. NOTE. If Clipper is installed then the "[1698]P" button is displayed in bold to remind you that Clipper is at your disposal. I am pretty sure that fans of Silkyboard will like that Clipper and Silkyboard can co-exist inside pedit. If you use Silkyboard, then please un-check the Enable Clipper Menu in Clipper. By the way, normally you paste with "[1699]P" which also gets invoked by "ESC p", so that it should be easy to remember "ESC P" which is yet another way of activating Clipper. NOTE. A word of caution. Some peditors reported a few sporadic and unreproducible crashes when Clipper was installed. The directionally buttonSlided "P" Button This button can be [1700]leftButtonSlided, [1701]rightButtonSlided, and [1702]upButtonSlided resulting in three different but closely related commands which allow you to move [1703]paragraphs around your memo. Please see [1704]here in the section about [1705]moving text for more details. The "S" Button This command is the same as the [1706]Select command in [1707]EditView's [1708]Edit menu. NOTE. This command has [1709]expert && advanced modes. The buttonShifted "S" [aka "s"] Button This command is explained where the [1710]Set Marker command in [1711]EditView's [1712]Navigate menu is discussed. The directionally buttonSlided "S" Button This button can be [1713]leftButtonSlided, [1714]rightButtonSlided, and [1715]upButtonSlided resulting in three different but closely related commands which allow you to move sentences around your memo. Please see [1716]here in the section about [1717]moving text for more details. The "J" Button This command is the same as the [1718]Jump to command in [1719]EditView's [1720]Navigate menu. NOTE. This command has [1721]expert && advanced modes. The buttonShifted "J" [aka "j"] Button This command repeats the last jump. It is explained [1722]here, where the [1723]Jump to command in [1724]EditView's [1725]Navigate menu is discussed. The "F" Button This command is the same as the [1726]Find command in [1727]EditView's [1728]Navigate menu. Please go to [1729]here for more details. NOTE. This command has [1730]expert && advanced modes. The "G" Button This command is the same as the [1731]Find More command in [1732]EditView's [1733]Navigate menu. Please go to [1734]here for more details. The buttonSlided "G" Button The [1735]upButtonSlided "G" button toggles the [1736]All Segs variable. The [1737]downButtonSlided "G" button toggles the [1738]RegEx variable. The "Q" Button I use this command for testing, debugging, and other goodies. Programmers will find it useful too. Among others, it tells you all the characteristics of the first character which is either in a selected text or is right after the cursor. You can also find out the serial number of your Palm if it exists, information about the [1739]sister segments of your memo, and so forth. Amazingly, not all Palms have a serial number. Some clones do not have one. I wonder why. The upButtonSlided and downButtonSlided "Q" Button [1740]upButtonSliding this button brings up the [1741]customizable pScriptButtons form. On the other hand, [1742]downButtonSliding this button is the same as the [1743]Script Memo command in [1744]EditView's [1745]Record #1 menu. Please see the section about [1746]pScripting pedit for details on this command. The "H" Button "H" stands for Help which is mostly context sensitive. This command is the same as the [1747]Help command in [1748]EditView's [1749]Edit menu. Please note that [1750]EditView's [1751]instantHelp, that is, the "[1752]?" button is related to the H button. The upButtonSlided "H" Button This command is the same as the [1753]Encrypt/Decrypt Memo command in [1754]EditView's [1755]Record #2 menu. The "OK" Button This command is the same as the [1756]"OK" button command in [1757]EditView's [1758]Navigate menu. It allows you to quit [1759]EditView and to go to [1760]ListView. The upButtonSlided "OK" Button This command is the same as the [1761]Go to Memo menu command in [1762]EditView's [1763]Record #1 Menu. The "D" Button If you are in the regular [1764]EditView and not in [1765]magiPad, then this command serves three functions. First, this command allows you to change the category of your current memo [see [1766]EditView's [1767]Category Changer]. Second, it allows you to privatize your current memo Please see the [1768]Privatize Memo command in [1769]ListView's [1770]Record menu for further details. Third, it allows you to delete your current memo. Please see the [1771]Delete Memo command in [1772]ListView's [1773]Record menu for further details. If you are in [1774]magiPad, then this button is either non-functional or it allows you the exit without saving its contents. In the latter case, it is labeled as ".C" [cancel], and can be invoked via "ESC ." [period]. The upButtonSlided "D" Button This command is the same as the [1775]Delete Memo command in [1776]EditView's [1777]Record #1 menu. The "WC" Button NOTE. If your memo is [1778]segmented then this command provides information about the entire memo, including its [1779]sister segments. This command pops up the word count dialog and it requires almost no explanation except for the definition of what characters, words, and lines are. Word Count The definition of characters is obvious except that it also includes carriage returns which are called linefeeds in the Palm universe. For the technically inclined, chrLineFeed = ^J = 10 = 012 = 0x0A. The definition of words is also more or less obvious, except that the total of the words up to the cursor or selection PLUS the selected words PLUS the words from the cursor or selection may add up to more than the total number of words since the cursor or selection may split words. For word counting purposes, a word is defined as a group of characters not containing word separators. The latter are the space character, the horizontal and vertical tabs, the linefeed, the formfeed, and the carriage return characters. In other words, words are defined as [1780]Forth words. The reason for this choice is that word counting is a time consuming procedure, especially on huge memos such as [1781]Les Miserables, and, therefore, I decided to go the fastest way. Incidentally, [1782]Les Miserables, happens to contain not a single "specifically" [1783]Forth style word. EXAMPLE. pedit;memo is one word even if you suspect that there is a typo and you meant pedit; memo which is two words. The definition of lines is also obvious except that it is somewhat different from the common sense definition, since it only counts linefeeds [carriage returns]. Hence, for instance, a line may be counted as zero lines if it does not end with a linefeed. More precisely, using the REGEXP terminolgy, a line is defined as "^.*$". It is a common misconception among inexperienced Palm users that a line is what you see as a line on your Palm's screen. Please keep in mind that what you think is a line is, in fact, only a "virtual" line which depends on factors such as what font is used to display your memo and how wide the text field is. We call such objects [1784]screenLines. It may be better, although not entirely correct, if you think of a line as a paragraph. In the "virtual" sense this is closer to the truth than the above described [1785]screenLines. The above seem to be in accordance with the generally accepted rules such as the ones used by unix wc (GNU or not). As opposed to [1786]lines, I define screenLines as the "virtual" lines which are displayed across the screen of your Palm handheld device. NOTE. In a very real sense of the word, screenLines are nothing but a figment of your and your Palm's imagination. Therefore, in many respects they may behave in somewhat unexpected ways. Please don't blame your Palm or pedit for this. Take, for instance, your [but definitely not my] beloved MS Word, and play around with it by cutting and pasting various screenLines. You will see that once you move a screenLine, it may no longer remain a screenLine. This is natural, since screenLines are determined by the word wrapping mechanism, and they are not hard coded into your document. Since I talked about [1787]lines and [1788]screenLines, this is the right place to define [1789]paragraphs as well. First I need to define whiteLines. A whiteLine is a [1790]line consisting of space, horizontal tab, and vertical tab characters only. More precisely, using the REGEXP terminolgy, a whiteLine is defined as "^[\space\htab\vtab]*$". As opposed to [1791]lines, I define paragraphs as collection of lines which does not contain whiteLines and which start either at the beginning of your memo or after a whiteLine, and which ends either at the end of your memo or before a whiteLine. NOTE. If your memo is [1792]segmented, then the character, word, and line count excludes the [1793]segment headers. NOTE. If your memo has more than 1 million words and/or lines [carriage returns], then the information displayed is incorrect even though the count is accurate. If you ever create a memo with so many words and/or lines, please contact [1794]me, and then I will fix the display. NOTE. If your memo is [1795]segmented, then you can always interrupt the count by tapping anywhere either on the screen, or the Graffiti input area of your Palm, or by typing ".", or by using the page up/down or 5-way up/down keys. WARNING. If your pedit is at least of version 5.72, then you may skip reading this warning. However, if your pedit is older than 5.72, and if your Palm goes into self-induced sleep while you are in the midst of a count operation, then it also interrupts the count so that the displayed statistics will be incorrect. As a result of this behavior, if you are counting very long memos such as the [1796]Les Miserables which, incidentally, consists of 3,263,756 characters, 567,643 words, and 70761 lines, then you may need to extend the "auto-power-off" time of your Palm by installing [1797]LapTopHack. By the way, it took about 2 minutes and 47 seconds on my TRGPro with OS 3.5.1 to do the above counting job. If you have a Palm with an "exotic" language such as Chinese or Russian, then the same counting may last up to three times longer. UPDATE. On September 10, 2001, due to a number of optimizations in pedit 5.72, the same counting job on the same TRGPro with the same OS took only 1 minute and 58 seconds. UPDATE. On September 25, 2003, my Tungsten C did the same counting job in 15 seconds. Wow! I hope that you will like the myriad pieces of information it yields. This button was named in honor of the venerable unix command wc. The buttonShifted "WC" [aka "wc"] Button This button is the same as the "[1798]WC" button, except that it generates information on the currently displayed memo only whether or not it is [1799]segmented. If your memo is [1800]segmented, then, unlike the "[1801]WC" command, it does not exclude the [1802]segment header from the count. NOTE. There is no "[1803]ESC" key equivalent for this command. The directionally buttonSlided "WC" Button This button can be [1804]leftButtonSlided, [1805]rightButtonSlided, and [1806]upButtonSlided resulting in three different but closely related commands which allow you to move [1807]words around your memo. Please see [1808]here in the section about [1809]moving text for more details. The "R" Button With this command [1810]EditView's ruler can be toggled on and off. QUESTION. What is the ruler? ANSWER. The ruler is what 99% of the non-experts would call underline. It looks like underline, it smells like underline, but it ain't no underline! If you think about, you realize that nothing is underlined. The ruler simply gives a visual reference where the lines are separated from each other. The ruler state is preserved until it is changed again. Try it. I prefer no underline [oops, I meant ruler] whatsoever but please feel free to make your own choice. Please note that [1811]magiPad has its own ruler settings independently of [1812]EditView. pedit and ClearHack are 99% compatible [after yours truly spent days to figure out how to do it]. The reason that I say 99% and not 100% is that a HackMaster extension is a HackMaster extension, and, no matter what, there can be no guarantees that a HackMaster extension will work under all circumstances whatsoever, especially since operating systems keep changing and many HackMaster extensions fall behind in their maintenance schedules as their authors' priorities change. This should be understood as a general statement and not as a claim specifically about ClearHack. The "L" Button This command changes the case of the selected text to lower case. If there is no text selected, then the case of the character right after the current cursor position is changed to lower case. The buttonShifted "L" [aka "["] Button This command is the same as the [1813]Shift Left command in [1814]EditView's [1815]Edit+ menu. The directionally buttonSlided "L" Button This button can be [1816]leftButtonSlided, [1817]rightButtonSlided, and [1818]upButtonSlided resulting in three different but closely related commands which allow you to move [1819]lines around your memo. Please see [1820]here in the section about [1821]moving text for more details. The "T" Button This command changes the case of the selected text to title case. Of course, the process of Title Casing is subject to heated debate, and not even the greatest minds amongst us seem to agree what constitutes a properly title-cased expression. For instance, how should Select'n'Search be title-cased? As a time saving shortcut, if there is no text selected, then "T" upper-cases the first letter of the word surrounding the current cursor. The buttonShifted "T" [aka "[]"] Button This command is the same as the [1822]Block Shift command in [1823]EditView's [1824]Edit+ menu [see also the [1825]Shift Left and [1826]Shift Right commands there]. The directionally buttonSlided "T" Button This button can be [1827]upButtonSlided and [1828]downButtonSlided resulting in two different actions. If [1829]upButtonSliding, then it does the opposite of the "[1830]T" button, that is, it deTitle Cases the current text selection or the word surrounding the current cursor. The "K" Button This command changes the case of the selected text to upper case. If there is no text selected, then the case of the character right after the current cursor position is changed to upper case. Just think of this command as capitalization, that is KAPITALIZATION. The buttonShifted "K" [aka "]"] Button This command is the same as the [1831]Shift Right command in [1832]EditView's [1833]Edit+ menu. The directionally buttonSlided "K" Button This button can be [1834]leftButtonSlided, [1835]rightButtonSlided, and [1836]upButtonSlided resulting in three different but closely related commands which allow you to move [1837]screenLines around your memo. Please see [1838]here in the section about [1839]moving text for more details. The "?" Button This command brings up [1840]instantHelp. Please note that [1841]EditView's [1842]H button is related to the ? button. The "M" Button This is described in details where [1843]magiPad is discussed. The upButtonSlided "M" Button This command is described [1844]here. This command is related to the [1845]scriptPad in|out command in [1846]EditView's [1847]Pad menu. The "^" Button This is the [1848]magiPad switcher button. This button is the same as the [1849]magiPad Switcher command in [1850]EditView's [1851]Pad menu. The upButtonSlided "^" Button This is the [1852]scriptPad switcher button. This button is the same as the [1853]scriptPad Switcher command in [1854]EditView's [1855]Pad menu. The "N" Button This button is the same as [1856]ListView's [1857]myNotes button. NOTE. Even if you are in myNotes already, it makes sense to use this button repeatedly since it keeps creating new entries in it. The "}" Button This command is the quickSwitcher which is a complement to the [1858]Memo Switcher [">"] button in [1859]EditView's [1860]buttonPanel. This command takes you instantaneously back to your most recently visited memo. The quickSwitcher can also be activated by "ESC }". NOTE. If you are in MagiPad or scriptPad, then "ESC }" takes you to the most recently visited pad of the same type. The ">" Button This button is the same as the [1861]Recent command in [1862]ListView's [1863]Navigate menu. This command activates the Memo Switcher which allows you to jump back to a large number of previously visited memos. The Memo Switcher can also be activated by "ESC 0" [zero] or by "ESC >" from [1864]EditView and by "ESC r" [lower case "r"] or by "ESC >" from [1865]ListView. The Memo Switcher restores the state of your previous visits such as cursor position, text selection, scroll position, and so forth. pedit keeps track of the last 25 memos you have visited since you last [1866]cleared pedit's history. This command takes you to [1867]magiPad where all your recently visited files are listed in reverse chronological order. The Memo Switcher Tapping on any of the memo titles, pedit transfers you to the selected memo instantaneously. HINT. Use the "[1868]F" button in [1869]EditView's [1870]buttonPanel to locate your memo and then enter a carriage return [the return key on your keyboard]. It's a no-brainer. NOTE. The Memo Switcher is inactive if you are in [the genuine] magiPad, or if you have not yet visited another memo prior to entering the current memo. WARNING. If you edited any of your memos with a program other than this particular pedit, whether on the Palm or on the DeskTop, it may be a good idea to clear both the history of recently visited memos and pedit's preferences. For further details, please see the [1871]Clear History and [1872]Clear Preferences commands in [1873]ListView's [1874]Options menu. NOTE. In peditPro the Memo Switcher can toggle between p04 and p32 memos by tapping in the left 1/8th of the title bar [to the left from the small pixel visible just under the title bar]. This feature works only if the escape character is box is checked in the [1875]General Preference Panel. The buttonShifted ">" [aka "$"] Button The [1876]buttonShifted "[1877]>" button activates the segmentSwitcher which allows you to survey all the [1878]sister segments of your current memo, and to jump to either of them. The segmentSwitcher can also be activated by "ESC $". This command takes you to [1879]magiPad where all [1880]sister segments of your current memo are listed. The segmentSwitcher The first line tells you the total size of your combined segments. This number does not include the size of the individual header files. The number in front of the title tells you the segment index of the memo segment. An exclamation mark "!" instead of a colon ":" after the segment index and the sign "<=" at the end of one of the line refers to your current memo. A number at the end of a line indicates that that segment was already visited, and the number itself tells you how recently it was visited, where "01" refers the most recently visited segment. Tapping on any of the segment titles transfers you to the selected segment instantaneously. HINT. Use the "[1881]F" button in [1882]EditView's [1883]buttonPanel to locate your memo and then enter a carriage return [the return key on your keyboard]. It's a no-brainer. NOTE. The segmentSwitcher is inactive if you are in [the genuine] magiPad, or if your current memo is not [1884]segmented. Please see [1885]Segmented Memos for further details. The "»" or ">>" Button This command activates the Launcher which allows you to jump fast to "pedit friendly" applications. Such applications include but are not limited to Arranger, Clipper, HackMaster, HotPaw Basic, LispMe, Magic Text, Memo Pad, Memo PLUS, NoteTaker!, OnBoardC, pedit, pedit32, PocketC, Quartus, RsrcEdit, Safe, Secure Memo Pad, and StartFavorites. This command takes you to [1886]magiPad where all "pedit friendly" applications are listed. Tapping on any of the application names, pedit transfers you to the selected application instantaneously. HINT. Use the "[1887]F" button in [1888]EditView's [1889]buttonPanel to locate your application and then enter a carriage return [the return key on your keyboard]. It's a no-brainer. I point out that if I define an application as "pedit friendly", it does not necessarily imply that the developers of that particular application have displayed a friendly attitude towards pedit. Although in the great majority of cases Palm application developers were cooperative and helpful, there were a few instances when I received a cold shoulder while trying to clarify some issues. I consider an application "pedit friendly", if it has anything to do with text editing or with programming on the Palm, and if peditors requested that it be added to the list. I hope that the developers of the above mentioned applications will return the favor by providing a similar feature in their products. The Launcher can also be activated by "ESC 1". The buttonShifted "»" or ">>" [aka "«" or "<<"] Button If you have [1890]pToolSet's pLaunchTool (and pLaunchEngine1) installed, then a [1891]buttonShifted tap on the "[1892]»" button pops it up. How does one know if pLaunchTool is installed? It's elementary, my dear peditor, and probably you have already guessed it: "[1893]»" is displayed in bold. Otherwise, that is, if "[1894]»" is not displayed in bold, then a [1895]buttonShifted tap on the "[1896]»" button activates the quickLauncher. The quickLauncher takes you to your most recently visited pedit friendly application [if there is such an application already]. pLaunchTool can also be invoked by "ESC 2". The quickLauncher can also be invoked by "ESC 3". Another way of activating quickLauncher really fast is by tapping the upper left corner of the title bar in [1897]EditView [a 5*5 pixel area]. The ".C" Button This command is the same as the [1898]".C" button command in [1899]EditView's [1900]Navigate menu. It allows you to quit [1901]magiPad and [1902]scriptPads, and to return to [1903]EditView without saving the contents of magiPad. NOTE. You can only see this button if you are not set to save the contents of magiPad [please see [1904]magiPad for more details]. The "Qopy'n'Paste" Button This command is described in details where [1905]magiPad is discussed. The upButtonSlided "Qopy'n'Paste" Button If you are in [1906]magiPad, then this command is the same as the [1907]magiPad Switcher command in [1908]EditView's [1909]Pad menu. If you are in [1910]scriptPad, then this command is the same as the [1911]scriptPad Switcher command in [1912]EditView's [1913]Pad menu. The rightButtonSlided "Qopy'n'Paste" Button This command is the same as the [1914]Name of Current Pad command in [1915]EditView's [1916]Pad menu. EditView's Category Changer This command allows you to change the category of your current memo. In addition, you can also edit [add, rename, and delete] the names of your categories. pedit Memos and Text Files on the DeskTop (for "newbies") By the time you get to this section, there is an excellent chance that you will know of several ways of moving your pedit memos to your DeskTop computer and vice versa [see, for instance [1917]here and [1918]here]. Nevertheless, I have the example of at least one aspiring peditor who could not figure it out from the manual, and, therefore, he put together a cookbook style approach to the task. The rest of this section is based on Doug Boulter's and Frank Hellwig's advice. I am sure that many "newbies" will be grateful to them. If you want to move your pedit memo to the DeskTop and the explanation [1919]here was insufficient, then please follow these steps. Step #1. Open your memo in your pedit in [1920]EditView Open the pull down [1921]Record #1 menu. Select the [1922]Export Memo command. A shortcut for the latter is either using "ESC e" or the Palm command stroke and "e". Step #2. Make sure the second line from the top in the pedit export... dialog says Export from pedit[32] to doc. Export to doc If it says Export from pedit32 to pedit or Export from pedit to pedit32 , Export to pedit tap the doc push button in the lower right corner to get the correct screen. NOTE. pedit remembers the previous state of this screen. Thus, if you do not ever export to the [1923]sister pedit, you will never see that option screen again unless you select it. Step #3. If you want to delete your memo after you export it, check the delete memos after exporting box. Enter the name you want the [1924]DOC file to have. You do not need to give it a ".pdb" extension. For example, this file could be called "00test". NOTE. For your convenience, pedit is smart enough to pick a proposed [1925]DOC file name. If you have a current text selection in your memo then it is used as the basis of a proposed name. Step #4. Once you have done all this, tap the export memo + all its segments button. Step #5. Do a HotSync job between your Palm and the DeskTop. On the DeskTop, look in the backup folder under your user name. You will see the file 00test.pdb. NOTE. On the Macintosh, this backup folder is called "Backup", in Windows it may be at "C:\Palm\USER\Backup" where "USER" is your user name, and under unix or linux it is probably "~/???" [but who cares anyway, since, if you use unix or linux, then you will never need to read this "newbie" tutorial in the first place]. Step #6. Use your "doc <=> text" converter (not included with pedit) to convert this [1926]DOC file to an ASCII text file. You may then word process it to your heart's delight. NOTE. Doug's favorite "doc <=> text" converter is [1927]DocInOut. I use [1928]MakeDoc. Please see [1929]here for more suggestions. If you happen to have WordSmith on your Palm Powered handheld, then, as Frank Hellwig kindly pointed it out, there is an even easier way of exporting pedit memos directly to Microsoft Word. Step #1. Open up your memo in pedit and select the [1930]Export Memo command from the [1931]Record #1 menu. Step #2. Tap the doc push button in the lower right corner. Enter the the [1932]DOC file name. For example, you could call it "01test". Then click the export memo + all its segments button. Step #3. Start up WordSmith, open up your exported memo, open the Details dialog, and check the "Sync" box. Step #4. Do a HotSync job between your Palm and the DeskTop. Step #5. Start Microsoft Word on your DeskTop and select the "Open..." command from the "WordSmith" menu [this menu was added by the WordSmith installer]. NOTE. After Steps #2 or #3, you can also use WordSmith to spell check the document and/or to add rich text formatting. NOTE. This process (i) does not require any manipulation or copying of files at the filesystem level, that is, using Windows Explorer or invoking DeskTop filters, and (ii) it uses pedit for its strength at editing files and WordSmith for its seamless Microsoft Word integration. If you want to move a text file from the DeskTop to pedit and the explanation [1933]here was insufficient, then please follow these steps. Step #1. Using your "doc <=> text" converter, convert your ASCII text file to a Palm [1934]DOC file with a ".pdb" extension. Make sure that you remember the name of your .pdb file. Step #2a. If you are a Windows user then from the DeskTop, select this ".pdb" file for installation. Click the install button, then click the add button to select the file. When you have added all the ".pdb" files you want, click "Done". If you are using DocInOut, you can skip this step by clicking the box that says "Install After" which will then perform this step automatically. Step #2b. If you are a Macintosh, unix, or linux user then simply follow the usual Palm rules of installing ".pdb" files. I have not yet met a Macintosh, unix, or linux user who did not know how to do this. If you are one of those, then please let me know, and then I will provide detailed instructions. Step #3. Perform a HotSync job. This will load the .pdb file to your Palm handheld. Step #4. Open your pedit. Go to [1935]ListView. ListView A trick here is to choose the correct memo category (located in the upper right corner of the screen) into which you want the freshly loaded [1936]DOC file to go. That saves you the step of categorizing the new memo which you are about to import. Tap the Docs button in [1937]ListView's [1938]buttonPanel. A shortcut for the latter is either using "ESC d", "ESC i", or the Palm command stroke and "i". This tap takes you to [1939]magiPad and presents you with a list of [1940]DOC files which you can import to pedit. Step #5. Tap the file you want to import from the list that comes up in [1941]magiPad. If the [1942]DOC file is writable, that is, it is not in the flash ROM, then decide whether you want to delete it after you have imported it to pedit. If yes, then check the delete doc file after importing box. Decide whether you want no [1943]segmenting if the doc file fits one memo. If yes, then check the no segmenting if fits one memo box. Then tap import this doc file button. Step #6. Now your [1944]DOC file has been transformed to a memo, and you can put it in a memo category and/or [p]edit it to your heart's delight. NOTE. Please read about [1945]segmented memos in general, and about [1946]segment headers in particular, if you are curious about those odd lines A Segmented Memo which appear at the beginning of your memo. If your memo consists of one single segment, then you can delete the segment header if you don't want it with no ill effects in pedit except that subsequent exportation back to [1947]DOC files will be much simpler if you leave it alone. pScripting pedit, pToolSet, and LapTopHack (for soon-to-be "experts") As of April 12, 2001, I started a new project which [eventually] will make most pedit operations fully pScriptable [scriptable]. As of May 21, 2001, [1948]LapTopHack joined the club and it started to share pedit's pScriptability. Subsequently, [1949]pToolSet became pScriptable as well. In case you have not fully understood the implications of this historic event, and since I am so proud of this, let me say it clear and loud... As of May 21, 2001, all your Palm handheld devices became pScriptable. NOTE. The word "pScript" and its variants are always spelled with lower case "p" and upper case "S". Here "p" stands for "palm" and not "paul" as some of you may mistakenly believe. NOTE. If you are a LapTopHacker, then please forgive me that LapTopHack's [1950]manual will refer you here instead of giving a full blown description of all the delicate and intricate details. Since pScripting pedit and LapTopHack are essentially the same, this even seems natural to do. I will try to point out carefully all differences between the two. The same goes for pToolSet. NOTE. [1951]peditLight is not pScriptable. NOTE. pScripting requires at least Palm OS 3.1. NOTE. pScripting LapTopHack requires that you have a pScriptable pedit installed on your Palm. NOTE. pScripting pToolSet does not require that you have a any pedit installed on your Palm. NOTE. Please make sure that you always have the latest pedit, pToolSet, and LapTopHack [see [1952]here] installed on your Palm. Even though they may be called "beta versions", thousands are using them, including me, without any [serious] problem. For all practical purposes, they are as safe as any "final" version is. You can get the up-to-date information regarding the version numbers from [1953]here. NOTE. Unless you are an "expert" or want to be one [whatever that may mean], please STOP reading this section. NOTE. In case you didn't stop reading this section but you are not yet an "expert", then please check out the [1954]here for Daniel Bergman's pScriptorial tutorials, and [1955]here for pScriptorial examples. In addition, please see [1956]here for archived versions of the tutorials and other material. NOTE. Whether or not you are an "expert", you will greatly benefit from visiting [1957]peditors.com which was created by John Kershaw and is maintained by him and by a growing number of [1958]enthusiastic peditors. Now that I got all "newbies" out of the way, let me get down to business, and let me start with a couple of examples. NOTE. In what follows, pedit pScripting refers to pedit, pToolSet, and LapTopHack pScripting, and so forth. NOTE. After you have familiarized yourself with the basics of pedit pScripting, please move on to learning the use of [1959]pMacros in pedit pScripts. NOTE. It took less than a month for me to find out that the genie is out of the bottle for good. As many members of the [1960]peditors Forum such as Bill, Daniel, DirkS, JeffR, Jerry, JesseJ, JohnH, Jon, Norb, RayD, and StevenH, just to name a few, have already demonstrated over and over again, the opportunities presented by pedit pScripting are literally limitless. I am no longer in charge. One of the sad consequences of this is that I cannot and will not provide support for pScripting related peditorial inquiries very simply since so much can be done that one person can no longer be the source of all necessary information. Please join the [1961]peditors Forum, and please post your questions and/or contributions [1962]here. NOTE. In the following examples, when you see expressions like "/0x04", enter them exactly as you see them, whereas, when you see "`" [backquote], replace it by your personal "[1963]ESC" character [see also [1964]this for generating pScriptorial "[1965]ESC" keys]. NOTE. Instead of "/0x04", you can also enter the ASCII character represented by "0x04". NOTE. You can easily enter any ASCII character using the [1966]Insert Char and "[1967]ASCII Table" commands. EXAMPLE. Put "{date::/GZ`6`j5bw`X2wf`s3fw`s1bc`x`s3bw/xz}" anywhere in [1968]scriptPad [without typing the quotation marks]. This is called a pScript. Here the word "date" just before the double colon "::" is called the [1969]pScriptName, and everything else between "::" and "}" is called the [1970]pScriptText. Then go back to [1971]EditView, and place your cursor anywhere in your memo, or, alternatively, select any text. Next, [1972]activate your pScript and sit back to watch the screen of your Palm. EXAMPLE. Try this pScript "{message::/&mess@[@@I love my Palm@@]}" pScript. pScript Activation [see [1973]here for more details]. * If you are in pedit, then use either the [1974]Script Memo command in [1975]EditView's [1976]Record #1 menu, or enter "ESC &", or [1977]downButtonSlide the [1978]Q button to bring up the pScript entry dialog. * If you are in LapTopHack then enter "ESC &". pScript entry * Type either the [1979]pScriptName, or at least the first few letters of it which uniquely identify your pScript. I will refer to the latter as [1980]pScriptNameIdentifier. * Enter ":" or LINEFEED [carriage return] or tap on the ":D" button ["D" stands for "DoIt"] to run your pScript. * Enter "." or tap on the ".C" button ["C" stands for "Cancel"] to cancel the action, and to return to [1981]EditView. * Enter "?" for help. In addition, both in pedit and LapTopHack, "page down" = "down arrow" = move the pScript entry dialog downward "page up" = "up arrow" = move the pScript entry dialog upward Please get a paper clip ready before trying the next example. EXAMPLE. Put "{forever::_`&forever:}" anywhere in [1982]scriptPad, go back to [1983]EditView, place your cursor anywhere in your memo [or select any text], and [1984]activate your pScript. Now do the same with "{forever::_/GZ`&forever:/xz}" Can you see the difference? EXAMPLE. Put "{left arrow::{/}/0x1Cpedit`s1bw`s1fc}" anywhere in [1985]scriptPad, go back to [1986]EditView, place your cursor anywhere in your memo [or select any text], and [1987]activate your pScript. Then do the same with "{left arrow::{/}/0x1Cpedit/GZ`s1bw`s1fc/xz}" and observe the difference. NOTE. "0x1C" stands for the left arrow. Here are the [current] rules. * pScripts should be kept in [1988]scriptPad where they can be located anywhere and in any order, although the order may become relevant if you activate a pScript without identifying it uniquely. In the latter case, the "first come first served" principle rules. * pScripts are of the form {pScriptName::pScriptText} or {categoryName::pScriptName::pScriptText} or {GLOBAL_script::pScriptName::pScriptText} or {pScriptName::ALIAS::pScriptNameIdentifier} A pScriptNameIdentifier is a string consisting of the first few letters of a [1989]pScriptName which uniquely identify it. The string pScriptText inside the braces [the braces also need to be typed] is any combination of at most 55 characters, or more precisely, bytes [a bound imposed by the Palm OS], including any number of pedit and/or LapTopHack [1990]ESC key[s], and pTokens or [1991]pFunctions with special meanings. However, the latter may or may not count towards the 55 byte limit. The description of each special pToken below also includes an explantion of how they effect this 55 byte limit. NOTE. Once you become an advanced pScriptor, then you can change the magic number "55" to a new key-event-queue-size using the "/&setKeyQSize [...]" pFunction. If you do so, then replace all references to "55" by "key-event-queue-size" when viewing the "55 byte limit" restriction [see also the [1992]Tuner Upper command in [1993]ListView's [1994]Options menu]. NOTE. You need to use the "/&setKeyQSize [...]" after every soft, warm, and hard reset of your Palm, since all such resets clear the pScriptorial key-event-queue-size. NOTE. The former will soon be automated by pedit but first I want to get "/&setKeyQSize [...]" beyond the experimental stage. NOTE. Palm OS 5+ no longer supports the "/&setKeyQSize [...]" pFunction. * Here are some definitions. + {[1995]pScriptName::[1996]pScriptText} is a universalScript, whereas {[1997]categoryName::[1998]pScriptName::[1999]pScriptText} is a categoryBoundScript. + {[2000]GLOBAL_script::[2001]pScriptName::[2002]pScriptText} is a LapTopHack/pToolSet bound script which is processed by LapTopHack or pToolSet and is ignored by pedit. + The maximum length of pScriptNames is 63 characters. They must not contain double colons "::". In addition, for practical purposes, they should not contain ":", ".", and "?" either. If they do, then those characters must not be in the initial portion of the pScriptName which identifies them uniquely among all the pScriptNames. However, it is perfectly legitimate to include whitespaces such as SPACES and TABS or even LINEFEEDS in pScriptNames. + All pScript components are case sensitive. + pComments are allowed in the [2003]pScriptText component of a pScript. pComments are stripped from the pScriptText prior to performing them. pComments are of the form /*...*/ where "..." is any combination of characters and no whitespace or anything else is allowed between "/" and "*". In other words, pScripting uses C-style comments. + Just like in the C-language, pComments are not nestable. More precisely, they are nestable, but then the outcome will not be what you may expect. Hence, do not nest pComments. EXAMPLE. {x1::ped/* this is a pComment */it} {x2::ped /* this is a pComment */ it} {x3::ped /*this is a pComment*/ it} {x4:: ped /* This is a pComment */ it /* so is */ /* this */ } {x5::ped /* Is this a pComment */ ? */ it} HOMEWORK. What will the pScript "x5" produce? NOTE. Unterminated pComments such as {x6::/* this is not a pComment}, result in an error. HOMEWORK. What's wrong with the pScript {x7::/*x*/}? NOTE. Use pComments prudently. If your pScript contains 17,548 pComments, then don't be surprised if something unexpected happens. + The [2004]pScriptText may contain [2005]pFunctions, which, in turn, may contain [2006]pExpressions, [2007]pVariables, [2008]pStrings, [2009]pStringTokens, and [2010]pGoToLabels. NOTE. "[2011]pStrings" are delimited by "@@" as in "@@I am a pString@@", and therefore, using an odd number of "@@" delimiters is an error. Instead, write, for instance, "@ @" if you want to generate "@@" as in "{x8::@ @I/xs am /xs not /xs a /xs pString}". The latter pScript will produce "@@I am not a pString". * pGoToLabels are anchored with pGoToLabelAnchors. The former can be any single digit or a single 1-byte alphabetic letter such as "0", "X", "x", and even "ö", whereas the latter are formed from the former by prepending "/:" to them as in "/:0", "/:X", "/:x", and "/:ö". pGoToLabels and pGoToLabelAnchors are used by the "/&ifGoTo@ [...]" pFunction. You can have the same pGoToLabelAnchor put in your pScript as many times as you want it, but only the first occurence is functional. EXAMPLE. The pScript {goto1::/&varSet@[$1,0] /:X a /&varAdd@[$1,1] /&ifGoTo@[$1<6,@@X@@]} will print out the letter "a" six times. Here the pGoToLabel is "X" and it is anchored with "/:X". * All SPACES [0x20], TABS [0x09], and LINEFEEDS ["ENTER" or 0x0A] encountered in the [2012]pScriptText component of a pScript are ignored by the pScript processor, except within [2013]pStrings. These three characters are so called "whitespaces". There are some other rather infrequently used characters which are also part of the whitespace family. However, the other whitespaces are not ignored by the pScript processor. Use the "/x" pTooken for adding these ignored whitespaces to your pScripts. * As an exception to the above rule, special pScript pTokens [see below] cannot contain SPACES, TABS, and LINEFEEDS. If they do, then they loose their special meanings. * An exception in the opposite direction is the universal application launcher pFunction "/&launch [...]" [see below] which requires that the application name be written exactly as it is, including all whitespaces. EXAMPLE. For instance, the special debugger pToken "/D1" looses its pScriptorial meaning if it is written as /D 1 with a space between "D" and "1". EXAMPLE. If you want to launch Memo Pad, then you must use the pFunction "/&launch [@@Memo Pad@@]" or the equivalent "/&launch [@@Memo Pad@@,]" [note the extra comma] with a space between Memo and Pad. NOTE. The ignored whitespaces are never stripped from the [2014]pScriptText. They are just ignored. On the other hand, [2015]pComments are stripped prior to processing the pScript. Hence, if you want literal "/*" or "*/" in your pScript, then just use "/ *" [with a space between the two characters] and "* /" [with a space between the two characters], respectively. As you will see from the discussion below, it may be necessary to use "// *" instead of "/ *" and "* //" instead of "* /" under certain circumstances. NOTE. Use ignored whitespaces prudently. If your pScript contains 17,548 ignored whitespaces, then don't be surprised if something unexpected happens. * pScripts are chainable and nestable but the consequences may be unpredictable. * pScripts are activated by the following procedure. + If you are in pedit's [2016]EditView, then use either the [2017]Script Memo command in the [2018]Record #1 menu, or enter "ESC &", or [2019]downButtonSlide the [2020]Q button to bring up the pScript entry dialog. + If you are in pedit's [2021]ListView, then use either the [2022]Script command in the [2023]Navigate menu, or enter "ESC &", or [2024]leftButtonSlide or [2025]rightButtonSlide the [2026]Recent button to bring up the pScript entry dialog. + If you are in LapTopHack, then enter "ESC &" to bring up the pScript entry dialog. + Type either the [2027]pScriptName, or at least the first few letters of it which uniquely identify your pScript. The latter is called a [2028]pScriptNameIdentifier. + Enter ":" or LINEFEED [carriage return] or tap on the ":D" button ["D" stands for "DoIt"] to run your pScript. + Enter "." or tap on the ".C" button ["C" stands for "Cancel"] to cancel the action and to return to [2029]EditView. + Enter "page down" or "down arrow" to move the pScript entry dialog downward. + Enter "page up" or "up arrow" to move the pScript entry dialog upward. + Enter "?" for help. + As a convenient shortcut, both in LapTopHack and in pedit's [2030]EditView and [2031]ListView, "ESC Z" turns [2032]globalMacroMode on, and then invokes a silent version of the pScript entry dialog. + As another convenient shortcut, both in LapTopHack and pToolSet, and also in pedit's [2033]EditView and [2034]ListView, you can invoke a pScript which has a single high-ASCII character [2035]pScriptNameIdentifier, say "CHAR" by entering "ESC CHAR". + In LapTopHack, in addition to using "ESC [high-ASCII] CHAR", you can also enter the "LapTopHack ESC" dialog, and then enter your high-ASCII character. + In LapTopHack, if you are in [p]editPad, magiPad, and scriptPad, then using "ESC [high-ASCII ] CHAR" performs your pScript without invoking the "LapTopHack ESC" dialog. + If you use pTolSet, then the up the pScript entry dialog can be found in, say, pScriptTool. + In pToolSet, in addition to using "ESC [high-ASCII] CHAR", you can also enter pMasterTool, and then enter your high-ASCII character. + In pToolSet, if you are in pEditTool, pMagiPad, and pScriptPad, then using "ESC [high-ASCII] CHAR" performs your pScript without invoking pMasterTool. The same is true in every other pToolSet module which has its own "ESC" key such as pAddressTool, pDateTool, pFindTool, pMemoTool, pScriptTool, pSearchTool, pToDoTool, and so forth. QUESTION. Is it legal to have LINEFEEDS [carriage returns] in pScriptNames and pScriptNameIdentifiers? ANSWER. Yes, feel free to do so. However, you need to use some simple tricks when entering LINEFEEDS [carriage returns] into the pScript entry dialog such as pasting them, or using Palm's built-in virtual keyboard. QUESTION. What is a high-ASCII character? ANSWER. A character whose ASCII code is between 0x0080 (128) and 0x00FF (255). You can see the entire ASCII table in [2036]magiPad [see [2037]here, "[2038]here" and [2039]here as well]. * If there is no text selection in your memo, then the action of the pScript starts with the current cursor position. Otherwise, the pScript action starts with the current text selection. * If you are in pedit, and the entered string matches a [2040]pScriptName in a [2041]categoryBoundScript of the form {[2042]categoryName::[2043]pScriptName::[2044]pScriptText} where categoryName is the category of your current memo, then that pScript is performed. * Performing a pScript means that the characters of the corresponding [2045]pScriptText are either entered one-by-one into the end of your Palm OS's key-event-queue, or, if they have a special meaning, then they are processed by either pedit or LapTopHack or pToolSet according to the meaning given to those special characters as desribed below. * If you are in LapTopHack or pToolSet, and the entered string matches a [2046]pScriptName in a LapTopHack/pToolSet bound script of the form {[2047]GLOBAL_script::[2048]pScriptName::[2049]pScriptText}, then that pScript is performed. * If you are in pedit, and if the entered string does not match a [2050]pScriptName in a [2051]categoryBoundScript with [2052]categoryName in the current category, but it matches a [2053]universalScript of the form {[2054]pScriptName::[2055]pScriptText}, then that pScript is performed. * If you are in LapTopHack or pToolSet, and if the entered string does not match a [2056]pScriptName in a LapTopHack/pToolSet bound script, but it matches a [2057]universalScript of the form {[2058]pScriptName::[2059]pScriptText}, then that pScript is performed. * If the entered string matches more than one pScript, then the "first come first served" principle rules. * All universalScripts can be run in [2060]magiPad and [2061]scriptPad as well. However, categoryBoundScripts cannot be used in [2062]magiPad and/or [2063]scriptPad. * In pedit, LapTopHack, and pToolSet, adding "/GZ" [upper case "Z"] turns on the globalMacroMode, whereas adding "/Gz" [lower case "z"] turns off the globalMacroMode with an immediate effect no matter where you are in pedit or LapTopHack. If the globalMacroMode is on then several peditorial and LapTopHack operations will accelerate. However, globalMacroMode is appropriate only for macros and should not be used for interactive pedit or LapTopHack operations. Both "/GZ" and "/Gz" count as 0 [zero] each towards the 55 byte limit. * In pedit, LapTopHack, and pToolSet, adding "/0x03" [chrEndOfText] or "/xZ" [upper case "Z"] also turns on the globalMacroMode, whereas adding "/0x04" [chrEndOfTransmission] or "/xz" [lower case "z"] also turns off the globalMacroMode. However, as opposed to "/GZ" and "/Gz", the effect of these is not immediate but takes place only after your Palm processes the characters which are already lined up in the key-event-queue. In other words, they are "runtime" pTokens. Both "/0x03" and "/0x04" count as one each towards the 55 byte limit. NOTE. It is worthwhile repeating that "/GZ" and "/Gz" act immediately as opposed to /0x03" or "/xZ" and "/0x04" or "/xz" which get processed according to their position in the key-event-queue. NOTE. In defense of "/0x03" or "/xZ" and "/0x04" or "/xz", there are cases when they are preferred. For instance, you should probably do a final globalMacroMode turn off via "/0x04" or "/xz" since, otherwise, you may end up turning the globalMacroMode off prematurely. NOTE. As of versions 5.58, the globalMacroMode is shared between pedit and LapTopHack. In other words, turning it on and off in one of them does the same in the other one. NOTE. If your globalMacroMode ends up to have been left turned on, your regular pedit and LapTopHack operations may misbehave. If you experience the latter, just reset yor Palm. That will certainly turn off the globalMacroMode. Even better, you can also turn off a runaway globalMacroMode by using the turn off globalMacroMode button or by entering the "t" [lower case "t"] in the [2064]Modes Preference Panel. Alternatively, you can write a pScript to turn it off, such as {Gz::/Gz}. If you are a LapTopHacker then read the next paragraph. NOTE. If you invoke the [2065]LapTopHack ESC form, and you are in any mode different from LapTopHack's normalMode, including globalMacroMode, then after a few seconds of inactivity you are automagically returned to normalMode and your globalMacroMode gets turned off as well. WARNING. Prior to version 5.45, you needed the [2066]ESC character in conjunction with "/0x03" and "/0x04". As of version 5.45, this became obsolete so that please update your pScripts and [2067]pMacros. * The character "/" [chrSolidus or forward-slash] has a special meaning in certain contexts. You could say that "/" is a macro pToken or pFunction trigger. Generally speaking "/" is simply the forward-slash character unless one of the following ever increasing exceptional cases hold. * If a pToken or pFunction generates some action, then one parameter associated with the action will be called currValue, and this currValue is always placed into a special temporary pScriptorial pVariable called "$$" where it can be used until the next pToken or pFunction acts. You can think of "currValues" as read-only "returnValues". You will understand this concept once you master the pScriptorial pVariables. Every currValue is an integer which takes values between between -2147483648 [signed 0x80000000] and 2147483647 [0x7FFFFFFF]. More precisely, the value -2147483648 [signed 0x80000000] is preserved to denote the case when there is no currValue, and, therefore, it is called noCurrValue. The actual currValue of most pScriptorial pTokens is a non-negative integer at most 65535 [0xFFFF] so that you will rarely ever get nearby 2147483647. In fact, most currValues are at most 32767 [0x7FFF] and when you have 65535 [0xFFFF or signed -1] the it refers to some error condition such as there are no memos at all. In other words most currValues are non-negative even in the "signed" sense. As of June 18, 2001, I can't think of a single currValue which would behave differently except those which you assign using one of the pScriptorial pFunctions. EXAMPLE. As you will see later, "/dd" prints the current day, say, 17 [today is June 17, 2001], and then "$$" will hold the number "17". Using "/&varSet@ [$0, $$]" will set the "$0" pVariable to "17". Similarly, "/&ifAbort@ [$$ == 17]" will result in exiting from your pScript. Of course, none of this mumbo-jumbo makes sense to you until you read about the pScriptorial pVariables and the associated pFunctions. EXAMPLE. The pScript "confused::/dd /&varSet@ [$0, $$] /dY /&varSet@ [$1, $$]" sets the "$0" pVariable to "17" and the "$1" pVariable to "2001", at least today when I am writing this, and, in addition, it also prints "172001". * If a pToken or pFunction generates some action, then it can be silenced by the "/!", although its currValue will still be placed into the pVariable "$$". As soon as the action takes places, the silencer is deactivated. EXAMPLE. The pScript "confused::/!/dd /&varSet@ [$0, $$] /!/dY /&varSet@ [$1, $$]" sets the "$0" pVariable to "17" and the "$1" pVariable to "2001", at least today when I am writing this, and it does not print "172001". EXAMPLE. The pScript "confused::/!/dd /&varSet@ [$0, $$] /dY /&varSet@ [$1, $$]" sets the "$0" pVariable to "17" and the "$1" pVariable to "2001", at least today when I am writing this, and, in addition, it also prints "2001" [but not "17"]. NOTE. Please don't despair. All these examples will be clear once you understood how pScriping works. * "//" is the same as the character "/". Use this if you want a forward-slash at the very end of your pScript right before the pScript terminating right-brace "}" or in any other place where you don't want it to be interpreted as a macro pToken trigger character. The effect of this pToken is that "/" is placed into the end of the key-event-queue. The [2068]currValue [$$] of this pToken is the ASCII value of the "/" character. The two characters count as one towards the 55 byte limit. * "/}" is the same as the right-brace character "}" without the pScript terminating effect of the latter. Use this when you want to generate a right-brace in your pScript. The effect of this pToken is that "}" is placed into the end of the key-event-queue. The [2069]currValue [$$] of this pToken is the ASCII value of the "}" character. The two characters count as one towards the 55 byte limit. * The "/@" and "/." pTokens allow you to insert any characters and text generated by your current pScript into your activated and editable text fields. They help to circumvent problems related to the limit imposed by the [2070]key-event-queue-size. The details are as follows. + The "/@" pToken turns on immediate printing. + The "/." pToken turns off immediate printing. + Any "[2071]right now" text generated by your current pScript after the "/@" pToken and before the optional "/." pToken gets printed immediately. More precisely, it is checked if there is a currently focused editable text field. If yes, then your pScript generated text gets inserted at the current cursor position if there is no text current selection, and it replaces the currently selected text otherwise. If there is no such text field, then your pScript gracefully exits with an error message. + While immediate printing is turned on, the [2072]key-event-queue itself is untaxed by those pScriptorial pTokens and functions which are performing a "right now" style operation. EXAMPLE. "{i1::/@/LD}" and "{i2::/LD}". Put these two pScripts into your pScriptPad and execute them. You won't see much of a difference. EXAMPLE. "{i3::/@/LD/LD/LD/LD/LD/LD/LD/LD/LD/LD/LD/LD/LD/LD/LD/LD/LD/LD /LD} " and "{i4::/LD/LD/LD/LD/LD/LD/LD/LD/LD/LD/LD/LD/LD/LD/LD/LD/LD/LD/L D}" Put these two pScripts into your pScriptPad and execute them. There is an excellent chance that "i3" does what it supposed to do whereas "i4" aborts since you exhausted the limit imposed by the [2073]key-event-queue-size. * The "/i" and "/I" pTokens allow you to insert text into your activated and editable text fields with minimal count towards of the limit imposed by the [2074]key-event-queue-size. They work similary to [2075]pFunctions with simplified syntax. The details are as follows. + "/I@@text@@" is the "right now" version whereas and "/i@@text@@" does a "runtime" job. Please see [2076]here about the concept of "right now" and "runtime". + Both "/I@@text@@" and "/i@@text@@" check if there is a currently focused editable text field. If yes, then they insert the [2077]pString "text" located between delimiters "@@" at the current cursor position if there is no text current selection, and replace the currently selected text otherwise. + The difference between them is that "/I@@text@@" works when the script is being read ["right now"], whereas "/i@@text@@" ["runtime"] generates a special signal which is sent to the Palm OS via the key-event-queue, and when the Palm receives that signal, then it executes the text insertion job. + Both "/I@@text@@" and "/i@@text@@" allow optional whitespaces between "/I" or "/i" and "@@text@@". + These pTokens work just like the "/&mess [...]" and "/&mess@ [...]" pFunctions except that the text gets inserted instead of being announced. + The "runtime" version counts as 7 [seven] towards the 55 byte limit where as the "right now" version gives you a free ride. EXAMPLE. "{i1::begin# /i @@INSERTED_TEXT@@ #end}" and "{i2::begin# /I @@INSERTED_TEXT@@ #end}". Put these two pScripts into your pScriptPad and execute them. NOTE. Both "/I@@text@@" and "/i@@text@@" are much faster than if the characters of "text" were individually processed. EXAMPLE. "{i3::/I @@INSERTED_TEXT@@}" and "{i4::INSERTED_TEXT}". Put these two pScripts into your pScriptPad and execute them. NOTE.Palm OS5+ users beware since the [2078]key-event-queue-size is fixed in OS5+ so that one needs to pay constant attention to the 55 byte limit. * The "/K" ["kapture"] pTokens enable various features associated with text capturing. Text capturing is designed to redirect text from the key-event-queue into a temporary holding place which can subsequently be manipulated and reused according to the rules described as follows. Using the "/K" pTokens can also alleviate problems associated the limit imposed by the [2079]key-event-queue-size. NOTE. Text capturing exists only in the "[2080]right now" context. + The pToken "/K@" [or, as a shorthand, "/K" followed by space, tab, or newline] starts or resumes text capturing. When text capturing is started to first time, it is also initialized to a blank string. + The pToken "/K." [K-dot] stops text capturing. It can be resumed again with "/K@" or with its shorthand equivalents [see above]. + The pToken "/Ka" appends the captured text to the ClipBoard. + The pToken "/KA" appends the ClipBoard to the captured text. + The pToken "/Kc" initializes the ClipBoard and copies the captured text to it. + The pToken "/KC" initializes text capturing and copies the ClipBoard to it. + The pToken "/Ki" initializes text capturing [no need to initialize it when text capturing is started for the first time although there is no harm in doing so]. + The pToken "/Kp" prints the captured text by placing the letters in the captured text, one-by-one, into the key-event-queue. + The pToken "/KP" pastes the captured text into the currently focused and editable text field, if such a text field exists. The pasting takes place at the current cursor position or text selection. + The pToken "/Kq" initializes text capturing and copies the current text selection in the currently focused text field, if such a text selection exists, to the captured text. + The pToken "/KQ" appends the current text selection in the currently focused text field, if such a text selection exists, to the captured text. + The pToken "/Ks" shows the captured text. It is the same as the "/&mess@[[2081]$@]" pFunction. + The pToken "/Kt" initializes text capturing and copies the current text in the currently focused text field, if such a text exists, to the captured text. + The pToken "/KT" appends the current text in currently focused text field, if such a text exists, to the captured text. + The pTokens "/K2aA, /K2aB, ..., /K2aJ" append the captured text to the [2082]pStringVariables "$A, $B, ..., $J". They are the same as "/&varAdd [$A, [2083]$@]", and so forth [here we use "2" as a shorthand for "to"]. + The pTokens "/K2cA, /K2cB, ..., /K2cJ" save the captured text to the [2084]pStringVariables "$A, $B, ..., $J". They are the same as "/&varSet [$A, [2085]$@]", and so forth [here we use "2" as a shorthand for "to"]. + The pTokens "/K4aA, /K4aB, ..., /K4aJ" append the [2086]pStringVariables "$A, $B, ..., $J" to the captured text [here we use "4" as a shorthand for "from"]. + The pTokens "/K4cA, /K4cB, ..., /K4cJ" save the [2087]pStringVariables "$A, $B, ..., $J" to the captured text [here we use "4" as a shorthand for "from"]. The [2088]currValue [$$] of the "/K" pTokens is [2089]noCurrValue. In conjunction with text capturing, see also the "[2090]$@" [captured text] [2091]pTextToken. NOTE. Captured text can be used any time. There is no need to stop capturing text with "/K." before using it. NOTE. "/K xxx /. blahblah /K yyy" appends "YYY" to the already captured text "xxx". NOTE. Text capturing handles the special pTokens "/xs", "/xn", and "/xt" [space, newline, tab] as well. NOTE. Stopping text capturing with "/K." is optional and it is syntaxically correct not to use it at all or even to use it before text capturing started. NOTE. Initializing text capturing with "/Ki" is optional and it is useful when using it to re-initialize the text capturing data structure. "/Ki" wipes out all current data kept in the text capturing data structure. NOTE. Captured text is stored in a dynamically and automatically regulated variable whose size is unlimited for practical purposes. Although you can only add no more than 0x7FFF bytes to it at a time, it can expand to almost 0xFFFF depending on the available dynamic RAM. In most practical cases captured text will occupy just a few hundred bytes. NOTE. "/KP" is much faster than "/Kp". The subtle differences between them need to be well understood: immediate pasting vs. adding letters one-by-one to the key-event-queue. NOTE. If both text capturing ["/K@"] and immediate printing ["/@"] are activated, then text capturing takes precedence over immediate printing so that the latter does not take place while text capturing is active. EXAMPLE. The pScript {k1::/K@ OK /&control@[$@]} taps the "OK" button. EXAMPLE. The pScript {k1::/K O /K. /K K /&control@[$@]} taps the "OK" button too. EXAMPLE. The pScript {k1::/K@ OK /K2cD} sets the $D [2092]pStringVariable to "OK". * Some of the "/x" pTokens allow you to input spaces, tabs, and linefeeds which are ignored by the pScript processor. They are called the "whitespace /x" pTokens. Additional "/x" and "/5" pTokens allow you to control a variety of aspects of your Palm Powered device, including generation of "[2093]ESC" keys for all products by PaulComputing which use the concept of "[2094]ESC". There is no [2095]currValue [$$] associated with the "whitespace /x" pTokens [[2096]noCurrValue]. The [2097]currValue [$$] of the other "/x" and "/5" pTokens is the ASCII value of the character placed character into the key-event-queue. The three characters of the "whitespace /x" pTokens count as one towards the 55 byte limit. The other "/x" and "/5" pTokens count as 7 towards the 55 byte limit unless noted otherwise. + The pTokens "/5s" [select], "/5l" [left], "/5r" [right], "/5u" [up], and "/5d" [down] act, more or less, as if pressing the 5-way navigator [aka rocker] key on your Palm device if it has one. NOTE. The Palm implementation of the 5-way navigator is, in my opinion, not exactly an exact science. Hence, these pTokens might not act as expected under all circumstances. Please test your pScripts before relying on them. In particular, occasionally these pTokens will not work inside pedit and/or pToolSet since they have some Palm bug fixes built into them that have the side effect that they wipe out everything in the current event-queue, key-event-queue, and pen-event-queue. I know this sounds technical but I wanted to warn you. NOTE. In view of the less than perfect implementation of the 5-way navigator, I have no plans to adjust these pTokens so that they would work on each Palm Powered handheld that has a 5-way navigator key. Please do not blame me for that. I tested them on a Palm TX but even there the situation is somewhat less than perfect. NOTE. Sometimes "/5s" is better than "/xH", sometimes the other way around, and, probably most of the time, they have the same effect. + The pToken "/xu" is the same as pressing the pageUp key of your Palm device. + The pToken "/xd" is the same as pressing the pageDown key of your Palm device. + The pToken "/xs" is the same as "/0x20" [see below]. Each add a SPACE character to the key-event-queue. + The pToken "/xt" is the same as "/0x09" [see below]. Each add a TAB character to the key-event-queue. + The pToken "/xn" is the same as "/0x0A" [see below]. Each add a LINEFEED [Palm style carriage return] character to the key-event-queue. + The pToken "/x1" is the same as pressing the first hard key of your Palm device. + The pToken "/x2" is the same as pressing the second hard key of your Palm device. + The pToken "/x3" is the same as pressing the third hard key of your Palm device. + The pToken "/x4" is the same as pressing the fourth hard key of your Palm device. + The pToken "/x5" is the same as pressing the hard power key of your Palm device. + The pToken "/x6" is the same as pressing the hard key of the cradle of your Palm device. + The pToken "/xA" is the same as tapping the "APPLICATIONS" SilkScreen button [control-E]. + The pToken "/xb" is the same as the previous field [backward] key. + The pToken "/xB" sends data, that is, beams [if applicable]. + The pToken "/xc" is the same as entering the command key via Graffiti [control-C]. + The pToken "/xC" is the same as tapping the "CALCULATOR" SilkScreen button. + The pToken "/xD" is the same as the confirm key [control-D]. + The pToken "/xE" is a the prefix for the "[2098]ESC key generator" pTokens. They are defined as follows. o The pToken "/xElth" is the same as the currently defined [2099]LapTopHack "[2100]ESC" key. o The pToken "/xEp04" is the same as the currently defined pedit [pedit04] "[2101]ESC" key. o The pToken "/xEp32" is the same as the currently defined pedit32 "[2102]ESC" key. o The pToken "/xEpro" is the same as the currently defined peditPro "[2103]ESC" key. o The pToken "/xEplt" is the same as the currently defined peditLight "[2104]ESC" key. o The pToken "/xEpdt" is the same as the currently defined pDateTool "[2105]ESC" key [see [2106]pToolSet]. o The pToken "/xEpet" is the same as the currently defined pEditTool, pMagiPad, and pScriptPad "[2107]ESC" key [see [2108]pToolSet]. o The pToken "/xEpft" is the same as the currently defined pFindTool "[2109]ESC" key [see [2110]pToolSet]. o The pToken "/xEput" is the same as the currently defined pLaunchTool "[2111]ESC" key [see [2112]pToolSet]. o The pToken "/xEpot" is the same as the currently defined pMemoTool "[2113]ESC" key [see [2114]pToolSet]. o The pToken "/xEpct" is the same as the currently defined pScriptTool "[2115]ESC" key [see [2116]pToolSet]. o The pToken "/xEpst" is the same as the currently defined pSearchTool "[2117]ESC" key [see [2118]pToolSet]. o The pToken "/xEptd" is the same as the currently defined pTodoTool "[2119]ESC" key [see [2120]pToolSet]. o The pToken "/xEpmt" is the same as the currently defined pMasterTool "[2121]ESC" key [see [2122]pToolSet]. NOTE. [2123]pToolSet is operational only in Palm OS 3.5 or newer. Please note that if you use a pScript to change the value of one of the current "[2124]ESC" keys, and if the same script uses the same ESC key generator pToken, then all bets are off. + The pToken "/xf" is the same as the next field [forward] key. + The pToken "/xF" is the same as tapping the "FIND" SilkScreen button. + The pToken "/xG" pops up the Graffiti reference dialog. + The pToken "/xH" activates objects surrounded by a "halo" [focus ring] if your Palm OS supports object navigation, that is, you can see the "halo" thingie on your Palm Powered handheld. NOTE. This works in pedit only if pToolSet's pSharedEngine2 is installed. NOTE. Since object navigation and object activation are not exact sciences, I tested "/xH" only on my Palm TX and I do not guarantee that if works on any other Palm Powered handheld. In addition, "/xH" works mostly for various buttons, check boxes, [google "ControlStyleType"] and text fields. It is of limited value for tables and lists. NOTE. Sometimes "/5s" is better than "/xH", sometimes the other way around, and, probably most of the time, they have the same effect. + The pToken "/xk" pops up the "appropriate mode" keyboard [control-F]. + The pToken "/xK" is the same as tapping the "abc" alphabetic keyboard SilkScreen button. + The pToken "/xl" switches to the Security application and locks the Palm device. + The pToken "/xL" toggles the BackLight on and off. + The pToken "/xM" is the same as tapping the "MENU" SilkScreen button [control-A]. + The pToken "/xN" is the same as tapping the "123" numeric keyboard SilkScreen button. + The pToken "/xP" is the same as turning the power of your Palm device off. This pToken counts as 14 towards the 55 byte limit. + The pToken "/xR" is the same as a Graffiti stroke from Graffiti area to top half of screen. + The pToken "/xx" activates the contrast adjustment dialog [if applicable]. + The pToken "/xX" activates the brightness adjustment dialog [if applicable]. + The pToken "/xz" is identical to "/0x04". It turns off the globalMacroMode. + The pToken "/xZ" is identical to "/0x03". It turns on the globalMacroMode. * If "/0x" or "/0X" is followed by two digits or letters "a-f" or "A-F", that is, if the two characters following them make up a hexadecimal number between 0 and 255 such as "/0x4E", then pedit tells the Palm to insert the character whose ASCII code is that number. However, the Palm OS will actually do the insertion only if the resulting character is printable. You can find out which characters are printable by using the "[2125]Q" button. The effect of this pToken is that the picked character is placed into the end of the key-event-queue as long as the number picked is different frm 0 [zero], that is, you did not choose "/0x00" or "/0X00". The [2126]currValue [$$] of the "/0x" or "/0X" pTokens is the number itself. The five characters count as one towards the 55 byte limit. + 0x08 = 8 = Backspace + 0x09 = 9 = Tab [horizontal] + 0x0A = 10 = LineFeed + 0x0B = 11 = page up [this is really a vertical tab and may not produce what you intend] + 0x0C = 12 = page down [this is really a formfeed and may not produce what you intend] + 0x0D = 13 = CarriageReturn + 0x1C = 28 = LeftArrow + 0x1D = 29 = RightArrow + 0x1E = 30 = UpArrow + 0x1F = 31 = DownArrow * The character printer "/p" pTokens are a much advanced version of the above discussed "/0x" or "/0X" pTokens. The format is either "/p$$" [the [2127]currValue pVariable], or "/p$i" where i = 0 ... 9 [[2128]pVariables], or "/p0xHEXADECIMALDIGITS" where HEXADECIMALDIGITS are no more than 8 hexadecimal digits not counting the leading zeros, or "/pDECIMALDIGITS" where DECIMALDIGITS make up a positive number no larger than 2147483647 [0x7FFFFFFF] although any number of leading zeros is permitted. The effect of this pToken is that the character value of the number after the "/p" pToken is placed into the end of the key-event-queue as long as the number picked is different from 0 [zero]. How does this process work? First, the number value is evaluated. For instance, "/p0x20" or "/p32" both denote the SPACE character, and so does "/p0x0000000020". Second. the number is converted to a range where the Palm OS character values live, that is, between 0 and 65535, [0xFFFF]. For instance, "/p0xFF0020" is converted to "0x0020". An expert would say that we are typecasting our value to "WChar" or "UInt16". Then the number is converted to a character. Finally, that value is placed into the is placed into the end of the key-event-queue. Hence, no matter how large your number is, only one character is placed into the key-event-queue. WARNING. There is minimal error chacking built into the "/p" pTokens. It is your responsibility to make sure that what you put in is meaningful. For instance, it would be silly to use "/p0xFFFFFFFFFFFFFFFFFF20" although "/p0x00000000000000000020" is perfectly legitimate. ADVICE. I recommend that you experiment with these pTokens before implementing them in your pScripts. Unless you have an exotic Palm Powered handheld such as one with a Japanese OS, you will use no more than 255 character values. You may want to visit the [2129]peditors Forum to discuss the best ways of using the character printer pTokens. The [2130]currValue [$$] of the "/p" pTokens is the choosen character value. All the characters in these pTokens count as one to sevens towards the 55 byte limit, depending on the size of the character value. * The "/P" [Palm] pTokens provide access to information related to the Palm OS. The effect of these pTokens is immediate. + The pToken "/Pa" prints out the creator ID of the current application surrounded by single quotes [as a character constant] such as 'pnPr' which is the creator ID of peditPro. The [2131]currValue [$$] of this pToken is the numerical value of the creator ID itself. The characters generated by the "/Pa" pToken count as 7 towards the 55 byte limit. + The pToken "/PA" prints out the creator ID of the current application as a number such as 1886277746 which is the creator ID of peditPro. The [2132]currValue [$$] of this pToken is the creator ID itself. The characters generated by the "/PA" pToken count as 11 towards the 55 byte limit. QUESTION. How do I use the "/Pa" and "/PA" pTokens? ANSWER. The screen print out of the creator ID is for your information only, and it is pretty much useless for pScripting. However, capturing its value to a [2133]pVariable makes it useful. First, you should silence the output of "/Pa" and "/PA" using the "/!" pToken. Second, you should capture their value to a [2134]pVariable. Third, use the captured value for making decisions. EXAMPLE. "{e1::/!/Pa /&varSet@ [$1, $$] /&ifAbort [$1 == 1835363695]}" or, even simpler, "{e2::/!/PA /&ifAbort@ [$$ == 1835363695]}". In these examples, the number "1835363695" is the value of the character constant 'memo', that is, the above pScripts instruct your Palm to abort your pScript if you are in Memo Pad. QUESTION. What is a character constant and how to find out its numerical value? ANSWER. The [MetroWerks] C compiler lets you use character string literals that contain two to four characters to denote a 32-bit integer values (see, for instance, Appendix A, Reference Manual, The C Programming Language, Second Edition, Prentice Hall, by B. W. Kernighan and D. M. Ritchie or [2135]here). Here are some 32-bit value examples. o 'ABCD' = 0x41424344 = 1094861636 o 'ABC' = '\0ABC' = 0x00414243 = 4276803 o 'AB' = '\0\0AB' = 0x00004142 = 16706 o '\0\0\0A' = 0x000041 = 65 [I took the first three examples from MetroWerks' "C Compilers Reference"]. There are many tools to get the numerical value of a character constant. My favorite one is right onboard of your Palm. It is Bozidar Benc's Currency Calculator [go to the "Binary calculator" menu, and use the "Text" button]. NOTE. Of course, most likely you don't need to worry about character constants per se, and you only want to have a written record of the creator ID of your application. If so, then just go to your application, and do, say, a {myCreatorID::/Pa/xs=/xs/PA} job after you tap into a text field. If your application has text fields which accept numbers only, then use {myCreatorID::/PA}. If your application does not have any text fields, then open up a HackMaster extension which has one and then play your pScript there. + The pToken "/Ph" prints out the HotSync name of your Palm Powered handheld. The [2136]currValue [$$] of this pToken is [2137]noCurrValue. The number of characters generated by the "/Ph" pToken counts towards the 55 byte limit. * The "/e" pTokens provide some simple text editing functions. The effect of these pTokens is immediate. The three characters of the "/e" pTokens count as 0 [zero] towards the 55 byte limit. + The pToken "/eu" [undo] checks if there is a currently focused editable text field. If yes, then it "undoes" the last text edit operation [if it is undoable]. The [2138]currValue [$$] of this pToken is [2139]noCurrValue. NOTE. If "/eu" doesn't work on your Palm, don't despair. It seems that it works on certain Palms and it doesn't on others. It appears that this may be related to your OS and not to your hardware. My conjecture is that, starting with OS 3.5, Palm took a different approach to implementing "undo" and it only works now if it is performed right after the text editorial operation. + The pToken "/ex" [cut] checks if there is a currently focused editable text field. If yes, then it cuts the currently selected text. The [2140]currValue [$$] of this pToken is [2141]noCurrValue. + The pToken "/ec" [copy] checks if there is a currently focused text field. If yes, then it copies the currently selected text to the ClipBoard. The [2142]currValue [$$] of this pToken is [2143]noCurrValue. + The pToken "/eC" [append] checks if there is a currently focused text field. If yes, then it appends the currently selected text to the text ClipBoard. This pToken works only if the OS of your Palm is at least 3.3. The [2144]currValue [$$] of this pToken is [2145]noCurrValue. NOTE. Of course, appending is just that. Nothing more and nothing less. Do not expect the old text and the new text to be separated in any meaningful way. However, you can use the "/&clipAdd [...]" pFunction to add any separator character or even text [see also the related /&clipInit []" pFunction]. + The pToken "/ep" [paste] checks if there is a currently focused editable text field. If yes, then it pastes the contents of the ClipBoard at the current cursor position if there is no text current selection, and replaces the currently selected text otherwise. The [2146]currValue [$$] of this pToken is [2147]noCurrValue. + The pToken "/es" [select] checks if there is a currently focused text field. If yes, then it selects the entire text. The [2148]currValue [$$] of this pToken is the number of characters [bytes] in the entire text. + The pToken "/eS" [select and copy] checks if there is a currently focused text field. If yes, then it selects the entire text and then it copies the selection to the ClipBoard. The [2149]currValue [$$] of this pToken is the number of characters [bytes] in the entire text. + The pToken "/ee" [end] checks if there is a currently focused text field. If yes, then it sets the cursor position to the end of the text. The [2150]currValue [$$] of this pToken is the number of characters [bytes] in the entire text. + The pToken "/eh" [home] checks if there is a currently focused text field. If yes, then it sets the cursor position to the start of the text. The [2151]currValue [$$] of this pToken is 0 [zero]. + The pToken "/eq" checks if you are in [2152]ListView, and if not, then takes you there. The [2153]currValue [$$] of this pToken is [2154]noCurrValue. This pToken only works in pedit and not in LapTopHack or pToolSet. + The pToken "/e#" [number value at cursor] checks if there is a currently focused text field. Then it assigns the value of the integer number which is either right after the cursor or at the beginning of the current text selection to the [2155]currValue [$$] pVariable. If there is no number there, then the [2156]currValue is set to 0 [zero]. NOTE. Of course, the number will make sense only if it is within reasonable bounds. More precisely, valid results are guaranteed only if the number is between -2147483648 [signed 0x80000000] and 2147483647 [0x7FFFFFFF]. NOTE. The "/e#" pToken does not skip leading blanks. + The pToken "/e@" [character value at cursor] checks if there is a currently focused text field. Then it assigns the character value of the letter which is either right after the cursor or at the beginning of the current text selection to the [2157]currValue [$$] pVariable. If there is no letter there, that is, you are at the end of your text, then the [2158]currValue is set to 0 [zero]. QUESTION. What is a character value? ANSWER. Check the top line in the first display after you press the "[2159]Q" button in pedit's [2160]EditView. * If there is no focused text field, then the [2161]currValue of these pTokens is [2162]noCurrValue. * The "/$" pTokens create strings consisting of the digits in the decimal representation of certain numbers. The effect of these pTokens is that the characters of the created string are placed into the end of the key-event-queue. The [2163]currValues [$$] of these pTokens are the numbers generated by them, except that the [2164]currValue [$$] of the "/$q" pToken is 0 [zero]. The three characters of the "/$" pTokens count as the length of the created string towards the 55 byte limit. For instance, if the number is 123, then the string is "123" and length of the string is 3. + If you are in pedit, then the pToken "/$c" denotes the current cursor position in your text in [2165]EditView, if [2166]EditView currently exists, and has no meaning in [2167]ListView [but it is still grammatically correct even in the latter]. If you are in LapTopHack or pToolSet, then the pToken "/$c" denotes the current cursor position in your current text as long as you have a currently focused text field. + The pToken "/$e" holds the length of the text in your memo [in pedit] or in your currently focused text field [in LapTopHack or pToolSet] which is defined as the number of bytes in your text. In Palms with exotic OSs such as Japanese, the length of the text is not necessarily the same as the number of letters in the text. + The pToken "/$f" checks the ID number of your current form. The [2168]currValue [$$] of this pToken is the ID number of the current form. In particular, if you are in pedit, then it is 1000 if you are in [2169]ListView, it is 1100 if you are in regular [2170]EditView, and it is 1600 if you are in [2171]EditView with no [2172]buttonPanel [see the [2173]Buttons on|off command]. NOTE. If you want peditorial information via "/$f", then you need either to initiate your pScript from pedit or to chain it with a proper pedit pScript which either has a peditOnly pSwitch such as "/&script$ p [...]" or is invoked via "ESC &" where "ESC" denotes the pedit "[2174]ESC" character. EXAMPLE. {currentFormID::/!/$f /&varSet@[$1,$$] /&varShow@[$1]} + The pToken "/$p" denotes the position of your current memo in the current category. This pToken only works in pedit and not in LapTopHack or pToolSet. + The pToken "/$P" denotes the total number of memos in the current category, including the deleted and archived memos. The memo count starts with 1 [one]. This pToken only works in pedit and not in LapTopHack or pToolSet. + The pToken "/$q" queries pedit if it is in pedit04 or pedit32. The output is the string "p04" or "p32", respectively. This pToken only works in pedit and not in LapTopHack or pToolSet. + The pToken "/$r" denotes the position of your current memo in the currently open MemoDB or Memo32DB. The position count starts with 0 [zero]. This pToken only works in pedit and not in LapTopHack or pToolSet. + The pToken "/$R" denotes the total number of memos in the currently open MemoDB or Memo32DB, including the deleted and archived memos. The memos count starts with 1 [one]. This pToken only works in pedit and not in LapTopHack or pToolSet. + The pToken "/$l" [lower case ell] holds the size [length] of the current text selection in your memo [in pedit] or in your currently focused text field [in LapTopHack or pToolSet]. If there is no current text selection, then "/$l" holds 0 [zero]. + The pTokens "/$s" and "/$S" hold the value of the start and end of the current text selection, respectively, in your memo [in pedit] or in your currently focused text field [in LapTopHack or pToolSet]. If there is no text selection in your memo, then "/$c", "/$s", and "/$S" are all the same. Otherwise, "/$s" is less than "/$S", and one of them is equal to /$c". It is a good exercise to figure out which one is actually /$c". * The "/d", "/L" [local language], and "/E" [English] pTokens provide current date'n'time information. The effect of these pTokens is immediate. In what follows the word "current" refers to the current date'n'time information unless the [2175]/&useDate [...] pFunction was applied prior to using the given date'n'time pToken. In the latter case, "current" refers to the date'n'time information as defined by [2176]/&useDate [...]. NOTE. The current date'n'time is evaluated at the beginning of each pScript and during the execution of the [2177]/&useDate [...] pFunction. Otherwise, it doesn't change during the execution of the pScript. The [2178]currValues [$$] of these pTokens are either [2179]noCurrValue or the numbers generated by them. The former happens if the output is non-numeric such as "gennaio". + The pToken "/db" is the number of seconds since midnight on January 1, 1904 [Big Bang] as determined by the current date'n'time and it costs you up to 10 characters in terms of the 55 byte limit. This pToken is not evaluated when it is executed [see [2180]here]. + The pToken "/dB" is the number of seconds since midnight on January 1, 1904 [Big Bang] as determined by the date'n'time according to the clock of your Palm Powered handheld, and it costs you 10 characters in terms of the 55 byte limit. This pToken is evaluated when it is executed. + The pToken "/dt" is the number of ticks [1 second is usually 100 ticks] since the last time the tick counter of your Palm Powered handheld was reset, and it costs you up to 10 characters in terms of the 55 byte limit. This pToken is evaluated when it is executed. + The pToken "/dT" is the number of seconds since the last time the tick counter of your Palm Powered handheld was reset, and it costs you up to 10 characters in terms of the 55 byte limit. This pToken is evaluated when it is executed. + The pToken "/dY" is the current year with four digits [as in "2001"] and it costs you four characters in terms of the 55 byte limit. + The pToken "/dy" is the current year with two digits [as in "01"] and it costs you two characters in terms of the 55 byte limit. + The pToken "/dM" is the current month with a leading zero and it costs you two characters in terms of the 55 byte limit. + The pToken "/dm" is the current month without a leading zero and it costs you one [1 through 9] or two [10 through 12] characters in terms of the 55 byte limit. + The pToken "/LM" is the full name of the current month in the local language of your Palm, such as "January" or "Janvier" or "Januar" or "gennaio" or "januari". It costs you the number of letters in the month name in terms of the 55 byte limit. + The pToken "/EM" is the full name of the current month in English, such as "January". It costs you the number of letters in the month name in terms of the 55 byte limit. + The pToken "/Lm" is the three letter abbreviation of the name of the current month in the local language of your Palm, such as "Jan" or "Jan" or "Jan" or "gen" or "jan". It costs you 3 characters in terms of the 55 byte limit. + The pToken "/Em" is the three letter abbreviation of the name of the current month in English, such as "Jan". It costs you 3 characters in terms of the 55 byte limit. + The pToken "/LN" is the one letter abbreviation of the name of the current month in the local language of your Palm, such as "J" or "J" or "J" or "g" or "j". It costs you 1 character in terms of the 55 byte limit. + The pToken "/EN" is the one letter abbreviation of the name of the current month English, such as "J". It costs you 1 character in terms of the 55 byte limit. + The pToken "/dO" [upper case "Oh"] is the current month without a leading zero in an ordinal number form such as "1st", "2nd,..., and "12th, and it costs you three to four characters in terms of the 55 byte limit. + The pToken "/dD" is the current day with a leading zero and it costs you two characters in terms of the 55 byte limit. + The pToken "/dd" is the current day without a leading zero and it costs you one [1 through 9] or two [10 through 31] characters in terms of the 55 byte limit. + The pToken "/dJ" is the current day of the year with leading zeros and it costs you three characters in terms of the 55 byte limit. + The pToken "/dj" is the current day of the year without leading zeros and it costs you one [1 through 9] or two [10 through 99] or three [99 and up] characters in terms of the 55 byte limit. + The pToken "/do" [lower case "oh"] is the current day without a leading zero in an ordinal number form such as "1st", "2nd,..., and "31st, and it costs you three to four characters in terms of the 55 byte limit. + The pToken "/dW" is the current day since Sunday [Sunday = 0 through Saturday = 6] and it costs you one character in terms of the 55 byte limit. + The pToken "/dw" is the current day since Monday [Monday = 1 through Sunday = 7] and it costs you one character in terms of the 55 byte limit. + The pToken "/du" is the current week of the year with the "Formats" preference panel choice as first day of week (see the Palm's built-in Prefs [Preferences] application) and it costs you one [1 through 9] or two [10 and up] characters in terms of the 55 byte limit. + The pToken "/dU" is the current week of the year with Sunday as first day of week and it costs you one [1 through 9] or two [10 and up] characters in terms of the 55 byte limit. + The pToken "/dv" is the current week of the month with the "Formats" preference panel choice as first day of week (see the Palm's built-in Prefs [Preferences] application) and it costs you one character in terms of the 55 byte limit. + The pToken "/dV" is the current week of the month with Sunday as first day of week and it costs you one character in terms of the 55 byte limit. + The pToken "/LD" is the full name of the current day in the local language of your Palm, such as "Sunday" or "Dimanche" or "Sonntag" or "Ddomenica" or "zondag". It costs you the number of letters in the day name in terms of the 55 byte limit. + The pToken "/ED" is the full name of the current day English, such as "Sunday". It costs you the number of letters in the day name in terms of the 55 byte limit. + The pToken "/Ld" is the three letter abbreviation of the name of the current day in the local language of your Palm, such as "Sun" or "Dim" or "Son" or "dom" or "zon". It costs you 3 characters in terms of the 55 byte limit. + The pToken "/Ed" is the three letter abbreviation of the name of the current day English, such as "Sun". It costs you 3 characters in terms of the 55 byte limit. + The pToken "/LE" is the one letter abbreviation of the name of the current day in the local language of your Palm, such as "S" or "D" or "S" or "d" or "z". It costs you 1 character in terms of the 55 byte limit. + The pToken "/EE" is the one letter abbreviation of the name of the current day in English, such as "S". It costs you 1 character in terms of the 55 byte limit. + The pToken "/dH" is the current hour [0 through 24] with a leading zero and it costs you two characters in terms of the 55 byte limit. + The pToken "/dh" is the current hour [0 through 24] without a leading zero and it costs you one [1 through 9] or two [10 through 23] characters in terms of the 55 byte limit. + The pToken "/dI" is the current iour [oops - hour] [0 through 12] with a leading zero and it costs you two characters in terms of the 55 byte limit. + The pToken "/di" is the current iour [oops - hour] [0 through 12] without a leading zero and it costs you one [1 through 9] or two [10 through 12] characters in terms of the 55 byte limit. + The pToken "/da" is the "am" [before noon] and "pm" [after noon] indicator and it costs you two characters in terms of the 55 byte limit. + The pToken "/dN" is the current ninute [oops - minute] with a leading zero and it costs you two characters in terms of the 55 byte limit. + The pToken "/dn" is the current ninute [oops - minute] without a leading zero and it costs you one [1 through 9] or two [10 through 59] characters in terms of the 55 byte limit. + The pToken "/dS" is the current second with a leading zero and it costs you two characters in terms of the 55 byte limit. + The pToken "/ds" is the current second without a leading zero and it costs you one [1 through 9] or two [10 through 59] characters in terms of the 55 byte limit. * If you are in pedit, then the Boolean "/G" pTokens allow you to manipulate the settings of some of pedit's global variables. The "/G" pTokens act immediately and they count as 0 [zero] in terms of the 55 byte limit. The [2181]currValues [$$] of the "/G" pTokens are either 0 [zero] or 1, depending whether their [primary] output is "false" [0] or "true" [1]. Some of the "/G" pTokens set more than one pedit globals, in which case one of them is called the "primary" action [which is self-evident]. NOTE. The "/Gz" and "/GZ" pTokens work not only in pedit but also in LapTopHack and pToolSet. + "/Ga" means that "enableAutoIndent" is set to false [see [2182]here]. + "/GA" means that "enableAutoIndent" is set to true [see [2183]here]. + "/Gb" means that "enableAutoShift" is set to false [see [2184]capitalization is automatic]. + "/GB" means that "enableAutoShift" is set to true [see [2185]capitalization is automatic]. + "/Gc" means that "categFixedMyNotes" is set to false [see [2186]category of myNotes is fixed and [2187]here]. + "/GC" means that "categFixedMyNotes" is set to true [see [2188]category of myNotes is fixed and [2189]here]. + "/Gd" means that "dateStampedMyNotes" is set to false [see [2190]date stamped myNotes and [2191]here]. + "/GD" means that "dateStampedMyNotes" is set to true [see [2192]date stamped myNotes and [2193]here]. + "/Ge" means that "topStartingMyNotes" is set to false [see [2194]top starting myNotes and [2195]here]. + "/GE" means that "topStartingMyNotes" is set to true [see [2196]top starting myNotes and [2197]here]. + "/Gf" means that "allowFancySilkyFind" is set to false [see [2198]fancy silk-screen "FIND" and [2199]here]. + "/GF" means that "allowFancySilkyFind" is set to true [see [2200]fancy silk-screen "FIND" and [2201]here]. + "/Gi" means that "ignoreCase" is set to false [see [2202]Ign[ore] Case and [2203]here]. + "/GI" means that "ignoreCase" is set to true [see [2204]Ign[ore] Case and [2205]here]. + "/Gj" means that "includeLineFeeds" is set to false [see [2206]incl[ude] EOL and [2207]here]. + "/GJ" means that "includeLineFeeds" is set to true [see [2208]incl[ude] EOL and [2209]here]. + "/Gk" means that "sortSkipLeadBlanks" is set to false [see [2210]skip lead blanks]. + "/GK" means that "sortSkipLeadBlanks" is set to true [see [2211]skip lead blanks]. + "/Gl" means that "lineFeedIsInvisible" is set to false [see [2212]linefeed is considered invisible]. + "/GL" means that "lineFeedIsInvisible" is set to true [see [2213]linefeed is considered invisible]. + "/Gn" means that the "new" option is chosen in the [2214]ListView Preference Panel [as opposed to "/Gx" and "/Gy"]. + "/GN" means that [2215]globalNormalMode is set to true, [2216]globalAdvancedMode is set to false, and [2217]globalExpertMode is set to false [as opposed to "/GX" and "/GY"]. + "/Go" means that "whiteSpaceWord" is set to false [see [2218]Forth words which play a role in the [2219]jumper, the [2220]selector, and the [2221]mover]. This means that words are of regular style which are separated from each other by regular word separators such as whitespaces, punctuation, and so forth [no pun intended?]. + "/GO" means that "whiteSpaceWord" is set to true [see [2222]Forth words which play a role in the [2223]jumper, the [2224]selector, and the [2225]mover]. This means that words are of Forth style which are separated from each other by whitespaces only. + "/Gp" means that "sortAlphabetic" is set to false [see [2226]Alphabetic|Numerical]. + "/GP" means that "sortAlphabetic" is set to true [see [2227]Alphabetic|Numerical]. + "/Gq" means that "sortIgnoreCase" is set to false [see [2228]ignore case]. + "/GQ" means that "sortIgnoreCase" is set to true [see [2229]ignore case]. + "/Gr" means that "archiveDeletedRecords" is set to false [see [2230]save archive copy on PC, [2231]$ave archive copy on your PC and [2232]here]. + "/GR" means that "archiveDeletedRecords" is set to true [see [2233]save archive copy on PC, [2234]$ave archive copy on your PC and [2235]here]. + "/Gs" means that "enableSmartSelection" is set to false [see [2236]Smart]. + "/GS" means that "enableSmartSelection" is set to true [see [2237]Smart]. + "/Gt" means that "startFindAtTop" is set to false [see [2238]Top Start[er]]. + "/GT" means that "startFindAtTop" is set to true [see [2239]Top Start[er]]. + "/Gw" means that "wrapFind" is set to false [see [2240]Wrap and [2241]here]. + "/GW" means that "wrapFind" is set to true [see [2242]Wrap and [2243]here]. + "/Gx" means that the "seek" option is chosen in the [2244]ListView Preference Panel [as opposed to "/Gn" and "/Gy"]. + "/GX" means that [2245]globalNormalMode is set to false, [2246]globalAdvancedMode is set to false, and [2247]globalExpertMode is set to true [as opposed to "/GN" and "/GY"]. + "/Gy" means that the "direct" option is chosen in the [2248]ListView Preference Panel [as opposed to "/Gn" and "/Gx"]. + "/GY" means that [2249]globalNormalMode is set to false, [2250]globalAdvancedMode is set to true, and [2251]globalExpertMode is set to false [as opposed to "/GN" and "/GX"]. + "/Gz" means that [2252]globalMacroMode is set to false. + "/GZ" means that [2253]globalMacroMode is set to true. * The "/&" pTokens allow you to use different pScriptorial pFunctions. Please pay attention to the subtle differences between the closely related triplet pFunctions which share the same name except that one of them has an additional "@" [the "right now" sign] at the end of it, whereas another of them ends with an additional "$" [the "last" sign], such as the "runtime" /&script [...]" pFunction as opposed to the "right now" /&script@ [...]" pFunction or the "last action" /&script$ [...]" pFunction. NOTE. If a pFunction comes in one flavor only, then it is always "right now" even though the pFunction name does not include the "right now" sign "@". Some of these pFunctions may be still in the testing stage. If so, you will see an Under construction sign when trying to use them, and then your pScript will gracefully terminate. The [2254]currValue [$$] of all "runtime" and "last action" pFunctions is [2255]noCurrValue. If you call too many "runtime" or "last action" pFunctions within one pScript, then your pScriptorial pFunctions may go berserk. If this happens, then either do a soft reset of your Palm, or, even better, make and run a pScript using the "/&runtimeInit []" pFunction which will clear the pScriptorial bottleneck. How much is too much? Well, each "runtime" pFunction uses 7 bytes in terms of the 55 byte limit. Hence you better limit yourself to no more than 7 [seven] such "runtime" pFunctions at a time. NOTE. pedit was coded to disallow more than 7 [seven] "runtime" or "last action" version of the same pFunction silently if you are about to use up more than the current [2256]key-event-queue-size but you have not yet used it up. For instance, this is the case, if your key-event-queue-size is the standard 55, and you used up 51 out of it, and if you are about to add a "runtime" pFunction. However, if you increase the key-event-queue-size from the standard 55, then you may end up with an additional "runtime calls over the limit" message as soon as you have more than 7 [seven] "runtime" or "last action" version of the same pFunction since the "silent rejection" may not take place. As usual, I recommend that you use the pScriptorial debugging tools when composing and testing your pScripts. Some of the pScriptorial pFunction can have pScriptorial "pSwitches" in them such as the "D" [Debug] pSwitch in the "/&var... [...]" pFunctions. If a pFunction can have more than one such pSwitch, then they can be written in any order with optional whitespaces between them. You place the pSwitches after the pFunction name and before the pFunction argument starter left bracket "[". You can even repeat the same pSwitch "as many times as you wish" although it is not going to make it any better if you do so. For instance, if "/&varShow D [$1]" is legal, then "/&varShow D DDDDDD D[$1]" means exactly the same, and so does "/&varShowD[$1]" since the whitespaces are optional. Some of the pScriptorial pFunctions can manipulate pScriptorial "pVariables". There are 10 built-in numerical pVariables [aka pNumericalVariables] named "$0", "$1", ..., "$9". These can take any integer value between between -2147483648 [signed 0x80000000] and 2147483647 [0x7FFFFFFF]. More precisely, pScript sometimes assigns and uses the value -2147483648 [signed 0x80000000] for a pVariable when it is undefined so it is safer to stick to the range -2147483648 < $i <= 2147483647 where for i = 0, 1,..., 9. There are 10 built-in string pVariables [aka pStringVariables] named "$A", "$B", ..., "$J", all with upper cased indeces. These can hold any string such as "I am a string" [without the quotation marks]. There is no limit on how much text they can hold except that they all must fit into your Palm's dynamical memory and your current Palm OS must be able to create them. A reasonable upper limit is nearby 64K. Of course, for most practical purposes, your pStringVariables will hold just a few hundreds of characters at most. These variables are permanent and global. They are permanent in the sense that once they are assigned, they can be accessed any time as long as either they are explicitly unset or else if your Palm is reset. They are global in the sense that both pedit, pToolSet, and LapTopHack can use their values no matter where and when they were assigned [but see [2257]here for exceptions]. The notion of noPVarValue is the same as [2258]noCurrValue, that is, -2147483648 [signed 0x80000000]. Hence, if a pVariable takes the value [2259]noCurrValue, then it is undefined. The special "pUnset" symbol "$!" is used to indicate that a certain pVariable needs to be unset, that is, it should be completely erased, so that any reference to it should become invalid. Syntaxically speaking, "+$!" and "-$!" both are the same as "$!", and they can be used interchangeably. In addition, there is also the [2260]currValue pVariable $$ whose value is assigned by pScript so you can think of it as a read-only pNumericalVariable. For instance, the "/&var... [...]" and /&if... [...] pFunctions are using pVariables. Some of the pScriptorial pFunctions can manipulate pScriptorial pStrings which are regular strings enclosed between the pString delimiters "@@" such as "@@I am a pString@@". "@@...@@" pStrings must not contain pString delimiters within them such as "@@I am @@ odd@@" and @@and so am I@@@". I hope that this is a reasonable expectation which will not bother any of us. One exception to the latter is "@@@I am legitimate@@". NOTE. An odd number of "@@" delimiters in a pScript is an error. Instead, write, for instance, "@ @" if you want to generate "@@" as in "{x7::@ @I/xs am /xs not /xs a /xs pString}". The latter pScript will produce "@@I am not a pString". In addition to pStringVariables and pStrings, there are also a few pStringToken symbols which can always be used instead of pStringVariables and pStrings. The symbol "$^" always refers to the current text in the currently focused text field if such a text exists, and otherwise it is a blank string "", that is, @@@@. The symbol "$&" always refers to the current text selection in the currently focused text field if such a text selection exists, and otherwise it is a blank string "", that is, @@@@. The symbol "$~" always refers to the current ClipBoard text if such a text exists, and otherwise it is a blank string "", that is, @@@@. The symbol "$@" always refers to the current [2261]captured text if such a text exists, and otherwise it is a blank string "", that is, @@@@. NOTE. Captured text is never defined in "[2262]runtime" context. [2263]pNumericalVariables and numbers in the pNumericalVariable [2264]range given either in decimal or in hexadecimal notation are jointly referred to as pNumberTokens. [2265]pStringVariables, [2266]pStrings, and [2267]pStringTokens are jointly referred to as pTextTokens. [2268]pNumberTokens and [2269]pTextTokens are jointly referred to as pTokens. Some of the pScriptorial pFunctions can manipulate pScriptorial pExpressions which consist of [2270]pToken_OR_[2271]currValue relOp [2272]pToken_OR_[2273]currValue. However, if the pExpression is not evaluated "right now", then it may not contain [2274]$$ [currValue] and "[2275]$@" [captured text]. "+" and "-" signs are permitted in front of both numbers and pVariables but no whitespace is permitted after "+" and "-". The symbol "relOp" must be one of the relation operators "==" [equalOperator consisting of 2 consecutive "=" signs], or "!=" [notEqualOperator], or "<" [lessOperator], or "<=" [lessOrEqualOperator], or ">" [greaterOperator], or ">=" [greaterOrEqualOperator]. A pExpression is valid if it satisfies the above rules. Otherwise, it is invalid. A pExpression is true if it is valid and if it represents a true statement after the variables have been evaluated. Otherwise, it is false. If a pTextToken is being compared to a symbol taking numerical values, then the length of the string which is referred to by the pTextToken is used instead of the string itself. When comparing two pTextTokens, they are compared in terms of their dictionary order [which, alas, is not the same in every language and in every Palm OS]. You are allowed to use "any" number of whitespaces before, in between, and after the symbols, but you are not allowed to squeeze whitespaces inside symbols such as "= =" or "$ 2". EXAMPLE. 1==1 is valid and true, 1 != +1 is valid and false, 1=1 is invalid and false, +$1 == -$2 is valid and may or may not be true depending on the pVariables in it. In addition, $$ == 1 is invalid and false during "runtime", but it is valid and may or may not be true "right now". NOTE. No arithmetics is allowed in pExpressions so that, for instance, 1 + 1 >= 2 is invalid and false. EXAMPLE. Suppose we have some text and the word "hi" is selected in it. Then the pExpressions @@hi@@ == $& [[2276]current selection] and @@hi@@ == 2 are true, whereas @@hi@@ == @@Hi@@ is false [unless the "caseBlind" pSwitch is set]. QUESTION. Is this definition clear? The details of pScriptorial pFunctions are as follows. Even though many of them ignore whitespaces as indicated, please do not overuse [abuse] them since there is a [reasonably generous] built-in limit on the number of whitespaces which are allowed to be placed inside pFunctions. + The "/&runtimeInit []" pFunction allows you to clear the above mentioned pScriptorial bottleneck. The format of this pFunction is "/&runtimeInit []", that is, it uses no arguments at all. You are allowed to use "any" number of whitespaces before and after the brackets. The effect of this pFunction is immediate. The [2277]currValue [$$] of this pFunction is [2278]noCurrValue. The characters of the "/&runtimeInit []" pFunction count as 0 [zero] towards the 55 byte limit. + The "/&setKeyQSize [...]" pFunction allows you to set the size of the current key-event-queue. NOTE. Palm OS 5+ no longer supports the "/&setKeyQSize [...]" pFunction. The format of this pFunction is "/&setKeyQSize [s]". Here the number "s" is the new key-event-queue-size, and it can be any positive number between 55 and 4294967295 although if would be probably foolish to use anything bigger than a couple of hundred. You should probably experiment with your on Palm to find the optimal setting. If you set it to a number which is greater than the available memory, then /&setKeyQSize [...]" gracefully declines it so that in real life nothing nearby 4294967295 will work. As more and more pScriptors use this pFunction, I will be able to make recommendations as to the optimal value of the key-event-queue-size. If you provide no argument at all, or if the number you picked is less than 55, then the default value 55 is used. You are allowed to use "any" number of whitespaces before and after the brackets. The effect of this pFunction is immediate. The [2279]currValue [$$] of this pFunction is key-event-queue-size. The characters of the "/&setKeyQSize [...]" pFunction count as 0 [zero] towards the 55 byte limit. NOTE. You should not use this pFunction within a pScript. It should be a pScript on its own right such as "{mySetKeyQSizeTo128::/&setKeyQSize [128]}". NOTE. You need to use the "/&setKeyQSize [...]" after every soft, warm, and hard reset of your Palm, since all such resets clear the pScriptorial key-event-queue-size. This will soon be automated by pedit but first I want to get "/&setKeyQSize [...]" beyond the experimental stage. NOTE. "/&setKeyQSize [...] uses the Palm OS "EvtSetKeyQueuePtr()" pFunction. This pFunction, according to the elders at Palm, is meant to be used only by the Palm OS itself so that I stand guilt of violating some of the Palm rules. However, it was one of the guys working at Palm who recommended me to check out "EvtSetKeyQueuePtr ()". I am grateful to him but he will remain anonymous so that he would not have to face potential charges by the above mentioned elders. NOTE. Palm OS 5+ no longer supports "EvtSetKeyQueuePtr()". NOTE. See also the [2280]Tuner Upper command in [2281]ListView's [2282]Options menu. + The "/&showKeyQSize []" pFunction allows you to view the size of the current key-event-queue. The format of this pFunction is "/&showKeyQSize []", that is, it uses no arguments at all. You are allowed to use "any" number of whitespaces before and after the brackets. The effect of this pFunction is immediate. The [2283]currValue [$$] of this pFunction is key-event-queue-size. The characters of the "/&showKeyQSize []" pFunction count as 0 [zero] towards the 55 byte limit. + The "/&clipAdd [...]" pFunction allows you to append text to the current text ClipBoard. It complements the "/eC" [append] pToken and the "/&clipInit []" pFunction. One of its purposes is to add separator characters or strings between two "/eC" jobs. This pFunction works only if the OS of your Palm is at least 3.3. The format of this pFunction is "/&clipAdd Di [[2284]pTextToken]". Here the "D" [Debug] pSwitch is optional. If the "i" [init] pSwitch is present, then the ClipBoard gets initialized [zapped] prior to appending text to it. You are allowed to use "any" number of whitespaces before and after the brackets and the argument. The effect of this pFunction is that the contents of [2285]pTextToken is immediately appended to the current text ClipBoard. The [2286]currValue [$$] of this pFunction is [2287]noCurrValue. The characters of the "/&clipAdd [...]" pFunction count as 0 [zero] towards the 55 byte limit. + The "/&clipInit []" pFunction allows you to initialize the text ClipBoard. It complements the "/eC" [append] pToken and the "/&clipAdd [...]" pFunction. Its primary purpose is to start a "/eC" job from a clean state. The format of this pFunction is "/&clipInit D []". Here the "D" [Debug] pSwitch is optional. You are allowed to use "any" number of whitespaces before and after the brackets. The effect of this pFunction is that the current contents of the text ClipBoard gets clobbered. The [2288]currValue [$$] of this pFunction is [2289]noCurrValue. The characters of the "/&clipInit []" pFunction count as 0 [zero] towards the 55 byte limit. + The "/&daLaunch [...]" pFunction provides a desk accessory [aka DA] launcher. NOTE. [2290]pToolSet's pDeskAccToolPro has a Create pScript menu command which allows to automate the generation of pScripts with /&daLaunch [...]". NOTE. "/&daLaunch [...]" requires that [2291]pToolSet's pLaunchEngine1 be installed and activated. In particular, the version of your Palm's OS must be at least 3.5. NOTE. pedit and LapTopHack can use pLaunchEngine1 even if no other module of pToolSet is installed and/or activated. NOTE. Do not add ".prc" to the end of the DA name. For instance, write "myDA" instead of "myDA.prc". The format of this pFunction is "/&daLaunch D [[2292]pTextToken]". Here the pSwitch "D" [Debug] is optional. The contents of [2293]pTextToken should be the exact [not misspelled] name of the DA, including all punctuation marks, and so forth, and then that DA will be launched. If the picked DA does not exist, then the pScript processing gracefully terminates. You are allowed to use "any" number of whitespaces before and after the brackets, the commas, and the arguments. The effect of this pFunction is immediate right after [but not before] the entire pScript has been performed, and after all the immediate actions in your pScript have taken place. If this sounds complicated, create your own "/&daLaunch [...]" pScripts and study them. The [2294]currValue [$$] of this pFunction is [2295]noCurrValue. The characters of the "/&daLaunch [...]" pFunction count as 0 [zero] towards the 55 byte limit. NOTE. The DA's name may not be what you think it is. I am not even talking of typos here which is the greatest source of pScriptorial errors, but of the fact that what you see ain't what you get [sometimes]. Use [2296]pToolSet's pDeskAccToolPro to find out your DA's name and use pDeskAccToolPro's Create pScript menu command to facilitate the process. WARNING. As I was experimenting with DAs, I was very disappointed to find out that a large number of them were not exactly the best Palm software that I have ever seen. A notable exception was the TealPoint collection which was a pleasure to play with. I could bring up a few more exception but I don't want to provide free publicity for products which generally speaking don't deserve it. I found out that my [2297]pToolSet modules are far superior and far more flexible than the entire concept of DAs is. NOTE. Please do not use more than one "/&daLaunch [...]" in a single pScript. NOTE. I tested "/&daLaunch [...]" only with pScripts which consist purely of one and only one such pFunction and nothing else. You are free to experiment with more sophisticated pScripts but please do not complain if they don't work. EXAMPLE. The pScript "{m::/&daLaunch [@@myDA@@]}" launches myDA. + The "/&launch [...]" pFunction provides a fully customizable universal application, Preference Panel, and so forth launcher. NOTE. [2298]pToolSet's pScriptPad has an Insert pScript menu command which allows to automate the creation of pScripts with "/&launch [...]". NOTE. If [2299]pToolSet's pLaunchEngine1 is installed, then "/&launch [...]" can launch applications from any directory of all expansion cards as well. NOTE. pLaunchEngine1 can be installed, used, and deleted independently of pToolSet. NOTE. pedit and LapTopHack can use pLaunchEngine1 even if no other component of pToolSet is installed. NOTE. Directory and file names on expansion cards are case-blind. NOTE. Only expansion cards have directories. The main memory cards have no directory structure and file names, that is, database names are case sensitive there. NOTE. Do not add ".prc" to the end of the file name. For instance, write "pedit" instead of "pedit.prc". NOTE. In what follows, palmCard refers to the memory cards in the main memory. As far as I know all current Palms have exactly one such card although the Palm OS supports many. NOTE. In what follows, expCard refers to the expansion (or external removable) memory card such as Secure Digital, etc. The format of this pFunction is "/&launch D f [[2300]pTextToken]" or "/&launch D f [[2301]pTextToken, palmCardNo OR expCardNo]". Here the pSwitches "D" [Debug] and "f" [force] are optional and can be written in any order with optional whitespaces between them. The contents of [2302]pTextToken should be the exact [not misspelled] name or path'n'name of the application or Preference Panel, including all punctuation marks, and so forth, and, optionally, put "palmCardNo OR expCardNo" between the comma "," and "]", and then that item will be launched. If the picked item does not exist or it is not launchable, then the pScript processing gracefully terminates. If the "f" pSwitch is not set, then the picked item is launched only if it is not running yet. On the other hand, if the "f" pSwitch is set, then the picked item is launched whether or not it is already running. Please note, that both "palmCardNo OR expCardNo" and the comma "," right in front of it are optional, and you should probably leave them blank in practically all cases unless you are one those few lucky ones who own a Palm device with more than one memory and/or expansion card. If "palmCardNo OR expCardNo" is left blank, then the default value 0 [zero] is used. Of course, if you use "palmCardNo OR expCardNo", then it must be preceded by a "," [comma]. Algorithm for /&launch [...] if pLaunchEngine1 is installed. o If "@@/dirName/fileName@@" then launch application "fileName" from the first palmCard if it exists there or from the directory "/dirName" of expCard with index expCardNo if exists there, or from the directory "/dirName" of any other expCard if it exists there. o If "@@fileName@@" then launch fileName from palmCardNo if it exists there or from any other palmCard if it exist there, or from the default directory of any expCard or internal drive, usually called "/PALM/Launcher/" or "/Applications/", if it exists there. You are allowed to use "any" number of whitespaces before and after the brackets, the commas, and the arguments. The effect of this pFunction is immediate right after [but not before] the entire pScript has been performed, and after all the immediate actions in your pScript have taken place. If this sounds complicated, study the examples below, and create your own "/&launch [...]" pScripts. The [2303]currValue [$$] of this pFunction is [2304]noCurrValue. The characters of the "/&launch [...]" pFunction count as 0 [zero] towards the 55 byte limit. NOTE. The application's name may not be what you think it is. I am not even talking of typos here which is the greatest source of pScriptorial errors, but of the fact that what you see ain't what you get [sometimes]. For instance, pedit04!'s real name is pedit04Launcher even though you see pedit04! when you look at the icon of it. You should use the "/&appName []" pFunction to find out the "real" name of the application which you want to launch. EXAMPLE. What you think is called "Application" is, in fact, called "Launcher". Similary, "VersaMail" is really "MultiMail". Some non-interactive applications do not allow you to use pScripts. If so, then you should use a Palm utility such as RsrcEdit to find out the name of the application which you want to launch. WARNING. As the most recent [2305]POSE reveals, RsrcEdit 1.017b is full of memory leaks [bugs] which may cause serious problems. Hence, it is prudent to use utmost care when playing with RsrcEdit. NOTE. Please do not use more than one "/&launch [...]" in a single pScript. As Norb found out, currently, there is no pScriptorial support for it. Here are some examples if pLaunchEngine1 is not installed although all of them work the same way if pLaunchEngine1 is installed as well except for the one with WordSmith. EXAMPLE. The pScript "{m::/&launch [@@Memo Pad@@]}" launches Memo Pad. EXAMPLE. The pScript "{m::/&launch [@@Memo Pad@@,] I love pedit}" launches Memo Pad, and creates a new memo starting with "Ilovepedit". Do you start to sense the tremendous power of pScripts? EXAMPLE. The pScript "{m::I love /&launch [@@Memo Pad@@,0] pedit}" does exactly the same thing as the one in the previous example. HOMEWORK. How can you achieve the correctly spaced "I love pedit" in the previous two examples? EXAMPLE. The pScript "{m::/&launch [@@pedit32Launcher@@, 0 ]}" launches peditPro in the pedit32 mode [it launches "pedit32!"]. EXAMPLE. The pScript "{m::/&launch [@@pedit04Launcher@@]}" launches peditPro in the pedit04 mode [it launches "pedit04!"]. EXAMPLE. The pScript "{m::/&launch [@@pedit04Launcher @@,]}" does not launch anything. EXAMPLE. The pScript "{m::/&launch [@@Buttons@@]}" launches Buttons Preference Panel. NOTE. As of May 19, 2001, all Palms support only one memory card located at slot 0 [zero]. However, pedit, LapTopHack, and pToolSet are built to handle up-to 64K such cards [seriously]. In particular, if you ever get hold of a Palm with multiple memory cards, just use "/&launch [fileName, xxx]" to launch the file with name "fileName" residing on a memory card in slot "xxx" where "xxx" is any number between 0 and 65,535 [0xFFFF]. EXAMPLE. The pScript "{m::/&launch [WordSmith, 1948]}" launches that WordSmith which is installed on the memory card in slot 1948. Here are some examples with expansion cards if pLaunchEngine1 is installed. EXAMPLE. "/&launch [@@peditPro@@, 0]" is the same as "/&launch [@@peditPro@@]" and both launch peditPro from palmCard #0. EXAMPLE. "/&launch [@@peditPro@@, 1]" is the same as "/&launch [@@peditPro@@, 2001]" and both launch peditPro from palmCard #0 since there is only one palmCard in all current Palm Powered handhelds. However, in the future, they will launch peditPro for palmCard #1 and #2001, respectively. EXAMPLE. If peditPro does not exist on any palmCard, then "/&launch [@@peditPro@@]" launches peditPro from the first expCard where "/PALM/Launcher/peditPro.prc" exists. EXAMPLE. If peditPro does not exist on any palmCard, then "/&launch [@@/myLauncher/peditPro@@]" launches peditPro from the first expCard where "/myLauncher/peditPro.prc" exists. Otherwise it is launched from the first palmCard where it exists. + The "/&appName []" pFunction allows you to determine the name of the current application in a variety of ways. The format of this pFunction is "/&appName DACPV []". Here the pSwitches "D" [Debug], "A" [Append to ClipBoard], "C" [Copy to ClipBoard], "P" [Paste into current text field], and "V" [Verbose] are optional and can be written in any order with optional whitespaces between them. If none of the switches are present, then this pFunction takes no action at all. If the switches "A" and/or "C" are set, then this pFunction reads the name of the current application, and appends it to the ClipBoard or copies it to the ClipBoard, respectively, except that if both are set then "A" is ignored [the "A" switch works only if the OS of your Palm is at least 3.3]. If the switches "P" and/or "V" are set, then this pFunction reads the name of the current application, and pastes it to the currently focused editable text field [if any] and/or sends it in the form of a message to the screen. This pFunction takes no arguments. You are allowed to use "any" number of whitespaces before and after the brackets. The effect of this pFunction is immediate unless the "C" is set. In the latter case, the characters of the string consisting of the name of the current application are placed into the key-event-queue. The [2306]currValue [$$] of this pFunction is [2307]noCurrValue. The characters of the "/&appName [...]" pFunction count as 0 [zero] towards the 55 byte limit. + The next two "runtime" "/&control [...]" and "right now" "/&control@ [...]" pFunctions are closely related, but they have distinctly different effects. They both allow you to activate an arbitrary control. NOTE. Please read about LapTopHack's [2308]Our Ctrl Activator command prior to using these pFunctions, since they just provide a direct access to it without going through LapTopHack's "Our Ctrl Activator" dialog. Please see [2309]here for the definition of what "controls" are, and please pay special attention to [2310]default controls. NOTE. pToolSet's pControlTool is analogous to LapTopHack's "Our Ctrl Activator". These pFunctions only work in LapTopHack and pToolSet and not in pedit unless pToolSet's pSharedEngine2 is installed. If you use them in pScripts performed by pedit and pSharedEngine2 is not present, then your pScript will abort in a user friendly manner. If you must have these pFunctions in pedit, then you should either install pSharedEngine2 or do them the old fashioned way via "ESC o" and its sister commands where "ESC" is your LapTopHack's escape character. Another option is to use pToolSet, but then you will install pSharedEngine2 anyway. + The format of the "runtime" "/&control D [...]" pFunction is "/&control D [[2311]pTextToken]". Here the "D" [Debug] pSwitch is optional. The contents of [2312]pTextToken consists of the first few letters which uniquely identify your control. You are allowed to use "any" number of whitespaces before and after the brackets. The effect of this pFunction is that a special signal is sent to the Palm OS via the key-event-queue, and when the Palm receives that signal, then it activates the picked control command. The [2313]currValue [$$] of this pFunction is [2314]noCurrValue. The characters of the "/&control [...]" pFunction count as 7 [seven] towards the 55 byte limit. USEFUL SHORTCUTS. o /&control [@@#1#@@] = default button control o /&control [@@#2#@@] = default popup trigger control o /&control [@@#3#@@] = default selector trigger control o /&control [@@#4#@@] = default check box control o /&control [@@#5#@@] = default push button control + The format of the "right now" "/&control@ [...]" pFunction is "/&control@ D [[2315]pTextToken]". Here the "D" [Debug] pSwitch is optional. The contents of [2316]pTextToken consists of the first few letters which uniquely identify your control. You are allowed to use "any" number of whitespaces before and after the brackets. The effect of this pFunction is immediate. The [2317]currValue [$$] of this pFunction is [2318]noCurrValue. The characters of the "/&control@ [...]" pFunction count as 0 [zero] towards the 55 byte limit. USEFUL SHORTCUTS. o /&control@ [@@#1#@@] = default button control o /&control@ [@@#2#@@] = default popup trigger control o /&control@ [@@#3#@@] = default selector trigger control o /&control@ [@@#4#@@] = default check box control o /&control@ [@@#5#@@] = default push button control + The next two "runtime" "/&menu [...]" and "right now" "/&menu@ [...]" pFunctions are closely related, but they have distinctly different effects. They both allow you to activate an arbitrary menu command. + The format of the "runtime" "/&menu [...]" pFunction is "/&menu D [s]". Here the "D" [Debug] pSwitch is optional. The number "s" is the menu item ID, that is, the unique ID number of the menu command you want to activate. It is a non-negative integer which is at most 65,535 [0xFFFF], although typically it is less than 10,000. You are allowed to use "any" number of whitespaces before and after the brackets. The effect of this pFunction is that a special signal is sent to the Palm OS via the key-event-queue, and when the Palm receives that signal, then it activates the picked menu command. The [2319]currValue [$$] of this pFunction is [2320]noCurrValue. The characters of the "/&menu [...]" pFunction count as 7 [seven] towards the 55 byte limit. + The format of the "right now" "/&menu@ [...]" pFunction is "/&menu@ D [s]". Here the "D" [Debug] pSwitch is optional. The number "s" is the menu item ID, that is, the unique ID number of the menu command you want to activate. It is a non-negative integer which is at most 65,535 [0xFFFF], although typically it is less than 10,000. You are allowed to use "any" number of whitespaces before and after the brackets. The effect of this pFunction is immediate. The [2321]currValue [$$] of this pFunction is ID number of the menu command which was activated. The characters of the "/&menu@ [...]" pFunction count as 0 [zero] towards the 55 byte limit. How to find the ID of a menu item. Using LapTopHack... o Install [2322]LapTopHack. o Open up your menu by, say, hitting the "MENU" SilkScreen button. o Drop down [pull down] the appropriate menu list which contains your menu command. o Highlight your menu command by, say, entering a sufficient number of arrow key, or the appropriate number "1 ... 9 0 a b c d e". Do not tap on the screen of your Palm. o See [2323]here for the details how to highlight your menu command. o Once your menu command is highlighted, type "I" [upper cased Info]. o Having typed "I", you will see the "the menu item ID" flashed on your palm's screen. o In addition, your ClipBoard will be appended by the text "/*menu name*/ /&menu [ID]" which you can use to paste directly into your pScript. o Note that your ClipBoard gets appended, that is, you may repeat this procedure until you find out the IDs of all the menu commands you are interested in. NOTE. You may want to type "K" [upper cased Klear] just prior to using the first "I" command [while the menu is pulled down]. This will klear [clear] your ClipBoard so that you will not append to irrelevant material. NOTE. [2324]LapTopHack allows you to append to the ClipBoard only if your Palm OS is at least 3.3. Otherwise, the "i" command will add the information to the ClipBoard instead of appending to it. Using pToolSet... o Install [2325]pToolSet. o Open up pMasterTool. o Open up pMasterTool's menu by, say, hitting the "MENU" SilkScreen button or tapping in the top left portion of the screen. o Find and tap the "pScript /&menu@[ID] on" menu item in the "pMT2" menu. o Quit pMasterTool and follow the on-screen directions. + The next two "runtime" "/&mess [...]" and "right now" "/&mess@ [...]" pFunctions are closely related, but they have distinctly different effects. They both allow you to put up a message and/or announcement on your Palm's screen. + The format of the "runtime" "/&mess [...]" pFunction is either "/&mess D I [[2326]pTextToken]" or "/&mess D I [[2327]pTextToken, y, s]". Here the "D" [Debug] and "I" [Invert pixels in the message frame] pSwitches are optional and can be written in any order with optional whitespaces between them. With this pFunction, the [2328]pTextToken is projected on your Palm's screen at the vertical screen coordinate "y" for "s" 100th of a second. The screen coordinate "y" is 0 [zero] at the top of your Palm's screen, and it is most of the time 159 at the bottom of it. However, if you have one of those new fancy Palms, then the bottom may be located at a different "y" coordinate. I recommand that you pick "y" to be at least 3. The "y" and "s" parameters are optional [the commas are optional as well]. If one of them or both are missing, then the default values 51 and 100, respectively, are used. You are allowed to use "any" number of whitespaces before and after the brackets, the commas, and the arguments. The effect of this pFunction is that a special signal is sent to the Palm OS via the key-event-queue, and when the Palm receives that signal, then it puts up the picked message on your Palm's screen. The [2329]currValue [$$] of this pFunction is [2330]noCurrValue. The characters of the "/&mess [...]" pFunction count as 7 [seven] towards the 55 byte limit. + The format of the "right now" "/&mess@ [...]" pFunction is either "/&mess@ D I [[2331]pTextToken]" or "/&mess@ D I [[2332]pTextToken, y, s]". Here the "D" [Debug] and "I" [Invert pixels in the message frame] pSwitches are optional and can be written in any order with optional whitespaces between them. With this pFunction, the [2333]pTextToken is projected on your Palm's screen at the vertical screen coordinate "y" for "s" 100th of a second. The screen coordinate "y" is 0 [zero] at the top of your Palm's screen, and it is most of the time 159 at the bottom of it. However, if you have one of those new fancy Palms, then the bottom may be located at a different "y" coordinate. I recommand that you pick "y" to be at least 3. The "y" and "s" parameters are optional [the commas are optional as well]. If one of them or both are missing, then the default values 51 and 100, respectively, are used. You are allowed to use "any" number of whitespaces before and after the brackets, the commas, and the arguments. The effect of this pFunction is immediate. The [2334]currValue [$$] of this pFunction is [2335]noCurrValue. The characters of the "/&mess@ [...]" pFunction count as 0 [zero] towards the 55 byte limit. NOTE. If the message is too long to be fully shown on your Palm's screen, then it will be truncated. EXAMPLE. {myMessage::/&mess[@@Cogito, ergo pedit...@@,79,300]} {myMessage::/&mess@ [@@Cogito, ergo pedit...@@,,]} {myMessage::/&mess@ [@@Cogito, ergo pedit...@@]} {myMessage::/&mess [ @@Cogito, ergo pedit...@@ , 79 , 300 ]} {myMessage::/&mess@ [ @@Cogito, ergo pedit...@@, 79, 300 ] } {myMessage::/&mess[$&]} (current text selection) {myMessage::/&mess[$^]} (ClipBoard text) {myMessage::/&mess[$A]} (the $A [2336]pStringVariable) {myMessage::/&mess[@@y=51,duration=250@@,,250]} {myMessage::/&mess[@@y=99,duration=100@@,99]} {myMessage::/&mess[@@y=51,duration=100@@]} + The next four pFunctions, namely, "/&penDown [...]", "/&stroke [...]", "/&tap [...]", and "/&tapDown [...]" allow you to simulate actions of your stylus one way or another. It may well turn out that they will be some of the strongest assets of pScripting. However, I need your co-operation since it is rather self-evident [to me at least] that the collective minds of our peditors is better by several magnitudes than mine alone. So please work hard and post your ingenious applications of these pFunctions to the [2337]peditors Forum. Each of these pFunctions allows an optional "i" [init] pSwitch. If you have the "i" pSwitch, then the current pen-event-queue is flushed [emptied] prior to applying the given pFunction. If you plan to activate pScripts using a stylus instead of a purely external keyboard approach, then it is a prudent practice to use this switch once in every pScript just with the very first of these stylus simulator pFunctions since your Palm may get a little confused when you tap to perform a pScript, and it may end up believing that you intended a double-tap or something similar. By flushing the current pen-event-queue, you start from scratch so that your pScript activating tap becomes history. NOTE.These pFunctions may or may not work in OS 5+. Sorry about that. + The "/&penDown [...]" pFunction allows you to send a "penDownEvent" event to your Palm's OS. The format of this pFunction is "/&penDown i [x, y]". Here the "i" [init] pSwitch is optional. Please read about this pSwitch [2338]here. The "x" and "y" arguments are either screen coordinates [numbers], or the dot pToken ".", or both as in ".17" or ". 17". If the first argument is the dot pToken ".", then its value is defined as the absolute screen x-coordinate of the top of the current cursor plus half of the width of the cursor [whether it is visible of not]. If there is no current cursor, then its value is 0 [zero]. If the first argument is the pToken ".x" [dot and a number "x"], then its value is defined as the absolute screen x-coordinate of the top of the current cursor plus half of the width of the cursor [whether it is visible of not] plus the value of "x". If there is no current cursor, then its value is simply "x". If the second argument is the dot pToken ".", then its value is defined as the absolute screen y-coordinate of the top of the current cursor plus half of the height of the cursor [whether it is visible of not]. If there is no current cursor, then its value is 0 [zero]. If the second argument is the pToken ".y" [dot and a number "y"], then its value is defined as the absolute screen y-coordinate of the top of the current cursor plus half of the height of the cursor [whether it is visible of not] plus the value of "y". If there is no current cursor, then its value is simply "y". Here the screen coordinates "x" and "y" can take any integer value between -32768 [signed 0x8000] and 32767 [0x7FFF]. If the numbers are not supplied, then their default value 0 [zero] is used. The screen coordinate "x" is 0 [zero] at the left edge of your Palm's screen, and it is most of the time 159 at the right edge of it. The screen coordinate "y" is 0 [zero] at the top of your Palm's screen, and it is most of the time 159 at the bottom of it. However, if you have one of those new fancy Palms, then the right edge and the bottom may be located at a different "x" and "y" coordinate, respectively. NOTE. Depending on your Palm, the size and coordinates of the Graffiti area may vary. Use LapTopHack's "ESC 9" command to determine their values. Even better, use the Screen size and the Screen Coordinates commands in the Misc menu of [2339]pToolSet's pInfoTool. You are allowed to use "any" number of whitespaces before and after the brackets, the commas, and the arguments. The effect of this pFunction is that a "penDownEvent" event is placed into the event-queue of your Palm's OS with the appropriate coordinates. If "y" is less than the height of your screen [usually 159], then "x" and "y" are transformed into the local coordinates of the current window, that is, the window which was active when your pScript started to be performed. Otherwise, it is assumed that the "penDownEvent" takes place in the Graffiti area and the coordinates are left unchanged, that is, they are viewed as "absolute" ones. If this sounds complicated, let me assure you that you are absolutely right. However, luckily for you, you are under no obligation to use this pFunction unless you are a genuine Palm expert. The [2340]currValue [$$] of this pFunction is somewhat tricky. It given by the C-language assignment "currValue = x; currValue <<= 16; currValue += y;" which quite simple and useful for C-users, and it will be not really needed by the rest of us. The characters in the "/&penDown [...]" pFunction count as 0 [zero] towards the 55 byte limit. + The "/&stroke [...]" pFunction allows you to send a "penUpEvent" event to your Palm's OS, and it works similarly to the "/&penDown [...]" pFunction. However, if you think about it, you will realize that every "penUpEvent" must be preceded by a "penDownEvent" event. Hence the syntax of "/&stroke [...]" is different from "/&penDown [...]", and, in fact, it simulates a straight line stroke from one point to another on the screen and the Graffiti area of your Palm. The format of this pFunction is "/&stroke i [xStart, yStart, xEnd, yEnd]". Here the "i" [init] pSwitch is optional. Please read about this pSwitch [2341]here. The "x" and "y" arguments are either screen coordinates [numbers], or the dot pToken ".", or both as in ".17" or ". 17". If the first or third argument is the dot pToken ".", then its value is defined as the absolute screen x-coordinate of the top of the current cursor plus half of the width of the cursor [whether it is visible of not]. If there is no current cursor, then its value is 0 [zero]. If the first or third argument is the pToken ".xStart" or ".xEnd" [dot and a number], respectively, then its value is defined as the absolute screen x-coordinate of the top of the current cursor plus half of the width of the cursor [whether it is visible of not] plus the value of ".xStart" or ".xEnd", respectively. If there is no current cursor, then its value is simply "x". If the second or fourth argument is the dot pToken ".", then its value is defined as the absolute screen y-coordinate of the top of the current cursor plus half of the height of the cursor [whether it is visible of not]. If there is no current cursor, then its value is 0 [zero]. If the second or fourth argument is the pToken ".yStart" or ".yEnd" [dot and a number], respectively, then its value is defined as the absolute screen y-coordinate of the top of the current cursor plus half of the height of the cursor [whether it is visible of not] plus the value of ".yStart" or ".yEnd", respectively. If there is no current cursor, then its value is simply "x". In theory, the screen coordinates can take any integer value between -32768 [signed 0x8000] and 32767 [0x7FFF]. If the numbers are not supplied, then their default value 0 [zero] is used. In practice, all the evaluated arguments should be non-negative, and should be less than 1000. Otherwise, the pFunction may not work as expected, especially, if you run it on the [2342]Palm OS Emulator. The screen coordinates "xStart" and "yStart" are where the "penDownEvent" event supposedly took place prior to the "penUpEvent" you are about to create, whereas "xEnd" and "yEnd" define the point where the "penUpEvent" is about to take place. The screen coordinates "xStart" and "xEnd" are 0 [zero] at the left edge of your Palm's screen, and they are most of the time 159 at the right edge of it. The screen coordinates "yStart" and "yEnd" are 0 [zero] at the top of your Palm's screen, and they are most of the time 159 at the bottom of it. However, if you have one of those new fancy Palms, then the right edge and the bottom may be located at different screen coordinates. NOTE. Depending on your Palm, the size and coordinates of the Graffiti area may vary. Use LapTopHack's "ESC 9" command to determine their values. Even better, use the Screen size and the Screen Coordinates commands in the Misc menu of [2343]pToolSet's pInfoTool. You are allowed to use "any" number of whitespaces before and after the brackets, the commas, and the arguments. The effect of this pFunction is that your Palm is told that you tapped the screen or the Graffiti area at coordinates (xStart, yStart), and then you held your stylus down and moved it to the point (xEnd, yEnd) where you lifted it up. The [2344]currValue [$$] of this pFunction is somewhat tricky. It given by the C-language assignment "currValue = xEnd; currValue <<= 16; currValue += yEnd;" which quite simple and useful for C-users, and it will be not really needed by the rest of us. The characters in the "/&stroke [...]" pFunction count as 0 [zero] towards the 55 byte limit. + The "/&tap [...]" pFunction allows you to simulate a tap on the screen and the Graffiti area of your Palm. The format of this pFunction is "/&tap i [x, y]". Here the "i" [init] pSwitch is optional. Please read about this pSwitch [2345]here. The "x" and "y" arguments are either screen coordinates [numbers], or the dot pToken ".", or both as in ".17" or ". 17". If the first argument is the dot pToken ".", then its value is defined as the absolute screen x-coordinate of the top of the current cursor plus half of the width of the cursor [whether it is visible of not]. If there is no current cursor, then its value is 0 [zero]. If the first argument is the pToken ".x" [dot and a number "x"], then its value is defined as the absolute screen x-coordinate of the top of the current cursor plus half of the width of the cursor [whether it is visible of not] plus the value of "x". If there is no current cursor, then its value is simply "x". If the second argument is the dot pToken ".", then its value is defined as the absolute screen y-coordinate of the top of the current cursor plus half of the height of the cursor [whether it is visible of not]. If there is no current cursor, then its value is 0 [zero]. If the second argument is the pToken ".y" [dot and a number "y"], then its value is defined as the absolute screen y-coordinate of the top of the current cursor plus half of the height of the cursor [whether it is visible of not] plus the value of "y". If there is no current cursor, then its value is simply "y". In theory, the screen coordinates "x" and "y" can take any integer value between -32768 [signed 0x8000] and 32767 [0x7FFF]. If the numbers are not supplied, then their default value 0 [zero] is used. In practice, all the evaluated arguments should be non-negative, and should be less than 1000. Otherwise, the pFunction may not work as expected, especially, if you run it on the [2346]Palm OS Emulator. The screen coordinate "x" is 0 [zero] at the left edge of your Palm's screen, and it is most of the time 159 at the right edge of it. The screen coordinate "y" is 0 [zero] at the top of your Palm's screen, and it is most of the time 159 at the bottom of it. However, if you have one of those new fancy Palms, then the right edge and the bottom may be located at a different "x" and "y" coordinate, respectively. NOTE. Depending on your Palm, the size and coordinates of the Graffiti area may vary. Use LapTopHack's "ESC 9" command to determine their values. Even better, use the Screen size and the Screen Coordinates commands in the Misc menu of [2347]pToolSet's pInfoTool. NOTE. It may not be very prudent to use this pFunction with coordinates "x" and "y" which do not actually correspond to a point on your Palm's screen and the Graffiti area. You are allowed to use "any" number of whitespaces before and after the brackets, the commas, and the arguments, and even between the "." [period] pToken and the "x" and "y" arguments. The effect of this pFunction is that your Palm is told that you tapped the screen or the Graffiti area at coordinates (x, y), that is, certain events are placed in your Palm's pen-event-queue which simulate an actual tap at (x, y). NOTE. You are allowed to use more than one "/&tap [...]" pFunction in a single pScript. However, I was unable to figure out the maximal number. My guess is that it is definitely a no-no to use more than 60 of them, and, more realistically, you may not want to use more than 12 of them. I have a feeling that this discussion is academic since a couple of them should be sufficient in most pScripts. Have you succeeded in finding out the maximal number? The [2348]currValue [$$] of this pFunction is somewhat tricky. It given by the C-language assignment "currValue = x; currValue <<= 16; currValue += y;" which quite simple and useful for C-users, and it will be not really needed by the rest of us. The characters in the "/&tap [...]" pFunction count as 0 [zero] towards the 55 byte limit. + The "/&tapDown [...]" pFunction allows you to simulate the "down" portion of a tap on the screen and the Graffiti area of your Palm. The format of this pFunction is "/&tapDown i [x, y]". Here the "i" [init] pSwitch is optional. Please read about this pSwitch [2349]here. The "x" and "y" arguments are either screen coordinates [numbers], or the dot pToken ".", or both as in ".17" or ". 17". If the first argument is the dot pToken ".", then its value is defined as the absolute screen x-coordinate of the top of the current cursor plus half of the width of the cursor [whether it is visible of not]. If there is no current cursor, then its value is 0 [zero]. If the first argument is the pToken ".x" [dot and a number "x"], then its value is defined as the absolute screen x-coordinate of the top of the current cursor plus half of the width of the cursor [whether it is visible of not] plus the value of "x". If there is no current cursor, then its value is simply "x". If the second argument is the dot pToken ".", then its value is defined as the absolute screen y-coordinate of the top of the current cursor plus half of the height of the cursor [whether it is visible of not]. If there is no current cursor, then its value is 0 [zero]. If the second argument is the pToken ".y" [dot and a number "y"], then its value is defined as the absolute screen y-coordinate of the top of the current cursor plus half of the height of the cursor [whether it is visible of not] plus the value of "y". If there is no current cursor, then its value is simply "y". In theory, the screen coordinates "x" and "y" can take any integer value between -32768 [signed 0x8000] and 32767 [0x7FFF]. If the numbers are not supplied, then their default value 0 [zero] is used. In practice, all the evaluated arguments should be non-negative, and should be less than 1000. Otherwise, the pFunction may not work as expected, especially, if you run it on the [2350]Palm OS Emulator. The screen coordinate "x" is 0 [zero] at the left edge of your Palm's screen, and it is most of the time 159 at the right edge of it. The screen coordinate "y" is 0 [zero] at the top of your Palm's screen, and it is most of the time 159 at the bottom of it. However, if you have one of those new fancy Palms, then the right edge and the bottom may be located at a different "x" and "y" coordinate, respectively. NOTE. Depending on your Palm, the size and coordinates of the Graffiti area may vary. Use LapTopHack's "ESC 9" command to determine their values. Even better, use the Screen Size and the Screen Coordinates commands in the Misc menu of [2351]pToolSet's pInfoTool. NOTE. It may not be very prudent to use this pFunction with coordinates "x" and "y" which do not actually correspond to a point on your Palm's screen and the Graffiti area. You are allowed to use "any" number of whitespaces before and after the brackets, the commas, and the arguments. The effect of this pFunction is that your Palm is told that you tapped down on the screen or the Graffiti area at coordinates (x, y) but then you did not lift up the stylus, that is, certain events are placed in your Palm's pen-event-queue which simulate the "down" portion if an actual tap at (x, y). You are allowed to use more than one "/&tapDown [...]" pFunction in a single pScript. However, I was unable to figure out the maximal number. My guess is that it is definitely a no-no to use more than 60 of them, and, more realistically, you may not want to use more than 12 of them. I have a feeling that this discussion is academic since a couple of them should be sufficient in most pScripts. Have you succeeded in finding out the maximal number? The [2352]currValue [$$] of this pFunction is somewhat tricky. It given by the C-language assignment "currValue = x; currValue <<= 16; currValue += y;" which quite simple and useful for C-users, and it will be not really needed by the rest of us. The characters in the "/&tapDown [...]" pFunction count as 0 [zero] towards the 55 byte limit. NOTE. The "/&penDown [...]", "/&stroke [...]", "/&tap [...]", and "/&tapDown [...]" pFunctions are all different, although in some instances they may yield the same effect. You need to experiment to find out which one to use in your pScripts. Here is a short summary of each. o /&penDown [...] = a "penDownEvent" sent to the Palm OS o /&stroke [...] = simulates tapDown-move-liftUp o /&tap [...] = simulates a full tap ["down" and "up"] at one point o /&tapDown [...] = simulates the "down" portion of a tap at one point NOTE. The "/&penDown [...]", "/&stroke [...]", "/&tap [...]", and "/&tapDown [...]" pFunctions are all "runtime" in a sense since they do not have immediate effects but rather they generate events which are placed either into to general event-queue (/&penDown [...]) or into the pen-event-queue (the other three pFunctions). NOTE. You will find that the "/&penDown [...]" pFunction is useful only in very few Palm applications, whereas it is hard to overestimate the usefulness of the other three pFunctions. NOTE. You should ask the developers of your favorite Palm applications if and how "penDownEvent" events are used in them. HomeWork. What will the pScript{myMystery1::/&stroke [159, 175, 159, 175]} do? EXAMPLE. /&tapDown [x1, y1] /&tap [x2, y2] is the same as /&stroke [x1, y1, x2, y2]. EXAMPLE. The pScript {myExample::/&tap [., . 12]} will move the cursor down to the next hour in the DateBook application [as long as you are using the normal font]. If it doesn't work, then you may want to try {myExample::/&tap [.1, . 12]}. What is the difference between the two pScripts? HomeWork. What will the pScript {myMystery2::/&tap [10, .]} do in the DateBook application? + The "/&rand [...]" pFunction allows you to generate a string representation of a random number. The format of this pFunction is "/&rand [m, s]". Here "m", that is, the maximum size of the random number, is optional, and it can be any positive integer at most 32767 [0x7FFF]. If "m" is negative, or 0 [zero], or not supplied, then its default value 32767 is used. The second argument "s", that is, the new seed, is also optional, and it can be any integer between -2147483648 [signed 0x80000000] and 2147483647 [0x7FFFFFFF]. You should probably leave it always blank, or assign the value 0 [zero] to it unless you are an expert who knows what "new seed" means [standard C stuff]. If "s" is not supplied, then its default value 0 [zero] is used. In addition to being numbers, both variables may be [2353]pVariables [with an optional + or - sign] as well. Just make sure that their values are admissible. For instance, if you use the [2354]currValue [$$] for "m", then it better be a positive integer at most 32767 [0x7FFF]. You are allowed to use "any" number of whitespaces before and after the brackets, the commas, and the arguments. The effect of this pFunction is that the characters of the string consisting of the digits of the random number are placed into the key-event-queue. The [2355]currValue [$$] of this pFunction is the random number generated by it. The characters of the "/rand [...]" pFunction cost you the number of characters in the random number string in terms of the 55 byte limit. For instance, if the random number is 1776, then the string is "1776", and it counts as 4 characters towards the 55 byte limit. EXAMPLE. {myRandom::/&rand[,]} {myRandom::/&rand [$$,]} {myRandom::/&varSet@[$0,100]/&rand [$0,]} - yes, "right now" /&varSet@ [] {myRandom::/&rand [99, 0]} {myRandom::/&rand [-1, 0]} {myRandom:: /&rand [0 , 1776]} + The next three "runtime" "/&script [...]", "right now" "/&script@ [...]", and "last action" "/&script$ [...]" pFunctions are closely related, but they have distinctly different effects. The [2356]currValues [$$] of these triplet pFunctions are [2357]noCurrValue. + The "runtime" "/&script [...]" pFunction allows you to play a pScript within a pScript. The format of this pFunction is "/&script Dp [[2358]pTextToken]". Here the "D" [Debug] pSwitch is optional. The "p" [peditOnly] pSwitch is also optional. If you have the "p" pSwitch, then it forces LapTopHack and/or pToolSet [if you have them activated] to ignore this pFunction, and then, if you have an active pedit, pedit will process it. The contents of [2359]pTextToken consists of the first few letters of the [2360]pScriptName of a pScript [see [2361]here]. If such a pScript is found on a "first come first served" basis, then the corresponding pScript is performed. NOTE.You want to use the "p" pSwitch if your pScript has specifically pedit related components such as the "/G" pTokens, or some of the "/$" pTokens which are undefined in LapTopHack and pToolSet. You are allowed to use "any" number of whitespaces before and after the brackets and the argument. The effect of this pFunction is that a special signal is sent to the Palm OS via the key-event-queue, and when the Palm receives that signal, then it performs the chosen the pScript. The characters in the "/&script [...]" pFunction count as 7 [seven] towards the 55 byte limit. + The "right now" "/&script@ [...]" pFunction allows you to play a pScript within a pScript. The format of this pFunction is "/&script@ D [[2362]pTextToken]". Here the "D" [Debug] pSwitch is optional. This pFunction has no "p" [peditOnly] pSwitch. The contents of [2363]pTextToken consists of the first few letters of the [2364]pScriptName of a pScript [see [2365]here]. If such a pScript is found on a "first come first served" basis, then the corresponding pScript is performed. You are allowed to use "any" number of whitespaces before and after the brackets and the argument. The effect of this pFunction is that the chosen the pScript is performed immediately. The characters in the "/&script@ [...]" pFunction count as 0 zero towards the 55 byte limit. + The "last action" "/&script$ [...]" pFunction allows you to play a pScript within a pScript. The format of this pFunction is "/&script$ Dp [[2366]pTextToken]". Here the "D" [Debug] pSwitch is optional. The "p" [peditOnly] pSwitch is also optional. If you have the "p" pSwitch, then it forces LapTopHack and/or pToolSet [if you have them activated] to ignore this pFunction, and then, if you have an active pedit, pedit will process it. The contents of [2367]pTextToken consists of the first few letters of the [2368]pScriptName of a pScript [see [2369]here]. If such a pScript is found on a "first come first served" basis, then the corresponding pScript is performed. NOTE.You want to use the "p" pSwitch if your pScript has specifically pedit related components such as the "/G" pTokens, or some of the "/$" pTokens which are undefined in LapTopHack and pToolSet. You are allowed to use "any" number of whitespaces before and after the brackets and the argument. The effect of this pFunction is that a special signal is sent to the Palm OS in such a way that it is performs the chosen the pScript at the very end of the current pScript after all other actions have been taken care of. If more than one /&script$ [...]" is used in one pScript or if your pScript has nested /&script$ [...]" pFunctions, then they are performed on a "first come first served" basis at the end of the corresponding pScript. This may sound complicated simply because it is complicated [see the examples below]. The characters in the "/&script$ [...]" pFunction count as 0 [zero] towards the 55 byte limit. NOTE. Needless to say, that even though using the "/&script [...]", "/&script@ [...]", and "/&script$ [...]" pFunctions may lead to legitimate recursive calls of pScripts, such actions should not be abused and/or overdone since your Palm's RAM and processing power are both limited. NOTE. Using the "/&script [...]" and "/&script@ [...]" pFunctions is not only more elegant than pScripts such as "{forever::_`/&forever:}", but it also allows you to make such recursive calls when the pScript entry dialog is not available. NOTE. Using the "last action" "/&script$ [...]" pFunction is recommended in conjunction with the "/&stroke [...]", "/&tap [...]", and "/&tapDown [...]" pFunctions when you want some action to be performed after the tapping. EXAMPLE. Run this pScript starting from [2370]scr