解决三星Chromebook上Caret工作异常

最近入的三星 Chromebook 在使用时有个小遗憾:一直感觉没有一款比较好的离线文本编辑器 App,之前用的 Google 官方出的 Text 编辑器 App,确实是比较小巧耐用的,就是功能确实还是太简单了,难道还让我用 Chrome OS Shell 里的 vim?

后来看到国外有人推荐了好几款 Chrome OS 下的编辑器 App,例如 Zed 之类的,最后综合比较之后还是决定用 Caret 编辑器,在 Windows Chrome 上安装 Caret App 之后用起来确实是非常不错的,但比较意外的是在三星 Chromebook 上使用时却发现有两个比较严重的问题:

1、键盘输入的时候光标位置不对,输入的字符越多光标就越向后偏移,这样造成在 Caret 下根本无法选择文字,查找替换之类的也很麻烦;

2、使用 Chromebook 自带的中文输入法输入中文的时候会出现选择候选词之后候选词的最后一个字总会被截掉的问题,例如输入“中文”这两个汉字组成的词,选择候选词之后就只有一个“中”字了,如果只输入一个汉字就会出现死活都显示不出来的诡异现象。

出现这两个问题之后我尝试过在 Caret 的 GitHub 网页上提交新的 issue,但作者只是说应该是 Caret 用的 ACE 编辑器处理的问题,作者无力解决。

经过一番查找尝试,光标显示的问题才找到办法解决。Caret 用的 ACE 编辑器只支持等宽字体,而 Chromebook 上默认用的 Noto Sans 也是等宽字体,无奈我在 Caret 中修改用户配置把字体修改为各种其它 Chromebook 自带的等宽字体(monospace 等等)都不起作用,最后多番尝试才发现 Chrome OS 早期使用的 Cousine 字体没有这个问题,在 Caret 的 “设置” - “用户偏好” 中修改为:

"fontFamily": "Cousine"

这样就可以了,保存之后无需重启程序 Caret 会自动使用新配置。

后来再经过尝试之后发现把 Windows 系统上的宋体这一经典的等宽字体拷贝安装到 Chromebook 上之后并指定使用 SimSun 宋体也不会出现这个问题,如果想显示成宋体的效果可以手工安装字体的(不过这需要启用 Chrome OS 的开发模式才行的哦)。

另外一个输入中文被截掉的问题,所幸在 ACE 编辑器的 issue 里看到了有中国用户报了类似的问题(虽然体现和解决方式不太一样),这个需要修改 Caret App 里的 ACE JavaScript 编辑器代码才行。

这里还是需要启用 Chrome OS 的开发模式,启用之后按 Ctrl + Alt + T 键打开 Chrome OS 的 Shell,进入这个目录(1.5.4_0 是 Caret 插件的实际版本,实际替换下就行):

~/Extensions/fljalecfjciodhpcledpamjachpmelml/1.5.4_0/js/ace

用 vi 之类的其它编辑器打开该目录下的 ace.js 文件,找到下面这一段 JavaScript 代码:

        } else if (data == PLACEHOLDER.charAt(0)) {
            /*if (afterContextMenu)
                host.execCommand("del", {source: "ace"});
            else // some versions of android do not fire keydown when pressing backspace
                host.execCommand("backspace", {source: "ace"});*/
        } else {

直接注释掉上面高亮显示的第 2 - 5 行(就是这个 else if 代码块里的所有代码咯)。

ace.js 文件修改完成之后保存退出,然后重新打开 Caret App 就会发现中文输入问题也解决了。

另外需要说的是光标位置显示的问题在 Zed 等其他几个 Chrome 下的编辑器 App 里也是存在的,估计都是由于用的 ACE 编辑器引起的,但这个问题似乎在其它 x86 Chromebook 上好像也没出现过。如果本文中有任何问题还请提出指正哦,祝 Chromebook 用的开心 ^_^。

2 条评论 在此博文.
  1. Unee Wang:

    谢谢,明天试试。我在用户偏好里找,试了很多都不行,原来要修改更深层的代码。商店里有vim,44M左右

  2. admin:

    不客气哈,vim 的话我就直接用 Crouton 里的了,这个比较强大的。

发表评论





*