This program was a challenge to ponder and create. It is in response to the need for a utility which can output non-standard keyboard characters.
The following internet links demonstrate that standard non-Ahk ways to do this are not user-friendly.
Using the US-international Keyboard
How to input Accented characters & special characters
Other discussion threads show that a way to readily handle this problem using Ahk is to assign numerous hotkeys, which may be awkward to memorize, corresponding to the various individual chars desired. The disadvantage to this is the occupation of many hotkeys by such a script.
Laszlo has developed a very capable method in his Key Post-Modifier script. However, i wanted to completely circumvent any possible complications resulting from the use of deadkeys.
Another method which i considered applying could use multi-use hotkeys, and although there are several ways to construct such multi-hotkeys based on only one trigger character and the same modifiers, one such hotkey for each character class, it seemed to me there was a more elegant solution. Here is that solution.
Press Shift+Ctrl+U to show the available character types.
aeioubcdfghjlmnprstvyzx/=012348\,.-'Press Ctrl ` to activate the hotkey (you may release ` but hold Ctrl down), then press the desired character type. A tooltip and/or text will appear which cycles thru the various available non-standard chars which have been preset in the charSet file (which can be modified). Alternate hotkeys are supported, namely, double-pressing of a modifier key, the defaults being LAlt or RShift (which can be changed or deactivated in the User Configuration Section in the LoadNonStandardChars routine). These will not interfere with any conventional hotkeys.
Press or hold the same key again to advance thru the characters, or press ` to cycle backward. Space or Enter will select the current character. It now supports consecutive entry and backspace; release Ctrl when done. Hotstring ability has been restored, which was lost during addition of Unicode support.
This program requires use of 3 separate files, and the reason for 3 is due to the multi-faceted Unicode problem, of which the following is the case:
1. AutoHotkey currently cannot directly read Unicode files. This is the same for the vast majority of programs, including the text editors PSPad, Notepad++, TextPad, EditPad Lite, and Metapad for example. Often the unrecognized Unicode character will display as a question mark or rectangle.
2. Different fonts have varying degrees in capacity for non-standard characters. I've found that Courier New and Arial are among those fonts which can display the most Unicode characters.
3. The fact that copying Unicode text to the clipboard does not mean that the object program you paste it to, can display it.
4. Even if the object program can display the Unicode text, it does not exist in the clipboard as normal text (what you actually see on-screen is different).
Nevertheless, i've developed a workaround which can display non-standard characters, both ANSI and Unicode.
File 1 is necessary since Ahk does not read Unicode files. Therefore the file is opened under Notepad (both Notepad and WordPad can read and save Unicode format) and individual items scanned to the clipboard, then saved as Ahk variables, which contain the letter for ANSI chars and whatever exists as the data for Unicode. File 1 must be saved as a Unicode file. To minimize problems, please use Notepad or Wordpad for this, and use Courier New. You can experiment with other fonts after you get it working.
File 2 is used as a means to mark which characters are Unicode, and for establishing accepted variable names for non-alphanumeric characters. It is also used to extract the char types, familiar keyboard characters under which are categorized similar-looking or associated chars. File 2 must be saved as normal text (non-Unicode). To minimize problems, please use Courier New.
File 3 is the actual file which is read to Ahk variable. This variable is what the loops operate upon. File 3 contains the acceptable variable names, the required UTF-8 strings for Unicode translation, as well as Unicode markers. File 3 must be saved as normal text (non-Unicode). To minimize problems, please use Courier New.
How to Modify the Character Set:
The character set may be customized; though it may appear a difficult task, it really isnt, since I've included in the code a program (hold +^u for 0.7 sec to run it) which derives File 3 from Files 1 and 2. To add a new charType category, insert a new line beginning with the word charType and ending with the unShifted keyboard character for the key you designate. For example,
charType 7 charType ( or 9 charType ) or 0To add characters, search for and open charmap.exe (a Microsoft application which should already be on your computer), then copy and paste items to File 1, which must be saved as a Unicode file (you can use Notepad or Wordpad for this). Then save it as another file (this is File 2), this time as normal text, which is ANSI format (unless youre in Asia). Then close and re-open File 2 for it to display ANSI properly. Now compare Files 1 and 2 (re-opening File 1 if necessary), noting any differences, which indicate Unicode chars in File 1. For every question mark or rectangle or unmatched char which you see in File 2, insert a U and one space before it; do this for both Files 1 and 2. Now save both Files 1 and 2 again. Then you must reload the script. Hold +^u for 0.7 sec and the program will generate your customized char set, ready to paste from the clipboard to a file which you save as File 3 (which must be normal text, non-Unicode). Files 1, 2, and 3 mentioned here correspond to charSetFile1, charSetFile2, and charSetFile3 in the code.
I've adapted and tested the code so you can now place Files 1, 2, and 3 anywhere in the script's working directory, even subfolders. Also, a short pause has been placed before the reload for the static array file update, and backward cycling is now supported.
Good luck !
;----------------------------------------------------------------- ; Easy Input Int'l 1.2.9 ; by Decarlo ; © 2005 ; description: ; 1. for input of international/foreign keyboard characters, supporting ANSI and Unicode ; 2. for input of frequently used strings (hotstrings), Win9x or later ; 3. customizable character set ; 4. simple input method; memorization not necessary ; 5. requires only one hotkey; does not consume numerous hotkey labels/slots ; 6. supports categorization of hotstrings ; history, recent topmost: ; add: gui for hotstring editing and drag-and-drop charSet modification ; fixed MS Word problems ; added charSet elements: currency to charType c, lines to l, shapes to "." ; added alternative hotkey method, double-press-modifier (defaults = LAlt, RShift, modifiable) ; added handling of Microsoft Word's picture data-loss problem when using ClipboardAll ; added handling of Microsoft Word's auto-bookmarking problem when using ClipboardAll ; added backspace=Undo in the case of hotstrings ; added Greek (g) and Hebrew (h) alephbet to the charSet, and also hotstrings (j) for examples. ; restored hotstring ability present in v1.0 but lost during addition of Unicode support ; added capacity for multi-character Unicode strings ; added option to disable in-text cycling of characters for edit boxes that dont support Ctrl-z ; fixed handling of File 1 in case it is already open when called by hotkey ; made tooltip placement static until release of Ctrl ; added restoring of clipboard upon release of Ctrl ; added handling of trailing-spaces due to copy-pasting from forum post (thanks Laszlo) ; added option to disable alerts during load ; fixed and improved alert messages in loading routine ; placed alerts in loading routine to help resolve errors ; implemented workaround for unexpected Ahk behavior/bug ; added pause before Reload on static array file update to help ensure existence of new file ; added ability to cycle backwards thru characters ; converted to function format to reduce global variable list ; optimized responsiveness and speed ; added backspace support and spacebar as alternate Enter ; added ability for consecutive entry ; fixed bug which caused skipping of first char found ; added continuous cycling ability ; changed default mode from auto-advance to manual ; fixed naming of variables for non-alphanumeric character types ; added Unicode support *** EasyInput("Load") return *#!x:: msgbox,,, exiting %A_ScriptName%, 1 EXITAPP Ei_DoublePress: ; alternate hotkey method. default = press LAlt or RShift 2x if StringL(A_ThisHotkey, 10, 1) = Ei_doublePressHotkey1 { Ei_HotkeyEntry1 = 1 KeyWait, %Ei_doublePressHotkey1% KeyWait, %Ei_doublePressHotkey1%, D T0.3 if ErrorLevel Ei_Exit = 1 } else if StringL(A_ThisHotkey, 10, 1) = Ei_doublePressHotkey2 { KeyWait, %Ei_doublePressHotkey2% KeyWait, %Ei_doublePressHotkey2%, D T.3 if ErrorLevel Ei_Exit = 1 } if Ei_Exit { Ei_Exit = EXIT } else Ei_doublePressEntry = 1 ^`:: ; Easy Input Int'l 1.2.8 EasyInput("Input") return +^u:: ; display charTypes / process custom charSet file EasyInput("CharSet") return EasyInput(mode) { SetTitleMatchMode, 2 Thread, interrupt, 0 AutoTrim, off ; declare static array #Include *i %A_ScriptDir%\Ei_staticArrayVars.txt static otherHotkeyUses4Modifiers, visibleCharTypeSearch, TooltipOn static charSetFile1, charSetFile2, charSetFile3, charSet static Ei_charTypes, Ei_Loop#, inTextCycling global OnClipboardChangeDeactivated, Ei_clipType, Ei_HotkeyEntry1 global Ei_doublePressEntry, Ei_doublePressHotkey1, Ei_doublePressHotkey2 OnClipboardChangeDeactivated = 1 if mode = Load { GoSub LoadNonStandardChars Ei_staticArrayVarsFile = %A_ScriptDir%\Ei_staticArrayVars.txt GoSub CheckStaticArrayIncludeFile } else if mode = Input GoSub EasyInput else if mode = CharSet GoSub DisplayCharTypes_ProcessCustomCharSet sleep 100 OnClipboardChangeDeactivated = Thread, interrupt, 15, 1000 RETURN LoadNonStandardChars: charSetFile1 = Non-Standard Chars Courier New Unicode.txt charSetFile2 = Non-Standard Chars Courier New ANSI.txt charSetFile3 = charSet Index.txt GoSub GetCharTypes ; --------------------- ; USER CONFIGURATION SECTION ; --------------------- ; The following key, when double-pressed, will run Easy Input. ; Alt or Shift or Control are the preferable choices. ; To remove this feature, comment the lines or delete them. ; Specify L or R (left/right) for each enabled line. Ei_doublePressHotkey1 = LAlt Ei_doublePressHotkey2 = RShift Hotkey, ~%Ei_doublePressHotkey1%, Ei_DoublePress Hotkey, ~%Ei_doublePressHotkey2%, Ei_DoublePress ; If you have Win95/98/Me/NT4withoutSP6 and have integrated this into ; another script and you have any hotkeys which use all 4 modifiers, ; Shift, Ctrl, Win, Alt, then enter a value for the following ; (y, yes, or 1 is standard; most users need not change it). otherHotkeyUses4Modifiers = ; To remove the initial visible-search effect, set the following to be ; blank or 0. Originally a programming aid to indicate that the charSet ; files have been read properly, and that the loops are parsing normally. ; If the tooltip behaves irregularly, reload the script. visibleCharTypeSearch = y ; The tooltip is also used to indicate which items are Unicode, ; and also whether your editor is capable of displaying the Unicode. ; To remove the tooltips altogether, delete the y from the following: TooltipOn = y ; To disable in-text cycling of characters, set the next variable equal ; to nothing. This feature is for edit boxes which dont support Ctrl-z. ; pogo.com tournament directors will find this useful. ; The tooltipOn setting should be on if this setting is off. inTextCycling = y ; Change the next to about 5 thru 8 for an optimal auto-cycling effect ; (which you can still manually navigate forward and backward through). ; The default of 200 means you must manually advance thru characters. Ei_Loop# = 200 ; number of 50 millisec increments FileRead, charSet, %charSetFile3% if ErrorLevel { errorLoadingFile3 = 1 Loop, %A_ScriptDir%\*,, 1 { IfInString, A_LoopFileLongPath, %charSetFile3% { errorLoadingFile3 = FileRead, charSet, %A_LoopFileLongPath% BREAK } } } if errorLoadingFile3 { msgbox,, Easy Input Int'l, charSetFile3 = %charSetFile3%`n`nError in FileRead / File not found.`n`nPlace charSetFile3 anywhere in the script's working directory.`nand make sure its name matches in the LoadNonStandardChars routine.`n`nOr, use +^u (hold for 0.7 sec) to generate File3, from Files 1 & 2,`nThen save it to a file.`n`nExiting. EXIT } return ;------------------------------------ GetCharTypes: Ei_charTypes = FileRead, charSet, %charSetFile2% if ErrorLevel { errorLoadingFile2 = 1 Loop, %A_ScriptDir%\*,, 1 { IfInString, A_LoopFileLongPath, %charSetFile2% { errorLoadingFile2 = FileRead, charSet, %A_LoopFileLongPath% BREAK } } } if errorLoadingFile2 { msgbox,, Easy Input Int'l, charSetFile2 = %charSetFile2%`n`nError in FileRead / File not found.`n`nPlace charSetFile2 anywhere in the script's working directory.`n`nMake sure its name matches in the LoadNonStandardChars routine.`n`nExiting. EXIT } Loop, Parse, charSet, `n, `r { if A_LoopField is space CONTINUE A_LoopField1 = %A_LoopField% Loop { if ( StringR(A_LoopField1, 1) = " " ) StringTrimRight, A_LoopField1, A_LoopField1, 1 else BREAK } if A_LoopField1 = eof ; end of file { charLine%A_Index% = eof numLinesCharSetFile2 = %A_Index% BREAK } StringLeft, firstChar, A_LoopField, 1 if firstChar = `; CONTINUE charLine%A_Index% = %A_LoopField1% StringLeft, charLine, A_LoopField1, 9 if charLine = charType%A_Space% { StringRight, Ei_charType, A_LoopField1, 1 Ei_charTypes = %Ei_charTypes%%Ei_charType% } } return ;------------------------------------ CheckStaticArrayIncludeFile: IfNotExist, %A_ScriptDir%\Ei_staticArrayVars.txt { GoSub UpdateStaticArrayIncludeFile sleep 3300 RELOAD } else { FileRead, tmpFileRead, %Ei_staticArrayVarsFile% IfNotInString, tmpFileRead, charLine%numLinesCharSetFile2% { FileDelete, %Ei_staticArrayVarsFile% GoSub UpdateStaticArrayIncludeFile sleep 3300 RELOAD } } return ;------------------------------------ UpdateStaticArrayIncludeFile: Loop %numLinesCharSetFile2% tmpFileAppend = %tmpFileAppend%charLine%A_Index%, StringTrimRight, tmpFileAppend, tmpFileAppend, 1 FileAppend, static %tmpFileAppend%, %Ei_staticArrayVarsFile% return ;------------------------------------ DisplayCharTypes_ProcessCustomCharSet: Loop 7 { sleep 100 if not GetKeyState("Ctrl", "p") { msgbox charTypes:`n`n%Ei_charTypes%`n`n EXIT } if A_Index = 7 ; this creates a custom charSet to save as charSetFile3. { SplashText("proceeding with scan", "1000") GoSub GetCharTypes clipPrev := ClipboardAll Ei_charType = charLine = charSet = IfNotExist, %charSetFile1% { errorDetectingFile1 = 1 Loop, %A_ScriptDir%\*,, 1 { IfInString, A_LoopFileLongPath, %charSetFile1% { errorDetectingFile1 = tempFile1name = %charSetFile1% charSetFile1 = "%A_LoopFileLongPath%" BREAK } } } if errorDetectingFile1 { msgbox,, Easy Input Int'l, charSetFile1 = %tempFile1name%`n`nError in FileRead / File not found.`n`nPlace charSetFile1 anywhere in the script's working directory.`n`nMake sure its name matches in the LoadNonStandardChars routine. charSetFile1 = %tempFile1name% ; reset the filename RETURN } else { Run, Notepad %charSetFile1%,,, chars_EditorPID ; system gives alert if error WinWaitActive, ahk_pid %chars_EditorPID% msgbox,, Easy Input Int'l, File1 loaded SplashText("proceeding with scan", "1000") } Loop { if charLine%A_Index% = eof { charSet = %charSet%eof msgbox,, Easy Input Int'l, scan completed, 1.2 WinClose, ahk_pid %chars_EditorPID% Run, Notepad,,, chars_EditorPID clipboard := charSet WinW("- Notepad", "5", chars_EditorPID) send ^v clipboard := clipPrev charSetFile1 = %tempFile1name% ; reset the filename msgbox,, Easy Input Int'l, You can now save the charSet as <title of charSetFile3>. RETURN } if charLine%A_Index% = { ControlSend, Edit1, {right}, ahk_pid %chars_EditorPID% CONTINUE } clipboard = StringLeft, firstChar, charLine%A_Index%, 1 if firstChar = `; CONTINUE if firstChar = U { ControlSend, Edit1, {right 2}+{end}^c, ahk_pid %chars_EditorPID% Transform, ClipUTF, Unicode } else { ControlSend, Edit1, +{end}^c, ahk_pid %chars_EditorPID% ClipWait, 0.5, 1 } StringLeft, charLeft, charLine%A_Index%, 9 if charLeft = charType%A_Space% { StringRight, Ei_charType, charLine%A_Index%, 1 type# = } else { type# += 1 if Ei_charType is not alnum { if Ei_charType = / Ei_charType = Fslash else if Ei_charType = \ Ei_charType = Bslash else if Ei_charType = = Ei_charType = Eq else if Ei_charType = , Ei_charType = Comma else if Ei_charType = . Ei_charType = Dot else if Ei_charType = - Ei_charType = Dash else if Ei_charType = ' Ei_charType = Apostrophe } temp := EI_Char(char_%Ei_charType%%type#%) ; call another function if firstChar = U { Transform, Clipboard, Unicode, %ClipUTF% charSet = %charSet%char_%Ei_charType%_%type#% U %ClipUTF%`r`n } else charSet = %charSet%char_%Ei_charType%_%type#% %temp%`r`n } ControlSend, Edit1, {right}, ahk_pid %chars_EditorPID% ; advance 1 line } } } return ;------------------------------------ EasyInput: Ei_charType = Ei_charType2 = Ei_charSent = Ei_reset = cycle1 = 1 if ( WinActive("- Microsoft Word") OR WinActive("WordPerfect") ) AND A_TimeSincePriorHotkey <> -1 cb_All := ClipBoardAll if WinActive("- Microsoft Word") OR WinActive("WordPerfect") { if Ei_clipType = 0 clipPrev = %clipBoard% else if Ei_clipType = 1 clipPrev = %clipBoard% else if Ei_clipType = 2 clipPrev = %clipBoardAll% } else clipPrev = %clipBoardAll% if A_OSVersion in WIN_NT4,WIN_2003,WIN_XP,WIN_2000 BlockInput, on else { if otherHotkeyUses4Modifiers Suspend, on ; prevents confusion with other Ahk hotkeys send {Shift down}{Win down}{Alt down} ; prevents confusion with other-application hotkeys: Ctrl in combination with any of 245 characters in the default charSet. } Loop { GoSub Ei_ExitCheck if Ei_Exit BREAK Loop, Parse, Ei_charTypes { GoSub Ei_ExitCheck if Ei_Exit BREAK Ei_reset = if ( not cycle1 AND not GetKeyState("``", "p") ) OR cycle1 Ei_charType = %A_LoopField% if TooltipOn if visibleCharTypeSearch Tooltip, %Ei_charType%, A_CaretX, A_CaretY + 17 if GetKeyState("backspace", "p") { send {backspace} sleep 400 } if GetKeyState(Ei_charType, "p") OR ( GetKeyState("``", "p") AND NOT cycle1 ) { cycle1 = sleep 150 ; necessary to avoid skipping first char found Loop ; pre-charSet-Loop init { GoSub Ei_ExitCheck if Ei_Exit BREAK if Ei_charType is not alnum { if Ei_charType = / Ei_charType2 = Fslash else if Ei_charType = \ Ei_charType2 = Bslash else if Ei_charType = `= Ei_charType2 = Eq else if Ei_charType = , Ei_charType2 = Comma else if Ei_charType = . Ei_charType2 = Dot else if Ei_charType = - Ei_charType2 = Dash else if Ei_charType = ' Ei_charType2 = Apostrophe } if StrLen(Ei_charType2) > 1 charName = char_%Ei_charType2%_ else charName = char_%Ei_charType%_ Loop, Parse, charSet, `n, `r { indexBack = %A_Index% GoSub Ei_ExitCheck if Ei_Exit BREAK if A_LoopField is space CONTINUE A_LoopField1 = %A_LoopField% Loop { if ( StringR(A_LoopField1, 1) = " " ) StringTrimRight, A_LoopField1, A_LoopField1, 1 else BREAK } StringLeft, firstChar, A_LoopField, 1 if firstChar = `; CONTINUE ifNotInString, A_LoopField, %charName% CONTINUE else { if GetKeyState("``", "p") ; cycle backward { if backToLine# <> %A_Index% CONTINUE else sleep 150 } else { moveback = backToLine# = } ifInString, A_LoopField, %A_Space%U%A_Space% { Ei_Unicode = 1 StringGetPos, posDelimiter, A_LoopField1, %A_Space%, L2 StringRight, UTFcode, A_LoopField1, % StrLen(A_LoopField1) - posDelimiter - 1 Transform, Clipboard, Unicode, %UTFcode% } else { Ei_Unicode = StringGetPos, posDelimiter, A_LoopField1, %A_Space% StringRight, ANSI_char, A_LoopField1, % StrLen(A_LoopField1) - posDelimiter - 1 Clipboard := ANSI_char } if not Ei_charSent { A_CaretX1 = %A_CaretX% send %A_Space%{backspace} ; for proper exec of Ctrl-Z } if TooltipOn { if Ei_Unicode Tooltip Unicode`n`n%Clipboard%`n`n%UTFcode%, A_CaretX1, A_CaretY + 17 else Tooltip %Clipboard%, A_CaretX1, A_CaretY + 17 } if inTextCycling { if Ei_charSent send ^z send ^v } Ei_charSent = 1 Loop %Ei_Loop#% { sleep 50 GoSub Ei_ExitCheck if Ei_Exit BREAK if GetKeyState("``", "p") ; cycle backward { if moveback = { backToLine# := indexBack - 1 BREAK } } else { moveback = backToLine# = } if GetKeyState(Ei_charType, "p") { Loop 2 ; adjust if needed { sleep 50 if GetKeyState("Enter", "p") { Ei_reset = 1 BREAK } if GetKeyState("``", "p") ; cycle backward { if moveback = { backToLine# := indexBack - 1 BREAK } } else { moveback = backToLine# = } } BREAK } if ( GetKeyState("Enter", "p") OR GetKeyState("Space", "p")) { if ( not inTextCycling ) { send ^v itemSentByEnterOrSpace = 1 ; if this flag = "" upon releasing the hotkey, the current selection will be sent } Ei_reset = 1 BREAK } if GetKeyState("backspace", "p") { send ^z{backspace} sleep 400 Ei_reset = 1 BREAK } } if Ei_reset { Ei_charType = Ei_charType2 = Ei_charSent = BREAK } if Ei_Loop# < 11 KeyWait, %Ei_charType%, D T.5 ; adjust to preference if GetKeyState("``", "p") ; cycle backward BREAK else { moveback = backToLine# = } } } if Ei_reset or moveback BREAK } } } } Tooltip if A_OSVersion in WIN_NT4,WIN_2003,WIN_XP,WIN_2000 { BlockInput, off send {Ctrl up} if ( not inTextCycling ) if ( not itemSentByEnterOrSpace ) send ^v } else { send {Shift up}{Win up}{Alt up} send ^v if otherHotkeyUses4Modifiers Suspend, off } if Ei_doublePressEntry { if Ei_HotkeyEntry1 send {%Ei_doublePressHotkey1% up} else send {%Ei_doublePressHotkey2% up} } Ei_HotkeyEntry1 = Ei_doublePressEntry = clipboard = %clipPrev% if ( WinActive("- Microsoft Word") OR WinActive("WordPerfect") ) AND A_TimeSincePriorHotkey <> -1 clipboard := cb_All return Ei_ExitCheck: if Ei_doublePressEntry { if Ei_HotkeyEntry1 { if not GetKeyState(Ei_doublePressHotkey1, "p") Ei_Exit = 1 } else if not GetKeyState(Ei_doublePressHotkey2, "p") Ei_Exit = 1 } else { if not GetKeyState("Ctrl", "p") Ei_Exit = 1 } return } ;-------------------------------- End Function: Easy Input Int'l ;------------------------------------------------------------------------------------------ WinW(windowTitleElement="", secToWait=30, ahk_pid = 0, ahk_class="") ; WinWait,WinActivate,WinWaitActive { SetTitleMatchMode, 2 if ahk_class WinWait %windowTitleElement% ahk_class %ahk_class% else if ahk_pid WinWait %windowTitleElement% ahk_pid %ahk_pid% else WinWait %windowTitleElement%,, %secToWait% WinActivate WinWaitActive,,, %secToWait% ; default 30 sec maximum ifWinNotActive %windowTitleElement% Msgbox, Target window did not activate within %secToWait% sec.`n`nThe originating thread may cause problems if it continues. return } StringR(in, charsToKeep, charsToTrim="") { StringRight, out, in, %charsToKeep% if charsToTrim <> StringTrimRight, out, out, %charsToTrim% return %out% } StringL(in, charsToKeep, charsToTrim="") { StringLeft, out, in, %charsToKeep% if charsToTrim <> StringTrimLeft, out, out, %charsToTrim% return %out% } EI_Char(ByRef char) ; allows variable naming in multiple arrays { char := Clipboard return char } SplashText(title="", timeout="", width="", height="", text="") ; default timeout 700 { SplashTextOn, %Width%, %Height%, %Title%, %Text% if timeout = sleep 700 else if timeout = 0 ; leave on until replaced or turned off later RETURN else sleep %timeout% SplashTextOff return } OnClipboardChange: if OnClipboardChangeDeactivated = 1 RETURN if A_EventInfo <> 0 { if A_EventInfo = 1 Ei_clipType = 1 else Ei_clipType = 2 if WinActive("- Microsoft Word") OR WinActive("WordPerfect") { send {backspace} send ^v } sleep 30 } Keywait c return ;-----------------------------------------------------------Download Easy Input 1.2.9 (57 K)
File 1 - This is the default character set.
charType a
à
á
â
ã
ä
å
æ
ª
À
Á
Â
Ã
Ä
Å
Æ
charType e
è
é
ê
ë
È
É
Ê
Ë
€
U ℮
charType i
U ∫
ì
í
î
ï
Ì
Í
Î
Ï
U ∩
charType o
ò
ó
ô
õ
ö
ð
º
Ò
Ó
Ô
Õ
Ö
U ∞
charType u
ù
ú
û
ü
µ
Ù
Ú
Û
Ü
charType b
ß
charType c
U ℅
©
ç
Ç
€
$
¢
£
¥
U ₣
U ₤
U ₧
U ₪
U ₫
¤
charType d
U Δ
U ∆
Ð
U ∂
charType f
ƒ
charType g
U Γ
U Δ
U Θ
U Λ
U Ξ
U Π
U Σ
U Φ
U Χ
U Ψ
U Ω
U α
U β
U γ
U δ
U ε
U ζ
U η
U θ
U ι
U κ
U λ
μ
U ν
U ξ
U ο
U π
U ρ
U ς
U σ
U τ
U υ
U φ
U χ
U ψ
U ω
U ϊ
U ϋ
U ό
U ύ
U ώ
charType h
U א
U ב
U ג
U ד
U ה
U ו
U ז
U ח
U ט
U י
U ך
U כ
U ל
U ם
U מ
U ן
U נ
U ס
U ע
U ף
U פ
U ץ
U צ
U ק
U ר
U ש
U ת
charType j
Easy Input can also do hotstrings.
If you wanted to, you could put all your hotstrings under one character.
Or, you could categorize them under alphanumeric chars of your choice.
You might have to tweak the charSet so the most used items are readily accessible.
To add new characters, charTypes, or hotstrings, first modify File1 and File2.
Then use the customization hotkey (default Shift+Ctrl+U). See the ReadMe file or forum.
†hî§ þ®ög®àm ¢áñ häñУ€ mù£†ì¬©hàrࢆér ÜñìçòÐê §†rìñg§…
U ∫∩∞℅Δ→∑√Ω≈≥‼
U Δ→∑…∩∞℅
U ←↑→↓↔↕∫∩∞
Thanks for using Easy Input! I hope you find it useful.
Comments, bug reports, and suggestions are always welcome. -Decarlo
charType l
£
U ║
U ←
U ↑
U →
U ↓
U ↔
U ↕
U ℓ
U ═
U ─
U │
U ┌
U ┐
U └
U ┘
U ├
U ┤
U ┬
U ┴
U ┼
charType m
My hotstring 1
My hotstring 2
My hotstring 3
My hotstring 4
My hotstring 5
Add as many hotstrings as you wish.
Create new charTypes as needed.
charType n
ñ
Ñ
U №
charType p
Þ
þ
¶
charType r
®
charType s
§
U ∑
charType t
†
‡
™
charType v
U √
charType y
ý
ÿ
Ý
Ÿ
¥
charType z
U ̀
U ́
U ̃
U ̉
U ̣
U Ω
charType x
×
charType ? or /
÷
¿
charType + or =
±
U ≈
U ≠
U ≡
U ≤
U ≥
charType 0
Ø
ø
charType ! or 1
¡
¹
U ‼
charType 2
½
²
charType 3
U ⅓
U ⅔
³
charType 4
¼
¾
charType * or 8
U ⅛
U ⅜
U ⅝
U ⅞
charType | or \
¦
charType < or ,
«
charType > or .
·
•
¤
°
…
¨
»
U ▲
U ▼
U ►
U ◄
U ◊
U ■
U □
U ▪
U ▫
U ●
U ○
U ◦
charType -
—
¬
¯
_
U ‗
charType '
´
¸
eof