Rename Copy to Send and put it first in the row context menu
The main feature (copy selection to the other panel, F5) is now labeled "Send" in the toolbar button, tooltips, and context menu across all 7 locales. Internal identifiers (copyToOtherPanel, ctx-copy, i18n keys) and secondary strings (toasts, status bar, errors) are unchanged. The context-menu entry moves ahead of Open/Edit as the first row item. README, marketing site, and the Windows QA checklist updated to match. Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -22,7 +22,7 @@ Dense reference material lives in [docs/](docs/): [architecture](docs/architectu
|
||||
- Dual-panel commander UI; either panel can be Local or any saved connection.
|
||||
- **Session tabs**: each tab is an independent left/right workspace; remote
|
||||
sessions stay connected and transfers keep running in background tabs.
|
||||
- Per-panel action toolbar with a direction-explicit copy button, plus a
|
||||
- Per-panel action toolbar with a direction-explicit send button, plus a
|
||||
VSCode-style status bar showing live transfer progress (click to expand the
|
||||
transfer queue with per-file speed and ETA).
|
||||
- **Overwrite confirmation** on name collisions, with a source-vs-destination
|
||||
@@ -42,7 +42,7 @@ Dense reference material lives in [docs/](docs/): [architecture](docs/architectu
|
||||
cleanup at the next start.
|
||||
- Browse, sort (name/size/modified, folders first), keyboard navigation.
|
||||
- Create folder / file, rename, delete (recursive), change permissions (chmod).
|
||||
- Upload, download, and remote→remote copy — files **and** whole folders —
|
||||
- Upload, download, and remote→remote send — files **and** whole folders —
|
||||
with a transfer queue, per-job progress, and cancel.
|
||||
- Connection manager: saved connections organised into folders, password or
|
||||
private-key auth (with passphrase).
|
||||
@@ -170,7 +170,7 @@ Saved connections live in a plain JSON file in the OS app-data directory
|
||||
|
||||
`Tab` switch panel · `↑`/`↓`/`PgUp`/`PgDn`/`Home`/`End` move cursor ·
|
||||
`Space` select · `Enter` open folder · `Backspace` parent ·
|
||||
`Ctrl/Cmd+A` select all · `F5` copy to other panel · `F2` rename ·
|
||||
`Ctrl/Cmd+A` select all · `F5` send to other panel · `F2` rename ·
|
||||
`F7` new folder · `F8`/`Delete` delete · `Cmd/Ctrl+T` new tab ·
|
||||
`Cmd/Ctrl+W` close tab · `Ctrl+Tab` next tab.
|
||||
|
||||
|
||||
@@ -83,8 +83,9 @@ Code paths written blind (no Windows box was available); verify in order:
|
||||
5. External editor: default app opens via `cmd /c start`; the Choose… picker
|
||||
starts in Program Files and accepts an .exe; remote temp-edit → save →
|
||||
auto-upload works (directory watcher on NTFS).
|
||||
6. Context menus: Show in Explorer, Move to Recycle Bin (item restorable from
|
||||
the bin), Copy Path; Permissions ABSENT on local rows, present on remote.
|
||||
6. Context menus: Send to Other Panel is the first row item; Show in Explorer,
|
||||
Move to Recycle Bin (item restorable from the bin), Copy Path; Permissions
|
||||
ABSENT on local rows, present on remote.
|
||||
7. Ctrl+T/W/F/S and Ctrl+digit tab jumps; tooltips read "Ctrl+…".
|
||||
8. connections.json ACL: `icacls connections.json` shows only the current
|
||||
user after saving a connection.
|
||||
|
||||
+3
-3
@@ -169,10 +169,10 @@
|
||||
<hr>
|
||||
<h2 id="different">Same tool you know, only a little different</h2>
|
||||
<p>If you've ever used a two-pane file manager to move files over SFTP, you already know how to
|
||||
use miniSCP. Two panels, a connection on each side, copy between them. Nothing to relearn.</p>
|
||||
use miniSCP. Two panels, a connection on each side, send between them. Nothing to relearn.</p>
|
||||
|
||||
<p>The difference is in the corners. Both panels are fully symmetric — either side can be
|
||||
your local disk or any saved server — so a copy isn't only up or down. You can move files
|
||||
your local disk or any saved server — so sending isn't only up or down. You can move files
|
||||
<b>straight from one server to another</b>, remote to remote, without staging them on your
|
||||
machine first.
|
||||
</p>
|
||||
@@ -183,7 +183,7 @@
|
||||
|
||||
<p><b>What's different:</b></p>
|
||||
|
||||
<p class="feat"><b>Remote → remote.</b> Copy straight between two servers — nothing
|
||||
<p class="feat"><b>Remote → remote.</b> Send straight between two servers — nothing
|
||||
staged on your machine.</p>
|
||||
<p class="feat"><b>Symmetric panels.</b> Either side is your local disk or any saved server. Every
|
||||
panel is equal.</p>
|
||||
|
||||
@@ -95,6 +95,7 @@ export class PanelContextMenu {
|
||||
return items;
|
||||
}
|
||||
|
||||
items.push({ label: t("ctx.copyToOther"), action: "ctx-copy" });
|
||||
if (ctx.type === "dir") {
|
||||
items.push({ label: t("ctx.open"), action: "ctx-open" });
|
||||
} else {
|
||||
@@ -103,7 +104,6 @@ export class PanelContextMenu {
|
||||
}
|
||||
items.push({ label: t("ctx.edit"), action: "ctx-edit", accelerator: "e" });
|
||||
}
|
||||
items.push({ label: t("ctx.copyToOther"), action: "ctx-copy" });
|
||||
items.push({ label: t("ctx.rename"), action: "ctx-rename" });
|
||||
// chmod on Windows local files only flips the read-only bit — hide the lie
|
||||
if (!(ctx.isLocal && IS_WIN)) {
|
||||
|
||||
@@ -78,9 +78,9 @@ export const de = {
|
||||
},
|
||||
panel: {
|
||||
choosePanel: "Wählen, was dieses Panel anzeigt",
|
||||
copy: "Kopieren",
|
||||
copyToRight: "In rechtes Panel kopieren (F5)",
|
||||
copyToLeft: "In linkes Panel kopieren (F5)",
|
||||
copy: "Senden",
|
||||
copyToRight: "An rechtes Panel senden (F5)",
|
||||
copyToLeft: "An linkes Panel senden (F5)",
|
||||
edit: "Bearbeiten",
|
||||
editFile: "Datei bearbeiten (F4)",
|
||||
rename: "Umbenennen (F2)",
|
||||
@@ -282,7 +282,7 @@ export const de = {
|
||||
open: "Öffnen",
|
||||
openDefault: "Mit Standard-App öffnen",
|
||||
edit: "Bearbeiten",
|
||||
copyToOther: "In anderes Panel kopieren",
|
||||
copyToOther: "An anderes Panel senden",
|
||||
rename: "Umbenennen",
|
||||
permissions: "Berechtigungen",
|
||||
copyPath: "Pfad kopieren",
|
||||
|
||||
@@ -82,9 +82,9 @@ export const en = {
|
||||
},
|
||||
panel: {
|
||||
choosePanel: "Choose what this panel shows",
|
||||
copy: "Copy",
|
||||
copyToRight: "Copy to right panel (F5)",
|
||||
copyToLeft: "Copy to left panel (F5)",
|
||||
copy: "Send",
|
||||
copyToRight: "Send to right panel (F5)",
|
||||
copyToLeft: "Send to left panel (F5)",
|
||||
edit: "Edit",
|
||||
editFile: "Edit file (F4)",
|
||||
rename: "Rename (F2)",
|
||||
@@ -286,7 +286,7 @@ export const en = {
|
||||
open: "Open",
|
||||
openDefault: "Open with the default application",
|
||||
edit: "Edit",
|
||||
copyToOther: "Copy to Other Panel",
|
||||
copyToOther: "Send to Other Panel",
|
||||
rename: "Rename",
|
||||
permissions: "Permissions",
|
||||
copyPath: "Copy Path",
|
||||
|
||||
@@ -78,9 +78,9 @@ export const es = {
|
||||
},
|
||||
panel: {
|
||||
choosePanel: "Elige qué muestra este panel",
|
||||
copy: "Copiar",
|
||||
copyToRight: "Copiar al panel derecho (F5)",
|
||||
copyToLeft: "Copiar al panel izquierdo (F5)",
|
||||
copy: "Enviar",
|
||||
copyToRight: "Enviar al panel derecho (F5)",
|
||||
copyToLeft: "Enviar al panel izquierdo (F5)",
|
||||
edit: "Editar",
|
||||
editFile: "Editar archivo (F4)",
|
||||
rename: "Renombrar (F2)",
|
||||
@@ -282,7 +282,7 @@ export const es = {
|
||||
open: "Abrir",
|
||||
openDefault: "Abrir con la aplicación predeterminada",
|
||||
edit: "Editar",
|
||||
copyToOther: "Copiar al otro panel",
|
||||
copyToOther: "Enviar al otro panel",
|
||||
rename: "Renombrar",
|
||||
permissions: "Permisos",
|
||||
copyPath: "Copiar ruta",
|
||||
|
||||
@@ -80,9 +80,9 @@ export const eu = {
|
||||
},
|
||||
panel: {
|
||||
choosePanel: "Aukeratu panel honek zer erakusten duen",
|
||||
copy: "Kopiatu",
|
||||
copyToRight: "Kopiatu eskuineko panelera (F5)",
|
||||
copyToLeft: "Kopiatu ezkerreko panelera (F5)",
|
||||
copy: "Bidali",
|
||||
copyToRight: "Bidali eskuineko panelera (F5)",
|
||||
copyToLeft: "Bidali ezkerreko panelera (F5)",
|
||||
edit: "Editatu",
|
||||
editFile: "Editatu fitxategia (F4)",
|
||||
rename: "Berrizendatu (F2)",
|
||||
@@ -284,7 +284,7 @@ export const eu = {
|
||||
open: "Ireki",
|
||||
openDefault: "Ireki lehenetsitako aplikazioarekin",
|
||||
edit: "Editatu",
|
||||
copyToOther: "Kopiatu beste panelera",
|
||||
copyToOther: "Bidali beste panelera",
|
||||
rename: "Berrizendatu",
|
||||
permissions: "Baimenak",
|
||||
copyPath: "Kopiatu bidea",
|
||||
|
||||
@@ -78,9 +78,9 @@ export const fr = {
|
||||
},
|
||||
panel: {
|
||||
choosePanel: "Choisir ce qu'affiche ce panneau",
|
||||
copy: "Copier",
|
||||
copyToRight: "Copier vers le panneau droit (F5)",
|
||||
copyToLeft: "Copier vers le panneau gauche (F5)",
|
||||
copy: "Envoyer",
|
||||
copyToRight: "Envoyer vers le panneau droit (F5)",
|
||||
copyToLeft: "Envoyer vers le panneau gauche (F5)",
|
||||
edit: "Éditer",
|
||||
editFile: "Éditer le fichier (F4)",
|
||||
rename: "Renommer (F2)",
|
||||
@@ -282,7 +282,7 @@ export const fr = {
|
||||
open: "Ouvrir",
|
||||
openDefault: "Ouvrir avec l'application par défaut",
|
||||
edit: "Éditer",
|
||||
copyToOther: "Copier vers l'autre panneau",
|
||||
copyToOther: "Envoyer vers l'autre panneau",
|
||||
rename: "Renommer",
|
||||
permissions: "Autorisations",
|
||||
copyPath: "Copier le chemin",
|
||||
|
||||
@@ -79,9 +79,9 @@ export const ja = {
|
||||
},
|
||||
panel: {
|
||||
choosePanel: "このパネルに表示する内容を選択",
|
||||
copy: "コピー",
|
||||
copyToRight: "右のパネルへコピー (F5)",
|
||||
copyToLeft: "左のパネルへコピー (F5)",
|
||||
copy: "送信",
|
||||
copyToRight: "右のパネルへ送信 (F5)",
|
||||
copyToLeft: "左のパネルへ送信 (F5)",
|
||||
edit: "編集",
|
||||
editFile: "ファイルを編集 (F4)",
|
||||
rename: "名前を変更 (F2)",
|
||||
@@ -282,7 +282,7 @@ export const ja = {
|
||||
open: "開く",
|
||||
openDefault: "既定のアプリで開く",
|
||||
edit: "編集",
|
||||
copyToOther: "もう一方のパネルへコピー",
|
||||
copyToOther: "もう一方のパネルへ送信",
|
||||
rename: "名前を変更",
|
||||
permissions: "アクセス権",
|
||||
copyPath: "パスをコピー",
|
||||
|
||||
@@ -79,9 +79,9 @@ export const zh = {
|
||||
},
|
||||
panel: {
|
||||
choosePanel: "选择此面板显示的内容",
|
||||
copy: "复制",
|
||||
copyToRight: "复制到右侧面板 (F5)",
|
||||
copyToLeft: "复制到左侧面板 (F5)",
|
||||
copy: "发送",
|
||||
copyToRight: "发送到右侧面板 (F5)",
|
||||
copyToLeft: "发送到左侧面板 (F5)",
|
||||
edit: "编辑",
|
||||
editFile: "编辑文件 (F4)",
|
||||
rename: "重命名 (F2)",
|
||||
@@ -282,7 +282,7 @@ export const zh = {
|
||||
open: "打开",
|
||||
openDefault: "用默认应用打开",
|
||||
edit: "编辑",
|
||||
copyToOther: "复制到另一个面板",
|
||||
copyToOther: "发送到另一个面板",
|
||||
rename: "重命名",
|
||||
permissions: "权限",
|
||||
copyPath: "复制路径",
|
||||
|
||||
Reference in New Issue
Block a user