Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ npm run dist:win -- --config.win.signAndEditExecutable=false
| `R` | 回到顶部 |
| `↑` / `↓` | 快速滚动页面 |
| `←` / `→` | 调节滚动速度 |
| `Esc` | 关闭第二屏输出窗口(仅桌面版) |
| `Esc` | 关闭第二屏输出(仅桌面版,主窗口或第二屏中均可);未开第二屏时停止播放 |

## 开发检查

Expand Down
4 changes: 4 additions & 0 deletions docs/更新日志-6.6.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,10 @@

6.6 版本起 Tauri 版成为主力维护的全平台版本,支持 Windows、macOS 和 Linux;Electron 版保留为 Windows 备用版本。

## 6.6.1

- 修复开启第二屏后按 `Esc` 退出不稳定的问题。之前只有键盘焦点在第二屏窗口时 `Esc` 才会关闭第二屏,而打开第二屏后焦点通常交回主窗口(macOS 上落在哪个窗口不确定)。现在开启第二屏时,在主窗口或第二屏中按 `Esc` 都能关闭第二屏,编辑稿件时同样生效,且不改变播放状态;未开第二屏时 `Esc` 仍为暂停播放。

## 6.6.0

### 全平台支持
Expand Down
20 changes: 20 additions & 0 deletions tauri/web/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -2168,6 +2168,19 @@ <h1 class="empty-title">准备一段稿件</h1>
}
}

async function closeOutputWindowFromMain() {
if (!window.teleprompterBridge?.closeOutputWindow || outputTogglePending) {
return;
}
outputTogglePending = true;
try {
applyOutputStatus(await window.teleprompterBridge.closeOutputWindow());
elements.stage.focus({ preventScroll: true });
} finally {
outputTogglePending = false;
}
}

function startResize(event) {
event.preventDefault();
resizing = true;
Expand Down Expand Up @@ -2551,6 +2564,13 @@ <h1 class="empty-title">准备一段稿件</h1>
}
return;
}
// 打开第二屏后键盘焦点通常留在主窗口(macOS 上焦点落在哪个窗口还不确定),
// 所以主窗口里按 Esc 也要能关闭第二屏;编辑稿件时同样生效
if (event.key === "Escape" && outputActive) {
event.preventDefault();
closeOutputWindowFromMain();
return;
}
// 只有正在输入文字的控件(文本框、下拉框)才把按键留给控件本身;
// 按钮和滑块获得焦点时不拦截,让空格/R/F/方向键等全局快捷键始终可用
const shortcutTarget = event.target;
Expand Down
4 changes: 2 additions & 2 deletions tauri/功能介绍.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
- `R`:回到顶部
- `↑ / ↓`:快速滚动页面
- `← / →`:调节滚动速度
- `Esc`:在第二屏窗口中退出第二屏输出
- `Esc`:关闭第二屏输出(主窗口或第二屏窗口中均可);未开第二屏时停止播放

## 显示调节

Expand All @@ -46,7 +46,7 @@
- 第二屏只显示提词内容,不显示底部控制栏。
- 第二屏顶部显示更醒目的剩余字数。
- 中间指示线包含进度点,便于判断当前阅读位置。
- 按钮再次点击可以关闭第二屏输出,第二屏窗口按 `Esc` 也可以退出。
- 按钮再次点击可以关闭第二屏输出,在主窗口或第二屏窗口按 `Esc` 也可以退出。
- 关闭程序时会同步结束相关窗口和进程。

