Skip to content

Instantly share code, notes, and snippets.

@Ahmad-f79
Last active May 15, 2021 04:41
Show Gist options
  • Save Ahmad-f79/4a3d92fdf8822ba9638f835275e43089 to your computer and use it in GitHub Desktop.
Save Ahmad-f79/4a3d92fdf8822ba9638f835275e43089 to your computer and use it in GitHub Desktop.
Farsi Keyboard add-on
SetWorkingDir %A_ScriptDir%
SetStoreCapsLockMode, Off
SetKeyDelay, 37
#SingleInstance force
#Hotstring NoMouse
#Hotstring * ?
#NoEnv
Menu, Tray, NoStandard
Menu, Tray, Add, Run at Startup, Startup
Menu, Tray, Add, Farsi Digits, FarsiDigits
Menu, Tray, Add, ARABIC YA, YA
Menu, Tray, Add, About, About
Menu, Tray, Add, Exit, ByeScript
Menu, Tray, Tip, Farsi Keyboard add-on v1.7
GroupAdd, Browser, ahk_class Chrome_WidgetWin_1
GroupAdd, Browser, ahk_class MozillaWindowClass
SplitPath, A_Scriptname,,,, OutNameNoExt
LinkFile = %A_Startup%\%OutNameNoExt%.lnk
FileGetShortcut, %LinkFile%, OutTarget
IF OutTarget = %A_ScriptFullPath%
{
Menu, Tray, Check, Run at Startup
Startup :=! Startup
}
#IF WinActive("ahk_exe connect.exe ahk_class ShockwaveFlash")
::ی::ي
#IF
::ۀ::هٔ
<+LWin Up::
KeyWait, LShift
IF (A_PriorKey != "LWin") && (A_PriorKey != "LShift")
Return
ClipSaved := ClipboardAll
Clipboard := ""
Send, {Ctrl Down}c{Ctrl Up}
ClipWait, 0.23
IF (ErrorLevel) {
Send, {Ctrl Down}a{Ctrl Up}
Send, {Ctrl Down}c{Ctrl Up}
}
IF RegExMatch(Clipboard, "ئ|ا|ب|پ|ت|ث|ج|چ|ح|خ|د|ذ|ر|ز|س|ش|ص|ض|ط|ظ|ع|غ|ف|ق|ک|گ|ل|م|ن|و|ه|ی") {
Clipboard := StrReplace(Clipboard, "ئ", "m")
Clipboard := StrReplace(Clipboard, "ا", "h")
Clipboard := StrReplace(Clipboard, "ب", "f")
Clipboard := StrReplace(Clipboard, "پ", "\")
Clipboard := StrReplace(Clipboard, "ت", "j")
Clipboard := StrReplace(Clipboard, "ث", "e")
Clipboard := StrReplace(Clipboard, "ج", "[")
Clipboard := StrReplace(Clipboard, "چ", "]")
Clipboard := StrReplace(Clipboard, "ح", "p")
Clipboard := StrReplace(Clipboard, "خ", "o")
Clipboard := StrReplace(Clipboard, "د", "n")
Clipboard := StrReplace(Clipboard, "ذ", "b")
Clipboard := StrReplace(Clipboard, "ر", "v")
Clipboard := StrReplace(Clipboard, "ز", "c")
Clipboard := StrReplace(Clipboard, "س", "s")
Clipboard := StrReplace(Clipboard, "ش", "a")
Clipboard := StrReplace(Clipboard, "ص", "w")
Clipboard := StrReplace(Clipboard, "ض", "q")
Clipboard := StrReplace(Clipboard, "ط", "x")
Clipboard := StrReplace(Clipboard, "ظ", "z")
Clipboard := StrReplace(Clipboard, "ع", "u")
Clipboard := StrReplace(Clipboard, "غ", "y")
Clipboard := StrReplace(Clipboard, "ف", "t")
Clipboard := StrReplace(Clipboard, "ق", "r")
Clipboard := StrReplace(Clipboard, "ک", ";")
Clipboard := StrReplace(Clipboard, "گ", "'")
Clipboard := StrReplace(Clipboard, "ل", "g")
Clipboard := StrReplace(Clipboard, "م", "l")
Clipboard := StrReplace(Clipboard, "ن", "k")
Clipboard := StrReplace(Clipboard, "و", ",")
Clipboard := StrReplace(Clipboard, "ه", "i")
Clipboard := StrReplace(Clipboard, "ی", "d")
PostMessage, 0x50, 0, 0x409,, A
} ELSE {
Clipboard := StrReplace(Clipboard, "'", "گ")
Clipboard := StrReplace(Clipboard, ",", "و")
Clipboard := StrReplace(Clipboard, ";", "ک")
Clipboard := StrReplace(Clipboard, "[", "ج")
Clipboard := StrReplace(Clipboard, "\", "پ")
Clipboard := StrReplace(Clipboard, "]", "چ")
Clipboard := StrReplace(Clipboard, "a", "ش")
Clipboard := StrReplace(Clipboard, "b", "ذ")
Clipboard := StrReplace(Clipboard, "c", "ز")
Clipboard := StrReplace(Clipboard, "d", "ی")
Clipboard := StrReplace(Clipboard, "e", "ث")
Clipboard := StrReplace(Clipboard, "f", "ب")
Clipboard := StrReplace(Clipboard, "g", "ل")
Clipboard := StrReplace(Clipboard, "h", "ا")
Clipboard := StrReplace(Clipboard, "i", "ه")
Clipboard := StrReplace(Clipboard, "j", "ت")
Clipboard := StrReplace(Clipboard, "k", "ن")
Clipboard := StrReplace(Clipboard, "l", "م")
Clipboard := StrReplace(Clipboard, "m", "ئ")
Clipboard := StrReplace(Clipboard, "n", "د")
Clipboard := StrReplace(Clipboard, "o", "خ")
Clipboard := StrReplace(Clipboard, "p", "ح")
Clipboard := StrReplace(Clipboard, "q", "ض")
Clipboard := StrReplace(Clipboard, "r", "ق")
Clipboard := StrReplace(Clipboard, "s", "س")
Clipboard := StrReplace(Clipboard, "t", "ف")
Clipboard := StrReplace(Clipboard, "u", "ع")
Clipboard := StrReplace(Clipboard, "v", "ر")
Clipboard := StrReplace(Clipboard, "w", "ص")
Clipboard := StrReplace(Clipboard, "x", "ط")
Clipboard := StrReplace(Clipboard, "y", "غ")
Clipboard := StrReplace(Clipboard, "z", "ظ")
PostMessage, 0x50, 0, 0x429,, A
}
Send, {Ctrl Down}v{Ctrl Up}
Sleep, 257
Clipboard := ClipSaved
Return
+Space::
Send, {U+200C}
KeyWait, Space
Return
LWin & CapsLock::
Gosub, FarsiDigits
SplashTextOn, 67, 31, Farsi Digits, %AF%
Sleep, 997
SplashTextOff
Return
FarsiDigits:
Menu, Tray, ToggleCheck, Farsi Digits
Hotstring("::1", "۱", "Toggle")
Hotstring("::2", "۲", "Toggle")
Hotstring("::3", "۳", "Toggle")
Hotstring("::4", "۴", "Toggle")
Hotstring("::5", "۵", "Toggle")
Hotstring("::6", "۶", "Toggle")
Hotstring("::7", "۷", "Toggle")
Hotstring("::8", "۸", "Toggle")
Hotstring("::9", "۹", "Toggle")
Hotstring("::0", "۰", "Toggle")
AF :=! AF
Return
YA:
Menu, Tray, ToggleCheck, Arabic YA
Hotkey, IfWinActive, ahk_group Browser
Hotstring("::ی", "ي", "Toggle")
Return
Startup:
IF Startup {
FileDelete, %LinkFile%
Menu, Tray, Uncheck, Run at Startup
} ELSE {
FileCreateShortcut, %A_ScriptFullPath%, %LinkFile%
Menu, Tray, Check, Run at Startup
}
Startup :=! Startup
Return
About:
MsgBox,, Farsi Keyboard add-on v1.7, Replaces DOTLESS YA with ARABIC YA in Adobe Connect`n`n`Win & CapsLock: Toggle Farsi digits`n`Shift & Space: Insert Half-space`n`Shift & Win: Convert text and change keyboard layout`n`n`Written in AHK by Ahmad`n`For updates and more info visit: t.me/Farsi_KAO
Return
ByeScript:
ExitApp
SetWorkingDir %A_ScriptDir%
SetStoreCapsLockMode, Off
SetKeyDelay, 37
#SingleInstance force
#Hotstring NoMouse
#Hotstring * ?
#NoEnv
Menu, Tray, NoStandard
Menu, Tray, Add, Run at Startup, Startup
Menu, Tray, Add, Farsi Digits as default, FarsiDigits
Menu, Tray, Add, Arabic KAF and YA as default, ArabicMenu
Menu, Tray, Add, Hotkeys, Hotkeys
Menu, Tray, Add, About, About
Menu, Tray, Add, Exit, ByeScript
Menu, Tray, Tip, Farsi Keyboard add-on v2
IniRead, ConvertINI, Hotkeys.INI, Hotkeys, Convert, %A_Space%
IniRead, DigitsINI, Hotkeys.INI, Hotkeys, Digits, %A_Space%
IniRead, ArabicINI, Hotkeys.INI, Hotkeys, Arabic, %A_Space%
Gosub, OK
SplitPath, A_Scriptname,,,, OutNameNoExt
LinkFile = %A_Startup%\%OutNameNoExt%.lnk
FileGetShortcut, %LinkFile%, OutTarget
IF OutTarget = %A_ScriptFullPath%
{
Menu, Tray, Check, Run at Startup
Startup :=! Startup
}
#IF WinActive("ahk_exe connect.exe ahk_class ShockwaveFlash")
::ی::ي
#IF
::ۀ::هٔ
Convert:
IF (A_ThisHotkey = "<+LWin Up") {
KeyWait, LShift
IF (A_PriorKey != "LWin") && (A_PriorKey != "LShift")
Return
}
ClipSaved := ClipboardAll
Clipboard := ""
Send, {Ctrl Down}c{Ctrl Up}
ClipWait, 0.23
IF (ErrorLevel) {
Send, {Ctrl Down}a{Ctrl Up}
Send, {Ctrl Down}c{Ctrl Up}
}
IF RegExMatch(Clipboard, "a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z") {
Clipboard := StrReplace(Clipboard, "'", "گ")
Clipboard := StrReplace(Clipboard, ",", "و")
Clipboard := StrReplace(Clipboard, ";", "ک")
Clipboard := StrReplace(Clipboard, "[", "ج")
Clipboard := StrReplace(Clipboard, "\", "پ")
Clipboard := StrReplace(Clipboard, "]", "چ")
Clipboard := StrReplace(Clipboard, "a", "ش")
Clipboard := StrReplace(Clipboard, "b", "ذ")
Clipboard := StrReplace(Clipboard, "c", "ز")
Clipboard := StrReplace(Clipboard, "d", "ی")
Clipboard := StrReplace(Clipboard, "e", "ث")
Clipboard := StrReplace(Clipboard, "f", "ب")
Clipboard := StrReplace(Clipboard, "g", "ل")
Clipboard := StrReplace(Clipboard, "h", "ا")
Clipboard := StrReplace(Clipboard, "i", "ه")
Clipboard := StrReplace(Clipboard, "j", "ت")
Clipboard := StrReplace(Clipboard, "k", "ن")
Clipboard := StrReplace(Clipboard, "l", "م")
Clipboard := StrReplace(Clipboard, "m", "ئ")
Clipboard := StrReplace(Clipboard, "n", "د")
Clipboard := StrReplace(Clipboard, "o", "خ")
Clipboard := StrReplace(Clipboard, "p", "ح")
Clipboard := StrReplace(Clipboard, "q", "ض")
Clipboard := StrReplace(Clipboard, "r", "ق")
Clipboard := StrReplace(Clipboard, "s", "س")
Clipboard := StrReplace(Clipboard, "t", "ف")
Clipboard := StrReplace(Clipboard, "u", "ع")
Clipboard := StrReplace(Clipboard, "v", "ر")
Clipboard := StrReplace(Clipboard, "w", "ص")
Clipboard := StrReplace(Clipboard, "x", "ط")
Clipboard := StrReplace(Clipboard, "y", "غ")
Clipboard := StrReplace(Clipboard, "z", "ظ")
PostMessage, 0x50, 0, 0x429,, A
} else {
Clipboard := StrReplace(Clipboard, "ئ", "m")
Clipboard := StrReplace(Clipboard, "ا", "h")
Clipboard := StrReplace(Clipboard, "ب", "f")
Clipboard := StrReplace(Clipboard, "پ", "\")
Clipboard := StrReplace(Clipboard, "ت", "j")
Clipboard := StrReplace(Clipboard, "ث", "e")
Clipboard := StrReplace(Clipboard, "ج", "[")
Clipboard := StrReplace(Clipboard, "چ", "]")
Clipboard := StrReplace(Clipboard, "ح", "p")
Clipboard := StrReplace(Clipboard, "خ", "o")
Clipboard := StrReplace(Clipboard, "د", "n")
Clipboard := StrReplace(Clipboard, "ذ", "b")
Clipboard := StrReplace(Clipboard, "ر", "v")
Clipboard := StrReplace(Clipboard, "ز", "c")
Clipboard := StrReplace(Clipboard, "س", "s")
Clipboard := StrReplace(Clipboard, "ش", "a")
Clipboard := StrReplace(Clipboard, "ص", "w")
Clipboard := StrReplace(Clipboard, "ض", "q")
Clipboard := StrReplace(Clipboard, "ط", "x")
Clipboard := StrReplace(Clipboard, "ظ", "z")
Clipboard := StrReplace(Clipboard, "ع", "u")
Clipboard := StrReplace(Clipboard, "غ", "y")
Clipboard := StrReplace(Clipboard, "ف", "t")
Clipboard := StrReplace(Clipboard, "ق", "r")
Clipboard := StrReplace(Clipboard, "ک", ";")
Clipboard := StrReplace(Clipboard, "ك", ";")
Clipboard := StrReplace(Clipboard, "گ", "'")
Clipboard := StrReplace(Clipboard, "ل", "g")
Clipboard := StrReplace(Clipboard, "م", "l")
Clipboard := StrReplace(Clipboard, "ن", "k")
Clipboard := StrReplace(Clipboard, "و", ",")
Clipboard := StrReplace(Clipboard, "ه", "i")
Clipboard := StrReplace(Clipboard, "ی", "d")
Clipboard := StrReplace(Clipboard, "ي", "d")
PostMessage, 0x50, 0, 0x409,, A
}
Send, {Ctrl Down}v{Ctrl Up}
Sleep, 257
Clipboard := ClipSaved
Return
+Space::
Send, {U+200C}
KeyWait, Space
Return
Digits:
Gosub, FarsiDigits
SplashTextOn, 61, 31, Farsi Digits, %AF%
Sleep, 997
SplashTextOff
Return
Arabic:
Gosub, ArabicMenu
SplashTextOn, 103, 31, Arabic KAF and YA, %A%
Sleep, 997
SplashTextOff
Return
FarsiDigits:
Menu, Tray, ToggleCheck, Farsi Digits as default
Hotstring("::1", "۱", "Toggle")
Hotstring("::2", "۲", "Toggle")
Hotstring("::3", "۳", "Toggle")
Hotstring("::4", "۴", "Toggle")
Hotstring("::5", "۵", "Toggle")
Hotstring("::6", "۶", "Toggle")
Hotstring("::7", "۷", "Toggle")
Hotstring("::8", "۸", "Toggle")
Hotstring("::9", "۹", "Toggle")
Hotstring("::0", "۰", "Toggle")
AF :=! AF
Return
ArabicMenu:
Menu, Tray, ToggleCheck, Arabic KAF and YA as default
Hotstring("::ک", "ك", "Toggle")
Hotstring("::ی", "ي", "Toggle")
A :=! A
Return
Startup:
IF Startup {
FileDelete, %LinkFile%
Menu, Tray, Uncheck, Run at Startup
} else {
FileCreateShortcut, %A_ScriptFullPath%, %LinkFile%
Menu, Tray, Check, Run at Startup
}
Startup :=! Startup
Return
About:
MsgBox,, Farsi Keyboard add-on v2, Replaces DOTLESS YA with ARABIC YA in Adobe Connect`n`n`Shift & Win: Convert text and change the keyboard layout`n`Shift & Space: Insert Half-space`n`Shift & CapsLock: Toggle Arabic KAF and YA as default`n`Win & CapsLock: Toggle Farsi Digits as default`n`n`Made with AHK by Ahmad`n`For updates and more info, visit: t.me/Farsi_KAO
Return
Hotkeys:
Gui, Add, Text, cBlue, "none" for default setting
Gui, Add, Text,, Convert text:
Gui, Add, Hotkey, vConvertINI W131, %ConvertINI%
Gui, Add, Text,, Toggle Farsi digits:
Gui, Add, Hotkey, vDigitsINI W131, %DigitsINI%
Gui, Add, Text,, Toggle Arabic KAF and YA:
Gui, Add, Hotkey, vArabicINI W131, % ArabicINI="+CapsLock" ? null:ArabicINI
Gui, Add, Button, gGuiClose W61 xp+1 yp+29, Cancel
Gui, Add, Button, Default gOK W61 yp x+7, OK
Gui, Show,, %A_Space%
Return
OK:
Hotkey, %ConvertINI%, Convert, Off, UseErrorLevel
Hotkey, %DigitsINI%, Digits, Off, UseErrorLevel
Hotkey, %ArabicINI%, Arabic, Off, UseErrorLevel
Gui, Submit, NoHide
ConvertINI := ConvertINI="" ? "<+LWin Up":ConvertINI
DigitsINI := DigitsINI="" ? "LWin & CapsLock":DigitsINI
ArabicINI := ArabicINI="" ? "+CapsLock":ArabicINI
Hotkey, %ConvertINI%, Convert, On
Hotkey, %DigitsINI%, Digits, On
Hotkey, %ArabicINI%, Arabic, On
IniWrite, %ConvertINI%, Hotkeys.INI, Hotkeys, Convert
IniWrite, %DigitsINI%, Hotkeys.INI, Hotkeys, Digits
IniWrite, %ArabicINI%, Hotkeys.INI, Hotkeys, Arabic
Gui, Destroy
Return
GuiEscape:
GuiClose:
Gui, Destroy
Return
ByeScript:
ExitApp
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment