diff --git a/src/ce_editor.pas b/src/ce_editor.pas index 0447f78f..05fe4121 100644 --- a/src/ce_editor.pas +++ b/src/ce_editor.pas @@ -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; diff --git a/src/ce_main.pas b/src/ce_main.pas index 6ead130f..db013f0c 100644 --- a/src/ce_main.pas +++ b/src/ce_main.pas @@ -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; diff --git a/src/ce_staticexplorer.pas b/src/ce_staticexplorer.pas index 4bad432c..c8405ab4 100644 --- a/src/ce_staticexplorer.pas +++ b/src/ce_staticexplorer.pas @@ -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 diff --git a/src/ce_synmemo.pas b/src/ce_synmemo.pas index 21cdb9bb..d94de8b9 100644 --- a/src/ce_synmemo.pas +++ b/src/ce_synmemo.pas @@ -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;