[英]JXA iTerm Automation - Wait for command to finish
我正在嘗試使用 JXA 來自動化 iTerm。
我想在第一個選項卡中以“觀看模式”編譯一些 UI 代碼。 在第一次編譯庫(並創建了一個 dist/ 文件夾)之后,我想要第二個選項卡打開並運行一些依賴於第一個輸出的其他代碼。 換句話說,我需要第二個選項卡來等待第一個完成。
就 iTerm 的 JXA 自動化而言,我找不到讓一個選項卡等待另一個選項卡的任何方法。
我發現的每個示例都涉及打開多個選項卡並在這些選項卡中啟動並行進程。
我能想到的最好的方法是使用某種形式的 setInterval 並檢查 iTerm 的session.isProcessing
(我在文檔中通過 Script Editor > Window > Library 找到了它),但即使那樣也只是給出了一些奇怪的錯誤,好像 isProcessing 不應該是讀:
Error: Can't convert types
function timer(repeats, func, delay) {
const args = Array.prototype.slice.call(arguments, 2, -1);
args.unshift(this);
const boundFunc = func.bind.apply(func, args);
const operation = $.NSBlockOperation.blockOperationWithBlock(boundFunc);
const timer = $.NSTimer.timerWithTimeIntervalTargetSelectorUserInfoRepeats(
delay / 1000, operation, 'main', null, repeats
);
$.NSRunLoop.currentRunLoop.addTimerForMode(timer, "timer");
return timer;
}
function invalidate(timeoutID) {
timeoutID.invalidate
}
const setTimeout = timer.bind(undefined, false)
const setInterval = timer.bind(undefined, true)
const clearTimeout = invalidate
const clearInterval = invalidate
const terminal = Application('iTerm')
terminal.includeStandardAdditions = true
const window = terminal.currentWindow()
let tab = window.currentTab()
let session = tab.currentSession();
setInterval(function() {
console.log('isProcessing', session.isProcessing);
}, 500);
session.write({ text: 'ng build my-angular-lib --watch' });
//WAIT HERE
let tab2 = window.createTabWithDefaultProfile();
let session2 = tab2.currentSession();
session2.write({ text: 'npm link my-angular-lib && ng serve' });
我要做的是調試session
和tab
的完整結構。 也許信息在不同的領域下。
我會嘗試將整個對象序列化/字符串化為 JSON 並在控制台上打印。
就像是:
console.log(JSON.stringify(session) )
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.