Repo // Add HangarRash_SwiftyCapsLockToggler.

This commit is contained in:
ShikiSuen 2023-10-14 19:09:54 +08:00
parent b7c914a611
commit 6c371b844f
6 changed files with 81 additions and 0 deletions

View File

@ -0,0 +1,4 @@
// Ref: https://stackoverflow.com/a/75870807/4162914
#import <IOKit/IOKitLib.h>
#import <IOKit/hid/IOHIDBase.h>

View File

@ -0,0 +1,33 @@
// swift-tools-version:5.3
// The swift-tools-version declares the minimum version of Swift required to build this package.
import PackageDescription
let package = Package(
name: "SwiftyCapsLockToggler",
platforms: [
.macOS(.v11),
],
products: [
// Products define the executables and libraries a package produces, making them visible to other packages.
.library(
name: "SwiftyCapsLockToggler",
targets: ["SwiftyCapsLockToggler"]
),
],
targets: [
// Targets are the basic building blocks of a package, defining a module or a test suite.
// Targets can depend on other targets in this package and products from dependencies.
.target(
name: "CapsLockToggler",
path: "Framework",
cSettings: [
.headerSearchPath("include"),
]
),
.target(
name: "SwiftyCapsLockToggler",
dependencies: ["CapsLockToggler"]
),
]
)

View File

@ -0,0 +1,39 @@
// Ref: https://stackoverflow.com/a/75870807/4162914
// #import <IOKit/IOKitLib.h>
// #import <IOKit/hid/IOHIDBase.h>
import CapsLockToggler
public enum CapsLockToggler {
public static func toggle() {
let thePort: mach_port_t = {
if #available(macOS 12.0, *) {
return kIOMainPortDefault
}
return kIOMasterPortDefault
}()
let ioService: io_service_t = IOServiceGetMatchingService(thePort, IOServiceMatching(kIOHIDSystemClass))
var ioConnect: io_connect_t = 0
IOServiceOpen(ioService, mach_task_self_, UInt32(kIOHIDParamConnectType), &ioConnect)
var state = false
IOHIDGetModifierLockState(ioConnect, Int32(kIOHIDCapsLockState), &state)
state.toggle()
IOHIDSetModifierLockState(ioConnect, Int32(kIOHIDCapsLockState), state)
IOServiceClose(ioConnect)
}
public static func turnOff() {
let thePort: mach_port_t = {
if #available(macOS 12.0, *) {
return kIOMainPortDefault
}
return kIOMasterPortDefault
}()
let ioService: io_service_t = IOServiceGetMatchingService(thePort, IOServiceMatching(kIOHIDSystemClass))
var ioConnect: io_connect_t = 0
IOServiceOpen(ioService, mach_task_self_, UInt32(kIOHIDParamConnectType), &ioConnect)
IOHIDSetModifierLockState(ioConnect, Int32(kIOHIDCapsLockState), false)
IOServiceClose(ioConnect)
}
}

View File

