在 osascript/JXA 背景關系中,我需要將 macOS keyCodes 和修飾符映射到 Unicode 字串(對于任何鍵盤布局,在運行時指定)
顯而易見的候選者似乎是UCKeyTranslate,但我嘗試從 JavaScript for Automation 背景關系中獲取對它的參考到目前為止還沒有成功。
有沒有人知道如何做到這一點,也許就ObjC.bindFunction?
當 ObjC 庫被匯入到“JavaScript for Automation”(或“JXA”)JSContext 中時,全域$符號會被它們的方法修飾。
因此,例如,$.NSPasteboard在普通 JXA 背景關系中計算結果為 undefined,但在 之后ObjC.import('Appkit'),我們可以撰寫并成功計算如下運算式:
ObjC.deepUnwrap(
$.NSPasteboard
.generalPasteboard
.propertyListForType(clipType)
);
然而,在這種情況下,$.UCKeyTranslate在以下之后的 JSContext 中仍然未定義:
ObjC.import("CoreServices")
ObjC.import("CarbonCore")
在這種情況下,我們有時可以將 ObjC 函式的名稱系結到 JSContext 名稱ObjC.bindFunction,例如,雖然它是多余的,但我們可以在撰寫后成功撰寫和使用名稱函式名稱 'sin' 和 'cos'。
['sin', 'cos'].forEach(
k => ObjC.bindFunction(k, ['double', ['double']]));
然而,在這種情況下,ObjC.import 和 ObjC.bindFunction 路由到目前為止都沒有定義名稱$.UCKeyTranslate或UCKeyTranslate在 JXA JSContext 中。
uj5u.com熱心網友回復:
一種方法是制作一個 Swift 或 ObjC 幫助程式庫(或命令列工具),然后從 JXA 使用它。檢查一些示例代碼以開始。
如果您將此呼叫包裝在框架內的 ObjC 物件方法中,則可以ObjC.import()在您的腳本中使用它。如果您選擇執行命令列應用程式,則將其稱為 shell 命令。
使用 ObjC.bindFunction 似乎有點太復雜了,因為您必須系結一些其他函式來獲得 UCKeyboardLayout 實體,并定義一堆魔術常量,還要做一些必要的字串和指標映射。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/398754.html
標籤:目标-c 苹果系统 苹果文字 javascript自动化
