aboutsummaryrefslogtreecommitdiff
path: root/modules/ext/filemgr.js
diff options
context:
space:
mode:
Diffstat (limited to 'modules/ext/filemgr.js')
-rw-r--r--modules/ext/filemgr.js13
1 files changed, 9 insertions, 4 deletions
diff --git a/modules/ext/filemgr.js b/modules/ext/filemgr.js
index 28c62ce..e099a34 100644
--- a/modules/ext/filemgr.js
+++ b/modules/ext/filemgr.js
@@ -804,6 +804,10 @@ class FileManagerModule {
const name = src.split('/').pop();
const destPath = dest === '/' ? '/' + name : dest + '/' + name;
if (destPath === src || destPath.startsWith(src + '/')) { skipped++; return; }
+ // Directory → existing directory would REPLACE the whole subtree silently; skip it.
+ let srcIsDir = false;
+ try { srcIsDir = typeof fs.readDir === 'function' && fs.readDir(src) !== null; } catch (_e) {}
+ if (this._exists(destPath) && srcIsDir) { skipped++; return; }
if (this._exists(destPath) && !confirm('Overwrite ' + destPath + '?')) { skipped++; return; }
try {
const ok = this._clipboard.mode === 'copy' ? fs.copy(src, destPath) : fs.move(src, destPath);
@@ -821,8 +825,8 @@ class FileManagerModule {
_batchDelete() {
const paths = this._getSelectedPaths();
- if (!paths.length) { this._updateStatus('No files selected'); return; }
- if (!confirm('Delete ' + paths.length + ' item(s)?')) return;
+ if (!paths.length) { this._updateStatus('No files selected'); return false; }
+ if (!confirm('Delete ' + paths.length + ' item(s)?')) return false;
const fs = this.terminal.fs;
let count = 0, failed = 0;
paths.forEach(p => {
@@ -835,6 +839,7 @@ class FileManagerModule {
this._selectedFile = null;
this._refreshFileList();
this._updateStatus('🗑️ Deleted ' + count + ' item(s)' + (failed ? ' — ' + failed + ' failed' : ''));
+ return count > 0;
}
_batchRename() {
@@ -947,8 +952,8 @@ class FileManagerModule {
if (!this._getSelectedPaths().length && this._selectedFile) {
this._multiSelect.add(this._selectedFile);
}
- this._batchDelete();
- this._clearPreview();
+ // Only clear the preview when something was actually deleted (not on cancel).
+ if (this._batchDelete()) this._clearPreview();
}
_actionDownload() {