From 1b4cf7306ced4e60d91b635c437bf387e7369d60 Mon Sep 17 00:00:00 2001 From: Jason Cemra Date: Tue, 26 Jul 2016 18:26:14 +1000 Subject: [PATCH] Initial Commit I had written the script in about 2hrs of spare time to kill - why not, right? I will also be using this a lot, so why not make it a project :) --- .gitignore | 3 + Em-n-en.ahk | 222 +++++++++++++++++++++++++++++++++++++++++++ README.md | 32 +++++++ icon/Eminen-icon.ico | Bin 0 -> 28288 bytes icon/Eminen-icon.png | Bin 0 -> 7425 bytes 5 files changed, 257 insertions(+) create mode 100644 .gitignore create mode 100644 Em-n-en.ahk create mode 100644 README.md create mode 100644 icon/Eminen-icon.ico create mode 100644 icon/Eminen-icon.png diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a20bed6 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +*.ini +*.psd +*.exe \ No newline at end of file diff --git a/Em-n-en.ahk b/Em-n-en.ahk new file mode 100644 index 0000000..47f5685 --- /dev/null +++ b/Em-n-en.ahk @@ -0,0 +1,222 @@ +SetWorkingDir %A_ScriptDir% +SendMode Input +#SingleInstance, force +#NoEnv + + +settings_file = Em-n-en_Settings.ini +startup_shortcut := A_Startup . "\Em-n-en.lnk" +settings := Object() + +; Initialize Settings in the following way: +; array[key] := ["Section", "Key", "Value"] +settings["mod"] := ["Methods", "modifiers", false] +settings["inl"] := ["Methods", "inline", true] +settings["hrd"] := ["Methods", "hard_replace", false] +settings["sww"] := ["General", "startup_run", false] + +if !FileExist(settings_file) { + write_settings(settings) + settingsGui() +} +read_settings(settings) + +; Set up the right click menu +Menu, Tray, NoStandard + +; Menu, Tray, Add, About, about +Menu, Tray, Add, Settings, settingsGui +Menu, Tray, Default, Settings +Menu, Tray, Add, +Menu, Tray, Add, Reset, reset +Menu, Tray, Add, Restart, restart +Menu, Tray, Add, Exit, exit +Menu, Tray, Tip, Em-n-en - Type En and Em dashes + +; Define the settings GUI +settingsGui() { + global + + ; Initialization + Gui, Settings: New + Gui, Settings: -Resize -MaximizeBox +OwnDialogs + + ; Title and Copyright + Gui, Settings:font, s18, Arial + Gui, Settings:Add, Text, Center W475, Em-n-en Settings + Gui, Settings:font, s8 c808080, Trebuchet MS + Gui, Settings:Add, Text, Center W475 yp+26, Copyright (c) 2016 Jason Cemra + + ; Standard Settings + Gui, Settings:font, s8 c505050, Trebuchet MS + Gui, Settings:Add, GroupBox, w455 h283, Standard Settings + Gui, Settings:font, s10 c10101f, Trebuchet MS + Gui, Settings:Add, Text, Left w210 xp+12 yp+22, Method for Dash Insertion: + + Gui, Add, Checkbox, yp+25 vcheck_modifier_method, Modifier Keys + Gui, Settings:font, s8 c808080, Trebuchet MS + Gui, Settings:Add, Text, W400 yp+20, En Dash: Ctrl + Shift + "-" and Em Dash: En Dash: Ctrl + Shift + Alt + "-" + Gui, Settings:font, s10 c10101f, Trebuchet MS + + Gui, Add, Checkbox, yp+25 vcheck_inline_method, Inline Replace + Gui, Settings:font, s8 c808080, Trebuchet MS + Gui, Settings:Add, Text, W400 yp+20, En Dash, type: "--=" and Em Dash, type: "==-" + Gui, Settings:font, s10 c10101f, Trebuchet MS + + Gui, Add, Checkbox, yp+25 vcheck_hard_replace_method, Hard Replace + Gui, Settings:font, s8 c808080, Trebuchet MS + Gui, Settings:Add, Text, W400 yp+20, Not Recommended. Will replace "-" with En Dash if not directly next to a letter. + Gui, Settings:font, s10 c10101f, Trebuchet MS + + Gui, Settings:Add, Text, Left w210 yp+35, Other Settings: + Gui, Add, Checkbox, yp+25 vcheck_start_with_windows, Start on Windows Startup + Gui, Settings:font, s10 c810000, Arial + Gui, Settings:Add, Button, yp+25 w180 gSettingsButtonReset, Reset everything to default + + ; Buttons + Gui, Settings:Add, Button, Default xp+158 yp+50 w85, Ok + Gui, Settings:Add, Button, xp+100 w85, Apply + Gui, Settings:Add, Button, xp+100 w85, Cancel + + loadSettingsToGui() + Gui, show, W500 H400 center, Em-n-en Settings +} +; GUI Actions +settingsButtonOk() { + if (pullSettingsFromGui()) { + Gui, Settings:Destroy + } else { + MsgBox, Errer! + } +} +settingsButtonApply(){ + pullSettingsFromGui() +} +loadSettingsToGui(){ + global + GuiControl, Settings:, check_modifier_method, % settings["mod"][3] + GuiControl, Settings:, check_inline_method, % settings["inl"][3] + GuiControl, Settings:, check_hard_replace_method, % settings["hrd"][3] + GuiControl, Settings:, check_start_with_windows, % settings["sww"][3] +} +pullSettingsFromGui(){ + global + Gui, Settings:Submit, NoHide + settings["mod"][3] := check_modifier_method + settings["inl"][3] := check_inline_method + settings["hrd"][3] := check_hard_replace_method + settings["sww"][3] := check_start_with_windows + save() + update_sww_state(settings["sww"][3]) + return true +} +settingsButtonCancel(){ + Gui, Settings:Destroy +} +settingsButtonReset() { + Gui, Settings: +OwnDialogs + reset() +} + + +; On-startup logic +sww() { + global + settings["sww"][3] := !settings["sww"][3] + save() + update_sww_state(settings["sww"][3]) + loadSettingsToGui() +} + +update_sww_state(state){ + global startup_shortcut + if (state) { + FileGetShortcut, %startup_shortcut%, shortcut_path + if (!FileExist(startup_shortcut) || shortcut_path != A_ScriptFullPath) { + startup_shortcut_create() + } + } else { + startup_shortcut_destroy() + } +} + +startup_shortcut_create() { + global startup_shortcut + FileCreateShortcut, %A_ScriptFullPath%, %startup_shortcut%, %A_WorkingDir% +} + +startup_shortcut_destroy() { + global startup_shortcut + FileDelete, %startup_shortcut% +} + +; Settings logic +save() { + global settings + write_settings(settings) +} + +write_settings(settings) { + global settings_file + for index, var in settings { + IniWrite, % var[3], %settings_file%, % var[1], % var[2] + } +} + +read_settings(ByRef settings) { + global settings_file + for index, var in settings { + IniRead, buffer, %settings_file%, % var[1], % var[2] + var[3] := buffer + } +} + +; Exit logic +restart() { + save() + Reload + ExitApp +} + +exit() { + save() + ExitApp +} + +reset(){ + global + MsgBox, 0x34, Are you sure?, This will completely wipe all settings and exit the program. + IfMsgBox, No + return + FileDelete, %settings_file% + startup_shortcut_destroy() + ExitApp +} + + +; "En Dash" code point is {U+2013} and "Em Dash" code point is {U+2014} + +#If, settings["mod"][3] +^+-:: +Send {U+2013} +return + +#If, settings["mod"][3] +^!+-:: +Send {U+2014} +return + +#If, settings["inl"][3] +:*?:--=:: +Send {U+2013} +return + +#If, settings["inl"][3] +:*?:==-:: +Send {U+2014} +return + +#If, settings["hrd"][3] +:*:-:: +Send {U+2013} +return \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..c9caa10 --- /dev/null +++ b/README.md @@ -0,0 +1,32 @@ +# Eminen + +> Em and En dash keyboard-ization –(^—^)– +> Windows Only + +If you're a writer, then you need the Em and En dashes. This ultra-simple program makes it easy for you to just type the dash and move on. It does this in a variety of ways - you choose which one's you like. + +### [→ Download Here ←](https://github.com/cemrajc/eminen/releases/latest) + +#### How to use: + +1. Download the latest release (link above) +1. Put it in its own folder +1. Run it (double click on it) +1. Choose your options – there is one recommended by default +1. Tell it to "Start on Windows Startup" +1. Click "Ok" +1. Profit :smile: + +Now, Eminen will live in your tray – accessible by its icon. Look forward to better writing! + +If you ever want to remove Eminen, just run it, right-click on the tray icon, click "Reset" and then delete its folder. + +#### List of Ways to Make Some Dashes: + +| Method name | How to do it | +| :---------: | :----------: | +| Modifier keys | Ctrl + Shift + - for **En dash** (–)
Ctrl + Shift + Alt + - for **Em dash** (—) | +| Inline Replace | Type `--=` for **En dash** (–)
Type `==-` for **Em dash** (—) | +| Hard Replace | Replaces hyphen (-) with **En dash** (–) all the time (*this is probably a bad idea*) | + +That's all there is to it! If you have some other way you would like implemented, then [send me a message!](cemrajc+eminen@gmail.com) \ No newline at end of file diff --git a/icon/Eminen-icon.ico b/icon/Eminen-icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..6c9f13f48696266429ae13d1af393b7e5346b848 GIT binary patch literal 28288 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 cgJ%(h7Z?Q{Cdnh8}g2`KkVK zgR*slasU4P&9B$x+|lIKY~_8fJoZkXE%hF!!$vEp4Np!>OY=Q2dXN)KW?o>RPi67( zaRWRVM;Da*8K*a?@YMH<3}@G@Hc{Xtn}n>?Vmj*iqAu(&bU*wCX)Y=Kgdw$xf2`A4gy@z{S6sv4N>; zk{!bB9kbT0-y?3yO+gy5g;_ObxXX~eL{gOoXYjg3L|j7IN|WqBfr3r+)5Uy~96N(m zCo=_3rk8^p1HRJW_%NmUQ=jEB^~?{1azkX~dHr_eKi!xx-6(iw^r4qbLVv~c={fcR zUm4YGYkaw#K*cNFr5*n&cd9-q$a%$3nH$#IzQwu z%KxJ=YqT?(PQ0}Aa&bLAJiE|r9$IHq&eJ>Na(F3P8oa~0@X97`quj8?#mTEPdmkH= zUF%gq==&1a`V3amHQ)cL@Q)W`Ekj50=kg5is43eASZQ#za@0>oYI4RMMh6sP`{f&P zCx+BW8(O|PJ1qBVihly($LO8o8laxWRhSc9RZ$W3>-Sc*2RPQ2NiJs}$eivqSF`#T z>yAe#pB@j$VyD(9MA=EX$CcT*xh%gf6Q)(0<9vEZ-#^uI)Xn&F z!eTgXPRlqN-0d%BKOPnT_3{igTMKSj;M3DFzm2%ph&xEpz>d zfMr}u&fy7j?nkP6@q5|E+pYNa>CTerd24RS6ia!k&Mmfb34gf8>*~)w*EL|Qm!8a0 zI@>!U&%RLh0<%x${6IlGYsVViY8b<{vwB~V<5e!O_Ahj8^y41p?6N$u&%H#Gp%`rc zWC(wmvRpFz(V*D{AwK50%O3g4Tn-wkl0RaWW8*{Kq3B|ViK$!n4a&;Cmr}65JT14c z&GxM}j0-aRiI}r`=kshv#+GG&`}@4pkFHsv<+jGeF_mMC+Ji+i8PA^kykuCfGZ{BM zS8c$i!`18vf1VvL6P}R5Hy1L`UpTfX`O=eXfv7&h+hyV2MJB;}B4rHL4u6(bx1ZHG zvY+2eje%I9YOUfEALv%4jnRAlsAg;oQ!O#%ZDNj1JMbg%pw|y2QCoRidB=If8t&Mv z5Bz*#Sh&VPMUPQ`|GebKLFo0ISj1wcs2yH8gZGWMQ}}MTlx3V3cS0_EO;}<1dMbb0 zvKtS<3RCK9Eq?H`M{>TzM8t~Q{zW4HQc||JU%1B7eepM}rLC0qGUhC_e0}2D!E5De zkqWO+=*F^y3eK&p$LB{!JYCv1eM!m4XKBxl_Nl6T#JLs~QupG{wTD4_uZ7h9-k|oM YqFp+NZZF`&vpjOJoBG9mTkjwK56KwwC;$Ke literal 0 HcmV?d00001 diff --git a/icon/Eminen-icon.png b/icon/Eminen-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..22af43e546b856b0064efce598207a2593a6f5c7 GIT binary patch literal 7425 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 literal 0 HcmV?d00001