VBacs (Visual Basic Emacs)
by Christopher Rath & John Cooper
I am a long-time Emacs usergenerally XEmacs, but GNU Emacs, µEmacs, Microemacs, Golem, and other variants tooand am very frustrated by Microsofts default MS Word user interface. So, I created some Visual Basic for Applications (VBA) macros which remap my keyboard to provide a basic set of Emacs key bindings. Download the following link and follow the instructions enclosed therein (release notes and the change log appear at the bottom of this webpage). If you're looking for an older release of VBacs, see the bottom of this webpage.
Note re: Word 2013 and 2016 Starting with Word 2013, Microsoft has made some material changes the Word object model; specifically, w.r.t. comments. So, some of VBacs functionality breaks down when editing comments.
For Word 2013 and higher: VBacs_5.5.zip The macros are copyrighted, but are distributed under the GNU Lesser Public License.
For Word 2007 and lower: VBacs_3.08.zip The macros are copyrighted, but are distributed under the GNU Lesser Public License.
For Word 2003 and lower: VBacs_2.17.zip The macros are copyrighted, but are distributed under the GNU Lesser Public License.
Thanks to Word97 Annoyances, by Woody Leonhard, Lee Hudspeth & T. J. Lee; the book that showed me how to start the process of constructing this macro set.
Because Outlook 2007 no longer inherits Word 2007 customisations, starting in Office 2007 VBacs does not provide any Emacs bindings in Outlook. To that end, John Cooper has taken the AutoHotKey product (GPLed) and put together an AutoHotKey script to provide Emacs key bindings in Outlook 2007. His script can be found in AutoHotKey's Scripts & Functions forum; he's entitled his script "AutoMacs".
Making MSWord look a little like Emacs is only one part of the changes I make to MSWord, I also make a few other changes. I have captured these customizations in a Personal.dotx template which I also place in MSWords Startup folder. My current version of this package can be found at the following link (note that much less release discipline has been applied to this package, compared with VBacs.dotx):
For Word 2007 and higher: Personal_3.26.zip These macros are copyrighted but distributed under the GNU Lesser Public License.
For Word 2003 and lower: Personal_1.20.zip These macros are copyrighted but distributed under the GNU Lesser Public License.
For other VBA code I've authored, see my Visual Basic for Applications (VBA) Resources.
' VBacs - VBA to create Emacs short-cut keys in MS Word.
' Authors: Christopher Rath <>
' & John Cooper <>
' Date: 2024-02-24
' Version: 5.0
' Archived at: http://www.rath.ca/Misc/VBacs/
' Copyright (c) 1998-2024 Christopher Rath
' Distributed under the GNU Lesser General Public License v2.1
' (see the LGPL_License VBA module for the license text)
' Warranty: None, see the license.
I would like to thank the following individuals for their code and idea contributions to VBacs:
MS Office 2016 (64bit) on Windows 10 Pro is my primary development, test, and personal use environment for VBacs; however, here's what I know about VBacs compatibility in various environments.
Environment | Commentary |
---|---|
MS Office on MS Windows | VBacs version 2.xx has been tested with MS Office 2003, users have also reported success running it with MS Office 97, MS Office 2000, MS Office XP, and MS Office 2007 (except for Outlook 2007). VBacs version 3.xx is only compatible with MS Office 2007 through 2010. Microsoft changed the MS Word object model in 2013 and this broke the universal argument and internal ExtendMode handling in VBacs. VBacs version 4.xx has only been tested on MS Office 2016; however, it should work on all versions starting with 2007. The universal argument and internal ExtendMode code has been removed from VBacs v4.xx. In place of ExtendMode emulation, key bindings to MS Words own extend movement functions have been added (see Handy Non-Emacs Bindings, below). |
MS Word on MacOS | I have performed very limited testing of VBacs version 2.09 on MS Word 2004 running under Mac OS X v10.4 Tiger. What I found in that testing is that the default installation of MS Word does not define a valid path to the Startup folder (open the Preferences panel & go to the File Locations section). To allow VBacs to run ensure that you have updated the Startup path to point to a folder to which your userid has write permission. For some strange reason, the System.PrivateProfileString VBA function does not properly resolve filename paths and so VBacs.ini is created with a name of startup\VBacs.ini. While this doesn't seem to impede VBacs operation, it is an annoyance. |
Copy and paste behaviours are still a bit wonky starting with Word 2013: VBacs copy actions dont always have any effect, and VBacs paste actions dont always paste the format one expects. As I explore Word 2016 I will continue to try and the debug copy-paste functionality.
To install the VBacs macros into your copy of MS Word:
Permanent removal:
Temporary removal:
When VBacs is installed, the following options panel is available from MS Words Tools menu: ToolsàVBacs options .
The first time MS Word is run following the installation of VBacs, a configuration file, VBacs.ini, is created in your MS Word Startup folder. Edit VBacs.ini using the VBacs option panel (see above) or Notepad.
For those who prefer to manually edit the file, the VBacs.ini variables are as follows:
GosmacsTransposeChars determines whether Ctrl+T transposes characters as Emacs would (where the characters on either side of the cursor are transposed), or whether it will transpose the two characters immediately preceding the cursor. The default value for this variable is False; which enables traditional Emacs behaviour. Use a value of True to enable the non-Emacs behaviour.
KillWholeLine determines whether Ctrl+K kills the paragraph marker when it terminates the end of the line being killed. The default value is False; which will not include the paragraph marker in the killed text. Use a value of True to include the paragraph marker in the killed text. Note, a line containing only a paragraph mark is always killed, regardless of the setting of this variable.
CollapseSelectionOnCopy determines what to do with the active selection region when it is copied (for example, using Alt+W). A value of True collapses the selection on copy; just as Emacs does. A value of False does not collapse the selection; which is how MS Word behaves. The default value is True.
BoldItalicAsStyles determines what to do when the [Ctrl]X-B or [Ctrl]-I shortcuts are used. A value of True tells VBacs to apply bold or italic using the Strong and Emphasis character styles. A value of False tells VBacs to apply told or italic using the font property. The default value is False.
UseEasyFind determines whether search-forward/search-backward (Ctrl+S & Ctrl+R) invoke the EasyFind search panel or use the older VBacs search mechanism. Note, the regular expression search commands are not affected by this option; since EasyFind does not support regular expression searching at this time.
Once the VBacs template is installed, the following shortcuts are available:
Standard Emacs Bindings |
|
---|---|
Action | Key Binding |
Line Up |
Ctrl+P |
Line Down |
Ctrl+N |
End of Line |
Ctrl+E |
Start of Line |
Ctrl+A |
Start of Buffer |
Shift+Alt+< |
End of Buffer |
Shift+Alt+> |
Character Forward |
Ctrl+F |
Character Backward |
Ctrl+B |
Word Forward |
Alt+F |
Word Backward |
Alt+B |
Sentence Forward | Alt+E |
Sentence Backward | Alt+A |
Paragraph Up |
Shift+Alt+{ Ctrl+Up |
Paragraph Down | Shift+Alt+} Ctrl+Down |
Page Down |
Ctrl+V |
Page Up |
Alt+V |
Go To Previous Page | Ctrl+X [ |
Go To Next Page | Ctrl+X ] |
Recenter | Ctrl+L |
Goto Line | Alt+G |
Search |
Ctrl+S |
Regexp Search | Alt+Ctrl+S Alt+Ctrl+R |
Replace | Alt+% Ctrl+Alt+% |
Set Mark | Ctrl+Space Ctrl+@ |
Cut Selection |
Ctrl+W |
Paste Selection |
Ctrl+Y |
Copy Selection |
Alt+W |
Select Whole Buffer | Ctrl+X H |
Delete Word Forward |
Alt+D |
Word Delete Backward |
Alt+Backspace |
Delete |
Ctrl+D |
Delete to End of Line |
Ctrl+K |
Edit Undo |
Shift+Ctrl+- |
Cancel |
Ctrl+G |
Tab |
Ctrl+I |
Save File |
Ctrl+X S |
Close File |
Ctrl+X K |
Exit MS Word |
Ctrl+X C |
Open File |
Ctrl+X F |
Undo |
See Edit Undo |
Exchange Point And Mark | Ctrl+X X |
Open Line Above |
Ctrl+O |
Capitalize Word |
Alt+C |
Upshift Word |
Alt+U |
Downshift Word |
Alt+L |
Delete Window |
Crtl+X 0 |
Close Other Windows |
Crtl+X 1 |
Split Window Vertically |
Ctrl+X 2 |
Go To Other Window |
Ctrl+X O |
Switch To Buffer | Ctrl+X B |
Iconify MS Word | Ctrl+Z |
Centre Paragraph | Alt+S |
Transpose Characters | Ctrl+T |
Transpose Words | Alt+T |
Increase Indent | Ctrl+X TAB |
Fill Paragraph | Alt+Q |
Handy Non-Emacs Bindings |
|
Action | Key Binding |
Paste Plain (see note, below) |
Ctrl+Shift+Y |
Decrease Indent | Ctrl+X Shift+TAB |
Line Up Extend Selection | Ctrl+Shift+P |
Line Down Extend Selection | Ctrl+Shift+N |
End of Line Extend Selection | Ctrl+Shift+E |
Start of Line Extend Selection | Ctrl+Shift+A |
Character Forward Extend Selection | Ctrl+Shift+F |
Character Backward Extend Selection | Ctrl+Shift+B |
Word Forward Extend Selection |
Alt+Shift+F Ctrl+Shift+Right |
Word Backward Extend Selection |
Alt+Shift+B Ctrl+Shift+Left |
EasyFind Bindings
|
|
Action | Key Binding |
Close panel and return to pre-search text selection | Ctrl-G Escape |
Collapse selection, set mark, and close the panel | Ctrl-M |
Leave selection in place, recentre, and close the panel | Ctrl-L |
Search Up or populate previous search string |
Ctrl-R Ctrl-Page Up |
Search Down or populate previous search string |
Ctrl-S Ctrl-Page Down |
Start of line |
Ctrl+A Home |
End of line |
Ctrl-E End |
Character Forward |
Ctrl-F Right |
Character backward |
Ctrl+B Left |
Line Up |
Ctrl+P Up |
Line Down |
Ctrl-N Down |
Page Up |
Alt+V Page Up |
Page Down |
Ctrl+V Page Down |
Start of Buffer |
Ctrl+Home |
End of Buffer |
Ctrl+End |
Access To MS Word Bindings
|
|
Action | Key Binding |
Select All |
Ctrl+Q A |
Bold |
Ctrl+Q B |
Edit Find | Ctrl+Q F |
Italic |
Ctrl+Q I |
Insert Hyperlink | Ctrl+Q K |
New Blank Document | Ctrl+Q N |
|
Ctrl+Q P |
Hanging Indent | Ctrl+Q T |
Underline | Ctrl+Q U |
Tab (in a table) |
Ctrl+Q [Tab] |
ResetChar | Ctrl+Q [Space] |
Notes:
EasyFind is a find panel tool written and distributed by Chris Devrell. Customisation of EasyFind for inclusion in VBacs was performed by Christopher Rath.
Chris Devrell has kindly consented to allowing his EasyFind code to be embedded in VBacs, and to that end, EasyFind was modified to alter its key bindings to conform with Emacs; thus creating EasyFind for VBacs. EasyFind in its original unaltered state is available from http://www.cdev.co.uk/. Chris D. has other MS Word tools available on his website that you may find useful.
EasyFind for VBacs differs from classic EasyFind in the following manner:
The EasyFind search panel attempts to emulate Emacs search behaviour:
A similar set of macros is available from http://www.wordstar.org/ for those who would rather be using WordStar than MS Word. Note that the WordStar template file completely reorganizes MSWords menu structure to match WordStar 7 for MS-DOS's.
A new and very interesting competitor to VBacs has recently (circa 2005) appeared: XKeymacs. XKeymacs allows you to use Emacs key bindings with any MS Windows application. Ive been trying it out, and while it has a few quirks it is quite usable. That said, I attempted to use XKeymacs for a couple of weeks and in my (albeit limited) experience the XKeymacs bindings are too much of a dislocation for me: someone who has used both Unix and MS-DOS/Windows since 1985. For me, the VBacs key bindings are a reasonable compromise between MS Windows' shortcuts and Emacs bindings; whereas XKeymacs often conflict with the Windows key bindings for which there are no Emacs equivalents. I will monitor XKeymacs progress with interest, and should its bindings become more easily configurable.
For a PowerPoint key re-binding Add-In see OfficeOne Shortcuts for PowerPoint (http://officeone.mvps.org/ppshortcuts/ppshortcuts_link.html). I have looked at attempting to port VBacs to PowerPoint; however, PowerPoint does not natively support the kind of wholesale key rebinding that Word supports. The only way to accomplish the task is to capture and process every key press; which is what OfficeOne Shortcuts for PowerPoint claims to do.
v5.5 [2024-04-15] Added Ctrl-D and Ctrl-W to the list of keys that EasyFind handles.
v5.4 [2024-04-08] Added [TAB] to the list of keys that EasyFind handles.
v5.3 [2024-04-05] Fine-tuned how fill-para works.
v5.2 [2024-03-19] Fixed bug where ^S or ^R rang the bell.
v5.1 [2024-03-09] Fixed bug where ^S or ^R restored the previous search string and the second occurrence of the string was found instead of the first. Enhanced About panel text.
v5.0 [2024-02-24] Added a few more simply key bindings: Ctrl-Home & Ctrl-End. Since the refactored EasyFind is now complete; up-version to 5.0.
v4.10 [2024-02-18] Fixed a couple of bugs in the new EasyFind code; added the missing Ctrl-S and Ctrl-R populate search field functionality; and added Ctrl-L as a handled binding.
v4.09 [2024-02-17] Completely re-wrote the EasyFind code; most of the original code has been replaced. Since the Sendkeys code had been broken by an O365 update at some point in the recent past, the handling of simple Emacs key bindings is now done directly in the EasyFind code. Enhanced the Set Mark code so that it more closely emulates Emacs behaviour.
v4.08 [2024-02-13] Separate out the Ctrl-Left, Ctrl-Right, Ctrl-Up, & Ctrl-Down key bindings so that Alt-F, Alt-B, Alt-{, Alt-} work properly in a table.
v4.07 [2024-02-11] Fixed EasyFind (it stopped working in O365); however, the Send Keys code that was handling simple Emacs key bindings had to be removed. For the moment there is no replacement will be restored in a future release.
v4.06 [2023-03-16] Implemented fill-paragraph (assigned to Alt-Q).
v4.05 [2022-05-09] Added an About panel. Implemented the apply bold or italic as character style functionality, and reorganised the Options panel to accommodate the additional option.
v4.04 [2020-04-02] Implemented Excel Ctrl+Cursor emulation for when the cursor is in a table.
v4.03 [2019-09-25] Implemented transposeChars() in a new way to work around a bug that MS introduced in a recent Office update.
v4.02 [2019-09-07] Corrected a bug in paste-plain; it now works more reliably.
v4.01 [2019-07-01] Fixed key bindings (shortcuts), that for no reason I can recall, have become unbound.
v4.00 [2016-05-30] First MS Word 2016 native version.
v3.07 [2016-03-30] Added key bindings for IncreaseIndent and DecreaseIndent. The former corresponds to the Emacs function indent-rigidly. I did not implement the prefix functionality.
v3.06 [2013-10-18] Corrected a bug where Ctrl-D and [DEL] didnt reset the VBacs selection toggle.
v3.05 [2013-07-11] Corrected a bug where a VBA threw an error when copy or cut were attempted but no text was selected.
v3.04 [2013-02-17] Corrected a bug where Ctrl-L didnt work if the vertical scroll bar was not visible.
v3.03 [2010-09-21] Correct another EasyFind bugthis one is a window interaction issue that occurs on Windows 7 (64 bit) platforms: when the EasyFind panel attempts to close itself and hand control back to the MS Word document window, control is incorrectly passed to Windows Explorer.
v3.01 [2010-07-20] Correct EasyFind bug that was introduced in v3.00; where the panel is opened with the previous search string still appearing. Corrected an EasyFind bug where when the previous search string was recalled (by pressing [C]s or [C]r with an empty search field) EasyFind didnt immediately search for the value.
v3.00 [2010-07-14] First MS Word 2007 native version. Made VBacsPastePlain() much more robust. Fixed Ctrl-X, O (other-window), which had been broken by Word 2007. We now cache VBacs.ini file values; to speed up execution when querying them. Extended Universal Argument applicability to a few more cursor movements. Enhanced copy function with a CollapseSelectionOnCopy options setting.
v2.17 [2007-07-31] Fixed mis-assigned Alt+Backspace key binding (Ctrl+Backspace was inadvertently assigned instead when the VBacsDeleteWordLeft function was created). Removed binding of Ctrl+Left and Ctrl+Right to associated VBacs due to conflicts with Outlook.
v2.16 [2007-07-30] Changed VBacsEditCopy to collapse to the appropriate end of the selection based on Selection.StartIsActive. Bound Ctrl+C to VBacsEditCopy. Added VBacsSent{Left,Right} (bound to Alt+A and Alt+E respectively) to utilize internalExtendMode. In VBacsEditCopy, test that the start and end of the range are not equal prior to calling Selection.Range.Copy (otherwise an error is thrown when no selection is present). Added VBacsDeleteWord{Left,Right} which honour the universalArgument.
v2.15 [2007-07-29] Added VBacsEditCut, VBacsEditCopy and associated key bindings. Added a new Ctrl+Q, V binding to allow access to MS Words actual EditCut command (which is usually bound to Ctrl+V). Corrected VBacsCapitalizeWord, VBacsDowncaseWord and VBacsUpcaseWord so that they move to the end of the selection and reset internalExtendMode and the universalArgument. Extended VBacsOpenLineAbove to use the universalArgument. Fixed VBacsTransposeChars and VBacsTransposeWords so that they reset internalExtendMode and the universalArgument. Added smart paste save-restore code to VBacsTransposeWords. Added a Bugs section to the documentation.
v2.14 [2007-07-23] Assigned PageUp and PageDown keys to VBacsPageUP and VBacsPageDown, respectively. Added VBacsParaUp, VBacsParaDown, VBacsGoToNextPage, and VBacsGoToPreviousPage functions and associated key bindings. Fixed VBacsClearToEndOfLine so that it resets internalExtendMode; it also now resets the universalArgument even though it doesn't use it.
v2.13 [2007-07-16] Fixed Ctrl+@ assignment (it needed to be assigned to VBacsSetMark) and the key binding documentation for Set Mark. Assigned the up-down-left-right cursor keys to the appropriate internal VBacs cursor move functions (to match Ctrl+F, Ctrl+P, etc.). Note: not all of the cursor movement bindings have been converted to use the new internal set mark method; the remaining bindings will be converted as we have time to complete the work.
v2.12 [2007-07-12] Implemented basic support for Emacs universal-argument function (Ctrl+U), with extend mode remaining active after a movement command is issued using the universal-argument. Removed the various MoveXXX4 methods as they are now redundant. Added VBacsCancel (bound to Ctrl+G) which will cancel extend mode and also remove the selection highlight, as per Emacs. Added VBacsExchangePointAndMark (bound to Ctrl+X, X). This switches the logical insertion point between the start and end of the selection, allowing either end of the selection to be expanded or contracted. All the preceding changes in this release were coded by John Cooper; Johns contributions over the past couple of years are significant enough that he is now listed as co-author. Also in this release is the correction of a bug in EasyFind; where PageUp and PageDown key presses were ignored by the EasyFind panel.
v2.11 [2007-06-28] Added error handling code to VBacsClearToEndOfLine() in order to fix bad behaviour in certain circumstances when the insertion point is at the end of a line.
v2.10 [2007-03-18] When reading & writing the VBacs.ini file, VBacs now checks for the Operating System type and accordingly uses either a slash or backslash.
v2.09 [2007-02-15] Updated Ctrl-u n, Ctrl-u p, Ctrl-u f, & Ctrl-u b interact with use selected text; they now attempt to extend a selection if the user has already selected text.
v2.08 [2007-01-04] Added beginning of sentence (Alt-a) and end of sentence (Alt-e) bindings.
v2.07 [2006-03-13] Corrected reverse search bug: In reverse incremental search (^R), the cursor moves back one hit per keystroke, even if that key matches the current hit. It should remain on the current word until/unless the added letter fails to match in the current word. E.g.,: type: ^R f l a s h in a document containing many instances of the word "flash". '^Rf' moves back to the nearest previous f-word, 'l' backs up to the nearest fl-word,.... If we are now on the word flash but keep typing , 'a' backs up to the nearest fla-word, and so on, even though 'fla' matches the present word and no more searching is necessary. The fix I have applied is not without its faults: after pressing ^R to find preceding occurrences, if you extend the search string the search begins again where you began your search.
v2.06 [2005-10-27] Added extra code to the Ctrl+L binding so that it better emulates Emacs recenter binding.
v2.05 [2005-10-09] Added Ctrl+L binding.
v2.04 [2005-09-30] Added Ctrl+Alt+% binding (in Emacs this invokes Query Replace regexp, but here in VBacs we simply open the Find-Replace panel). Fixed a problem where EasyFind wasnt properly detecting a number of non-alphanumeric key presses.
v2.03 [2005-09-27] Added Ctrl-Q,N binding.
v2.02 [2005-09-25] Added EasyFind (see above), added Alt+G binding to Goto Line panel, and added a VBacs Options panel (see above).
v2.01 [2005-06-25] Removed Alt+G key bindings that had crept into this package, but are not Emacs bindings.
v2.00 [2005-06-08] Some VBacs behaviours have fundamentally changed, so I have decided to increment the major version number in acknowledgement of those changes! Added a VBacs.ini file (see above for details), changing Ctrl+T and Alt+T so that they refuse to run when a region of text is selected, and added two configuration variables to enable alternate behaviour for character transpose and kill to end of line. Added enhancements and corrections submitted by John Cooper: Ctrl-O conforms to Emacs behaviour (insert newline and leave point before it); corrected Ctrl+T so that it functions correctly if the user has SmartPaste enabled; implemented more Emacs-like search-forward/backward functionality, including regular expression searches (the old MS Word function is available through Ctrl-Q); added 4 universal-argument prefixed commands to move the cursor 4 lines/characters at a time (Ctrl+U P; Ctrl+U N; Ctrl+U F; Ctrl+U B) and made old MS Word underline function available through Ctrl+Q prefix; added Ctrl+/ as another binding for undo; added an extra header to the Template_Setup module to explain that it is no longer used; enabled Alt+B in Outlook; changed Ctrl+K so that it puts the deleted region in the clipboard; added a Ctrl+Q function to enable access to the old Ctrl+K function.
v1.05 [2005-01- 23] Ninth public release (via http://www.rath.ca/Misc/VBacs only). Added bindings for Paragraph Up/Down; fixed bug in VBacsOpenLineAbove() (it was misbehaving when the cursor was positioned at the start of the line); and fixed bug in VBacsTransposeChars() (it was transposing the wrong two characters). Thanks to Bill Zvonar for his bug report for the two functions.
v1.04 [2004-11-01] Eighth public release (via http://www.rath.ca/Misc/VBacs only). Added Ctrl+Space, Ctrl+@, and Ctrl+Q,Space bindings. Also corrected some typos in the documentation herein.
v1.03 [2003-12-26] Seventh public release (via http://www.rath.ca/Misc/VBacs only); corrected Ctrl+T binding (incorrectly assigned in last release), added an extra configuration step, and added binding Alt+%.
v1.02 [2003-12-24] Sixth public release (via http://www.rath.ca/Misc/VBacs only); added bindings suggested by Matthew K. Junker and Doug Milliken; specifically, Ctrl+T; Alt+T; Ctrl+Q T; Alt+S; Ctrl+X B; Ctrl+X [; Ctrl+X ]; Ctrl+X H; Alt+G B; Alt+G I; Alt+G U.
v1.01 [2003-03-22] Fifth public release (via http://www.rath.ca/Misc/VBacs only); added some missing bindings related to the use of panes (windows in Emacs terminology): Crtl+X 0; Crtl+X 1; Ctrl+X 2; and Ctrl+X O. Note, MS Word only allows a document window to be split into 2 panes.
v1.00 [2001-01-13] Fourth public release (via http://www.rath.ca/Misc/VBacs only, but announced in the microsoft.public.word.programming newsgroup); first release under the LGPL license.
v0.86 [2001-01-10] Third public release (via http://www.rath.ca/Misc/VBacs and the microsoft.public.word.programming newsgroup).
v0.xx [19992000] Various updated versions sent to individuals requesting more current versions (via email).
v0.20 [1998-03-05] Second public release (via the comp.lang.basic.visual.misc newsgroup). Released under Perls Artistic license.
v0.10 [1998-03-03] First public release (via http://www.wopr.com/ and the comp.lang.basic.visual.misc newsgroup). Released under Perls Artistic license.
Older public releases of VBacs are available from the following links: v0.1, v0.2, v0.86, v1.01, v1.03, v1.04, v1.05, v2.00, v2.01, v2.02, v2.03, v2.04, v2.05, v2.06, v2.07, v2.08, v2.09, v2.12, v2.13, v2.14, v2.15, v2.16, v2.17, v3.00, v.3.01, v3.02, v3.03, v3.04, v3.05, v3.06, v4.00, v4.01, v4.02, v4.03, v4.04, v4.05, v4.06, v4.07, v4.08, v4.09, v4.10, v5.0, v5.1 v5.2, v5.3, v5.4.