/
SciTEDirector.ahk
69 lines (64 loc) · 1.63 KB
/
SciTEDirector.ahk
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
;
; File encoding: UTF-8
;
; SciTE director wrapper
; version 1.0 - fincs
;
Director_Init()
{
global WM_COPYDATA, DirectorRecv, DirectorRetByArray, DirectorMsg, ATM_Director, scitehwnd, hwndgui, directorhwnd, DirectorReady
WM_COPYDATA := 0x4a, DirectorRecv := false, DirectorMsg := ""
OnMessage(WM_COPYDATA, "_Director_Recv")
Director_Send("identity:" (hwndgui+0))
DirectorReady := true
}
Director_Send(msg, returns := false, onArray := false)
{
global directorhwnd, WM_COPYDATA, DirectorMsg, DirectorRcv, DirectorRetByArray
len := StrPutVar(msg, msg_utf8, "UTF-8")
; This code was taken from the AHK help
VarSetCapacity(COPYDATASTRUCT, 3*A_PtrSize, 0)
NumPut(len, COPYDATASTRUCT, A_PtrSize, "UInt")
NumPut(&msg_utf8, COPYDATASTRUCT, 2*A_PtrSize)
if returns
{
DirectorRcv := true
DirectorRetByArray := onArray
if onArray
DirectorMsg := []
}
SendMessage, WM_COPYDATA, 0, ©DATASTRUCT,, ahk_id %directorhwnd%
if returns
{
DirectorRcv := false
DirectorRetByArray := false
return DirectorMsg
}
}
_Director_Recv(wParam, lParam, msg, hwnd)
{
Critical
global DirectorMsg, DirectorRcv, DirectorRetByArray, lastfunc
message := _Director_ParseResponse(StrGet(NumGet(lParam + 2*A_PtrSize), NumGet(lParam + A_PtrSize, "UInt"), "UTF-8"))
if DirectorRcv
{
if !DirectorRetByArray
DirectorMsg := message
else
DirectorMsg.Insert(message)
}else
{
func := "SciTE_On" message.verb
if IsFunc(func)
{
Critical, Off
%func%(message.value, message.verb)
}
}
return true
}
_Director_ParseResponse(resp)
{
colon := InStr(resp, ":")
return { Verb: SubStr(resp, 1, colon-1), Value: CUnescape(SubStr(resp, colon+1)) }
}