HELP: Having trouble with Macros in v8.5.3 or later
-
So I have found the solution (thanks to @PeterJones) in the FAQ:
Find what:
Replace With:\x{000D}
Find what:
Replace With:\x{000A}
with Search mode set to Regular Expression and run Replace All. -
Hello, @datatraveller1, @peterjones and All,
@datatraveller1, I do not think that your macro really adds a line-break when you use the
\x{000D}and\x{000A}syntax in the<Macros>node of yourshortcut.xmlfile, inN++ v8.5.3Personally, adding the following section, in my portable N++
v5.8.3installation :<Macro name="ABC + Line-Break" Ctrl="no" Alt="no" Shift="no" Key="0"> <Action type="1" message="2170" wParam="0" lParam="0" sParam="A" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="B" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="C" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="\x{000D}" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="\x{000a}" /> </Macro>Results, when running this macro in a new tab, by the insertion of the literal text
ABC\x{000D}\x{000A}
Whereas, selecting the string, between the double-quotes of the
sParamattribute, and :-
Hitting the
ALTkey and, pressing simultaneously the0,1and3keys, on the numeric keypad, does insert a trueCRcharacter -
Hitting the
ALTkey and, pressing simultaneously the0,1and0keys, on the numeric keypad, does insert a trueLFcharacter
In the last two lines
Actionof the macro and gives this text :<Macro name="ABC + Line-Break" Ctrl="no" Alt="no" Shift="no" Key="0"> <Action type="1" message="2170" wParam="0" lParam="0" sParam="A" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="B" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="C" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam=" " /> <Action type="1" message="2170" wParam="0" lParam="0" sParam=" " /> </Macro>IMPORTANT : If you paste this text in a new tab, don’t forget to change the line-break of two last lines with
CRandLF, instead of keeping twoCRLFlines !Just select the two chars
CRLFof the last two lines and use theALT+ numeric keypad method to change the first line-break asCRand the second one asLF. Delete any non-intentional leadingTABchars, too.
Running this last version of the macro does write the
ABCstring followed with a Windows line-breakCRLF;-))My debug info :
Notepad++ v8.5.3 (64-bit) Build time : May 15 2023 - 06:09:36 Path : E:\853_x64\notepad++.exe Command Line : Admin mode : OFF Local Conf mode : ON Cloud Config : OFF OS Name : Windows 10 Pro (64-bit) OS Version : 22H2 OS Build : 19045.2965 Current ANSI codepage : 1252 Plugins : mimeTools (2.9) NppConverter (4.5) NppExport (0.4)Best Regards,
guy038
-
-
Hi @guy038 thank you, CR and LF got inserted as real line breaks with the FAQ solution:

