feat: 添加打开页URL面的功能
This commit is contained in:
parent
768e9ad516
commit
b83574c3e0
40
jxa/openInChrome.jxa
Normal file
40
jxa/openInChrome.jxa
Normal file
@ -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();
|
||||
}
|
@ -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)
|
Loading…
Reference in New Issue
Block a user