add support for shortcuts
This commit is contained in:
parent
5978a355a2
commit
3b1b5d16c7
|
@ -22,6 +22,7 @@
|
|||
01E33AB229B5BF4200FD1006 /* NSColor+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01E33AB129B5BF4200FD1006 /* NSColor+Extension.swift */; };
|
||||
01E33AB529B5C5E400FD1006 /* menu_icon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 01E33AB429B5C5E300FD1006 /* menu_icon@2x.png */; };
|
||||
185CBAEDFE986E6E1B836359 /* libPods-ClashX Meta.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AA63125BBF03DC1A291D3351 /* libPods-ClashX Meta.a */; };
|
||||
27F9A6282A1FB25500C50C38 /* TunModeSettingCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27F9A6272A1FB25500C50C38 /* TunModeSettingCommand.swift */; };
|
||||
4908087B29F8F405007A4944 /* libresolv.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 4908087A29F8F3FF007A4944 /* libresolv.tbd */; };
|
||||
4913C82321157D0200F6B87C /* Notification.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4913C82221157D0200F6B87C /* Notification.swift */; };
|
||||
491E6203258A424D00313AEF /* CommonUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 491E61FD258A424500313AEF /* CommonUtils.m */; };
|
||||
|
@ -156,6 +157,7 @@
|
|||
01C1462928962E4E00346AF3 /* com.metacubex.ClashX.ProxyConfigHelper.meta.gz */ = {isa = PBXFileReference; lastKnownFileType = archive.gzip; path = com.metacubex.ClashX.ProxyConfigHelper.meta.gz; sourceTree = "<group>"; };
|
||||
01E33AB129B5BF4200FD1006 /* NSColor+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NSColor+Extension.swift"; sourceTree = "<group>"; };
|
||||
01E33AB429B5C5E300FD1006 /* menu_icon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "menu_icon@2x.png"; sourceTree = "<group>"; };
|
||||
27F9A6272A1FB25500C50C38 /* TunModeSettingCommand.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TunModeSettingCommand.swift; sourceTree = "<group>"; };
|
||||
3F86DA2DA3CC14731BE1ABF7 /* Pods-ClashX Meta.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ClashX Meta.release.xcconfig"; path = "Pods/Target Support Files/Pods-ClashX Meta/Pods-ClashX Meta.release.xcconfig"; sourceTree = "<group>"; };
|
||||
4908087A29F8F3FF007A4944 /* libresolv.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libresolv.tbd; path = usr/lib/libresolv.tbd; sourceTree = SDKROOT; };
|
||||
4913C82221157D0200F6B87C /* Notification.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Notification.swift; sourceTree = "<group>"; };
|
||||
|
@ -539,6 +541,7 @@
|
|||
children = (
|
||||
8A2BBEA627A03ACB0081EBEF /* ProxySetting.sdef */,
|
||||
8ACD21BA27A04C7800BC4632 /* ProxySettingCommand.swift */,
|
||||
27F9A6272A1FB25500C50C38 /* TunModeSettingCommand.swift */,
|
||||
8ACD21BC27A04ED500BC4632 /* ProxyModeChangeCommand.swift */,
|
||||
);
|
||||
path = AppleScript;
|
||||
|
@ -629,8 +632,9 @@
|
|||
49CF3B1520CD7463001EBF94 /* Project object */ = {
|
||||
isa = PBXProject;
|
||||
attributes = {
|
||||
BuildIndependentTargetsInParallel = YES;
|
||||
LastSwiftUpdateCheck = 1030;
|
||||
LastUpgradeCheck = 1020;
|
||||
LastUpgradeCheck = 1430;
|
||||
ORGANIZATIONNAME = west2online;
|
||||
TargetAttributes = {
|
||||
49CF3B1C20CD7463001EBF94 = {
|
||||
|
@ -759,6 +763,7 @@
|
|||
49722FEF211F338B00650A41 /* FileEvent.swift in Sources */,
|
||||
016BEAB029D80103001586C5 /* AlphaMetaDownloader.swift in Sources */,
|
||||
49D176A72355FE680093DD7B /* NetworkChangeNotifier.swift in Sources */,
|
||||
27F9A6282A1FB25500C50C38 /* TunModeSettingCommand.swift in Sources */,
|
||||
4913C82321157D0200F6B87C /* Notification.swift in Sources */,
|
||||
015F1E91288E42A50052B20A /* ClashMetaConfig.swift in Sources */,
|
||||
8ACD21BD27A04ED500BC4632 /* ProxyModeChangeCommand.swift in Sources */,
|
||||
|
@ -888,6 +893,7 @@
|
|||
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
|
||||
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
|
||||
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
||||
CLANG_WARN_STRICT_PROTOTYPES = YES;
|
||||
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
||||
|
@ -896,6 +902,7 @@
|
|||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||
CODE_SIGN_IDENTITY = "Mac Developer";
|
||||
COPY_PHASE_STRIP = NO;
|
||||
DEAD_CODE_STRIPPING = YES;
|
||||
DEBUG_INFORMATION_FORMAT = dwarf;
|
||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||
ENABLE_TESTABILITY = YES;
|
||||
|
@ -949,6 +956,7 @@
|
|||
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
|
||||
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
|
||||
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
||||
CLANG_WARN_STRICT_PROTOTYPES = YES;
|
||||
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
||||
|
@ -957,6 +965,7 @@
|
|||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||
CODE_SIGN_IDENTITY = "Mac Developer";
|
||||
COPY_PHASE_STRIP = NO;
|
||||
DEAD_CODE_STRIPPING = YES;
|
||||
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
||||
ENABLE_NS_ASSERTIONS = NO;
|
||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||
|
@ -986,9 +995,11 @@
|
|||
CODE_SIGN_ENTITLEMENTS = ClashX/ClashX.entitlements;
|
||||
CODE_SIGN_IDENTITY = "-";
|
||||
CODE_SIGN_STYLE = Manual;
|
||||
|
||||
COMBINE_HIDPI_IMAGES = YES;
|
||||
COMPRESS_PNG_FILES = YES;
|
||||
CURRENT_PROJECT_VERSION = 0;
|
||||
DEAD_CODE_STRIPPING = YES;
|
||||
DEVELOPMENT_TEAM = "";
|
||||
ENABLE_HARDENED_RUNTIME = YES;
|
||||
FRAMEWORK_SEARCH_PATHS = (
|
||||
|
@ -1008,12 +1019,11 @@
|
|||
"$(inherited)",
|
||||
"$(PROJECT_DIR)/ClashX",
|
||||
);
|
||||
MACOSX_DEPLOYMENT_TARGET = 10.13;
|
||||
MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
|
||||
MARKETING_VERSION = v1.0;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.metacubex.ClashX.meta;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||
STRIP_INSTALLED_PRODUCT = NO;
|
||||
STRIP_PNG_TEXT = YES;
|
||||
SWIFT_OBJC_BRIDGING_HEADER = "ClashX/ClashX-Bridging-Header.h";
|
||||
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||
|
@ -1031,10 +1041,12 @@
|
|||
CODE_SIGN_ENTITLEMENTS = ClashX/ClashX.entitlements;
|
||||
CODE_SIGN_IDENTITY = "-";
|
||||
CODE_SIGN_STYLE = Manual;
|
||||
|
||||
COMBINE_HIDPI_IMAGES = YES;
|
||||
COMPRESS_PNG_FILES = YES;
|
||||
COPY_PHASE_STRIP = YES;
|
||||
CURRENT_PROJECT_VERSION = 0;
|
||||
DEAD_CODE_STRIPPING = YES;
|
||||
DEPLOYMENT_POSTPROCESSING = YES;
|
||||
DEVELOPMENT_TEAM = "";
|
||||
ENABLE_HARDENED_RUNTIME = YES;
|
||||
|
@ -1055,13 +1067,12 @@
|
|||
"$(inherited)",
|
||||
"$(PROJECT_DIR)/ClashX",
|
||||
);
|
||||
MACOSX_DEPLOYMENT_TARGET = 10.13;
|
||||
MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
|
||||
MARKETING_VERSION = v1.0;
|
||||
OTHER_CODE_SIGN_FLAGS = "--timestamp";
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.metacubex.ClashX.meta;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||
STRIP_INSTALLED_PRODUCT = YES;
|
||||
STRIP_PNG_TEXT = YES;
|
||||
SWIFT_OBJC_BRIDGING_HEADER = "ClashX/ClashX-Bridging-Header.h";
|
||||
SWIFT_VERSION = 5.0;
|
||||
|
@ -1077,6 +1088,7 @@
|
|||
CODE_SIGN_IDENTITY = "-";
|
||||
CODE_SIGN_STYLE = Manual;
|
||||
CURRENT_PROJECT_VERSION = 3;
|
||||
DEAD_CODE_STRIPPING = YES;
|
||||
DEVELOPMENT_TEAM = "";
|
||||
ENABLE_HARDENED_RUNTIME = YES;
|
||||
INFOPLIST_FILE = "$(SRCROOT)/ProxyConfigHelper/Helper-Info.plist";
|
||||
|
@ -1086,7 +1098,7 @@
|
|||
"@loader_path/../Frameworks",
|
||||
);
|
||||
LIBRARY_SEARCH_PATHS = "$(inherited)";
|
||||
MACOSX_DEPLOYMENT_TARGET = 10.13;
|
||||
MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
|
||||
MARKETING_VERSION = 1.2;
|
||||
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
|
||||
MTL_FAST_MATH = YES;
|
||||
|
@ -1119,6 +1131,7 @@
|
|||
CODE_SIGN_IDENTITY = "-";
|
||||
CODE_SIGN_STYLE = Manual;
|
||||
CURRENT_PROJECT_VERSION = 3;
|
||||
DEAD_CODE_STRIPPING = YES;
|
||||
DEPLOYMENT_POSTPROCESSING = YES;
|
||||
DEVELOPMENT_TEAM = "";
|
||||
ENABLE_HARDENED_RUNTIME = YES;
|
||||
|
@ -1129,7 +1142,7 @@
|
|||
"@loader_path/../Frameworks",
|
||||
);
|
||||
LIBRARY_SEARCH_PATHS = "$(inherited)";
|
||||
MACOSX_DEPLOYMENT_TARGET = 10.13;
|
||||
MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
|
||||
MARKETING_VERSION = 1.2;
|
||||
MTL_FAST_MATH = YES;
|
||||
OTHER_LDFLAGS = (
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
//
|
||||
// ProxyModeChangeCommand.swift
|
||||
// ClashX
|
||||
// ClashX.Meta
|
||||
//
|
||||
// Created by Vince-hz on 2022/1/25.
|
||||
// Copyright © 2022 west2online. All rights reserved.
|
||||
|
|
|
@ -3,10 +3,13 @@
|
|||
<dictionary xmlns:xi="http://www.w3.org/2003/XInclude" title="ClashX Terminonoly">
|
||||
<suite name="Proxy Suite" code="????" description="Proxy setting for AppleScript.">
|
||||
<command name="toggleProxy" code="clashtog" description="Toggle the system proxy.">
|
||||
<cocoa class="ClashX.ProxySettingCommand"/>
|
||||
<cocoa class="ClashX_Meta.ProxySettingCommand"/>
|
||||
</command>
|
||||
<command name="TunMode" code="clashtun" description="Toggle the Tun mode.">
|
||||
<cocoa class="ClashX_Meta.TunModeSettingCommand"/>
|
||||
</command>
|
||||
<command name="proxyMode" code="clashmod" description="Update proxy mode.">
|
||||
<cocoa class="ClashX.ProxyModeChangeCommand"/>
|
||||
<cocoa class="ClashX_Meta.ProxyModeChangeCommand"/>
|
||||
<direct-parameter description="The proxy mode to set. direct, global, or rule">
|
||||
<type type="text"/>
|
||||
</direct-parameter>
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
//
|
||||
// ProxySettingCommand.swift
|
||||
// ClashXX
|
||||
// ClashX.Meta
|
||||
//
|
||||
// Created by Vince-hz on 2022/1/25.
|
||||
// Copyright © 2022 west2online. All rights reserved.
|
||||
|
|
|
@ -0,0 +1,29 @@
|
|||
//
|
||||
// TunModeSettingCommand.swift
|
||||
// ClashX.Meta
|
||||
//
|
||||
// Created by hbsgithub on 2023/5/26.
|
||||
// Copyright © 2023 west2online. All rights reserved.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
import AppKit
|
||||
|
||||
@objc class TunModeSettingCommand: NSScriptCommand {
|
||||
override func performDefaultImplementation() -> Any? {
|
||||
guard let delegate = NSApplication.shared.delegate as? AppDelegate else {
|
||||
scriptErrorNumber = -2
|
||||
scriptErrorString = "can't get application, try again later"
|
||||
return nil
|
||||
}
|
||||
let menuItem: NSMenuItem
|
||||
menuItem = delegate.tunModeMenuItem
|
||||
if menuItem.state == .on {
|
||||
menuItem.state = .on
|
||||
} else {
|
||||
menuItem.state = .off
|
||||
}
|
||||
delegate.tunMode(menuItem)
|
||||
return nil
|
||||
}
|
||||
}
|
25
Shortcuts.md
25
Shortcuts.md
|
@ -1,42 +1,51 @@
|
|||
# 全局快捷键
|
||||
|
||||
ClashX的全局快捷键是通过支持 AppleScript,并以系统的 Automator 程序调用 AppleScript 来完成全局快捷键的实现。
|
||||
ClashX Meta的全局快捷键是通过支持 AppleScript,并以系统的 Automator 程序或者Alfred Workflow调用 AppleScript 来完成全局快捷键的实现。
|
||||
|
||||
ClashX目前仅支持以下功能的AppleScript
|
||||
ClashX Meta目前仅支持以下功能的AppleScript
|
||||
|
||||
1. 打开(关闭)系统代理
|
||||
2. 切换出站模式
|
||||
3. 打开(关闭)Tun模式
|
||||
|
||||
## 通过 Automator 创建全局快捷键
|
||||
|
||||
[Mac新建全局快捷键](https://www.jianshu.com/p/afee9aeb41a8)
|
||||
|
||||
## 使用Alfred Workflow
|
||||
|
||||
[Alfred-Workflow-for-ClashX-Meta](https://github.com/hbsgithub/Alfred-Workflow-for-ClashX-Meta)
|
||||
|
||||
## 可用的 AppleScript
|
||||
|
||||
你可以在这里选择你需要的 AppleScript 代码,以此创建你需要的快捷键。
|
||||
|
||||
**以下示例代码为ClashX程序。如果你正在用ClashX Pro,那么请将ClashX替换为 ClashX Pro**
|
||||
**以下示例代码为ClashX Meta程序。如果你正在用ClashX或ClashX Pro,那么请将ClashX Meta替换为 ClashX或ClashX Pro**
|
||||
|
||||
---
|
||||
|
||||
打开(关闭)系统代理
|
||||
|
||||
`tell application "ClashX" to toggleProxy`
|
||||
`tell application "ClashX Meta" to toggleProxy`
|
||||
|
||||
切换出站模式为全局代理
|
||||
|
||||
`tell application "ClashX" to proxyMode 'global'`
|
||||
`tell application "ClashX Meta" to proxyMode 'global'`
|
||||
|
||||
切换出站模式为直连
|
||||
|
||||
`tell application "ClashX" to proxyMode 'direct'`
|
||||
`tell application "ClashX Meta" to proxyMode 'direct'`
|
||||
|
||||
切换出站模式为规则代理
|
||||
|
||||
`tell application "ClashX" to proxyMode 'rule'`
|
||||
`tell application "ClashX Meta" to proxyMode 'rule'`
|
||||
|
||||
打开(关闭)Tun模式
|
||||
|
||||
`tell application "ClashX Meta" to TunMode`
|
||||
|
||||
## 已知缺陷
|
||||
|
||||
1. 无法直接在桌面使用快捷键,你需要进入任意程序中才能启动快捷键
|
||||
1. 通过 Automator 创建全局快捷键的方式无法直接在桌面使用快捷键,你需要进入任意程序中才能启动快捷键
|
||||
|
||||
2. 在任何程序中第一次启用该快捷键都要点击一次确认授权才能启动快捷键
|
Loading…
Reference in New Issue