diff --git a/src/config/index.js b/src/config/index.js
index 9cb0c1a..303bada 100644
--- a/src/config/index.js
+++ b/src/config/index.js
@@ -347,12 +347,14 @@ export const DEFAULT_INPUT_RULE = {
};
// 划词翻译
+export const DEFAULT_TRANBOX_SHORTCUT = ["AltLeft", "KeyS"];
export const DEFAULT_TRANBOX_SETTING = {
transOpen: true,
translator: OPT_TRANS_MICROSOFT,
fromLang: "auto",
toLang: "zh-CN",
toLang2: "en",
+ tranboxShortcut: DEFAULT_TRANBOX_SHORTCUT,
btnOffsetX: 10,
btnOffsetY: 10,
hideTranBtn: false,
diff --git a/src/views/Options/Tranbox.js b/src/views/Options/Tranbox.js
index 153e5bf..4968001 100644
--- a/src/views/Options/Tranbox.js
+++ b/src/views/Options/Tranbox.js
@@ -4,10 +4,13 @@ import TextField from "@mui/material/TextField";
import MenuItem from "@mui/material/MenuItem";
import { useI18n } from "../../hooks/I18n";
import { OPT_TRANS_ALL, OPT_LANGS_FROM, OPT_LANGS_TO } from "../../config";
+import ShortcutInput from "./ShortcutInput";
import FormControlLabel from "@mui/material/FormControlLabel";
import Switch from "@mui/material/Switch";
+import { useCallback } from "react";
import { limitNumber } from "../../libs/utils";
import { useTranbox } from "../../hooks/Tranbox";
+import { isExt } from "../../libs/client";
export default function Tranbox() {
const i18n = useI18n();
@@ -30,12 +33,20 @@ export default function Tranbox() {
});
};
+ const handleShortcutInput = useCallback(
+ (val) => {
+ updateTranbox({ tranboxShortcut: val });
+ },
+ [updateTranbox]
+ );
+
const {
transOpen,
translator,
fromLang,
toLang,
toLang2 = "en",
+ tranboxShortcut,
btnOffsetX,
btnOffsetY,
hideTranBtn = false,
@@ -148,6 +159,14 @@ export default function Tranbox() {
+
+ {!isExt && (
+
+ )}
);
diff --git a/src/views/Selection/index.js b/src/views/Selection/index.js
index abb2576..def8a99 100644
--- a/src/views/Selection/index.js
+++ b/src/views/Selection/index.js
@@ -1,9 +1,10 @@
import { useState, useEffect, useCallback } from "react";
import TranBtn from "./TranBtn";
import TranBox from "./TranBox";
+import { shortcutRegister } from "../../libs/shortcut";
import { sleep, limitNumber } from "../../libs/utils";
-import { isGm } from "../../libs/client";
-import { MSG_OPEN_TRANBOX } from "../../config";
+import { isGm, isExt } from "../../libs/client";
+import { MSG_OPEN_TRANBOX, DEFAULT_TRANBOX_SHORTCUT } from "../../config";
import { isMobile } from "../../libs/mobile";
export default function Slection({ contextMenus, tranboxSetting, transApis }) {
@@ -75,6 +76,21 @@ export default function Slection({ contextMenus, tranboxSetting, transApis }) {
};
}, [tranboxSetting.hideTranBtn]);
+ useEffect(() => {
+ if (isExt) {
+ return;
+ }
+
+ const clearShortcut = shortcutRegister(
+ tranboxSetting.tranboxShortcut || DEFAULT_TRANBOX_SHORTCUT,
+ handleTranbox
+ );
+
+ return () => {
+ clearShortcut();
+ };
+ }, [tranboxSetting.tranboxShortcut, handleTranbox]);
+
useEffect(() => {
window.addEventListener(MSG_OPEN_TRANBOX, handleTranbox);
return () => {