@ -14,6 +14,7 @@ let package = Package(
], ],
dependencies: [ dependencies: [
.package(path: "../DanielGalasko_FolderMonitor"), .package(path: "../DanielGalasko_FolderMonitor"),
.package(path: "../HangarRash_SwiftyCapsLockToggler"),
.package(path: "../Jad_BookmarkManager"), .package(path: "../Jad_BookmarkManager"),
.package(path: "../Qwertyyb_ShiftKeyUpChecker"), .package(path: "../Qwertyyb_ShiftKeyUpChecker"),
.package(path: "../vChewing_CandidateWindow"), .package(path: "../vChewing_CandidateWindow"),
@ -50,6 +51,7 @@ let package = Package(
.product(name: "Shared", package: "vChewing_Shared"), .product(name: "Shared", package: "vChewing_Shared"),
.product(name: "ShiftKeyUpChecker", package: "Qwertyyb_ShiftKeyUpChecker"), .product(name: "ShiftKeyUpChecker", package: "Qwertyyb_ShiftKeyUpChecker"),
.product(name: "SwiftExtension", package: "vChewing_SwiftExtension"), .product(name: "SwiftExtension", package: "vChewing_SwiftExtension"),
.product(name: "SwiftyCapsLockToggler", package: "HangarRash_SwiftyCapsLockToggler"),
.product(name: "Tekkon", package: "vChewing_Tekkon"), .product(name: "Tekkon", package: "vChewing_Tekkon"),
.product(name: "TooltipUI", package: "vChewing_TooltipUI"), .product(name: "TooltipUI", package: "vChewing_TooltipUI"),
.product(name: "Uninstaller", package: "vChewing_Uninstaller"), .product(name: "Uninstaller", package: "vChewing_Uninstaller"),

View File

@ -185,6 +185,7 @@
5B963CA128D5C22D00DCEE88 /* vChewing_SwiftExtension */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = vChewing_SwiftExtension; path = Packages/vChewing_SwiftExtension; sourceTree = "<group>"; }; 5B963CA128D5C22D00DCEE88 /* vChewing_SwiftExtension */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = vChewing_SwiftExtension; path = Packages/vChewing_SwiftExtension; sourceTree = "<group>"; };
5B98114628D6198000CBC605 /* vChewing_PinyinPhonaConverter */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = vChewing_PinyinPhonaConverter; path = Packages/vChewing_PinyinPhonaConverter; sourceTree = "<group>"; }; 5B98114628D6198000CBC605 /* vChewing_PinyinPhonaConverter */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = vChewing_PinyinPhonaConverter; path = Packages/vChewing_PinyinPhonaConverter; sourceTree = "<group>"; };
5BA8C30128DEFE4F004C5CC4 /* vChewing_CandidateWindow */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = vChewing_CandidateWindow; path = Packages/vChewing_CandidateWindow; sourceTree = "<group>"; }; 5BA8C30128DEFE4F004C5CC4 /* vChewing_CandidateWindow */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = vChewing_CandidateWindow; path = Packages/vChewing_CandidateWindow; sourceTree = "<group>"; };
5BAD67E12ADAB62D005A4842 /* HangarRash_SwiftyCapsLockToggler */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = HangarRash_SwiftyCapsLockToggler; path = Packages/HangarRash_SwiftyCapsLockToggler; sourceTree = "<group>"; };
5BB802D927FABA8300CF1C19 /* SessionCtl_Menu.swift */ = {isa = PBXFileReference; explicitFileType = sourcecode.swift; fileEncoding = 4; indentWidth = 2; lineEnding = 0; path = SessionCtl_Menu.swift; sourceTree = "<group>"; tabWidth = 2; usesTabs = 0; }; 5BB802D927FABA8300CF1C19 /* SessionCtl_Menu.swift */ = {isa = PBXFileReference; explicitFileType = sourcecode.swift; fileEncoding = 4; indentWidth = 2; lineEnding = 0; path = SessionCtl_Menu.swift; sourceTree = "<group>"; tabWidth = 2; usesTabs = 0; };
5BBBB75D27AED54C0023B93A /* Beep.m4a */ = {isa = PBXFileReference; lastKnownFileType = file; path = Beep.m4a; sourceTree = "<group>"; }; 5BBBB75D27AED54C0023B93A /* Beep.m4a */ = {isa = PBXFileReference; lastKnownFileType = file; path = Beep.m4a; sourceTree = "<group>"; };
5BBBB75E27AED54C0023B93A /* Fart.m4a */ = {isa = PBXFileReference; lastKnownFileType = file; path = Fart.m4a; sourceTree = "<group>"; }; 5BBBB75E27AED54C0023B93A /* Fart.m4a */ = {isa = PBXFileReference; lastKnownFileType = file; path = Fart.m4a; sourceTree = "<group>"; };
@ -443,6 +444,7 @@
children = ( children = (
5BDB7A3128D47587001AC277 /* DanielGalasko_FolderMonitor */, 5BDB7A3128D47587001AC277 /* DanielGalasko_FolderMonitor */,
5BFC63C428D487AE004A77B7 /* Fuziki_NSAttributedTextView */, 5BFC63C428D487AE004A77B7 /* Fuziki_NSAttributedTextView */,
5BAD67E12ADAB62D005A4842 /* HangarRash_SwiftyCapsLockToggler */,
5BDB7A3028D47587001AC277 /* Jad_BookmarkManager */, 5BDB7A3028D47587001AC277 /* Jad_BookmarkManager */,
5BDB7A3428D47587001AC277 /* Qwertyyb_ShiftKeyUpChecker */, 5BDB7A3428D47587001AC277 /* Qwertyyb_ShiftKeyUpChecker */,
5BDB7A3528D47587001AC277 /* RMJay_LineReader */, 5BDB7A3528D47587001AC277 /* RMJay_LineReader */,