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:
2026-08-14 13:12:05 +02:00
co-authored by Claude
parent f87077b2b7
commit 697f7f22c8
11 changed files with 38 additions and 37 deletions
+3 -3
View File
@@ -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. - Dual-panel commander UI; either panel can be Local or any saved connection.
- **Session tabs**: each tab is an independent left/right workspace; remote - **Session tabs**: each tab is an independent left/right workspace; remote
sessions stay connected and transfers keep running in background tabs. 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 VSCode-style status bar showing live transfer progress (click to expand the
transfer queue with per-file speed and ETA). transfer queue with per-file speed and ETA).
- **Overwrite confirmation** on name collisions, with a source-vs-destination - **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. cleanup at the next start.
- Browse, sort (name/size/modified, folders first), keyboard navigation. - Browse, sort (name/size/modified, folders first), keyboard navigation.
- Create folder / file, rename, delete (recursive), change permissions (chmod). - 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. with a transfer queue, per-job progress, and cancel.
- Connection manager: saved connections organised into folders, password or - Connection manager: saved connections organised into folders, password or
private-key auth (with passphrase). 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 · `Tab` switch panel · `↑`/`↓`/`PgUp`/`PgDn`/`Home`/`End` move cursor ·
`Space` select · `Enter` open folder · `Backspace` parent · `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 · `F7` new folder · `F8`/`Delete` delete · `Cmd/Ctrl+T` new tab ·
`Cmd/Ctrl+W` close tab · `Ctrl+Tab` next tab. `Cmd/Ctrl+W` close tab · `Ctrl+Tab` next tab.
+3 -2
View File
@@ -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 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 → starts in Program Files and accepts an .exe; remote temp-edit → save →
auto-upload works (directory watcher on NTFS). auto-upload works (directory watcher on NTFS).
6. Context menus: Show in Explorer, Move to Recycle Bin (item restorable from 6. Context menus: Send to Other Panel is the first row item; Show in Explorer,
the bin), Copy Path; Permissions ABSENT on local rows, present on remote. 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+…". 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 8. connections.json ACL: `icacls connections.json` shows only the current
user after saving a connection. user after saving a connection.
+3 -3
View File
@@ -169,10 +169,10 @@
<hr> <hr>
<h2 id="different">Same tool you know, only a little different</h2> <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 <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 &mdash; either side can be <p>The difference is in the corners. Both panels are fully symmetric &mdash; either side can be
your local disk or any saved server &mdash; so a copy isn't only up or down. You can move files your local disk or any saved server &mdash; 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 <b>straight from one server to another</b>, remote to remote, without staging them on your
machine first. machine first.
</p> </p>
@@ -183,7 +183,7 @@
<p><b>What's different:</b></p> <p><b>What's different:</b></p>
<p class="feat"><b>Remote &rarr; remote.</b> Copy straight between two servers &mdash; nothing <p class="feat"><b>Remote &rarr; remote.</b> Send straight between two servers &mdash; nothing
staged on your machine.</p> staged on your machine.</p>
<p class="feat"><b>Symmetric panels.</b> Either side is your local disk or any saved server. Every <p class="feat"><b>Symmetric panels.</b> Either side is your local disk or any saved server. Every
panel is equal.</p> panel is equal.</p>
+1 -1
View File
@@ -95,6 +95,7 @@ export class PanelContextMenu {
return items; return items;
} }
items.push({ label: t("ctx.copyToOther"), action: "ctx-copy" });
if (ctx.type === "dir") { if (ctx.type === "dir") {
items.push({ label: t("ctx.open"), action: "ctx-open" }); items.push({ label: t("ctx.open"), action: "ctx-open" });
} else { } else {
@@ -103,7 +104,6 @@ export class PanelContextMenu {
} }
items.push({ label: t("ctx.edit"), action: "ctx-edit", accelerator: "e" }); 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" }); items.push({ label: t("ctx.rename"), action: "ctx-rename" });
// chmod on Windows local files only flips the read-only bit — hide the lie // chmod on Windows local files only flips the read-only bit — hide the lie
if (!(ctx.isLocal && IS_WIN)) { if (!(ctx.isLocal && IS_WIN)) {
+4 -4
View File
@@ -78,9 +78,9 @@ export const de = {
}, },
panel: { panel: {
choosePanel: "Wählen, was dieses Panel anzeigt", choosePanel: "Wählen, was dieses Panel anzeigt",
copy: "Kopieren", copy: "Senden",
copyToRight: "In rechtes Panel kopieren (F5)", copyToRight: "An rechtes Panel senden (F5)",
copyToLeft: "In linkes Panel kopieren (F5)", copyToLeft: "An linkes Panel senden (F5)",
edit: "Bearbeiten", edit: "Bearbeiten",
editFile: "Datei bearbeiten (F4)", editFile: "Datei bearbeiten (F4)",
rename: "Umbenennen (F2)", rename: "Umbenennen (F2)",
@@ -282,7 +282,7 @@ export const de = {
open: "Öffnen", open: "Öffnen",
openDefault: "Mit Standard-App öffnen", openDefault: "Mit Standard-App öffnen",
edit: "Bearbeiten", edit: "Bearbeiten",
copyToOther: "In anderes Panel kopieren", copyToOther: "An anderes Panel senden",
rename: "Umbenennen", rename: "Umbenennen",
permissions: "Berechtigungen", permissions: "Berechtigungen",
copyPath: "Pfad kopieren", copyPath: "Pfad kopieren",
+4 -4
View File
@@ -82,9 +82,9 @@ export const en = {
}, },
panel: { panel: {
choosePanel: "Choose what this panel shows", choosePanel: "Choose what this panel shows",
copy: "Copy", copy: "Send",
copyToRight: "Copy to right panel (F5)", copyToRight: "Send to right panel (F5)",
copyToLeft: "Copy to left panel (F5)", copyToLeft: "Send to left panel (F5)",
edit: "Edit", edit: "Edit",
editFile: "Edit file (F4)", editFile: "Edit file (F4)",
rename: "Rename (F2)", rename: "Rename (F2)",
@@ -286,7 +286,7 @@ export const en = {
open: "Open", open: "Open",
openDefault: "Open with the default application", openDefault: "Open with the default application",
edit: "Edit", edit: "Edit",
copyToOther: "Copy to Other Panel", copyToOther: "Send to Other Panel",
rename: "Rename", rename: "Rename",
permissions: "Permissions", permissions: "Permissions",
copyPath: "Copy Path", copyPath: "Copy Path",
+4 -4
View File
@@ -78,9 +78,9 @@ export const es = {
}, },
panel: { panel: {
choosePanel: "Elige qué muestra este panel", choosePanel: "Elige qué muestra este panel",
copy: "Copiar", copy: "Enviar",
copyToRight: "Copiar al panel derecho (F5)", copyToRight: "Enviar al panel derecho (F5)",
copyToLeft: "Copiar al panel izquierdo (F5)", copyToLeft: "Enviar al panel izquierdo (F5)",
edit: "Editar", edit: "Editar",
editFile: "Editar archivo (F4)", editFile: "Editar archivo (F4)",
rename: "Renombrar (F2)", rename: "Renombrar (F2)",
@@ -282,7 +282,7 @@ export const es = {
open: "Abrir", open: "Abrir",
openDefault: "Abrir con la aplicación predeterminada", openDefault: "Abrir con la aplicación predeterminada",
edit: "Editar", edit: "Editar",
copyToOther: "Copiar al otro panel", copyToOther: "Enviar al otro panel",
rename: "Renombrar", rename: "Renombrar",
permissions: "Permisos", permissions: "Permisos",
copyPath: "Copiar ruta", copyPath: "Copiar ruta",
+4 -4
View File
@@ -80,9 +80,9 @@ export const eu = {
}, },
panel: { panel: {
choosePanel: "Aukeratu panel honek zer erakusten duen", choosePanel: "Aukeratu panel honek zer erakusten duen",
copy: "Kopiatu", copy: "Bidali",
copyToRight: "Kopiatu eskuineko panelera (F5)", copyToRight: "Bidali eskuineko panelera (F5)",
copyToLeft: "Kopiatu ezkerreko panelera (F5)", copyToLeft: "Bidali ezkerreko panelera (F5)",
edit: "Editatu", edit: "Editatu",
editFile: "Editatu fitxategia (F4)", editFile: "Editatu fitxategia (F4)",
rename: "Berrizendatu (F2)", rename: "Berrizendatu (F2)",
@@ -284,7 +284,7 @@ export const eu = {
open: "Ireki", open: "Ireki",
openDefault: "Ireki lehenetsitako aplikazioarekin", openDefault: "Ireki lehenetsitako aplikazioarekin",
edit: "Editatu", edit: "Editatu",
copyToOther: "Kopiatu beste panelera", copyToOther: "Bidali beste panelera",
rename: "Berrizendatu", rename: "Berrizendatu",
permissions: "Baimenak", permissions: "Baimenak",
copyPath: "Kopiatu bidea", copyPath: "Kopiatu bidea",
+4 -4
View File
@@ -78,9 +78,9 @@ export const fr = {
}, },
panel: { panel: {
choosePanel: "Choisir ce qu'affiche ce panneau", choosePanel: "Choisir ce qu'affiche ce panneau",
copy: "Copier", copy: "Envoyer",
copyToRight: "Copier vers le panneau droit (F5)", copyToRight: "Envoyer vers le panneau droit (F5)",
copyToLeft: "Copier vers le panneau gauche (F5)", copyToLeft: "Envoyer vers le panneau gauche (F5)",
edit: "Éditer", edit: "Éditer",
editFile: "Éditer le fichier (F4)", editFile: "Éditer le fichier (F4)",
rename: "Renommer (F2)", rename: "Renommer (F2)",
@@ -282,7 +282,7 @@ export const fr = {
open: "Ouvrir", open: "Ouvrir",
openDefault: "Ouvrir avec l'application par défaut", openDefault: "Ouvrir avec l'application par défaut",
edit: "Éditer", edit: "Éditer",
copyToOther: "Copier vers l'autre panneau", copyToOther: "Envoyer vers l'autre panneau",
rename: "Renommer", rename: "Renommer",
permissions: "Autorisations", permissions: "Autorisations",
copyPath: "Copier le chemin", copyPath: "Copier le chemin",
+4 -4
View File
@@ -79,9 +79,9 @@ export const ja = {
}, },
panel: { panel: {
choosePanel: "このパネルに表示する内容を選択", choosePanel: "このパネルに表示する内容を選択",
copy: "コピー", copy: "送信",
copyToRight: "右のパネルへコピー (F5)", copyToRight: "右のパネルへ送信 (F5)",
copyToLeft: "左のパネルへコピー (F5)", copyToLeft: "左のパネルへ送信 (F5)",
edit: "編集", edit: "編集",
editFile: "ファイルを編集 (F4)", editFile: "ファイルを編集 (F4)",
rename: "名前を変更 (F2)", rename: "名前を変更 (F2)",
@@ -282,7 +282,7 @@ export const ja = {
open: "開く", open: "開く",
openDefault: "既定のアプリで開く", openDefault: "既定のアプリで開く",
edit: "編集", edit: "編集",
copyToOther: "もう一方のパネルへコピー", copyToOther: "もう一方のパネルへ送信",
rename: "名前を変更", rename: "名前を変更",
permissions: "アクセス権", permissions: "アクセス権",
copyPath: "パスをコピー", copyPath: "パスをコピー",
+4 -4
View File
@@ -79,9 +79,9 @@ export const zh = {
}, },
panel: { panel: {
choosePanel: "选择此面板显示的内容", choosePanel: "选择此面板显示的内容",
copy: "复制", copy: "发送",
copyToRight: "复制到右侧面板 (F5)", copyToRight: "发送到右侧面板 (F5)",
copyToLeft: "复制到左侧面板 (F5)", copyToLeft: "发送到左侧面板 (F5)",
edit: "编辑", edit: "编辑",
editFile: "编辑文件 (F4)", editFile: "编辑文件 (F4)",
rename: "重命名 (F2)", rename: "重命名 (F2)",
@@ -282,7 +282,7 @@ export const zh = {
open: "打开", open: "打开",
openDefault: "用默认应用打开", openDefault: "用默认应用打开",
edit: "编辑", edit: "编辑",
copyToOther: "复制到另一个面板", copyToOther: "发送到另一个面板",
rename: "重命名", rename: "重命名",
permissions: "权限", permissions: "权限",
copyPath: "复制路径", copyPath: "复制路径",