集成代码编辑器ACE的经验
ACE是最流行的在线代码编辑器之一,在CanTK的集成开发环境GameBuilder里也使用了ACE。ACE的功能非常强大,但是由于使用方法不当,大家反映GameBuilder的代码编辑器不好用。最近花了点时间去完善它,这里把遇到的问题写出来,供有需要的朋友参考。
1.Linux下代码显示与输入不一致。
Fedora下代码显示与输入不一致,水平方向上,输入位置是代码显示的一倍。这个问题困扰了我很久,它让代码编辑器根本没法使用。升级操作系统和ACE到最新版本,也无法解决这个问题,而且大部分使用ACE的网站都有这个问题。后来发现是字体的问题,使用edgefonts的字体就OK了。但是国内访问use.edgefonts.net经常超时,需要把https://use.edgefonts.net/source-code-pro.js及字体取到本地服务器上。
2.代码自动补全。
ACE支持代码自动补全,网上也有文章介绍。但是实际使用时,有两点值得注意:
1.数据格式 下面的代码注册一个Completer,回调函数把准备的数据传递给ACE,ACE会自动根据当前的输入进行匹配,所以这里不需要预先过滤。
var tangideCompleter = {
getCompletions: function(editor, session, pos, prefix, callback) {
if (prefix.length === 0) {
return callback(null, []);
}else {
return callback(null, autoCompleteData);
}
}
}
editor.setOptions({enableBasicAutocompletion: true, enableSnippets: true, enableLiveAutocompletion: true});
var langTools = ace.require("ace/ext/language_tools");
langTools.addCompleter(tangideCompleter);
autoCompleteData是一个数组,每一项都类似于下面这个结构:
{“meta”:”function”, “caption”:”addShape”, “value”:”addShape”,”score”:1},
meta:显示在提示框的右边(如下图)。
caption:显示在提示框的左边(如下图)。
value:是实际插入的数据。
score:表示优先级,高的排在前面。

