each editor has an unique temp filename for its whole lifetime

This commit is contained in:
Basile Burg 2014-08-11 03:28:48 +02:00
parent d010ab5bfb
commit 94ae22a38b
4 changed files with 38 additions and 51 deletions

View File

@ -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;

View File

@ -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;

View File

@ -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

View File

@ -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;