|
@@ -2635,83 +2635,95 @@ void __fastcall TCustomScpExplorerForm::EditNew(TOperationSide Side)
|
|
|
{
|
|
|
Name = LoadStr(NEW_FILE);
|
|
|
}
|
|
|
+ UnicodeString Names = Name;
|
|
|
std::unique_ptr<TStrings> History(CloneStrings(CustomWinConfiguration->History[L"EditFile"]));
|
|
|
- if (InputDialog(LoadStr(EDIT_FILE_CAPTION), LoadStr(EDIT_FILE_PROMPT), Name,
|
|
|
+ if (InputDialog(LoadStr(EDIT_FILE_CAPTION), LoadStr(EDIT_FILE_PROMPT), Names,
|
|
|
HELP_EDIT_NEW, History.get(), true))
|
|
|
{
|
|
|
- CustomWinConfiguration->History[L"EditFile"] = History.get();
|
|
|
- UnicodeString TargetFileName;
|
|
|
- UnicodeString LocalFileName;
|
|
|
- UnicodeString RootTempDir;
|
|
|
- UnicodeString TempDir;
|
|
|
- UnicodeString RemoteDirectory;
|
|
|
- if (Side == osRemote)
|
|
|
+ while (!Names.IsEmpty())
|
|
|
{
|
|
|
- Name = AbsolutePath(FTerminal->CurrentDirectory, Name);
|
|
|
-
|
|
|
- TRemoteFile * File = NULL;
|
|
|
- if (FTerminal->FileExists(Name, &File))
|
|
|
+ Name = CutToChar(Names, FileMasksDelimiters[1], false);
|
|
|
+ CustomWinConfiguration->History[L"EditFile"] = History.get();
|
|
|
+ UnicodeString TargetFileName;
|
|
|
+ UnicodeString LocalFileName;
|
|
|
+ UnicodeString RootTempDir;
|
|
|
+ UnicodeString TempDir;
|
|
|
+ UnicodeString RemoteDirectory;
|
|
|
+ bool ExistingFile = false;
|
|
|
+ if (Side == osRemote)
|
|
|
{
|
|
|
- try
|
|
|
+ Name = AbsolutePath(FTerminal->CurrentDirectory, Name);
|
|
|
+
|
|
|
+ TRemoteFile * File = NULL;
|
|
|
+ if (FTerminal->FileExists(Name, &File))
|
|
|
{
|
|
|
- ExecuteRemoteFile(Name, File, efDefaultEditor);
|
|
|
- return;
|
|
|
+ try
|
|
|
+ {
|
|
|
+ ExecuteRemoteFile(Name, File, efDefaultEditor);
|
|
|
+ ExistingFile = true;
|
|
|
+ }
|
|
|
+ __finally
|
|
|
+ {
|
|
|
+ delete File;
|
|
|
+ }
|
|
|
}
|
|
|
- __finally
|
|
|
+
|
|
|
+ if (!ExistingFile)
|
|
|
{
|
|
|
- delete File;
|
|
|
+ RemoteDirectory = UnixExtractFilePath(Name);
|
|
|
+ TemporaryDirectoryForRemoteFiles(
|
|
|
+ RemoteDirectory, GUIConfiguration->CurrentCopyParam, TempDir, RootTempDir);
|
|
|
+
|
|
|
+ TargetFileName = UnixExtractFileName(Name);
|
|
|
+ TCopyParamType CopyParam = GUIConfiguration->CurrentCopyParam;
|
|
|
+ LocalFileName = TempDir +
|
|
|
+ // We probably do not want to trim the VMS version here
|
|
|
+ FTerminal->ChangeFileName(&CopyParam, TargetFileName, osRemote, false);
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
- RemoteDirectory = UnixExtractFilePath(Name);
|
|
|
- TemporaryDirectoryForRemoteFiles(
|
|
|
- RemoteDirectory, GUIConfiguration->CurrentCopyParam, TempDir, RootTempDir);
|
|
|
-
|
|
|
- TargetFileName = UnixExtractFileName(Name);
|
|
|
- TCopyParamType CopyParam = GUIConfiguration->CurrentCopyParam;
|
|
|
- LocalFileName = TempDir +
|
|
|
- // We probably do not want to trim the VMS version here
|
|
|
- FTerminal->ChangeFileName(&CopyParam, TargetFileName, osRemote, false);
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- if (ExtractFilePath(Name).IsEmpty())
|
|
|
- {
|
|
|
- LocalFileName = IncludeTrailingBackslash(DirView(Side)->PathName) + Name;
|
|
|
- }
|
|
|
else
|
|
|
{
|
|
|
- LocalFileName = ExpandFileName(Name);
|
|
|
- }
|
|
|
+ if (ExtractFilePath(Name).IsEmpty())
|
|
|
+ {
|
|
|
+ LocalFileName = IncludeTrailingBackslash(DirView(Side)->PathName) + Name;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ LocalFileName = ExpandFileName(Name);
|
|
|
+ }
|
|
|
|
|
|
- TargetFileName = ExtractFileName(Name);
|
|
|
- }
|
|
|
+ TargetFileName = ExtractFileName(Name);
|
|
|
+ }
|
|
|
|
|
|
- if (!FileExists(ApiPath(LocalFileName)))
|
|
|
- {
|
|
|
- int File = FileCreate(ApiPath(LocalFileName));
|
|
|
- if (File < 0)
|
|
|
+ if (!ExistingFile)
|
|
|
{
|
|
|
- if (!RootTempDir.IsEmpty())
|
|
|
+ if (!FileExists(ApiPath(LocalFileName)))
|
|
|
{
|
|
|
- RecursiveDeleteFile(ExcludeTrailingBackslash(RootTempDir), false);
|
|
|
+ int File = FileCreate(ApiPath(LocalFileName));
|
|
|
+ if (File < 0)
|
|
|
+ {
|
|
|
+ if (!RootTempDir.IsEmpty())
|
|
|
+ {
|
|
|
+ RecursiveDeleteFile(ExcludeTrailingBackslash(RootTempDir), false);
|
|
|
+ }
|
|
|
+ throw Exception(FMTLOAD(CREATE_FILE_ERROR, (LocalFileName)));
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ FileClose(File);
|
|
|
+ }
|
|
|
}
|
|
|
- throw Exception(FMTLOAD(CREATE_FILE_ERROR, (LocalFileName)));
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- FileClose(File);
|
|
|
- }
|
|
|
- }
|
|
|
|
|
|
- TExecuteFileBy ExecuteFileBy = efDefaultEditor;
|
|
|
- const TEditorData * ExternalEditor = NULL;
|
|
|
- TFileMasks::TParams MaskParams; // size not known
|
|
|
- ExecuteFileNormalize(ExecuteFileBy, ExternalEditor, TargetFileName,
|
|
|
- false, MaskParams);
|
|
|
+ TExecuteFileBy ExecuteFileBy = efDefaultEditor;
|
|
|
+ const TEditorData * ExternalEditor = NULL;
|
|
|
+ TFileMasks::TParams MaskParams; // size not known
|
|
|
+ ExecuteFileNormalize(ExecuteFileBy, ExternalEditor, TargetFileName,
|
|
|
+ false, MaskParams);
|
|
|
|
|
|
- CustomExecuteFile(Side, ExecuteFileBy, LocalFileName, TargetFileName,
|
|
|
- ExternalEditor, RootTempDir, RemoteDirectory);
|
|
|
+ CustomExecuteFile(Side, ExecuteFileBy, LocalFileName, TargetFileName,
|
|
|
+ ExternalEditor, RootTempDir, RemoteDirectory);
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
//---------------------------------------------------------------------------
|