From 90e8ec7ff114ac779e2a76654861d25b2cfedce6 Mon Sep 17 00:00:00 2001 From: fofolee Date: Sun, 12 Jan 2025 22:19:44 +0800 Subject: [PATCH] =?UTF-8?q?=E7=B3=BB=E7=BB=9F=E7=BA=A7=E5=BC=B9=E7=AA=97?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0Linux=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- plugin/lib/systemDialog.js | 104 +++++++++++++++++++++++++++++++++++++ 1 file changed, 104 insertions(+) diff --git a/plugin/lib/systemDialog.js b/plugin/lib/systemDialog.js index 929e31d..dbd4afe 100644 --- a/plugin/lib/systemDialog.js +++ b/plugin/lib/systemDialog.js @@ -1,7 +1,34 @@ const fs = require("fs"); const path = require("path"); +const { exec } = require("child_process"); const { getQuickcommandFolderFile } = require("./getQuickcommandFile"); +// 添加一个辅助函数来执行命令 +const execCommand = (cmd) => { + return new Promise((resolve, reject) => { + exec(cmd, (error, stdout, stderr) => { + if (error) { + reject(stderr); + } else { + resolve(stdout); + } + }); + }); +}; + +// 添加一个辅助函数来检查命令是否存在 +const checkZenity = async () => { + try { + await execCommand("which zenity"); + return true; + } catch (error) { + window.utools.showNotification( + "请先安装 zenity:\nsudo apt install zenity 或\nsudo yum install zenity 或\nsudo pacman -S zenity" + ); + return false; + } +}; + // 定义通用样式 const commonStyles = ` static void ApplyModernStyle(Form form) { @@ -121,6 +148,14 @@ const showSystemMessageBox = async function (content, title = "") { } }`; await this.runCsharp(csharpScript); + } else if (window.utools.isLinux()) { + if (!(await checkZenity())) return; + try { + const script = `zenity --info --title="${title}" --text="${content}" --width=400`; + await execCommand(script); + } catch (error) { + console.error("执行 zenity 命令失败:", error); + } } }; @@ -227,6 +262,21 @@ const showSystemInputBox = async function (placeholders, title = "") { }`; const result = await this.runCsharp(csharpScript); return result.trim() || null; + } else if (window.utools.isLinux()) { + if (!(await checkZenity())) return null; + const results = []; + for (let i = 0; i < placeholders.length; i++) { + try { + const script = `zenity --entry --title="${title}" --text="${placeholders[i]}" --width=400`; + const result = await execCommand(script); + if (!result) return null; + results.push(result.trim()); + } catch (error) { + console.error("执行 zenity 命令失败:", error); + return null; + } + } + return results; } }; @@ -302,6 +352,15 @@ const showSystemConfirmBox = async function (content, title = "") { }`; const result = await this.runCsharp(csharpScript); return result.trim() === "True"; + } else if (window.utools.isLinux()) { + if (!(await checkZenity())) return false; + try { + const script = `zenity --question --title="${title}" --text="${content}" --width=400`; + await execCommand(script); + return true; + } catch (error) { + return false; + } } }; @@ -391,6 +450,22 @@ const showSystemSelectList = async function (items, title = "") { return { id: parseInt(id), text }; } return null; + } else if (window.utools.isLinux()) { + if (!(await checkZenity())) return null; + try { + const itemsList = items + .map((item, index) => `"${index}" "${item}"`) + .join(" "); + const script = `zenity --list --title="${title}" --text="请选择:" --column="序号" --column="选项" ${itemsList} --width=400 --height=300`; + const result = await execCommand(script); + if (!result) return null; + const text = result.trim(); + const id = items.findIndex((item) => item === text); + return { id, text }; + } catch (error) { + console.error("执行 zenity 命令失败:", error); + return null; + } } }; @@ -490,6 +565,25 @@ const showSystemButtonBox = async function (buttons, content, title = "") { return { id: parseInt(id), text }; } return null; + } else if (window.utools.isLinux()) { + if (!(await checkZenity())) return null; + try { + const script1 = `zenity --info --title="${title}" --text="${content}" --width=400`; + await execCommand(script1); + + const itemsList = buttons + .map((btn, index) => `"${index}" "${btn}"`) + .join(" "); + const script2 = `zenity --list --title="${title}" --text="请选择:" --column="序号" --column="选项" ${itemsList} --width=400 --height=300`; + const result = await execCommand(script2); + if (!result) return null; + const text = result.trim(); + const id = buttons.findIndex((btn) => btn === text); + return { id, text }; + } catch (error) { + console.error("执行 zenity 命令失败:", error); + return null; + } } }; @@ -578,6 +672,16 @@ const showSystemTextArea = async function ( }`; const result = await this.runCsharp(csharpScript); return result.trim() || null; + } else if (window.utools.isLinux()) { + if (!(await checkZenity())) return null; + try { + const script = `zenity --text-info --title="${title}" --text="${placeholder}" --editable --width=450 --height=350 --filename=<(echo "${defaultText}")`; + const result = await execCommand(script); + return result ? result.trim() : null; + } catch (error) { + console.error("执行 zenity 命令失败:", error); + return null; + } } };