diff --git a/jxa/openInChrome.jxa b/jxa/openInChrome.jxa new file mode 100644 index 0000000..f4cc6d1 --- /dev/null +++ b/jxa/openInChrome.jxa @@ -0,0 +1,40 @@ +var args = $.NSProcessInfo.processInfo.arguments; +var argv = []; +var argc = args.count; +for (var i = 4; i < argc; i++) { + argv.push(ObjC.unwrap(args.objectAtIndex(i))); +} +var inputUrl = argv[0]; + +var Chrome = Application('Google Chrome'); +var windows = Chrome.windows(); +var foundTab = false; + +// 遍历所有窗口和标签页 +for (var i = 0; i < windows.length; i++) { + var window = windows[i]; + var tabs = window.tabs(); + for (var j = 0; j < tabs.length; j++) { + var tab = tabs[j]; + if (tab.url().startsWith(inputUrl)) { + // 激活包含URL的窗口 + Chrome.activate(); + window.index = i + 1; // 窗口索引是从1开始的 + // 激活对应的标签页 + window.activeTabIndex = j + 1; // 标签索引也是从1开始的 + foundTab = true; + break; + } + } + if (foundTab) { + break; + } +} + +// 如果没有找到匹配的标签页,打开新窗口并导航到URL +if (!foundTab) { + var newWindow = Chrome.Window().make(); + var newTab = newWindow.tabs[0]; + newTab.url = inputUrl; + Chrome.activate(); +} diff --git a/modules/launcher.lua b/modules/launcher.lua index 33a01de..de15fa1 100644 --- a/modules/launcher.lua +++ b/modules/launcher.lua @@ -4,43 +4,63 @@ local KEY_APP_PAIRS = { [5] = "QSpace Pro.app", - Q = "QQ.app",W = "WeChat.app",E = "Microsoft Edge.app",T = "iTerm.app",Y = "语雀.app",U = "Notion.app",I = "IINA.app",O = "Obsidian.app", P = "Clash Verge.app", - A = "ILink.app",S = "WebStorm.app",F = "Finder.app",G = "ChatGPT.app",H = "HBuilderX.app",K = "Spotify", L = "NeteaseMusic.app", - Z = "QSpace Pro.app",X = "Xcode.app",C = "Google Chrome.app",V = "Visual Studio Code.app",B = "wechatwebdevtools.app",N = "/System/Applications/Notes.app",M = "Telegram.app", + Q = "QQ.app",W = "WeChat.app",E = "Microsoft Edge.app",T = "iTerm.app",I = "IINA.app",O = "Obsidian.app", P = "/Users/tanpengsccd/Applications/JetBrains Toolbox/PyCharm Professional Edition.app", + A = "ILink.app", S = "Surge.app",F = "/System/Volumes/Data/Applications/Apifox.app" ,G = "https://ai.h6.work",K = "Spotify.app", L = "NeteaseMusic.app", + Z = "QSpace Pro.app",X = "Xcode.app",C = "Google Chrome.app",V = "Visual Studio Code.app",B="iTerm.app",N = "Notes.app",M = "Telegram.app", -- B = "wechatwebdevtools.app"*/ -- [2] = "Notable.app", -- [3] = "Typora.app", } -- 修饰键 这里设置为 f19 + local MOFIFER_KEY = f19 -- local MOFIFER_KEY = "alt" -- 显示 Finder: --- hs.hotkey.bind(MOFIFER_KEY, "1", function() --- hs.application.open("/System/Library/CoreServices/Finder.app") --- hs.application.get("com.apple.finder"):setFrontmost(true) --- end) +hs.hotkey.bind(MOFIFER_KEY, "1", function() + hs.application.open("/System/Library/CoreServices/Finder.app") + hs.application.get("com.apple.finder"):setFrontmost(true) +end) --- 重新加载配置 +-- 重新加载配置 hs.hotkey.bind(f19, "R", function() hs.reload() end) - -------------------------------------------------------------------------------------- -- 按下 "F19+键" 会打开或激活对应的应用,如果应用不是绝对路径,则指的是 /Applications 中的应用 -- -------------------------------------------------------------------------------------- -function bindAppWithHotkey(keyAppPairs) - - - -- 另一种方式 +function bindAppWithHotkey(keyAppPairs,modifierKey) + -- hs.alert.show("modifierKey,key: " .. modifierKey .. "," .. keyAppPairs ..) + -- 确保MODIFIER_KEY已经被传递进来或在这里定义,例如MODIFIER_KEY = {"cmd", "alt"} for key, app in pairs(keyAppPairs) do - hs.hotkey.bind(MOFIFER_KEY, key .. "", function() - -- hs.application.open(app) -- 这种方式必须要app 路径 - hs.alert.show(app) - hs.application.launchOrFocus(app) -- 这种可以只传入app name,也可以传入路径 + hs.hotkey.bind(modifierKey, key, function() + -- 如果是以http前缀的,就是网址,需要使用 Chrome 打开 + if string.find(app, "^http") then -- 使用'^http'来确保字符串以http开始 + hs.alert.show("URL: " .. app) + local url = app + local scriptPath = os.getenv("HOME") .. "/.hammerspoon/jxa/openInChrome.jxa" -- 使用环境变量获取用户目录 + local command = "osascript -l JavaScript " .. scriptPath .. " '" .. url .. "'" + hs.execute(command) + return + else -- 检查字符串是否以.app结束 + hs.alert.show("Launching: " .. app) + hs.application.launchOrFocus(app) -- 这种可以只传入app name,也可以传入路径 + return + end end) end end -bindAppWithHotkey(KEY_APP_PAIRS) +bindAppWithHotkey(KEY_APP_PAIRS,MOFIFER_KEY) + +-- hs.hotkey.bind(MOFIFER_KEY, "G", function() +-- local url = "https://ai.h6.work" -- 无法打开 https +-- -- hs.alert.show(url) +-- local scriptPath = "~/.hammerspoon/jxa/openInChrome.jxa" -- 替换为你的JXA脚本实际路径 +-- local command = "osascript -l JavaScript " .. scriptPath .. " '" .. url .. "'" +-- hs.execute(command) +-- -- hs.alert.show(command) +-- -- hs.alert.show("Script executed") + +-- end) \ No newline at end of file