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的经验的更多相关文章

  1. 前端代码编辑器ace 语法验证

    本文主要是介绍实际项目中如何加入语法检测功能.官方文档链接https://github.com/ajaxorg/ace/wiki/Syntax-validation 代码编辑器ace,使用webwor ...

  2. 前端代码编辑器ace 语法高亮

    代码编辑器codemirror和ace,都有接触过,主要是简单的api使用下.现在项目选用的ace.主要结合官网的文档,加入些自己的理解.官方原文链接https://ace.c9.io/#nav=hi ...

  3. 前端代码编辑器ace 语法提示 代码提示

    本文主要是介绍ace编辑器的语法提示,自动完成.其实没什么可特别介绍的,有始有终吧,把项目中使用到的ace的功能都介绍下. { enableBasicAutocompletion: false, // ...

  4. ACE 1.1.9 发布,开源云端代码编辑器

    点这里 ACE 1.1.9 发布,开源云端代码编辑器 oschina 发布于: 2015年04月06日 (1评) 分享到:    收藏 +25 4月18日 武汉 源创会开始报名,送华为开发板 ACE ...

  5. 【前端】ACE Editor(代码编辑器) 简易使用示例

    身为一个早已退役的Oier,当然忘不了当年一个个OJ页面上的代码显示和代码编辑器. 其中,洛谷使用的ACE Editor就是之一,非常的简洁美观.以及实际上在前端页面上搭建一个ACE Editor也是 ...

  6. ACE Editor在线代码编辑器简介及使用引导

    转自博客:https://www.cnblogs.com/cz-xjw/p/6476179.html ACE 是一个开源的.独立的.基于浏览器的代码编辑器,可以嵌入到任何web页面或JavaScrip ...

  7. JS代码高亮编辑器 ace.js

    JS代码高亮编辑器 ace.js 字数254 阅读2 评论0 喜欢0 瞎扯 ace 是 js 实现的代码编辑器 编译打包之后的 ACE 代码 官网,未提供编译好的文件 ACE 拥有的特点 语法高亮超过 ...

  8. 最好用的web端代码文本编辑器ACE

    使用足够简单,功能足够强大,体验足够优秀 之前有一个系列文章介绍我在运维系统开发过程中用到的那些顺手的前端插件,总共发了四篇文章介绍了三个非常棒的插件,分别是bootstrap-duallistbox ...

  9. 游戏音频技术备忘 (五)Wwise Unreal Engine 集成代码浅析 二

    AkAmbientSound类的实现 Unreal Engine提供了一个基本对象的构造器ObjectInitializer,一般来说用户创建的类总是拥有很多变量,因此 AkAmbientSound  ...

随机推荐

  1. js监控窗口高度和宽度

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/T ...

  2. PHP中的XML解析的5种方法

    [前言]不管是桌面软件开发,还是WEB应用,XML无处不在!然而在平时的工作中,仅仅是使用一些已经封装好的类对XML对于处理,包括生成,解析等.假期有空,于是将PHP中的几种XML解析方法总结如下: ...

  3. Java1.8.0_05 环境配置

    1.计算机->属性->高级系统设置->环境变量->系统变量 2.新建JAVA_HOME 变量值设为C:\Java\jdk1.8.0_05 即安装目录,确定. 3.新建CLASS ...

  4. WinCE开机Logo的实现(USB下载图片到nandflash)

    WinCE开机启动Logo使用Eboot读取NandFlash中的图片数据,然后显示的方式.对于开机logo的方式网友http://jazka.blog.51cto.com/809003/664131 ...

  5. 我的android学习经历18

    今天主要学了几个android控件和使用两个适配器 ListView DatePicker和TimePicker GridView 适配器:SimpleAdapter和ArrayAdapter 都是常 ...

  6. 4.给定一个正整数m,统计m的位数,分别打印每一位数字,再按照逆序打印出各位数字。 要求:m定义为类的属性,需定义构造函数为m赋值;当m大于99999时,输出错误信息“the number is too large”,不再执行。

    package a; public class ShuZi { int m; public int getM() { return m; } public void setM(int m) { thi ...

  7. linux 查找替换

    esc:   命令模式与插入模式的切换 一.vi查找:    当你用vi打开一个文件后,因为文件太长,如何才能找到你所要查找的关键字呢?在vi里可没有菜单-〉查找, 不过没关系,你在命令模式下敲斜杆( ...

  8. Limiting To Select Only 5 Check Boxes Out Of Ten In Oracle Forms

    Suppose you want to give an option to user to select only 5 check boxes from given any number of che ...

  9. celery入门

    认识 这里有几个概念,task.worker.broker.顾名思义,task 就是老板交给你的各种任务,worker 就是你手下干活的人员. 那什么是 Broker 呢? 老板给你下发任务时,你需要 ...

  10. Spring AOP和AspectJ支持

    学了Spring之后发现我都不知道java为何物-- 在这一章中有好几节,讲的切面编程 第一节:在项目中启用Spring的AspectJ注解支持 第二节:用AspectJ注解声明aspect 第三节: ...