Files
d3k/func.ahk
T

99 lines
3.2 KiB
AutoHotkey
Raw Normal View History

2026-07-08 11:54:28 -05:00
#Requires AutoHotkey v2 ; v2 only
#SingleInstance force ; Only one instance at a time
FileEncoding("UTF-8") ; Makes sure the special characters dont break stuff
SetWorkingDir(A_MyDocuments "\D3K") ; Make sure we can find the .ahks linked below
SetTitleMatchMode(2)
2023-02-13 16:20:22 -06:00
2026-07-08 11:54:28 -05:00
global d3k_version := 3 ; The current version
2023-02-13 16:20:22 -06:00
;------------------------------------------------------------------------------
; INI Manipulation that supports UTF-8
;------------------------------------------------------------------------------
ini_load(location)
{
2026-07-08 11:54:28 -05:00
temp := FileOpen(location, "r")
cleaner := temp.Read()
temp.Close()
2026-08-28 12:27:28 -05:00
cleaner := RegExReplace(cleaner, "`m)[ \t]+$|^[\s\R]*$") ; Remove empty lines, spaces, tabs
2026-07-08 11:54:28 -05:00
temp := FileOpen(location, "w")
temp.Write(cleaner)
temp.Close()
temp := FileOpen(location, "r")
2026-08-28 12:27:28 -05:00
out := Map() ; I tried an object, it was too complicated for what I'm doing. Nested map is good enough
curr_section := 0 ; v2 won't evaluate a true/false to false if a variable isn't set to false
r := Object() ; bruh why do I have to set up variables now suddenly
2023-02-13 16:20:22 -06:00
Loop
{
2026-07-08 11:54:28 -05:00
Line := temp.ReadLine()
RegExMatch(Line, "(?<Section>(?<=\[).*(?=\]))|(?<Key>.*)=(?<Value>.*)", &r) ; Key = r.Key, Value = r.Value, Section = r.Section
If (r.Section)
2023-02-13 16:20:22 -06:00
{
2026-08-28 12:27:28 -05:00
out[r.Section] := Map()
curr_section := r.Section
} Else
2023-02-13 16:20:22 -06:00
{
2026-08-28 12:27:28 -05:00
If (curr_section)
{
out[curr_section].Set(Trim(r.Key, " `t`r`n"), Trim(r.Value, " `t`r`n"))
} Else
{
out.Set(Trim(r.Key, " `t`r`n"), Trim(r.Value, " `t`r`n")) ; this handles things with no section
}
2023-02-13 16:20:22 -06:00
}
2026-07-08 11:54:28 -05:00
} Until (temp.AtEOF)
temp.Close()
2023-02-13 16:20:22 -06:00
Return out
}
ini_write(location, inKey, inValue) ; Don't need to specify section because you can only have one hotstring anyway
{
2026-07-08 11:54:28 -05:00
ini := FileOpen(location, "r")
temp := ini.Read()
ini.Close()
2026-08-28 12:27:28 -05:00
temp := RegExReplace(temp, "(?<=" inKey "=).*", inValue)
2026-07-08 11:54:28 -05:00
ini := FileOpen(location, "w")
ini.Write(temp)
ini.Close()
2023-02-13 16:20:22 -06:00
}
2019-12-17 10:57:15 -06:00
2022-03-29 14:33:19 -05:00
;------------------------------------------------------------------------------
; Make sure the settings file exists, if not, create it
;------------------------------------------------------------------------------
2023-02-13 16:20:22 -06:00
sett_ini := A_MyDocuments "\D3Ksettings.ini" ; Where the settings ini is
2019-12-17 10:57:15 -06:00
2023-02-13 16:20:22 -06:00
If !FileExist(sett_ini) ; Check if the sett_ini doesn't exist
2019-12-17 10:57:15 -06:00
{
2026-07-08 11:54:28 -05:00
ini := FileOpen(sett_ini, "w")
2023-02-13 16:20:22 -06:00
writethis := "
( LTrim
[email protected]
2026-08-28 12:27:28 -05:00
DocFile=0
2023-02-13 16:20:22 -06:00
JDProductNames=1
GloVar=0
German=0
2026-08-28 12:27:28 -05:00
msmv=always
msmv_status=stopped
2023-02-13 16:20:22 -06:00
)"
2026-07-08 11:54:28 -05:00
ini.Write(writethis)
2026-08-28 12:27:28 -05:00
ini.Close()
2026-07-08 11:54:28 -05:00
Run("Settings.ahk") ; Runs the GUI for changing the settings, accessible with Alt+Shift+\ (also easy way to restart this script)
2019-12-17 10:57:15 -06:00
}
;------------------------------------------------------------------------------
2023-02-13 16:20:22 -06:00
; Read the sett_ini
2022-03-29 14:33:19 -05:00
;------------------------------------------------------------------------------
2026-07-08 11:54:28 -05:00
; This is the part that reads the file to see what your settings are.
2023-02-13 16:20:22 -06:00
2026-07-08 11:54:28 -05:00
global settings := ini_load(sett_ini)
2022-03-29 14:33:19 -05:00
2026-07-08 11:54:28 -05:00
; started as global variables, keeping this commented out in case there's some old script where I need to replace something
2022-03-29 14:33:19 -05:00
; User Specific things:
2026-08-28 12:27:28 -05:00
;global email := settings["Email"]
;global docfile := settings["DocFile"]
;global jdpn := settings["JDProductNames"]
;global glovar := settings["GloVar"]
;global ger := settings["German"]