-
I am having that kind of trubble my self too. I am getting errors of encoding in simple strings with accents for example with the use of the following caracters: à ù ò.
Please have a look at the following picture:
Maybe the new implementation is not yet complete.
Thank for reading.
-
Hello, @wonkawilly and All,
Finally, @wonkawilly, here is the right way to enter any character according to the new behaviour of macros, in N++
v.8.5.3!
-
Open your active
shortcuts.xmlfile in Notepad++ -
Insert the empty template, below, at the end of the Macros section, right before
</Macros>, in yourshortcuts.xmlfile :
<Macro name="Test" Ctrl="no" Alt="no" Shift="no" Key="0"> <Action type="1" message="2170" wParam="0" lParam="0" sParam="" /> </Macro>- Duplicate the line
<Action type="1" message="2170" wParam="0" lParam="0" sParam="" />, as many times as the number of chars to be inserted, incuding a possible line-break, with theCtrl + Dshortcut
=> In your exemple, we’ll add four lines
<Macro name="Test" Ctrl="no" Alt="no" Shift="no" Key="0"> <Action type="1" message="2170" wParam="0" lParam="0" sParam="" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="" /> </Macro>~~~-
Put your caret/cursor between the two double-quotes of each
sParamattribute -
Open the
Edit > Character Panelmenu option -
Double-click on the characters to insert, located under the ‘Character’ column of the
Character Panel. Thus, for the line-break chars, just double-click onCR, thenLF!
=> We get this functional macro :
<Macro name="Test" Ctrl="no" Alt="no" Shift="no" Key="0"> <Action type="1" message="2170" wParam="0" lParam="0" sParam="è" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="ò" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="ù" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam=" " /> <Action type="1" message="2170" wParam="0" lParam="0" sParam=" " /> </Macro>-
Save your
shortcuts.xmlfile -
Close and restart N++
Enjoy your
Testmacro !Best Regards,
guy038
-
-
@guy038 said in HELP: Having trouble with Macros in v8.5.3 or later:
here is the right way to enter any character according to the new behaviour of macros, in N++ v.8.5.3!
The right way became a little bit more cumbersome than before… I rather like to write whole string with the keyboard or even better by voice.
I have to say that if there is a thing that I really hate about N++ since the first usage is the macro system. I would like to see it replaced with a better language for example js, py, cs or else, keeping the capability to record commands executed into N++ and adding the possibility to modify a macro written into a real and serious programming language that is easily human readable and modifiable than the macro system actually implemented that is really ugly.
-
@wonkawilly As far as I have understood @guy038 and the FAQ, you simply have to replace the old values UTF-8 encoded literally with
è,àetc.I’m not sure if something like Python would work for the macro system but I partly agree that it is a bit ugly sometimes - In my case I don’t like that real line breaks get inserted into shortcuts.xml.
-
Hi, @wonkawilly, @datatraveller1 and all,
But, of course, if a character is available on your keyboard, you may, as well, just type in this character !!
It’s only for special chars as line-break chars and some others that you need the help of the
Character PanelFor instance, for the line-break chars, just use the method, described in my post to @datatraveller1, using
ALT+013andALT+010, on the numeric keypadBR
guy038
P.S :
@datatraveller1, The best when creating macros is to open the
Character Panel, first and :-
Double-click on [
CRand ]LF, each time you want to insert a line-break in a macro -
Double-click on any character when this char is not available on your keyboard !
-
-
Certainly copy and paste of a character from another source also works fine as an alternative to using the Character Panel, which has a limited number of possible characters anyway.
But, as stated, probably Character Panel is a good choice for carriage-return and line-feed characters.
-
I was going back through some of the posts here, to see if there are improvements that can be made to the FAQ.
I do not think that your macro really adds a line-break when you use the \x{000D} and \x{000A} syntax in the <Macros> node of your shortcut.xml file, in N++ v8.5.3
I think you misread @datatraveller1: you seemed to asssume he changed to the literal
<Action type="1" message="2170" wParam="0" lParam="0" sParam="\x{000D}" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="\x{000A}" />If that had been the case, it wouldn’t work. But based on the “find what” and “replace with” in the post you replied to, he actually followed the advice found in the FAQ, which is when editing
shortcuts.xmlto use Notepad++ Replace window to run a regex search-and-replace. Using the “find what” and “replace with” that @datatraveller1 mentioned, and which I suggested in the FAQ, will change the
sequence to the actual CR character and
with the actual LF character.Later, @guy038 also wrote:
Duplicate the line
<Action type="1" message="2170" wParam="0" lParam="0" sParam="" />, as many times as the number of chars to be inserted, including a possible line-break, with the Ctrl + D shortcutThere’s no need. The macro recorder just puts one character per
2170-message, but that’s not a restriction of the macro playback. If you are editing a macro and want to insert the textèòù[CRLF], the single action<Action type="1" message="2170" wParam="0" lParam="0" sParam="èòù " />will work (assuming the linebreak in the sParam is really a CR and LF)
That said, based on what I’ve re-read here, I will suggest the
Alt+013andAlt+010methods of entering those characters, and using the Character Panel (or Run > Run… >charmap.exe) for entering characters that aren’t on your keyboard. -
Hello, @wonkawilly, @datatraveller1, @alan-kilborn and all,
Oh… Of course, I forgot to mention that, in my previous posts, I refered to macros already created by a user with a N++ version prior to
v8.5.3!If, with N++
v.8.5.3, you just create a new macro, containing one or several line-break(s), it’ll be correctly recorded !However, I noticed some oddities when recording these line-breaks !
Follow these different actions for testing :
-
Open N++
v.8.5.3 -
Open a new tab
-
If the line-break format of the new tab is not
Windows (CR LF), in the status bar, change it with the commandEdit > EOL Conversion > Windows (CR LF) -
Start recording a macro with the command
Macro > Start Recording -
In the new tab, just type in the string
ABCand hit theEnterkey -
Then, type in the string
DEFand hit , again, theEnterkey -
Stop recording the current macro with the command
Macro > Stop Recording -
Click on the the menu option
Macro > Save Current Recorded Macro... -
Give the name
Test_CRLFto this macro -
Delete all contents of this new tab with a
Ctrl + Zoperation -
Change the EOL format of the new tab to Unix, with the command
Edit > EOL Conversion > Unix (LF) -
Start recording a macro with the command
Macro > Start Recording -
In the new tab, just type in the string
GHIand hit theEnterkey -
Then, type in the string
JKLand hit , again, theEnterkey -
Stop recording the current macro with the command
Macro > Stop Recording -
Click on the the menu option
Macro > Save Current Recorded Macro... -
Give the name
Test_LFto this macro -
Delete all contents of this new tab with a
Ctrl + Zoperation -
Change the EOL format of the new tab to Mac, with the command
Edit > EOL Conversion > Macintosh (CR) -
Start recording a macro with the command
Macro > Start Recording -
In the new tab, just type in the string
MNOand hit theEnterkey -
Then, type in the string
PQRand hit , again, theEnterkey -
Stop recording the current macro with the command
Macro > Stop Recording -
Click on the the menu option
Macro > Save Current Recorded Macro... -
Give the name
Test_CRto this macro -
Close N++
v.8.5.3, without saving the new tab -
Restart N++
v.8.5.3 -
Open your active
shortcuts.xmlfile -
Note the contents of the three macros
Test_CRLF,Test_LFandTest_CR:-
In the
Test_CRLFmacro, the first part of each EOL recording is theCRcharacter ( OK ) but the second part isCRLFand notLF( ?? ) -
In the
Test_LFmacro, the two EOL recording are theCRLFcharacters and not theLFchars ( ?? ) -
In the
Test_CRmacro, the two EOL recording are correctly theCRcharacters ( OK )
-
I don’t know, if we should trigger an
GitHubissue for these oddities ??Best Regards
guy038
P.S. : I’ve just seen the @peterjones’s post… and will have a look at it !
-
-
@guy038 said in HELP: Having trouble with Macros in v8.5.3 or later:
Note the contents of the macros Test_CRLF , Test_LF
I can duplicate your poor results with these two. :-(
if we should trigger an GitHub issue for these oddities ??
Either that, or post about it in the 8.5.3 release thread, HERE.
-
G guy038 referenced this topic on
-
I’ve a similar problem.
I’ve created a macro doing a lot of things, included changing “word” into ‘word’ (look for ‘ ’ instead of " ").
This worked ok until last update (8.5.3, build May 15 2023 06:07:16).
Now the macro (I don’have touched it) change “word” into& # x 2 0 1 8 ; w o r d & # x 2 0 1 8 ;
Please ignore spaces: if I don’t insert spaces, this forum convert “& # x 2 0 1 8 ; w o r d & # x 2 0 1 8 ;” into " ‘word’ " and it’s impossible to understand what I mean.
I need Notepad++ don’t “convert” the ‘ ’ symbols.I’ve tried to search my macro recorded but I don’t find it in shortcuts.xml. Where I can find it? My macro is called “calcio (prime correzioni)” but in shortcuts.xml I find only “Trim Trailing Space and Save”. BTW the date of shortcuts.xml is from 2021 and maybe my macro was created after.
-
Hello, @massimo-piscopo and All,
I suppose that you have a standard installation with N++ installer ! Then, you must look for the real location of your
shortcuts.xmlfile !
Follow the steps, below :
-
Open your Notepad++
v8.5.3, as usual -
Click on the
Windows Logokey and, simultaneously, hit theRkey -
In the Execute window, type in
Explorer.exeand hit theEnterkey
=> The File Explorer program should start
-
Clic on the ‘STAR’ and type in the string
%appdata%\Notepad++ -
Valid with the
Enterkey
=> You should normally see a
shortcuts.xmlfile, along with some others files- Clic on the
shortcuts.xmlfile and drag this file into your notepad++ window
=> You should see, in the
<Macros>section, your macro namedcalcio (prime correczioni)-
Now, open the Replace dialog (
Ctrl + H) -
Untick all box options
-
SEARCH
‘ -
REPLACE
\x{2018} -
Check the
wrap aroundoption -
Select the
Regular expressionsearch mode ( IMPORTANT ) -
Click on the
Replace Allbutton -
Save the changes of your
shortcuts.xmlfile -
Close Notepad++
-
Restart Notepad++
=> Your macro should be OK and do what it is designed for :-)
Best Regards,
guy038
-
-
I don’t find it in
shortcuts.xmlIt’s there, or your macro doesn’t exist when you exit Notepad++ and restart. Did you look in the right
shortcuts.xml?If you had read the first post in this discussion, you would have seen the we asked you to supply your ?-menu’s Debug Info. Because you chose not to do so, we have to assume the location of your
shortcuts.xmlis in%AppData%\Notepad++\shortcuts.xml, as @guy038 guessed while I was typing this. -
@guy038 and @PeterJones THANK YOU SO MUCH, I’ve solved. <3
-
@datatraveller1 said in HELP: Having trouble with Macros in v8.5.3 or later:
@wonkawilly As far as I have understood @guy038 and the FAQ, you simply have to replace the old values UTF-8 encoded literally with
è,àetc.I’m not sure if something like Python would work for the macro system but I partly agree that it is a bit ugly sometimes - In my case I don’t like that real line breaks get inserted into shortcuts.xml.
It should be good enough to see it replaced with “\r\n” as in regular expression syntax. Nevertheless, that solution would of course be good just to “survive”, not in the long run, because nevertheless the optimus would be to have a complete new macro system as in LibreOffice, MsOffice and so on. It would be a huge improvement even replacing the current macro system in npp with a new macro system based on AutoIt language and macro recorder.
The current macro system is too cryptic and too limited. Compare this row
<Action type=“1” message=“2170” wParam=“0” lParam=“0” sParam=“è” />
with its equivalent in a simple scripting language in which you can even do loops or if/else and so much more.
IMHO the current macro system in N++ is going old… and really needs retirement, better sooner than later…
Also another ugly thing is that n++ saves new recorded macros only on exit: it would be better to save new created macros on click on the Save Macro button so they could be edited without the need of restarting npp: other ugly and incomprehensible thing. -
Moving to the next bookmark does not work inside a macro. No matter where the cursor is, it will always go to a specific bookmark.
-
@Cement-Knight said in HELP: Having trouble with Macros in v8.5.3 or later:
Moving to the next bookmark does not work inside a macro. No matter where the cursor is, it will always go to a specific bookmark.
You might want to start a new thread with that, as it is very unrelated to previous conversation in this thread.
-
Good News
It turns out that XML’s five predefined named-entities still work even in Notepad++ v8.5.3 and newer. Also, the entities made up of two hex digits still work.
The following macro shows the named entities that still work in macro sParam values with v8.5.3 and newer, as well as showing how to get a
CRLFnewline sequence using the two-hex-digit entities. You can use this as an example for when you are manually editing your macros to work for v8.5.3 and newer:<Macro name="XML Named Entities" Ctrl="no" Alt="no" Shift="no" Key="0"> <Action type="1" message="2170" wParam="0" lParam="0" sParam="&" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="<" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam=">" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="'" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam=""" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="
" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="
" /> </Macro>And here are all the two-digit hex entities for ASCII characters from 1 to 127:
<Macro name="ASCII 2-digit Hex Entities" Ctrl="no" Alt="no" Shift="no" Key="0"> <Action type="1" message="2170" wParam="0" lParam="0" sParam="" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="	" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="
" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="
" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="
" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="
" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="
" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="
" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam=" " /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="!" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam=""" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="#" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="$" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="%" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="&" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="'" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="(" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam=")" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="*" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="+" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="," /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="-" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="." /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="/" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="
" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="
" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="0" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="1" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="2" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="3" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="4" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="5" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="6" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="7" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="8" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="9" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam=":" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam=";" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="<" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="=" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam=">" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="?" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="
" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="
" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="@" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="A" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="B" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="C" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="D" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="E" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="F" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="G" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="H" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="I" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="J" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="K" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="L" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="M" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="N" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="O" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="
" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="
" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="P" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="Q" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="R" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="S" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="T" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="U" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="V" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="W" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="X" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="Y" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="Z" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="[" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="\" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="]" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="^" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="_" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="
" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="
" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="`" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="a" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="b" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="c" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="d" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="e" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="f" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="g" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="h" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="i" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="j" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="k" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="l" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="m" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="n" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="o" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="
" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="
" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="p" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="q" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="r" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="s" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="t" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="u" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="v" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="w" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="x" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="y" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="z" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="{" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="|" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="}" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="~" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="
" /> <Action type="1" message="2170" wParam="0" lParam="0" sParam="
" /> </Macro>The FAQ has been updated to match this new information.