问题描述
我正在尝试使用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) )