## 主屏预览
Expand Down
42 changes: 42 additions & 0 deletions tests/teleprompter.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -537,3 +537,45 @@ test("output mode ignores playback keys and only handles Escape", async ({ page
await page.keyboard.press("Escape");
await expect.poll(() => page.evaluate(() => window.__closeCalls)).toBe(1);
});

test("Escape in the main window closes an open output window", async ({ page }) => {
await page.addInitScript(() => {
window.__closeCalls = 0;
window.teleprompterBridge = {
toggleOutputWindow: async () => ({ opened: true, displayCount: 2, outputWidth: 1280, outputHeight: 720 }),
closeOutputWindow: async () => {
window.__closeCalls += 1;
return { opened: false, displayCount: 2 };
},
sendState: () => {},
onState: () => {},
onOutputStatus: () => {},
};
});

await page.goto(appUrl);
await page.locator("#outputButton").click();
await expect(page.locator("#outputButton")).toHaveAttribute("aria-pressed", "true");

// 播放中按 Esc 只关第二屏,不改变播放状态
await page.keyboard.press("Space");
await expect(page.locator("#playButton")).not.toHaveClass(/primary/);
await page.keyboard.press("Escape");
await expect(page.locator("#outputButton")).toHaveAttribute("aria-pressed", "false");
await expect.poll(() => page.evaluate(() => window.__closeCalls)).toBe(1);
await expect(page.locator("#playButton")).not.toHaveClass(/primary/);

// 第二屏关闭后,Esc 恢复为暂停播放,不再调用关闭
await page.keyboard.press("Escape");
await expect(page.locator("#playButton")).toHaveClass(/primary/);
expect(await page.evaluate(() => window.__closeCalls)).toBe(1);

// 编辑稿件时按 Esc 也能关闭第二屏
await page.locator("#outputButton").click();
await expect(page.locator("#outputButton")).toHaveAttribute("aria-pressed", "true");
await page.locator("#toggleEditorButton").click();
await page.locator("#scriptInput").focus();
await page.keyboard.press("Escape");
await expect(page.locator("#outputButton")).toHaveAttribute("aria-pressed", "false");
await expect.poll(() => page.evaluate(() => window.__closeCalls)).toBe(2);
});
20 changes: 20 additions & 0 deletions windows-electron/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -2168,6 +2168,19 @@ <h1 class="empty-title">准备一段稿件</h1>
}
}

async function closeOutputWindowFromMain() {
if (!window.teleprompterBridge?.closeOutputWindow || outputTogglePending) {
return;
}
outputTogglePending = true;
try {
applyOutputStatus(await window.teleprompterBridge.closeOutputWindow());
elements.stage.focus({ preventScroll: true });
} finally {
outputTogglePending = false;
}
}

function startResize(event) {
event.preventDefault();
resizing = true;
Expand Down Expand Up @@ -2551,6 +2564,13 @@ <h1 class="empty-title">准备一段稿件</h1>
}
return;
}
// 打开第二屏后键盘焦点通常留在主窗口(macOS 上焦点落在哪个窗口还不确定),
// 所以主窗口里按 Esc 也要能关闭第二屏;编辑稿件时同样生效
if (event.key === "Escape" && outputActive) {
event.preventDefault();
closeOutputWindowFromMain();
return;
}
// 只有正在输入文字的控件(文本框、下拉框)才把按键留给控件本身;
// 按钮和滑块获得焦点时不拦截,让空格/R/F/方向键等全局快捷键始终可用
const shortcutTarget = event.target;
Expand Down
4 changes: 2 additions & 2 deletions windows-electron/功能介绍.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
- `R`:回到顶部
- `↑ / ↓`:快速滚动页面
- `← / →`:调节滚动速度
- `Esc`:在第二屏窗口中退出第二屏输出
- `Esc`:关闭第二屏输出(主窗口或第二屏窗口中均可);未开第二屏时停止播放

## 显示调节

Expand All @@ -48,7 +48,7 @@
- 第二屏只显示提词内容,不显示底部控制栏。
- 第二屏顶部显示更醒目的剩余字数。
- 中间指示线包含进度点,便于判断当前阅读位置。
- 按钮再次点击可以关闭第二屏输出,第二屏窗口按 `Esc` 也可以退出。
- 按钮再次点击可以关闭第二屏输出,在主窗口或第二屏窗口按 `Esc` 也可以退出。
- 关闭程序时会同步结束相关窗口和进程。

## 主屏预览
Expand Down
4 changes: 2 additions & 2 deletions 使用指南.md
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@
- 支持水平镜像和垂直镜像
- 顶部显示剩余字数
- 指示线上显示进度圆点
- 按 `Esc` 可以退出第二屏
- 在主窗口或第二屏中按 `Esc` 都可以退出第二屏

6.1 版本中,主窗口采用固定比例预览画布,主屏看到的换行、字号、指示线位置会尽量和第二屏一致。

Expand Down Expand Up @@ -106,7 +106,7 @@
- `←`:降低滚动速度
- `→`:提高滚动速度
- `Shift + ← / →`:更大幅度调节速度
- `Esc`:第二屏窗口中退出第二屏;播放时停止播放
- `Esc`:开启第二屏时关闭第二屏(在主窗口或第二屏中按都可以,不影响播放状态);未开第二屏时停止播放

编辑稿件时,方向键会优先用于文本编辑,不会触发提词器快捷操作。

Expand Down
Loading