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;
|
||||
try
|
||||
ftempname := GetTempDir(false) + 'temp_' + uniqueObjStr(curr) + '.d';
|
||||
ftempname := curr.tempFilename;
|
||||
curr.Lines.SaveToStream(str);
|
||||
str.SaveToFile(ftempname);
|
||||
try
|
||||
fname := ftempname;
|
||||
srcpos := curr.SelStart;
|
||||
if curr.GetWordAtRowCol(curr.LogicalCaretXY) <> '' then
|
||||
ce_dcd.getSymbolLoc(fname, srcpos);
|
||||
if fname <> ftempname then if fileExists(fname) then
|
||||
CEMainForm.openFile(fname);
|
||||
if srcpos <> -1 then
|
||||
getCurrentEditor.SelStart := srcpos;
|
||||
finally
|
||||
DeleteFile(ftempname);
|
||||
end;
|
||||
fname := ftempname;
|
||||
srcpos := curr.SelStart;
|
||||
if curr.GetWordAtRowCol(curr.LogicalCaretXY) <> '' then
|
||||
ce_dcd.getSymbolLoc(fname, srcpos);
|
||||
if fname <> ftempname then if fileExists(fname) then
|
||||
CEMainForm.openFile(fname);
|
||||
if srcpos <> -1 then
|
||||
getCurrentEditor.SelStart := srcpos;
|
||||
finally
|
||||
str.Free;
|
||||
end;
|
||||
|
@ -326,16 +322,12 @@ begin
|
|||
str := TMemoryStream.Create;
|
||||
try
|
||||
completion.Position := 0; // previous index could cause an error here.
|
||||
fname := GetTempDir(false) + 'temp_' + uniqueObjStr(curr) + '.d';
|
||||
fname := curr.tempFilename;
|
||||
curr.Lines.SaveToStream(str);
|
||||
str.SaveToFile(fname);
|
||||
try
|
||||
srcpos := curr.SelStart;
|
||||
completion.ItemList.Clear;
|
||||
ce_dcd.getCompletion(fname, srcpos, completion.ItemList);
|
||||
finally
|
||||
DeleteFile(fname);
|
||||
end;
|
||||
srcpos := curr.SelStart;
|
||||
completion.ItemList.Clear;
|
||||
ce_dcd.getCompletion(fname, srcpos, completion.ItemList);
|
||||
finally
|
||||
str.Free;
|
||||
end;
|
||||
|
@ -358,17 +350,13 @@ begin
|
|||
str := TMemoryStream.Create;
|
||||
lst := TStringList.Create;
|
||||
try
|
||||
fname := GetTempDir(false) + 'temp_' + uniqueObjStr(curr) + '.d';
|
||||
fname := curr.tempFilename;
|
||||
curr.Lines.SaveToStream(str);
|
||||
try
|
||||
str.SaveToFile(fname);
|
||||
srcpos := curr.SelStart;
|
||||
if curr.GetWordAtRowCol(curr.LogicalCaretXY) <> '' then
|
||||
ce_dcd.getHint(fname, srcpos, lst);
|
||||
result := lst.Text;
|
||||
finally
|
||||
DeleteFile(fname);
|
||||
end;
|
||||
str.SaveToFile(fname);
|
||||
srcpos := curr.SelStart;
|
||||
if curr.GetWordAtRowCol(curr.LogicalCaretXY) <> '' then
|
||||
ce_dcd.getHint(fname, srcpos, lst);
|
||||
result := lst.Text;
|
||||
finally
|
||||
str.Free;
|
||||
lst.Free;
|
||||
|
|
|
@ -1163,25 +1163,18 @@ var
|
|||
editor: TCESynMemo;
|
||||
dmdproc: TProcess;
|
||||
runproc: TProcess;
|
||||
fname, temppath, olddir: string;
|
||||
fname: string;
|
||||
begin
|
||||
olddir := '';
|
||||
dmdproc := TProcess.Create(nil);
|
||||
runproc := TProcess.Create(nil);
|
||||
editor := fEditWidg.editor[edIndex];
|
||||
getDir(0, olddir);
|
||||
try
|
||||
|
||||
fMesgWidg.ClearMessages(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
|
||||
else editor.saveToFile(fname + '.d');
|
||||
else editor.saveToFile(editor.tempFilename);
|
||||
fname := editor.fileName[1..length(editor.fileName) - length(extractFileExt(editor.fileName))];
|
||||
|
||||
{$IFDEF RELEASE}
|
||||
|
@ -1208,8 +1201,8 @@ begin
|
|||
runproc.Execute;
|
||||
repeat ProcessOutputToMsg(runproc, mcEditor) until not runproc.Running;
|
||||
{$IFDEF MSWINDOWS}
|
||||
//sysutils.DeleteFile(fname + '.exe');
|
||||
//sysutils.DeleteFile(fname + '.obj');
|
||||
sysutils.DeleteFile(fname + '.exe');
|
||||
sysutils.DeleteFile(fname + '.obj');
|
||||
{$ELSE}
|
||||
sysutils.DeleteFile(fname);
|
||||
sysutils.DeleteFile(fname + '.o');
|
||||
|
@ -1223,9 +1216,6 @@ begin
|
|||
finally
|
||||
dmdproc.Free;
|
||||
runproc.Free;
|
||||
if extractFilePath(editor.fileName) = GetTempDir(false) then
|
||||
sysutils.DeleteFile(editor.fileName);
|
||||
chDir(olddir);
|
||||
end;
|
||||
end;
|
||||
|
||||
|
|
|
@ -382,14 +382,12 @@ begin
|
|||
lines := TStringList.Create;
|
||||
try
|
||||
// json file
|
||||
jsf := GetTempDir(false);
|
||||
jsf += uniqueObjStr(dmdProc) + '.json';
|
||||
jsf := fDoc.tempFilename + '.json';
|
||||
// main source file
|
||||
scf := fDoc.fileName;
|
||||
if not fileExists(scf) then
|
||||
begin
|
||||
scf := GetTempDir(false);
|
||||
scf += uniqueObjStr(dmdProc) + '.d';
|
||||
scf := fDoc.tempFilename;
|
||||
lines.Assign(fDoc.Lines);
|
||||
lines.SaveToFile(scf);
|
||||
end;
|
||||
|
@ -425,8 +423,6 @@ begin
|
|||
i := dmdproc.ExitStatus;
|
||||
dmdproc.Free;
|
||||
lines.Free;
|
||||
if not fileExists(scf) then
|
||||
DeleteFile(scf);
|
||||
end;
|
||||
|
||||
if i <> 0 then
|
||||
|
|
|
@ -18,6 +18,7 @@ type
|
|||
fIsDSource: boolean;
|
||||
fIsConfig: boolean;
|
||||
fIdentifier: string;
|
||||
fTempFileName: string;
|
||||
procedure changeNotify(Sender: TObject);
|
||||
procedure identifierToD2Syn;
|
||||
protected
|
||||
|
@ -27,6 +28,7 @@ type
|
|||
procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y:Integer); override;
|
||||
public
|
||||
constructor Create(aOwner: TComponent); override;
|
||||
destructor destroy; override;
|
||||
procedure setFocus; override;
|
||||
procedure UpdateShowing; override;
|
||||
//
|
||||
|
@ -39,6 +41,7 @@ type
|
|||
property fileName: string read fFilename;
|
||||
property modified: boolean read fModified;
|
||||
property project: TCEProject read fAssocProject write fAssocProject;
|
||||
property tempFilename: string read fTempFileName;
|
||||
//
|
||||
property isDSource: boolean read fIsDSource;
|
||||
property isProjectSource: boolean read fIsConfig;
|
||||
|
@ -77,6 +80,16 @@ begin
|
|||
fModified := false;
|
||||
ShowHint := true;
|
||||
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;
|
||||
|
||||
procedure TCESynMemo.setFocus;
|
||||
|
|
Loading…
Reference in New Issue