-
Notifications
You must be signed in to change notification settings - Fork 2
/
RInterface.ahk
176 lines (175 loc) · 4.95 KB
/
RInterface.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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
;{ NppToR: R in Notepad++
; by Andrew Redd 2012 <[email protected]>
; use govorned by the MIT license http://www.opensource.org/licenses/mit-license.php
;
; DESCRIPTION
; ===========
; Functions for interacting with R.
;
;}
;{ ; R interface functions
Rpaste(GetCurrDir)
{
outputdebug % "NppToR/RInterface.ahk[Rpaste]:entering(clip = " . substr(clipboard, 1, 25) . ".`n" ;%
WinGet currID, ID, A ; save current window ID to return here later
RprocID:=RGetOrStart(GetCurrDir)
outputdebug % "NppToR/RInterface.ahk[Rpaste]:RprocID=" . RprocID . ".`n" ;%
if ErrorLevel
{
IfWinExist , RGui
NTRError(701)
else
NTRError(702)
return
}
gosub CheckForNewLine
WinMenuSelectItem ,ahk_id %RprocID%,,2&,2& ;edit->paste
WinActivate ahk_id %currID% ; go back to the original window if moved
ClipRestore(Rpastewait)
return
}
RGetOrStart(GetCurrDir)
{
outputdebug % "NppToR/RInterface.ahk[RGetOrStart]: Entering.`n" ;%
SetTitleMatchMode, RegEx
SetTitleMatchMode, Fast
IfWinExist ,ahk_class Rgui,,(Graphics),
{
outputdebug % "NppToR/RInterface.ahk[RGetOrStart]: found R Console.`n" ;%
;WinActivate ;
WinGet RprocID, ID ;,A
outputdebug % "NppToR/RInterface.ahk[RGetOrStart]:exiting, RprocID=" . RprocID . ".`n" ;%
return RprocID
}
else IfWinExist ,R Console (64-bit)
{
outputdebug % "NppToR/RInterface.ahk[RGetOrStart]: found R Console (64-bit).`n" ;%
;WinActivate ; ahk_class RGui
WinGet RprocID, ID ;,A
outputdebug % "NppToR/RInterface.ahk[RGetOrStart]: exiting RprocID=" . RprocID . ".`n" ;%
return RprocID
}
else ; No Compatile R Gui found.
{
outputdebug % "NppToR/RInterface.ahk[RGetOrStart]: R not found.`n" ;%
global Rguiexe
global Rcmdparms
dir := GetCurrDir.()
outputdebug % "NppToR/RInterface.ahk[RGetOrStart]: dir='" . dir . "'`n" ;%
setworkingdir %dir%
EnvSet , R_ENVIRON_USER, %scriptdir%
outputdebug % "NppToR/RInterface.ahk[RGetOrStart]: Starting R(" . Rguiexe . " --sdi " . RcmdParms . ").`n" ;%
run %Rguiexe% --sdi %RcmdParms% --sdi,dir,,RprocID
ClipNoRestore()
winwait ,R Console,, %Rrunwait%
WinGet RprocID, ID ;,A
outputdebug % "NppToR/RInterface.ahk[RGetOrStart]:Exiting, RprocID=" . RprocID . "`n" ;%
return RprocID
}
}
RGetCMD()
{
global Rhome
Rcmdexe = %Rhome%\bin\Rcmd.exe
IfExist %Rcmdexe%
return %Rcmdexe%
else
Rcmdexe = %Rhome%\bin\x64\Rcmd.exe
FE := FileExist(Rcmdexe)
If (pref32) OR !(FE)
{
Rcmdexe = %Rhome%\bin\i386\Rcmd.exe
FE := FileExist(Rcmdexe)
}
If FE
return %Rcmdexe%
else
return
}
RGetRscript()
{
global Rhome
Rscriptexe = %Rhome%\bin\Rscript.exe
IfExist %Rscriptexe%
return %Rscriptexe%
else
Rscriptexe = %Rhome%\bin\x64\Rscript.exe
FE := FileExist(Rscriptexe)
If (pref32) OR !(FE)
{
Rscriptexe = %Rhome%\bin\i386\Rscript.exe
FE := FileExist(Rscriptexe)
}
If FE
return %Rscriptexe%
else
return
}
RSetWD(currdir, GetFullPath)
{
WinActivate ahk_class Notepad++
StringReplace , wd, currdir, \, /, All
ClipSave()
clipboard = setwd("%wd%")`n
Rpaste(GetFullPath)
return
}
sendSilent:
{
gosub sendByCOM
ClipRestore(Rpastewait)
return
}
RSendSource(fullpath, GetFullPath)
{
WinMenuSelectItem ,A,,File,Save
StringReplace , file, fullpath, \, /, All
ClipSave()
clipboard = source(file="%file%")`n
Rpaste(GetFullPath)
return
}
CheckForNewLine:
{
outputdebug % "NppToR/RInterface.ahk[CheckForNewLine]:entering(clip tail = " . substr(clipboard, 1, 25) . ".`n" ;%
;Transform, var, Unicode
var := clipboard
if var <>
{
stringright , right, var, 1 ;for long strings
found := regexmatch( right, "[`r`n]")
if !found
{
outputdebug % "NppToR/RInterface.ahk[CheckForNewLine]: not found`n" ;%
clipboard := var . "`r`n"
}
}
outputdebug % "NppToR/RInterface.ahk[CheckForNewLine]:Leaving(clip tail = " . substr(clipboard, 1, 25) . ".`n" ;%
return
}
RSendEsc(GetCurrDir)
{
; TODO
outputdebug % "NppToR/RInterface.ahk[RSendEsc]"
WinGet currID, ID, A ; save current window ID to return here later
RprocID:=RGetOrStart(GetCurrDir)
outputdebug % "NppToR/RInterface.ahk[RSendEsc]:RprocID=" . RprocID . ".`n" ;%
if ErrorLevel
{
IfWinExist , RGui
NTRError(701)
else
NTRError(702)
return
}
WinActivate ahk_id %RProcID% ; go back to the original window if moved
SendInput {Esc}
WinActivate ahk_id %currID% ; go back to the original window if moved
return
}
;} ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;{ Includes
#include %A_ScriptDir%\COM\com4NppToR.ahk
#include %A_ScriptDir%\COM\COM.ahk
#include %A_ScriptDir%\clip.ahk
;}