diff --git a/plugins/web-search/CHANGELOG.md b/plugins/web-search/CHANGELOG.md new file mode 100644 index 000000000..b7a867d07 --- /dev/null +++ b/plugins/web-search/CHANGELOG.md @@ -0,0 +1,10 @@ +# 更新日志 + +## [1.0.0] - 2026-09-05 + +### Added + +- 新增 11 个常用搜索引擎,可快速一键添加 +- 新增适配浅色深色模式 +- 新增默认搜索引擎功能 +- 新增自定义缩写指令使用后从最近使用移除功能 diff --git a/plugins/web-search/README.md b/plugins/web-search/README.md new file mode 100644 index 000000000..fc2e4237b --- /dev/null +++ b/plugins/web-search/README.md @@ -0,0 +1,17 @@ +# 网页搜索 + +在 ztools 中快速使用各种搜索引擎进行网页搜索。内置 11 个常用搜索引擎,支持自定义添加,输入指令直接用浏览器打开搜索结果。 + +## 功能特性 + +- 🚀 快速搜索:在 ztools 搜索框输入指令,直接打开浏览器搜索 +- 🔍 多引擎支持:内置 11 个常用搜索引擎,支持自定义添加 +- ⚙️ 默认引擎:可设置默认搜索引擎,输入任意关键词直接搜索 +- 🌓 深浅模式:适配 ztools 浅色/深色主题 +- 📝 智能历史:自定义缩写指令使用后自动从最近使用移除,保持最近使用美观 + +## 使用方法 + +- 输入 bd → 选择百度 → 输入关键词 → 回车,用百度搜索 +- 输入 gg → 选择 Google → 输入关键词 → 回车,用 Google 搜索 +- 输入任意关键词 → 选择匹配推荐的默认搜索引擎 → 回车搜索 diff --git a/plugins/web-search/assets/360-icon.svg b/plugins/web-search/assets/360-icon.svg new file mode 100644 index 000000000..04a3dce3d --- /dev/null +++ b/plugins/web-search/assets/360-icon.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/plugins/web-search/assets/360sousuo.svg b/plugins/web-search/assets/360sousuo.svg new file mode 100644 index 000000000..fc27c01f2 --- /dev/null +++ b/plugins/web-search/assets/360sousuo.svg @@ -0,0 +1,8 @@ + + + + + + diff --git a/plugins/web-search/assets/Yahoo.svg b/plugins/web-search/assets/Yahoo.svg new file mode 100644 index 000000000..169b20970 --- /dev/null +++ b/plugins/web-search/assets/Yahoo.svg @@ -0,0 +1,7 @@ + + yahoo-icon-svg + + + \ No newline at end of file diff --git a/plugins/web-search/assets/Yandex.svg b/plugins/web-search/assets/Yandex.svg new file mode 100644 index 000000000..201b17f56 --- /dev/null +++ b/plugins/web-search/assets/Yandex.svg @@ -0,0 +1,9 @@ + + pFHvdMV7_0kRsAw7bKuFiP0mY-svg + + + + + \ No newline at end of file diff --git a/plugins/web-search/assets/alert-triangle.svg b/plugins/web-search/assets/alert-triangle.svg new file mode 100644 index 000000000..0abec6063 --- /dev/null +++ b/plugins/web-search/assets/alert-triangle.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/plugins/web-search/assets/baidu-icon.svg b/plugins/web-search/assets/baidu-icon.svg new file mode 100644 index 000000000..52cf59bf5 --- /dev/null +++ b/plugins/web-search/assets/baidu-icon.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/plugins/web-search/assets/baidu.svg b/plugins/web-search/assets/baidu.svg new file mode 100644 index 000000000..bb5ef67c9 --- /dev/null +++ b/plugins/web-search/assets/baidu.svg @@ -0,0 +1 @@ +Baidu \ No newline at end of file diff --git a/plugins/web-search/assets/bing-icon.svg b/plugins/web-search/assets/bing-icon.svg new file mode 100644 index 000000000..9fdd9c504 --- /dev/null +++ b/plugins/web-search/assets/bing-icon.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/plugins/web-search/assets/bing.svg b/plugins/web-search/assets/bing.svg new file mode 100644 index 000000000..dbd24c561 --- /dev/null +++ b/plugins/web-search/assets/bing.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/plugins/web-search/assets/brave-browser.svg b/plugins/web-search/assets/brave-browser.svg new file mode 100644 index 000000000..e3749a655 --- /dev/null +++ b/plugins/web-search/assets/brave-browser.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/plugins/web-search/assets/brave-icon.svg b/plugins/web-search/assets/brave-icon.svg new file mode 100644 index 000000000..33042155a --- /dev/null +++ b/plugins/web-search/assets/brave-icon.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/plugins/web-search/assets/check.svg b/plugins/web-search/assets/check.svg new file mode 100644 index 000000000..9b9d3d340 --- /dev/null +++ b/plugins/web-search/assets/check.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/plugins/web-search/assets/duckduckgo-icon.svg b/plugins/web-search/assets/duckduckgo-icon.svg new file mode 100644 index 000000000..f6caa21cd --- /dev/null +++ b/plugins/web-search/assets/duckduckgo-icon.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/plugins/web-search/assets/duckduckgo.svg b/plugins/web-search/assets/duckduckgo.svg new file mode 100644 index 000000000..e528df913 --- /dev/null +++ b/plugins/web-search/assets/duckduckgo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/plugins/web-search/assets/ecosia-icon.svg b/plugins/web-search/assets/ecosia-icon.svg new file mode 100644 index 000000000..b158d0eff --- /dev/null +++ b/plugins/web-search/assets/ecosia-icon.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/plugins/web-search/assets/ecosia.svg b/plugins/web-search/assets/ecosia.svg new file mode 100644 index 000000000..ca0f8202c --- /dev/null +++ b/plugins/web-search/assets/ecosia.svg @@ -0,0 +1 @@ +Ecosia \ No newline at end of file diff --git a/plugins/web-search/assets/edit-dark.svg b/plugins/web-search/assets/edit-dark.svg new file mode 100644 index 000000000..8c9071924 --- /dev/null +++ b/plugins/web-search/assets/edit-dark.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/plugins/web-search/assets/edit-light.svg b/plugins/web-search/assets/edit-light.svg new file mode 100644 index 000000000..515151097 --- /dev/null +++ b/plugins/web-search/assets/edit-light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/plugins/web-search/assets/google-icon.svg b/plugins/web-search/assets/google-icon.svg new file mode 100644 index 000000000..89b3d2fe3 --- /dev/null +++ b/plugins/web-search/assets/google-icon.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/plugins/web-search/assets/google.svg b/plugins/web-search/assets/google.svg new file mode 100644 index 000000000..8ab1351b9 --- /dev/null +++ b/plugins/web-search/assets/google.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/plugins/web-search/assets/loader-dark.svg b/plugins/web-search/assets/loader-dark.svg new file mode 100644 index 000000000..64f38c343 --- /dev/null +++ b/plugins/web-search/assets/loader-dark.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/plugins/web-search/assets/loader-light.svg b/plugins/web-search/assets/loader-light.svg new file mode 100644 index 000000000..66fdfdd5e --- /dev/null +++ b/plugins/web-search/assets/loader-light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/plugins/web-search/assets/logo.png b/plugins/web-search/assets/logo.png new file mode 100644 index 000000000..091e1340b Binary files /dev/null and b/plugins/web-search/assets/logo.png differ diff --git a/plugins/web-search/assets/screenshot.png b/plugins/web-search/assets/screenshot.png new file mode 100644 index 000000000..fcca9054e Binary files /dev/null and b/plugins/web-search/assets/screenshot.png differ diff --git a/plugins/web-search/assets/sogou-icon.svg b/plugins/web-search/assets/sogou-icon.svg new file mode 100644 index 000000000..d9f535b83 --- /dev/null +++ b/plugins/web-search/assets/sogou-icon.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/plugins/web-search/assets/sogou.svg b/plugins/web-search/assets/sogou.svg new file mode 100644 index 000000000..d12bfbfef --- /dev/null +++ b/plugins/web-search/assets/sogou.svg @@ -0,0 +1 @@ +Sogou \ No newline at end of file diff --git a/plugins/web-search/assets/star-dark.svg b/plugins/web-search/assets/star-dark.svg new file mode 100644 index 000000000..f032af14d --- /dev/null +++ b/plugins/web-search/assets/star-dark.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/plugins/web-search/assets/star-light.svg b/plugins/web-search/assets/star-light.svg new file mode 100644 index 000000000..f8b43f633 --- /dev/null +++ b/plugins/web-search/assets/star-light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/plugins/web-search/assets/toutiao-icon.svg b/plugins/web-search/assets/toutiao-icon.svg new file mode 100644 index 000000000..e6c8ed015 --- /dev/null +++ b/plugins/web-search/assets/toutiao-icon.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/plugins/web-search/assets/toutiaosousuo.svg b/plugins/web-search/assets/toutiaosousuo.svg new file mode 100644 index 000000000..9479da4b2 --- /dev/null +++ b/plugins/web-search/assets/toutiaosousuo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/plugins/web-search/assets/trash-dark.svg b/plugins/web-search/assets/trash-dark.svg new file mode 100644 index 000000000..544158a9b --- /dev/null +++ b/plugins/web-search/assets/trash-dark.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/plugins/web-search/assets/trash-light.svg b/plugins/web-search/assets/trash-light.svg new file mode 100644 index 000000000..0426b0f1c --- /dev/null +++ b/plugins/web-search/assets/trash-light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/plugins/web-search/assets/yahoo-icon.svg b/plugins/web-search/assets/yahoo-icon.svg new file mode 100644 index 000000000..888ba6cca --- /dev/null +++ b/plugins/web-search/assets/yahoo-icon.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/plugins/web-search/assets/yandex-icon.svg b/plugins/web-search/assets/yandex-icon.svg new file mode 100644 index 000000000..24d36551d --- /dev/null +++ b/plugins/web-search/assets/yandex-icon.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/plugins/web-search/index.html b/plugins/web-search/index.html new file mode 100644 index 000000000..9a1f6aa75 --- /dev/null +++ b/plugins/web-search/index.html @@ -0,0 +1,1361 @@ + + + + + + 网页搜索 + + + +
+
+
+
+ +
+
+ + + + + + +
+ + +
+
+
确认
+
确定要执行此操作吗?
+
+ + +
+
+
+ + diff --git a/plugins/web-search/plugin.json b/plugins/web-search/plugin.json new file mode 100644 index 000000000..6259a457f --- /dev/null +++ b/plugins/web-search/plugin.json @@ -0,0 +1,32 @@ +{ + "name": "web-search", + "title": "网页搜索", + "author": "ScottLim", + "description": "在 ztools 中快速使用各种搜索引擎进行网页搜索。内置 11 个常用搜索引擎,支持自定义添加,输入指令直接用浏览器打开搜索结果。", + "version": "1.0.0", + "logo": "assets/logo.png", + "main": "index.html", + "preload": "preload.js", + "pluginSetting": { + "single": false, + "height": 1 + }, + "features": [ + { + "code": "search", + "explain": "网页搜索", + "icon": "assets/logo.png", + "cmds": [ + "网页搜索" + ] + }, + { + "code": "settings", + "explain": "网页搜索设置", + "icon": "assets/logo.png", + "cmds": [ + "网页搜索设置" + ] + } + ] +} \ No newline at end of file diff --git a/plugins/web-search/preload.js b/plugins/web-search/preload.js new file mode 100644 index 000000000..b8e9faf7a --- /dev/null +++ b/plugins/web-search/preload.js @@ -0,0 +1,130 @@ +// 网页搜索插件 preload +const { ipcRenderer } = require('electron') +const fs = require('fs') +const path = require('path') + +// 参考 bad-bear:preload 加载时直接设置高度为 1px +try { + if (window.ztools && typeof window.ztools.setExpendHeight === 'function') { + window.ztools.setExpendHeight(1) + } +} catch (e) {} + +// 获取插件目录路径 +function getPluginDir() { + try { + return __dirname || '' + } catch (e) { + return '' + } +} + +window.webSearch = { + openExternal(url) { + return ipcRenderer.invoke('open-external', url) + }, + outPlugin() { + return ipcRenderer.invoke('out-plugin', false) + }, + onPluginEnter(callback) { + ipcRenderer.on('on-plugin-enter', (_event, payload) => { + callback(payload || {}) + }) + }, + onPluginDetach(callback) { + ipcRenderer.on('plugin-detach', () => { + callback() + }) + }, + getLaunchParam() { + return new Promise((resolve) => { + let done = false + ipcRenderer.on('on-plugin-enter', (_e, p) => { + if (!done) { done = true; resolve(p || {}) } + }) + setTimeout(() => { if (!done) { done = true; resolve({}) } }, 1500) + }) + }, + setExpendHeight(height) { + try { + if (window.ztools && typeof window.ztools.setExpendHeight === 'function') { + return window.ztools.setExpendHeight(height) + } + return ipcRenderer.invoke('set-expend-height', height) + } catch (e) {} + }, + // 动态 feature API + setFeature(feature) { + return ipcRenderer.sendSync('set-feature', feature) + }, + getFeatures(codes) { + return ipcRenderer.sendSync('get-features', codes) + }, + removeFeature(code) { + return ipcRenderer.sendSync('remove-feature', code) + }, + // 从最近使用/历史记录中删除 + // 不传 name 参数,只靠 path + featureCode 匹配,避免 pluginName 不匹配导致删除失败 + removeFromHistory(featureCode) { + try { + const appPath = getPluginDir() + return ipcRenderer.invoke('remove-from-history', appPath, featureCode) + } catch (e) { + return Promise.resolve() + } + }, + // 主题相关 + onThemeChange(callback) { + ipcRenderer.on('update-theme-info', (_event, themeInfo) => { + callback(themeInfo || {}) + }) + }, + getIsDark() { + try { + return window.matchMedia('(prefers-color-scheme: dark)').matches + } catch (e) { + return false + } + }, + // 保存文件(用于保存下载的图标) + saveFile(filename, dataUrl) { + try { + const dir = getPluginDir() + const filePath = path.join(dir, filename) + const matches = dataUrl.match(/^data:(.+);base64,(.+)$/) + if (matches) { + const buffer = Buffer.from(matches[2], 'base64') + fs.writeFileSync(filePath, buffer) + return { success: true, path: filePath } + } + fs.writeFileSync(filePath, dataUrl) + return { success: true, path: filePath } + } catch (e) { + return { success: false, error: e.message } + } + }, + readFile(filename) { + try { + const dir = getPluginDir() + const filePath = path.join(dir, filename) + if (fs.existsSync(filePath)) { + return fs.readFileSync(filePath, 'utf-8') + } + return null + } catch (e) { + return null + } + }, + fileExists(filename) { + try { + const dir = getPluginDir() + const filePath = path.join(dir, filename) + return fs.existsSync(filePath) + } catch (e) { + return false + } + }, + getPluginDir() { + return getPluginDir() + } +}