I think that I have worked through the most pressing of the issues in my fork of Mr Doob's code editor. At the least, I have enough to continue writing and making screenshots for Gaming JavaScript.
Tonight, I am going to continue following along behind the great work by Mr Doob. After I forked his code-editor, Mr Doob experimented with the ACE Code Editor instead of the current CodeMirror editor. I do not have an opinion (yet) on which is better. Both seem to be in wide use with a number of prominent users.
In a new "ace" branch, I remove all of the CodeMirror code. I could have left it, but I want to be sure that I eliminate stray dependencies. Next, I grab the ace source:
➜ repos git clone https://github.com/ajaxorg/ace-builds.git Cloning into 'ace-builds'...I could use the CDN version, but I need to evaluate this locally since it would ultimately be run as part of an HTML appcache.
Back in the code-editor local repository, I copy the ace files that I think I will need:
➜ code-editor git:(gamingjs) ✗ cd js ➜ js git:(ace) ✗ mkdir ace ➜ js git:(ace) ✗ cd !$ ➜ js git:(ace) ✗ cd ace ➜ ace git:(ace) ✗ cp ~/repos/ace-builds/src/ace.js . ➜ ace git:(ace) ✗ cp ~/repos/ace-builds/src/keybinding-emacs.js . ➜ ace git:(ace) ✗ cp ~/repos/ace-builds/src/mode-{css.js,html.js,javascript.js} . ➜ ace git:(ace) ✗ cp ~/repos/ace-builds/src/theme-chrome.js .In the application's
index.html
, I pull in this new ace.js
file:<!DOCTYPE html> <html> <head> <title>code editor</title> <meta charset="utf-8"> <link rel="stylesheet" href="editor.css"> <script src="js/ace/ace.js" type="text/javascript" charset="utf-8"></script> <script src="js/rawinflate.js"></script> <script src="js/rawdeflate.js"></script> <script src="js/appcache.js"></script> </head> <body> </body> <script src="js/editor.js"> </script> </html>And, in the
editor.js
file, into which I have moved all of the code-editor specific code, I replace the CodeMirror setup with a simliar ACE setup:// editor var interval; var editor = document.createElement( 'div' ); editor.id = "editor"; editor.style.position = 'absolute'; editor.style.left = '0px'; editor.style.top = '0px'; editor.style.width = window.innerWidth + 'px'; editor.style.height = window.innerHeight + 'px'; document.body.appendChild( editor ); var ace = ace.edit("editor"); ace.setTheme("ace/theme/chrome"); ace.getSession().setMode("ace/mode/html");With that, I get the ACE code editor:
I tweak the settings a bit to get a large enough font size and to get Emacs keybindings (very important):
var ace = ace.edit("editor"); ace.setTheme("ace/theme/chrome"); ace.getSession().setMode("ace/mode/html"); ace.setFontSize('16px'); var emacs = require("ace/keyboard/emacs").handler; ace.setKeyboardHandler(emacs);It took me a long while to figure out how to enable the Emacs keybindings. Maybe it is just me, but that was not obvious. In particular, in addition to requiring the emacs keybindings, I am forced to reference the source in the HTML:
... <script src="js/ace/ace.js" type="text/javascript" charset="utf-8"></script> <script src="js/ace/keybinding-emacs.js"></script> ...I am not going to dwell on that too much. At least it is working. I call it a night here. I will pick back up integrating into the code-editor tomorrow.
Day #534
wow, this was amazing.
ReplyDeletebut I want #editor to be in the html body.
example:
<body><div id="editor"></div></body>
I've tried but failed.
how can I make it work?
What is the mode for c and c++?
ReplyDeleteace.getSession().setMode("ace/mode/c_cpp");
Delete