mirror of https://gitlab.com/basile.b/dexed.git
each editor has an unique temp filename for its whole lifetime
This commit is contained in:
parent
d010ab5bfb
commit
94ae22a38b
|
|
@ -291,21 +291,17 @@ begin
|
||||||
//
|
//
|
||||||
str := TMemoryStream.Create;
|
str := TMemoryStream.Create;
|
||||||
try
|
try
|
||||||
ftempname := GetTempDir(false) + 'temp_' + uniqueObjStr(curr) + '.d';
|
ftempname := curr.tempFilename;
|
||||||
curr.Lines.SaveToStream(str);
|
curr.Lines.SaveToStream(str);
|
||||||
str.SaveToFile(ftempname);
|
str.SaveToFile(ftempname);
|
||||||
try
|
fname := ftempname;
|
||||||
fname := ftempname;
|
srcpos := curr.SelStart;
|
||||||
srcpos := curr.SelStart;
|
if curr.GetWordAtRowCol(curr.LogicalCaretXY) <> '' then
|
||||||
if curr.GetWordAtRowCol(curr.LogicalCaretXY) <> '' then
|
ce_dcd.getSymbolLoc(fname, srcpos);
|
||||||
ce_dcd.getSymbolLoc(fname, srcpos);
|
if fname <> ftempname then if fileExists(fname) then
|
||||||
if fname <> ftempname then if fileExists(fname) then
|
CEMainForm.openFile(fname);
|
||||||
CEMainForm.openFile(fname);
|
if srcpos <> -1 then
|
||||||
if srcpos <> -1 then
|
getCurrentEditor.SelStart := srcpos;
|
||||||
getCurrentEditor.SelStart := srcpos;
|
|
||||||
finally
|
|
||||||
DeleteFile(ftempname);
|
|
||||||
end;
|
|
||||||
finally
|
finally
|
||||||
str.Free;
|
str.Free;
|
||||||
end;
|
end;
|
||||||
|
|
@ -326,16 +322,12 @@ begin
|
||||||
str := TMemoryStream.Create;
|
str := TMemoryStream.Create;
|
||||||
try
|
try
|
||||||
completion.Position := 0; // previous index could cause an error here.
|
completion.Position := 0; // previous index could cause an error here.
|
||||||
fname := GetTempDir(false) + 'temp_' + uniqueObjStr(curr) + '.d';
|
fname := curr.tempFilename;
|
||||||
curr.Lines.SaveToStream(str);
|
curr.Lines.SaveToStream(str);
|
||||||
str.SaveToFile(fname);
|
str.SaveToFile(fname);
|
||||||
try
|
srcpos := curr.SelStart;
|
||||||
srcpos := curr.SelStart;
|
completion.ItemList.Clear;
|
||||||
completion.ItemList.Clear;
|
ce_dcd.getCompletion(fname, srcpos, completion.ItemList);
|
||||||
ce_dcd.getCompletion(fname, srcpos, completion.ItemList);
|
|
||||||
finally
|
|
||||||
DeleteFile(fname);
|
|
||||||
end;
|
|
||||||
finally
|
finally
|
||||||
str.Free;
|
str.Free;
|
||||||
end;
|
end;
|
||||||
|
|
@ -358,17 +350,13 @@ begin
|
||||||
str := TMemoryStream.Create;
|
str := TMemoryStream.Create;
|
||||||
lst := TStringList.Create;
|
lst := TStringList.Create;
|
||||||
try
|
try
|
||||||
fname := GetTempDir(false) + 'temp_' + uniqueObjStr(curr) + '.d';
|
fname := curr.tempFilename;
|
||||||
curr.Lines.SaveToStream(str);
|
curr.Lines.SaveToStream(str);
|
||||||
try
|
str.SaveToFile(fname);
|
||||||
str.SaveToFile(fname);
|
srcpos := curr.SelStart;
|
||||||
srcpos := curr.SelStart;
|
if curr.GetWordAtRowCol(curr.LogicalCaretXY) <> '' then
|
||||||
if curr.GetWordAtRowCol(curr.LogicalCaretXY) <> '' then
|
ce_dcd.getHint(fname, srcpos, lst);
|
||||||
ce_dcd.getHint(fname, srcpos, lst);
|
result := lst.Text;
|
||||||
result := lst.Text;
|
|
||||||
finally
|
|
||||||
DeleteFile(fname);
|
|
||||||
end;
|
|
||||||
finally
|
finally
|
||||||
str.Free;
|
str.Free;
|
||||||
lst.Free;
|
lst.Free;
|
||||||
|
|
|
||||||
|
|
@ -1163,25 +1163,18 @@ var
|
||||||
editor: TCESynMemo;
|
editor: TCESynMemo;
|
||||||
dmdproc: TProcess;
|
dmdproc: TProcess;
|
||||||
runproc: TProcess;
|
runproc: TProcess;
|
||||||
fname, temppath, olddir: string;
|
fname: string;
|
||||||
begin
|
begin
|
||||||
olddir := '';
|
|
||||||
dmdproc := TProcess.Create(nil);
|
dmdproc := TProcess.Create(nil);
|
||||||
runproc := TProcess.Create(nil);
|
runproc := TProcess.Create(nil);
|
||||||
editor := fEditWidg.editor[edIndex];
|
editor := fEditWidg.editor[edIndex];
|
||||||
getDir(0, olddir);
|
|
||||||
try
|
try
|
||||||
|
|
||||||
fMesgWidg.ClearMessages(mcEditor);
|
fMesgWidg.ClearMessages(mcEditor);
|
||||||
fMesgWidg.addCeInf('compiling ' + editor.fileName, mcEditor);
|
fMesgWidg.addCeInf('compiling ' + editor.fileName, mcEditor);
|
||||||
|
|
||||||
temppath := GetTempDir(false);
|
|
||||||
chDir(temppath);
|
|
||||||
{$IFDEF DEBUG}{$WARNINGS OFF}{$HINTS OFF}{$ENDIF}
|
|
||||||
fname := temppath + 'temp_' + uniqueObjStr(editor);
|
|
||||||
{$IFDEF DEBUG}{$WARNINGS ON}{$HINTS ON}{$ENDIF}
|
|
||||||
if fileExists(editor.fileName) then editor.save
|
if fileExists(editor.fileName) then editor.save
|
||||||
else editor.saveToFile(fname + '.d');
|
else editor.saveToFile(editor.tempFilename);
|
||||||
fname := editor.fileName[1..length(editor.fileName) - length(extractFileExt(editor.fileName))];
|
fname := editor.fileName[1..length(editor.fileName) - length(extractFileExt(editor.fileName))];
|
||||||
|
|
||||||
{$IFDEF RELEASE}
|
{$IFDEF RELEASE}
|
||||||
|
|
@ -1208,8 +1201,8 @@ begin
|
||||||
runproc.Execute;
|
runproc.Execute;
|
||||||
repeat ProcessOutputToMsg(runproc, mcEditor) until not runproc.Running;
|
repeat ProcessOutputToMsg(runproc, mcEditor) until not runproc.Running;
|
||||||
{$IFDEF MSWINDOWS}
|
{$IFDEF MSWINDOWS}
|
||||||
//sysutils.DeleteFile(fname + '.exe');
|
sysutils.DeleteFile(fname + '.exe');
|
||||||
//sysutils.DeleteFile(fname + '.obj');
|
sysutils.DeleteFile(fname + '.obj');
|
||||||
{$ELSE}
|
{$ELSE}
|
||||||
sysutils.DeleteFile(fname);
|
sysutils.DeleteFile(fname);
|
||||||
sysutils.DeleteFile(fname + '.o');
|
sysutils.DeleteFile(fname + '.o');
|
||||||
|
|
@ -1223,9 +1216,6 @@ begin
|
||||||
finally
|
finally
|
||||||
dmdproc.Free;
|
dmdproc.Free;
|
||||||
runproc.Free;
|
runproc.Free;
|
||||||
if extractFilePath(editor.fileName) = GetTempDir(false) then
|
|
||||||
sysutils.DeleteFile(editor.fileName);
|
|
||||||
chDir(olddir);
|
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -382,14 +382,12 @@ begin
|
||||||
lines := TStringList.Create;
|
lines := TStringList.Create;
|
||||||
try
|
try
|
||||||
// json file
|
// json file
|
||||||
jsf := GetTempDir(false);
|
jsf := fDoc.tempFilename + '.json';
|
||||||
jsf += uniqueObjStr(dmdProc) + '.json';
|
|
||||||
// main source file
|
// main source file
|
||||||
scf := fDoc.fileName;
|
scf := fDoc.fileName;
|
||||||
if not fileExists(scf) then
|
if not fileExists(scf) then
|
||||||
begin
|
begin
|
||||||
scf := GetTempDir(false);
|
scf := fDoc.tempFilename;
|
||||||
scf += uniqueObjStr(dmdProc) + '.d';
|
|
||||||
lines.Assign(fDoc.Lines);
|
lines.Assign(fDoc.Lines);
|
||||||
lines.SaveToFile(scf);
|
lines.SaveToFile(scf);
|
||||||
end;
|
end;
|
||||||
|
|
@ -425,8 +423,6 @@ begin
|
||||||
i := dmdproc.ExitStatus;
|
i := dmdproc.ExitStatus;
|
||||||
dmdproc.Free;
|
dmdproc.Free;
|
||||||
lines.Free;
|
lines.Free;
|
||||||
if not fileExists(scf) then
|
|
||||||
DeleteFile(scf);
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
if i <> 0 then
|
if i <> 0 then
|
||||||
|
|
|
||||||
|
|
@ -18,6 +18,7 @@ type
|
||||||
fIsDSource: boolean;
|
fIsDSource: boolean;
|
||||||
fIsConfig: boolean;
|
fIsConfig: boolean;
|
||||||
fIdentifier: string;
|
fIdentifier: string;
|
||||||
|
fTempFileName: string;
|
||||||
procedure changeNotify(Sender: TObject);
|
procedure changeNotify(Sender: TObject);
|
||||||
procedure identifierToD2Syn;
|
procedure identifierToD2Syn;
|
||||||
protected
|
protected
|
||||||
|
|
@ -27,6 +28,7 @@ type
|
||||||
procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y:Integer); override;
|
procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y:Integer); override;
|
||||||
public
|
public
|
||||||
constructor Create(aOwner: TComponent); override;
|
constructor Create(aOwner: TComponent); override;
|
||||||
|
destructor destroy; override;
|
||||||
procedure setFocus; override;
|
procedure setFocus; override;
|
||||||
procedure UpdateShowing; override;
|
procedure UpdateShowing; override;
|
||||||
//
|
//
|
||||||
|
|
@ -39,6 +41,7 @@ type
|
||||||
property fileName: string read fFilename;
|
property fileName: string read fFilename;
|
||||||
property modified: boolean read fModified;
|
property modified: boolean read fModified;
|
||||||
property project: TCEProject read fAssocProject write fAssocProject;
|
property project: TCEProject read fAssocProject write fAssocProject;
|
||||||
|
property tempFilename: string read fTempFileName;
|
||||||
//
|
//
|
||||||
property isDSource: boolean read fIsDSource;
|
property isDSource: boolean read fIsDSource;
|
||||||
property isProjectSource: boolean read fIsConfig;
|
property isProjectSource: boolean read fIsConfig;
|
||||||
|
|
@ -77,6 +80,16 @@ begin
|
||||||
fModified := false;
|
fModified := false;
|
||||||
ShowHint := true;
|
ShowHint := true;
|
||||||
TextBuffer.AddNotifyHandler(senrUndoRedoAdded, @changeNotify);
|
TextBuffer.AddNotifyHandler(senrUndoRedoAdded, @changeNotify);
|
||||||
|
|
||||||
|
// avoid many call to get envir.string
|
||||||
|
fTempFileName := GetTempDir(false) + 'temp_' + uniqueObjStr(self) + '.d';
|
||||||
|
end;
|
||||||
|
|
||||||
|
destructor TCESynMemo.destroy;
|
||||||
|
begin
|
||||||
|
if fileExists(fTempFileName) then
|
||||||
|
sysutils.DeleteFile(fTempFileName);
|
||||||
|
inherited;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCESynMemo.setFocus;
|
procedure TCESynMemo.setFocus;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue