Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/elfmz/far2l.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorelfmz <fenix1905@tut.by>2022-01-17 02:18:04 +0300
committerelfmz <fenix1905@tut.by>2022-01-17 02:18:04 +0300
commit71097bcf9f337baa9f64684b7d1750cce8ca90da (patch)
treed10fd5fa0c485dea00b25a8b2400265af05aacb9 /far2l/src/fileedit.cpp
parent6f7ab910a1128a12e3492aeb3d3445aa0214ce06 (diff)
Editor: allow F12-switch for plugin-backed files
Diffstat (limited to 'far2l/src/fileedit.cpp')
-rw-r--r--far2l/src/fileedit.cpp53
1 files changed, 49 insertions, 4 deletions
diff --git a/far2l/src/fileedit.cpp b/far2l/src/fileedit.cpp
index dabfcf59..78bbdbb9 100644
--- a/far2l/src/fileedit.cpp
+++ b/far2l/src/fileedit.cpp
@@ -501,7 +501,7 @@ void FileEditor::Init(
SetPluginData(PluginData);
m_editor->SetHostFileEditor(this);
- SetCanLoseFocus(Flags.Check(FFILEEDIT_ENABLEF6));
+ SetCanLoseFocus(Flags.Check(FFILEEDIT_ENABLESWITCH));
apiGetCurrentDirectory(strStartDir);
if (!SetFileName(Name))
@@ -697,7 +697,7 @@ void FileEditor::Init(
F4KeyOnly=true;
- if (Flags.Check(FFILEEDIT_ENABLEF6))
+ if (Flags.Check(FFILEEDIT_ENABLEF6|FFILEEDIT_ENABLESWITCH))
FrameManager->InsertFrame(this);
else
FrameManager->ExecuteFrame(this);
@@ -2058,8 +2058,8 @@ int FileEditor::SaveFile(const wchar_t *Name,int Ask, bool bSaveAs, int TextForm
}
}
- if (SaveObserver && RetCode != SAVEFILE_ERROR) {
- SaveObserver->OnEditedFileSaved(Name);
+ if (Observer && RetCode != SAVEFILE_ERROR) {
+ Observer->OnEditedFileSaved(Name);
}
end:
@@ -2903,3 +2903,48 @@ void ModalEditConsoleHistory(bool scroll_to_end)
delete ShellEditor;
}
}
+
+//////////////////////////////////
+
+void EditedTempFileObserver::GetCurrentTimestamp()
+{
+ struct stat s{};
+ if (sdc_stat(strTempFileName.GetMB().c_str(), &s) == 0)
+ {
+ mtim = s.st_mtim;
+ }
+}
+
+void EditedTempFileObserver::OnEditedFileSaved(const wchar_t *FileName)
+{
+ if (strTempFileName != FileName)
+ {
+ fprintf(stderr, "OnEditedFileSaved: '%ls' != '%ls'\n", strTempFileName.CPtr(), FileName);
+ return;
+ }
+
+ UploadTempFile();
+ GetCurrentTimestamp();
+}
+
+EditedTempFileObserver::EditedTempFileObserver(const FARString &strTempFileName_)
+ : strTempFileName(strTempFileName_)
+{
+ GetCurrentTimestamp();
+}
+
+EditedTempFileObserver::~EditedTempFileObserver()
+{
+ DeleteFileWithFolder(strTempFileName);
+}
+
+void EditedTempFileObserver::UploadIfTimestampChanged()
+{
+ struct stat s{};
+ if (sdc_stat(strTempFileName.GetMB().c_str(), &s) == 0
+ && (mtim.tv_sec != s.st_mtim.tv_sec || mtim.tv_nsec != s.st_mtim.tv_nsec))
+ {
+ UploadTempFile();
+ }
+}
+