Files
atom/HTML/atomicity.js
Chris Wanstrath e46516600c save & save as
2011-08-18 23:19:10 -07:00

69 lines
2.0 KiB
JavaScript

(function() {
var JavaScriptMode, bindKey, canon, editor, filename, save, saveAs;
console.log = OSX.NSLog;
editor = ace.edit("editor");
editor.setTheme("ace/theme/twilight");
JavaScriptMode = require("ace/mode/javascript").Mode;
editor.getSession().setMode(new JavaScriptMode());
filename = null;
save = function() {
var str;
str = OSX.NSString.stringWithString(editor.getSession().getValue());
return str.writeToFile_atomically(filename, true);
};
saveAs = function() {
var file, panel;
panel = OSX.NSSavePanel.savePanel;
if (panel.runModal !== OSX.NSFileHandlingPanelOKButton) {
return null;
}
if (file = panel.filenames.lastObject) {
filename = file;
return save();
}
};
canon = require('pilot/canon');
bindKey = function(name, shortcut, callback) {
return canon.addCommand({
name: name,
exec: callback,
bindKey: {
win: null,
mac: shortcut,
sender: 'editor'
}
});
};
bindKey('open', 'Command-O', function(env, args, request) {
var code, file, panel;
panel = OSX.NSOpenPanel.openPanel;
if (panel.runModal !== OSX.NSFileHandlingPanelOKButton) {
return null;
}
if (file = panel.filenames.lastObject) {
filename = file;
code = OSX.NSString.stringWithContentsOfFile(file);
return env.editor.getSession().setValue(code);
}
});
bindKey('saveAs', 'Command-Shift-S', function(env, args, request) {
return saveAs();
});
bindKey('save', 'Command-S', function(env, args, request) {
if (filename) {
return save();
} else {
return saveAs();
}
});
bindKey('eval', 'Command-R', function(env, args, request) {
return eval(env.editor.getSession().getValue());
});
bindKey('togglecomment', 'Command-/', function(env) {
return env.editor.toggleCommentLines();
});
bindKey('fullscreen', 'Command-Return', function(env) {
return OSX.NSLog('coming soon');
});
}).call(this);