Skip to content

Commit

Permalink
Preliminary macOS Mojave compatibility, plus linting
Browse files Browse the repository at this point in the history
  • Loading branch information
isometry committed Jul 14, 2018
1 parent 7ddeb67 commit 405a825
Show file tree
Hide file tree
Showing 3 changed files with 77 additions and 83 deletions.
57 changes: 27 additions & 30 deletions action.js
Original file line number Diff line number Diff line change
@@ -1,48 +1,45 @@
#!/usr/bin/env osascript -l JavaScript

function getenv(name, default_value) {
ObjC.import('stdlib')
try {
value = $.getenv(name);
} finally {
return (typeof value === 'undefined') ? default_value : value;
}
var env = $.NSProcessInfo.processInfo.environment.js;
return (name in env) ? env[name].js : default_value;
}

function run(args)
{
args = args.join(" ").split(" ")
var action = String(args[0]);
function run(args) {
args = args.join(" ").split(" ");
var app, action = String(args[0]);
if (action == "ssh") {
var host = String(args[1] || "");
var app = Application("com.runningwithcrayons.Alfred-3");
app.runTrigger(getenv("ssh_trigger", "ssh"),
{inWorkflow:getenv("ssh_workflow", "net.isometry.alfred.ssh"), withArgument:host});
app = Application("com.runningwithcrayons.Alfred-3");
app.runTrigger(getenv("ssh_trigger", "ssh"), {
inWorkflow:getenv("ssh_workflow", "net.isometry.alfred.ssh"),
withArgument:host
});
} else {
var app = Application(getenv("iterm_application", "com.googlecode.iterm2"));
app = Application(getenv("iterm_application", "com.googlecode.iterm2"));
app.strictPropertyScope = true;
app.strictCommandScope = true;
app.strictParameterType = true;
var win = app.windows.byId(Number(args[1]));
var tab = win.tabs[Number(args[2])];
var ses = tab.sessions.byId(String(args[3]));
switch (action) {
case "select":
// tab => session => window => app
tab.select();
ses.select();
win.select();
app.activate();
break;
case "close":
ses.close();
break;
case "debug":
console.log(JSON.stringify({args:args, title:ses.name()}));
break;
default:
console.log("Invalid arguments:", JSON.stringify(args));
break;
case "select":
// tab => session => window => app
tab.select();
ses.select();
win.select();
app.activate();
break;
case "close":
ses.close();
break;
case "debug":
console.log(JSON.stringify({args:args, title:ses.name()}));
break;
default:
console.log("Invalid arguments:", JSON.stringify(args));
break;
}
}
}
101 changes: 49 additions & 52 deletions filter.js
Original file line number Diff line number Diff line change
@@ -1,47 +1,41 @@
#!/usr/bin/env osascript -l JavaScript

function getenv(name, default_value) {
ObjC.import('stdlib')
try {
value = $.getenv(name);
} finally {
return (typeof value === 'undefined') ? default_value : value;
}
var env = $.NSProcessInfo.processInfo.environment.js;
return (name in env) ? env[name].js : default_value;
}

function sessionToObj(windowId, tabIndex, query) {
return function(session) {
return {
id: [windowId, tabIndex, session.id()].join(" "),
title: session.name(),
tty: session.tty(),
output: session.isProcessing(),
profile: session.profileName(),
query: query
}
}
return (session) => ({
id: [windowId, tabIndex, session.id()].join(" "),
title: session.name(),
tty: session.tty(),
output: session.isProcessing(),
profile: session.profileName(),
query: query
});
}

function objToItem(obj) {
var description = obj.tty + (obj.output?" *":"");
return {
title: obj.title,
subtitle: ["Select", description].join(" "),
arg: ["select", obj.id].join(" "),
uid: [obj.title, obj.profile].join("/"),
icon: { path: "icon.png" },
mods: {
alt: {
arg: ["close", obj.id].join(" "),
subtitle: ["Close", description].join(" ")
},
cmd: {
arg: ["ssh", obj.query].join(" "),
title: ["⇌ ssh", obj.query].join(" "),
subtitle: "Switch to ssh workflow"
}
var description = obj.tty + (obj.output?" *":"");
return {
title: obj.title,
subtitle: ["Select", description].join(" "),
arg: ["select", obj.id].join(" "),
uid: [obj.title, obj.profile].join("/"),
icon: { path: "icon.png" },
mods: {
alt: {
arg: ["close", obj.id].join(" "),
subtitle: ["Close", description].join(" ")
},
cmd: {
arg: ["ssh", obj.query].join(" "),
title: ["⇌ ssh", obj.query].join(" "),
subtitle: "Switch to ssh workflow"
}
}
};
}

function allSessionObjs(app, query) {
Expand All @@ -52,27 +46,27 @@ function allSessionObjs(app, query) {
var windowId = windowIds[i];
var tabs = windows.byId(windowId).tabs;
for (var tabIndex=0; tabIndex < tabs.length; ++tabIndex) {
results.push(...tabs[tabIndex].sessions().map(sessionToObj(windowId, tabIndex, query)));
results.push(
...tabs[tabIndex].sessions().map(
sessionToObj(windowId, tabIndex, query)
)
);
}
}
return results;
}

function titleFilter(pattern) {
var re = new RegExp(pattern.replace(/./g, "$&.*?"));
return function(obj) {
return re.exec(obj.title);
}
return (obj) => re.exec(obj.title);
}

function ttyFilter(ttyNum) {
if (ttyNum.length == 0) {
return function() {return true;};
return () => true;
} else {
var re = new RegExp(ttyNum.padStart(3, "0") + "$");
return function(obj) {
return re.exec(obj.tty);
};
return (obj) => re.exec(obj.tty);
}
}

Expand All @@ -86,21 +80,24 @@ function run(args) {
app.strictCommandScope = true;
app.strictParameterType = true;
if (app.running()) {
sessionObjs = allSessionObjs(app, query).filter(titleFilter(query)).filter(ttyFilter(tty));
sessionObjs = allSessionObjs(app, query)
.filter(titleFilter(query))
.filter(ttyFilter(tty));
}
if (sessionObjs.length == 0) {
return JSON.stringify({
items:
[
{
title: ["⇌ ssh", query].join(" "),
subtitle: "No matches! Switch to ssh workflow?",
arg: ["ssh", query].join(" "),
icon: { path: "icon.png" },
}
]
items: [
{
title: ["⇌ ssh", query].join(" "),
subtitle: "No matches! Switch to ssh workflow?",
arg: ["ssh", query].join(" "),
icon: { path: "icon.png" },
}
]
});
} else {
return JSON.stringify({items: sessionObjs.map(objToItem)});
return JSON.stringify({
items: sessionObjs.map(objToItem)
});
}
}
2 changes: 1 addition & 1 deletion info.plist
Original file line number Diff line number Diff line change
Expand Up @@ -210,7 +210,7 @@ Combine with an [iTerm2](https://www.iterm2.com/) profile configured as ssh prot
<string>net.isometry.alfred.ssh</string>
</dict>
<key>version</key>
<string>1.3</string>
<string>1.4-beta1</string>
<key>webaddress</key>
<string>https://github.com/isometry/alfred-tty</string>
</dict>
Expand Down

0 comments on commit 405a825

Please sign in to comment.