1.快捷键 启用补全的快捷键是Ctrl+Space,在中文Windows下,与开关输入法的快捷键冲突。这个可以开启enableLiveAutocompletion选项,或者修改一下ext-language_tools.js:
Autocomplete.startCommand = {
name: "startAutocomplete",
exec: function(editor) {
if (!editor.completer)
editor.completer = new Autocomplete();
editor.completer.autoInsert = false;
editor.completer.autoSelect = true;
editor.completer.showPopup(editor);
editor.completer.cancelContextMenu();
},
bindKey: "Ctrl-Space|Ctrl-Shift-Space|Alt-Space|Ctrl-P"
};
3.全屏编辑
ACE的全屏编辑需要自己处理,这里全屏并非真正的全屏,只是占满浏览器的窗口。通过Ctrl+Enter进行全屏和非全盘切换。
editor.commands.addCommand({
name: "fullscreen",
bindKey: {win: "Ctrl-Enter", mac: "Command-Enter"},
exec: function(editor) {
var vp = cantkGetViewPort();
if(editor.isFullScreen) {
div.style.width = editorW + "px";
div.style.height = editorH + "px";
div.style.position = "absolute";
div.style.left = editorX + "px";
div.style.top = (scrollTop + editorY) + "px";
editor.resize();
editor.isFullScreen = false;
document.body.style.overflow = "auto";
}
else {
div.style.width = vp.width+ "px";
div.style.height = vp.height+ "px";
div.style.position = "absolute";
div.style.left = 0 + "px";
div.style.top = (scrollTop + 0) + "px";
editor.resize();
editor.isFullScreen = true;
document.body.style.overflow = "hidden";
}
}
});
以上代码是GameBuilder里的实现,需要根据实际情况修改。
集成代码编辑器ACE的经验的更多相关文章
- 前端代码编辑器ace 语法验证
本文主要是介绍实际项目中如何加入语法检测功能.官方文档链接https://github.com/ajaxorg/ace/wiki/Syntax-validation 代码编辑器ace,使用webwor ...
- 前端代码编辑器ace 语法高亮
代码编辑器codemirror和ace,都有接触过,主要是简单的api使用下.现在项目选用的ace.主要结合官网的文档,加入些自己的理解.官方原文链接https://ace.c9.io/#nav=hi ...
- 前端代码编辑器ace 语法提示 代码提示
本文主要是介绍ace编辑器的语法提示,自动完成.其实没什么可特别介绍的,有始有终吧,把项目中使用到的ace的功能都介绍下. { enableBasicAutocompletion: false, // ...
- ACE 1.1.9 发布,开源云端代码编辑器
点这里 ACE 1.1.9 发布,开源云端代码编辑器 oschina 发布于: 2015年04月06日 (1评) 分享到: 收藏 +25 4月18日 武汉 源创会开始报名,送华为开发板 ACE ...
- 【前端】ACE Editor(代码编辑器) 简易使用示例
身为一个早已退役的Oier,当然忘不了当年一个个OJ页面上的代码显示和代码编辑器. 其中,洛谷使用的ACE Editor就是之一,非常的简洁美观.以及实际上在前端页面上搭建一个ACE Editor也是 ...
- ACE Editor在线代码编辑器简介及使用引导
转自博客:https://www.cnblogs.com/cz-xjw/p/6476179.html ACE 是一个开源的.独立的.基于浏览器的代码编辑器,可以嵌入到任何web页面或JavaScrip ...
- JS代码高亮编辑器 ace.js
JS代码高亮编辑器 ace.js 字数254 阅读2 评论0 喜欢0 瞎扯 ace 是 js 实现的代码编辑器 编译打包之后的 ACE 代码 官网,未提供编译好的文件 ACE 拥有的特点 语法高亮超过 ...
- 最好用的web端代码文本编辑器ACE
使用足够简单,功能足够强大,体验足够优秀 之前有一个系列文章介绍我在运维系统开发过程中用到的那些顺手的前端插件,总共发了四篇文章介绍了三个非常棒的插件,分别是bootstrap-duallistbox ...
- 游戏音频技术备忘 (五)Wwise Unreal Engine 集成代码浅析 二
AkAmbientSound类的实现 Unreal Engine提供了一个基本对象的构造器ObjectInitializer,一般来说用户创建的类总是拥有很多变量,因此 AkAmbientSound ...
随机推荐
- java安全令牌生成器
SecureRandom sr = new SecureRandom(); byte[] bytes = new byte[8]; bytes = sr.generateSeed(8); System ...
- UPDATE语句:将一个表里的字段更新到另一个表的字段里的语句
update table2 b,(select b.area_id as arid,sum(a.user_amount) as bcount from table1 a,table2 b where ...
- CentOS6.5下MAC
CentOS6.3安装Mac桌面主题 (2013-03-28 14:31:42) 转载▼ 首先下载Mac4Lin_Install_v1.0.zip 我给出个下载地址ht ...
- 我的android学习经历28
一道题目关于Layout_weight: 当前屏幕的大小为430,有左右两个控件,未分配权重之前都是300,左控件的权重是3,右控件的权重是2,请计算左右两个控件的宽度大小是多少? 解: 当前屏幕剩余 ...
- C#注册表操作,根据键取值
string into = ""; RegistryKey key = Registry.LocalMachine; RegistryKey myreg = key.OpenSub ...
- sql 集合运算
UNION 并运算 UNION 操作符用于合并两个或多个 SELECT 语句的结果集. 请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列.列也必须拥有相似的数据类型.同时,每条 SE ...
- jQuerySchool
jQUery
- DIV与IDIV的用法
DIV (unsigned divide) 无符号数除法 格式:DIV SRC 执行的操作: 字节操作:16位被除数在AX,8位除数为源操作数,结果的8位商在AL中,8位余数在AH中.表示为 (AL) ...
- [SAP ABAP开发技术总结]FTP到文件服务器,服务器上文件读写
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- catkin_make broken after intalling python 3.5 with anaconda
"No module named catkin_pkg.package" on catkin_make w/ Indigo I have the problem after ana ...