mirror of https://gitlab.com/basile.b/dexed.git
fix #321 - setting for the DCD custom port does not work at all
This commit is contained in:
parent
37744bd97f
commit
0db896a68e
151
src/ce_dcd.pas
151
src/ce_dcd.pas
|
@ -29,19 +29,22 @@ type
|
||||||
fInputSource: string;
|
fInputSource: string;
|
||||||
fImportCache: TStringHashSet;
|
fImportCache: TStringHashSet;
|
||||||
fPortNum: Word;
|
fPortNum: Word;
|
||||||
|
fCurrentSessionPortNum: Word;
|
||||||
fServerWasRunning: boolean;
|
fServerWasRunning: boolean;
|
||||||
fClient, fServer: TProcess;
|
fClient, fServer: TProcess;
|
||||||
fAvailable: boolean;
|
fAvailable: boolean;
|
||||||
fServerListening: boolean;
|
fServerListening: boolean;
|
||||||
fDoc: TCESynMemo;
|
fDoc: TCESynMemo;
|
||||||
fProj: ICECommonProject;
|
fProj: ICECommonProject;
|
||||||
|
fPortAsProcParam: string;
|
||||||
procedure killServer;
|
procedure killServer;
|
||||||
procedure terminateClient; inline;
|
procedure terminateClient; {$IFNDEF DEBUG}inline;{$ENDIF}
|
||||||
procedure waitClient; inline;
|
procedure waitClient; {$IFNDEF DEBUG}inline;{$ENDIF}
|
||||||
procedure updateServerlistening;
|
procedure updateServerlistening;
|
||||||
procedure writeSourceToInput; inline;
|
procedure writeSourceToInput; {$IFNDEF DEBUG}inline;{$ENDIF}
|
||||||
function checkDcdSocket: boolean;
|
function checkDcdSocket: boolean;
|
||||||
function getIfLaunched: boolean;
|
function getIfLaunched: boolean;
|
||||||
|
procedure tryAddTcpParams; {$IFNDEF DEBUG}inline;{$ENDIF}
|
||||||
//
|
//
|
||||||
procedure projNew(project: ICECommonProject);
|
procedure projNew(project: ICECommonProject);
|
||||||
procedure projChanged(project: ICECommonProject);
|
procedure projChanged(project: ICECommonProject);
|
||||||
|
@ -95,21 +98,23 @@ var
|
||||||
i: integer = 0;
|
i: integer = 0;
|
||||||
begin
|
begin
|
||||||
inherited;
|
inherited;
|
||||||
//
|
|
||||||
fname := getCoeditDocPath + optsname;
|
fname := getCoeditDocPath + optsname;
|
||||||
if fname.fileExists then
|
if fname.fileExists then
|
||||||
loadFromFile(fname);
|
loadFromFile(fname);
|
||||||
//
|
fCurrentSessionPortNum := fPortNum;
|
||||||
|
fPortAsProcParam := '-p' + intToStr(fCurrentSessionPortNum);
|
||||||
|
|
||||||
fAvailable := exeInSysPath(clientName) and exeInSysPath(serverName)
|
fAvailable := exeInSysPath(clientName) and exeInSysPath(serverName)
|
||||||
and not noDcdPassedAsArg();
|
and not noDcdPassedAsArg();
|
||||||
if not fAvailable then
|
if not fAvailable then
|
||||||
exit;
|
exit;
|
||||||
//
|
|
||||||
fClient := TProcess.Create(self);
|
fClient := TProcess.Create(self);
|
||||||
fClient.Executable := exeFullName(clientName);
|
fClient.Executable := exeFullName(clientName);
|
||||||
fClient.Options := [poUsePipes{$IFDEF WINDOWS}, poNewConsole{$ENDIF}];
|
fClient.Options := [poUsePipes{$IFDEF WINDOWS}, poNewConsole{$ENDIF}];
|
||||||
fClient.ShowWindow := swoHIDE;
|
fClient.ShowWindow := swoHIDE;
|
||||||
//
|
|
||||||
fServerWasRunning := AppIsRunning((serverName));
|
fServerWasRunning := AppIsRunning((serverName));
|
||||||
if not fServerWasRunning then
|
if not fServerWasRunning then
|
||||||
begin
|
begin
|
||||||
|
@ -119,8 +124,11 @@ begin
|
||||||
{$IFNDEF DEBUG}
|
{$IFNDEF DEBUG}
|
||||||
fServer.ShowWindow := swoHIDE;
|
fServer.ShowWindow := swoHIDE;
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
if fPortNum <> 0 then
|
if fCurrentSessionPortNum <> 0 then
|
||||||
fServer.Parameters.Add('-p' + intToStr(port));
|
begin
|
||||||
|
fServer.Parameters.Add('--tcp');
|
||||||
|
fServer.Parameters.Add(fPortAsProcParam);
|
||||||
|
end;
|
||||||
end;
|
end;
|
||||||
fTempLines := TStringList.Create;
|
fTempLines := TStringList.Create;
|
||||||
fImportCache := TStringHashSet.Create;
|
fImportCache := TStringHashSet.Create;
|
||||||
|
@ -136,7 +144,7 @@ begin
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
updateServerlistening;
|
updateServerlistening;
|
||||||
//
|
|
||||||
EntitiesConnector.addObserver(self);
|
EntitiesConnector.addObserver(self);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
@ -284,15 +292,15 @@ end;
|
||||||
function TCEDcdWrapper.checkDcdSocket: boolean;
|
function TCEDcdWrapper.checkDcdSocket: boolean;
|
||||||
var
|
var
|
||||||
str: string;
|
str: string;
|
||||||
{$IFDEF WINDOWS}
|
|
||||||
prt: word = 9166;
|
prt: word = 9166;
|
||||||
prc: TProcess;
|
prc: TProcess;
|
||||||
lst: TStringList;
|
lst: TStringList;
|
||||||
{$ENDIF}
|
|
||||||
begin
|
begin
|
||||||
sleep(100);
|
sleep(100);
|
||||||
// nix/osx: the file might exists from a previous session that crashed
|
// nix/osx: the file might exists from a previous session that crashed
|
||||||
// however the 100 ms might be enough for DCD to initializes
|
// however the 100 ms might be enough for DCD to initializes
|
||||||
|
if fCurrentSessionPortNum = 0 then
|
||||||
|
begin
|
||||||
{$IFDEF LINUX}
|
{$IFDEF LINUX}
|
||||||
str := sysutils.GetEnvironmentVariable('XDG_RUNTIME_DIR');
|
str := sysutils.GetEnvironmentVariable('XDG_RUNTIME_DIR');
|
||||||
if (str + DirectorySeparator + 'dcd.socket').fileExists then
|
if (str + DirectorySeparator + 'dcd.socket').fileExists then
|
||||||
|
@ -306,9 +314,10 @@ begin
|
||||||
if ('/var/tmp/dcd-' + str + '.socket').fileExists then
|
if ('/var/tmp/dcd-' + str + '.socket').fileExists then
|
||||||
exit(true);
|
exit(true);
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
{$IFDEF WINDOWS}
|
end;
|
||||||
result := false;
|
result := false;
|
||||||
if port <> 0 then prt := port;
|
if port <> 0 then
|
||||||
|
prt := port;
|
||||||
prc := TProcess.Create(nil);
|
prc := TProcess.Create(nil);
|
||||||
try
|
try
|
||||||
prc.Options:= [poUsePipes, poNoConsole];
|
prc.Options:= [poUsePipes, poNoConsole];
|
||||||
|
@ -323,7 +332,7 @@ begin
|
||||||
for str in lst do
|
for str in lst do
|
||||||
if AnsiContainsText(str, '127.0.0.1:' + intToStr(prt))
|
if AnsiContainsText(str, '127.0.0.1:' + intToStr(prt))
|
||||||
and AnsiContainsText(str, 'TCP')
|
and AnsiContainsText(str, 'TCP')
|
||||||
and AnsiContainsText(str, 'LISTENING') then
|
and AnsiContainsText(str, 'LISTEN') then
|
||||||
begin
|
begin
|
||||||
result := true;
|
result := true;
|
||||||
break;
|
break;
|
||||||
|
@ -335,16 +344,24 @@ begin
|
||||||
prc.Free;
|
prc.Free;
|
||||||
end;
|
end;
|
||||||
exit(result);
|
exit(result);
|
||||||
{$ENDIF}
|
end;
|
||||||
exit(false);
|
|
||||||
|
procedure TCEDcdWrapper.tryAddTcpParams;
|
||||||
|
begin
|
||||||
|
if fCurrentSessionPortNum <> 0 then
|
||||||
|
begin
|
||||||
|
fClient.Parameters.Add('--tcp');
|
||||||
|
fClient.Parameters.Add(fPortAsProcParam);
|
||||||
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCEDcdWrapper.killServer;
|
procedure TCEDcdWrapper.killServer;
|
||||||
begin
|
begin
|
||||||
if not fAvailable then exit;
|
if not fAvailable or not fServerListening then
|
||||||
if not fServerListening then exit;
|
exit;
|
||||||
//
|
|
||||||
fClient.Parameters.Clear;
|
fClient.Parameters.Clear;
|
||||||
|
tryAddTcpParams;
|
||||||
fClient.Parameters.Add('--shutdown');
|
fClient.Parameters.Add('--shutdown');
|
||||||
fClient.Execute;
|
fClient.Execute;
|
||||||
while fServer.Running or fClient.Running do
|
while fServer.Running or fClient.Running do
|
||||||
|
@ -366,13 +383,12 @@ end;
|
||||||
|
|
||||||
procedure TCEDcdWrapper.addImportFolder(const folder: string);
|
procedure TCEDcdWrapper.addImportFolder(const folder: string);
|
||||||
begin
|
begin
|
||||||
if not fAvailable then exit;
|
if not fAvailable or not fServerListening or fImportCache.contains(folder) then
|
||||||
if not fServerListening then exit;
|
|
||||||
//
|
|
||||||
if fImportCache.contains(folder) then
|
|
||||||
exit;
|
exit;
|
||||||
|
|
||||||
fImportCache.insert(folder);
|
fImportCache.insert(folder);
|
||||||
fClient.Parameters.Clear;
|
fClient.Parameters.Clear;
|
||||||
|
tryAddTcpParams;
|
||||||
fClient.Parameters.Add('-I' + folder);
|
fClient.Parameters.Add('-I' + folder);
|
||||||
fClient.Execute;
|
fClient.Execute;
|
||||||
while fClient.Running do ;
|
while fClient.Running do ;
|
||||||
|
@ -380,40 +396,43 @@ end;
|
||||||
|
|
||||||
procedure TCEDcdWrapper.addImportFolders(const folders: TStrings);
|
procedure TCEDcdWrapper.addImportFolders(const folders: TStrings);
|
||||||
var
|
var
|
||||||
imp: string;
|
i: string;
|
||||||
|
c: integer;
|
||||||
begin
|
begin
|
||||||
if not fAvailable then exit;
|
if not fAvailable or not fServerListening then
|
||||||
if not fServerListening then exit;
|
exit;
|
||||||
//
|
|
||||||
fClient.Parameters.Clear;
|
fClient.Parameters.Clear;
|
||||||
for imp in folders do
|
tryAddTcpParams;
|
||||||
|
c := folders.Count;
|
||||||
|
for i in folders do
|
||||||
begin
|
begin
|
||||||
if fImportCache.contains(imp) then
|
if fImportCache.contains(i) then
|
||||||
continue;
|
continue;
|
||||||
fImportCache.insert(imp);
|
fImportCache.insert(i);
|
||||||
fClient.Parameters.Add('-I' + imp);
|
fClient.Parameters.Add('-I' + i);
|
||||||
|
dec(c);
|
||||||
end;
|
end;
|
||||||
if fClient.Parameters.Count <> 0 then
|
if c = 0 then
|
||||||
begin
|
begin
|
||||||
fClient.Execute;
|
fClient.Execute;
|
||||||
end;
|
|
||||||
while fClient.Running do ;
|
while fClient.Running do ;
|
||||||
end;
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TCEDcdWrapper.getCallTip(out tips: string);
|
procedure TCEDcdWrapper.getCallTip(out tips: string);
|
||||||
begin
|
begin
|
||||||
if not fAvailable then exit;
|
if not fAvailable or not fServerListening or fDoc.isNil then
|
||||||
if not fServerListening then exit;
|
exit;
|
||||||
if fDoc = nil then exit;
|
|
||||||
//
|
|
||||||
terminateClient;
|
terminateClient;
|
||||||
//
|
|
||||||
fClient.Parameters.Clear;
|
fClient.Parameters.Clear;
|
||||||
|
tryAddTcpParams;
|
||||||
fClient.Parameters.Add('-c');
|
fClient.Parameters.Add('-c');
|
||||||
fClient.Parameters.Add(intToStr(fDoc.SelStart - 1));
|
fClient.Parameters.Add(intToStr(fDoc.SelStart - 1));
|
||||||
fClient.Execute;
|
fClient.Execute;
|
||||||
writeSourceToInput;
|
writeSourceToInput;
|
||||||
//
|
|
||||||
fTempLines.Clear;
|
fTempLines.Clear;
|
||||||
processOutputToStrings(fClient, fTempLines);
|
processOutputToStrings(fClient, fTempLines);
|
||||||
while fClient.Running do ;
|
while fClient.Running do ;
|
||||||
|
@ -423,7 +442,7 @@ begin
|
||||||
exit;
|
exit;
|
||||||
end;
|
end;
|
||||||
if not (fTempLines[0] = 'calltips') then exit;
|
if not (fTempLines[0] = 'calltips') then exit;
|
||||||
//
|
|
||||||
fTempLines.Delete(0);
|
fTempLines.Delete(0);
|
||||||
tips := fTempLines.Text;
|
tips := fTempLines.Text;
|
||||||
{$IFDEF WINDOWS}
|
{$IFDEF WINDOWS}
|
||||||
|
@ -454,18 +473,17 @@ var
|
||||||
item: string;
|
item: string;
|
||||||
kindObj: TObject = nil;
|
kindObj: TObject = nil;
|
||||||
begin
|
begin
|
||||||
if not fAvailable then exit;
|
if not fAvailable or not fServerListening or fDoc.isNil then
|
||||||
if not fServerListening then exit;
|
exit;
|
||||||
if fDoc = nil then exit;
|
|
||||||
//
|
|
||||||
terminateClient;
|
terminateClient;
|
||||||
//
|
|
||||||
fClient.Parameters.Clear;
|
fClient.Parameters.Clear;
|
||||||
|
tryAddTcpParams;
|
||||||
fClient.Parameters.Add('-c');
|
fClient.Parameters.Add('-c');
|
||||||
fClient.Parameters.Add(intToStr(fDoc.SelStart - 1));
|
fClient.Parameters.Add(intToStr(fDoc.SelStart - 1));
|
||||||
fClient.Execute;
|
fClient.Execute;
|
||||||
writeSourceToInput;
|
writeSourceToInput;
|
||||||
//
|
|
||||||
fTempLines.Clear;
|
fTempLines.Clear;
|
||||||
processOutputToStrings(fClient, fTempLines);
|
processOutputToStrings(fClient, fTempLines);
|
||||||
while fClient.Running do ;
|
while fClient.Running do ;
|
||||||
|
@ -475,7 +493,7 @@ begin
|
||||||
exit;
|
exit;
|
||||||
end;
|
end;
|
||||||
if not (fTempLines[0] = 'identifiers') then exit;
|
if not (fTempLines[0] = 'identifiers') then exit;
|
||||||
//
|
|
||||||
list.Clear;
|
list.Clear;
|
||||||
for i := 1 to fTempLines.Count-1 do
|
for i := 1 to fTempLines.Count-1 do
|
||||||
begin
|
begin
|
||||||
|
@ -514,22 +532,21 @@ var
|
||||||
len: Integer;
|
len: Integer;
|
||||||
str: string;
|
str: string;
|
||||||
begin
|
begin
|
||||||
if not fAvailable then exit;
|
if not fAvailable or not fServerListening or fDoc.isNil then
|
||||||
if not fServerListening then exit;
|
exit;
|
||||||
if fDoc = nil then exit;
|
|
||||||
//
|
|
||||||
i := fDoc.MouseBytePosition;
|
i := fDoc.MouseBytePosition;
|
||||||
if i = 0 then exit;
|
if i = 0 then exit;
|
||||||
//
|
|
||||||
terminateClient;
|
terminateClient;
|
||||||
//
|
|
||||||
fClient.Parameters.Clear;
|
fClient.Parameters.Clear;
|
||||||
|
tryAddTcpParams;
|
||||||
fClient.Parameters.Add('-d');
|
fClient.Parameters.Add('-d');
|
||||||
fClient.Parameters.Add('-c');
|
fClient.Parameters.Add('-c');
|
||||||
fClient.Parameters.Add(intToStr(i - 1));
|
fClient.Parameters.Add(intToStr(i - 1));
|
||||||
fClient.Execute;
|
fClient.Execute;
|
||||||
writeSourceToInput;
|
writeSourceToInput;
|
||||||
//
|
|
||||||
comment := '';
|
comment := '';
|
||||||
fTempLines.Clear;
|
fTempLines.Clear;
|
||||||
processOutputToStrings(fClient, fTempLines);
|
processOutputToStrings(fClient, fTempLines);
|
||||||
|
@ -564,19 +581,18 @@ var
|
||||||
i: Integer;
|
i: Integer;
|
||||||
str, loc: string;
|
str, loc: string;
|
||||||
begin
|
begin
|
||||||
if not fAvailable then exit;
|
if not fAvailable or not fServerListening or fDoc.isNil then
|
||||||
if not fServerListening then exit;
|
exit;
|
||||||
if fDoc = nil then exit;
|
|
||||||
//
|
|
||||||
terminateClient;
|
terminateClient;
|
||||||
//
|
|
||||||
fClient.Parameters.Clear;
|
fClient.Parameters.Clear;
|
||||||
|
tryAddTcpParams;
|
||||||
fClient.Parameters.Add('-l');
|
fClient.Parameters.Add('-l');
|
||||||
fClient.Parameters.Add('-c');
|
fClient.Parameters.Add('-c');
|
||||||
fClient.Parameters.Add(intToStr(fDoc.SelStart));
|
fClient.Parameters.Add(intToStr(fDoc.SelStart));
|
||||||
fClient.Execute;
|
fClient.Execute;
|
||||||
writeSourceToInput;
|
writeSourceToInput;
|
||||||
//
|
|
||||||
fTempLines.Clear;
|
fTempLines.Clear;
|
||||||
processOutputToStrings(fClient, fTempLines);
|
processOutputToStrings(fClient, fTempLines);
|
||||||
while fClient.Running do ;
|
while fClient.Running do ;
|
||||||
|
@ -602,19 +618,18 @@ var
|
||||||
i: Integer;
|
i: Integer;
|
||||||
str: string;
|
str: string;
|
||||||
begin
|
begin
|
||||||
if not fAvailable then exit;
|
if not fAvailable or not fServerListening or fDoc.isNil then
|
||||||
if not fServerListening then exit;
|
exit;
|
||||||
if fDoc = nil then exit;
|
|
||||||
//
|
|
||||||
terminateClient;
|
terminateClient;
|
||||||
//
|
|
||||||
fClient.Parameters.Clear;
|
fClient.Parameters.Clear;
|
||||||
|
tryAddTcpParams;
|
||||||
fClient.Parameters.Add('-u');
|
fClient.Parameters.Add('-u');
|
||||||
fClient.Parameters.Add('-c');
|
fClient.Parameters.Add('-c');
|
||||||
fClient.Parameters.Add(intToStr(fDoc.SelStart - 1));
|
fClient.Parameters.Add(intToStr(fDoc.SelStart - 1));
|
||||||
fClient.Execute;
|
fClient.Execute;
|
||||||
writeSourceToInput;
|
writeSourceToInput;
|
||||||
//
|
|
||||||
setLength(locs, 0);
|
setLength(locs, 0);
|
||||||
fTempLines.Clear;
|
fTempLines.Clear;
|
||||||
processOutputToStrings(fClient, fTempLines);
|
processOutputToStrings(fClient, fTempLines);
|
||||||
|
@ -625,7 +640,7 @@ begin
|
||||||
// symbol is not in current module, too complex for now
|
// symbol is not in current module, too complex for now
|
||||||
if str[1..5] <> 'stdin' then
|
if str[1..5] <> 'stdin' then
|
||||||
exit;
|
exit;
|
||||||
//
|
|
||||||
setLength(locs, fTempLines.count-1);
|
setLength(locs, fTempLines.count-1);
|
||||||
for i:= 1 to fTempLines.count-1 do
|
for i:= 1 to fTempLines.count-1 do
|
||||||
locs[i-1] := StrToIntDef(fTempLines[i], -1);
|
locs[i-1] := StrToIntDef(fTempLines[i], -1);
|
||||||
|
|
Loading…
Reference in New Issue