你网络配置好了吗?
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 的开发已经进入收尾阶段了,做个总结和反馈:
-
(deno-bridge-call)
异步执行,最开始曾经期待在 elisp 里能有个 callback 方法,然后只好在 elisp 里定义了一个方法,deno 端执行完毕后再通过evalInEmacs
调用一下。后面发现确实要通过这种方式传参数,所以现在也不再觉得不方便。 -
evalInEmacs
调用 elisp 方法传参涉及到字符串的时候,需要在字符串前后加双引号,然后对字符串内的双引号做转义,如.replace(/"/g, '\\"')
。 -
Deno 端遇到报错,就无法再继续运行了,目前的应对办法是在 deno 端的根部将整个程序用
try {} catch(e) {}
包裹,遇到报错的情况bridge.evalInEmacs('(message "Something wrong")');
保证 deno 端持续运行。
暂时只有这几个,确实好用!
再说说使用 Deno 体验上的优点:
- NPM 上大把大把的依赖库随便用
- 速度快,写着比 elisp 顺手
- 有标准库,自带单元测试
npm上面的库好像也不是每个都可以用的
ES Modules 就可以,目前常用的依赖应该都支持了
今天开了一天会, 晚上回答一下哈:
- 其实都是异步执行, 有结果在 TypeScript 端调用一下 evalInEmacs 是更灵活的方式, 不会因为 TypeScript 出问题导致Emacs卡住, 如果马上处理了, TypeScript 再来调用 Elisp 函数是一样的效果
- 目前 deno-bridge 还不如 python-epc (EAF和lsp-bridge的基础)的一点是, python-epc 可以传递 sexp 结构体给Emacs, deno-bridge 目前还只是字符串传递
- 对, 应用最好在顶部 try catch 包裹一下, 我原来想过框架加保护, 最后还是想了想, 交给应用开发者自己控制吧。
TypeScript 确实顺手, 大佬可以分享一下 Deno 导入 npm 的方法(虽然我不太喜欢 npm 的依赖), 但是可以临时用一下, 以后 Deno 生态好了也能切换过去的。
感谢大佬回复,1 确实是,当时欠考虑了
分享几个 Deno 的使用经验:
- 使用 NPM packge, 在 packge 名前面添加
npm:
就可以了,只有导出 ES module 的 packages 才能在 Deno 中使用。可能需要--unstable
flag。
import emmet from "npm:emmet";
import Flexsearch from "npm:flexsearch";
- 导入 json 文件
import cssData from "../data/css-data.json" assert { type: "json" };
- 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: |;"));
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"
}
}
- pre commit hook,我用的是这个方案: https://deno.land/x/[email protected]
安裝了deno-bridge-jieba,關閉emacs時,提示需要關閉:
Active processes exist; kill them and exit anyway? (y or n)
請問如何跳過這個提示。
(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模式,走不動了。
可惜了,如果能做很少的适配就能用,就太好了
两个完全接口不一样的编辑器,是不可能直接移植的。