zoukankan      html  css  js  c++  java
  • 集成代码编辑器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里的实现,需要根据实际情况修改。

  • 相关阅读:
    postman 安装,配置,鉴权
    monkey操作,获取包名,参数,日志,百分比
    monkey环境搭建
    postman接口测试&压力测试
    Fiddler介绍(PC端+Android,IOS端,弱网)
    软件测试的环境搭建
    python2.x- selenium-robot framework自动化测试环境搭建
    SVN的简单操作,版本控制
    svn介绍和安装
    js 函数和函数的参数
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13333031.html
Copyright © 2011-2022 走看看