deno-bridge

你网络配置好了吗?

DeepL Translate: The world's most accurate translator 浏览器能访问的, crow-translate 也设置成使用系统设置了

不过因为在公司,确实可能会遇到奇怪的网络问题

大佬有没有考虑给 deno-bridge-jieba 的移动和删除的函数加上数字按键前缀,这样就可以 C-u N 来快速移动或删除多个词了。

我试着用 (dotimes (i N) (deno-bridge-jieba-forward-word)) 来做,但是它只能还是只能移动一次。

估计需要加一个新的 command,由于请求是异步的。在 elisp 端循环应该不实行的。 需要把“次数”传给 deno,用ts算出需要跳转到哪个位置。

今天给 deno 加了 NO_COLOR=true 的环境变量, 避免出错时在 Emacs log buffer 输出颜色乱码, 方便功能调试。

Ememt2-mode 的开发已经进入收尾阶段了,做个总结和反馈:

  1. (deno-bridge-call) 异步执行,最开始曾经期待在 elisp 里能有个 callback 方法,然后只好在 elisp 里定义了一个方法,deno 端执行完毕后再通过 evalInEmacs 调用一下。后面发现确实要通过这种方式传参数,所以现在也不再觉得不方便。

  2. evalInEmacs 调用 elisp 方法传参涉及到字符串的时候,需要在字符串前后加双引号,然后对字符串内的双引号做转义,如 .replace(/"/g, '\\"')

  3. Deno 端遇到报错,就无法再继续运行了,目前的应对办法是在 deno 端的根部将整个程序用 try {} catch(e) {} 包裹,遇到报错的情况 bridge.evalInEmacs('(message "Something wrong")'); 保证 deno 端持续运行。

暂时只有这几个,确实好用!

再说说使用 Deno 体验上的优点:

  1. NPM 上大把大把的依赖库随便用
  2. 速度快,写着比 elisp 顺手
  3. 有标准库,自带单元测试

npm上面的库好像也不是每个都可以用的 :joy:

ES Modules 就可以,目前常用的依赖应该都支持了 :stuck_out_tongue_winking_eye:

今天开了一天会, 晚上回答一下哈:

  1. 其实都是异步执行, 有结果在 TypeScript 端调用一下 evalInEmacs 是更灵活的方式, 不会因为 TypeScript 出问题导致Emacs卡住, 如果马上处理了, TypeScript 再来调用 Elisp 函数是一样的效果
  2. 目前 deno-bridge 还不如 python-epc (EAF和lsp-bridge的基础)的一点是, python-epc 可以传递 sexp 结构体给Emacs, deno-bridge 目前还只是字符串传递
  3. 对, 应用最好在顶部 try catch 包裹一下, 我原来想过框架加保护, 最后还是想了想, 交给应用开发者自己控制吧。

TypeScript 确实顺手, 大佬可以分享一下 Deno 导入 npm 的方法(虽然我不太喜欢 npm 的依赖), 但是可以临时用一下, 以后 Deno 生态好了也能切换过去的。

感谢大佬回复,1 确实是,当时欠考虑了

分享几个 Deno 的使用经验:

  1. 使用 NPM packge, 在 packge 名前面添加 npm: 就可以了,只有导出 ES module 的 packages 才能在 Deno 中使用。可能需要 --unstable flag。
import emmet from "npm:emmet";
import Flexsearch from "npm:flexsearch";
  1. 导入 json 文件
import cssData from "../data/css-data.json" assert { type: "json" };
  1. Deno 自带单元测试
import { assertEquals } from "https://deno.land/[email protected]/testing/asserts.ts";
import expandCSS from "../src/expand-css.ts";

Deno.test("t", () => assertEquals(expandCSS("t"), "top: |;"));
  1. deno.json

放在项目根目录,可以使用 deno task [TASK NAME] 执行,例如 deno task test

{
  "tasks": {
    "test:css": "deno test ./test/expand-css.test.ts --unstable",
    "test:markup": "deno test ./test/expand-markup.test.ts --unstable",
    "test:flexsearch": "deno test ./test/flexsearch.test.ts --unstable",
    "test:regex": "deno test ./test/regex.test.ts --unstable",
    "test": "deno test ./test/expand-css.test.ts ./test/expand-markup.test.ts ./test/flexsearch.test.ts ./test/regex.test.ts --unstable",
    "lint": "deno lint",
    "web-data": "deno run ./data/_convert-web-data.ts"
  },
  "githooks": {
    "pre-commit": "lint"
  }
}
  1. pre commit hook,我用的是这个方案: https://deno.land/x/[email protected]
1 个赞

安裝了deno-bridge-jieba,關閉emacs時,提示需要關閉:

Active processes exist; kill them and exit anyway? (y or n)

請問如何跳過這個提示。

1 个赞

(define-key evil-normal-state-map(kbd “w”) 'deno-bridge-jieba-forward-word) (define-key evil-visual-state-map(kbd “w”) 'deno-bridge-jieba-forward-word) 設置如上,但 visual 環境中,無法向後移動,光標停在第一個 w 之後,不知道故障出在什麼地方,請原創大佬指點一下。謝謝

有个问题:deno-bridge 可以把 lsp 服务搞过来吗?

可以, 但是还是要按照 lsp-bridge 那样的设计原则, 才能保证不卡Emacs.

如果你问的是VSCode那种能否直接移植, 是不行的, 因为Emacs接口不一样。

运行 list-processes 会展示出一系列进程,找到 deno-bridge-jieba 进入进程buffer,看看有没有什么日志。

> (deno-bridge-jieba-goto 12)
> (deno-bridge-jieba-goto 13)
> (deno-bridge-jieba-goto 15)
> (deno-bridge-jieba-goto 16)
> (deno-bridge-jieba-goto 18)
> (deno-bridge-jieba-goto 18)
> (deno-bridge-jieba-goto 18)

上面是normal ,正常。下面是visual模式,走不動了。

還發現一個問題,normal 也有問題,即不支持繁體字分詞。

經檢查 GitHub - fxsjy/jieba: 结巴中文分词 裡面說支持繁體分詞。

可惜了,如果能做很少的适配就能用,就太好了

两个完全接口不一样的编辑器,是不可能直接移植的。