比方说bounds-of-thing-at-point
之类会接受一个叫thing的参数,这个thing在不同语言中的定义是什么样实现的?
THING 是一个有 'end-op
和 'beginning-op
property 分別都是个 function 的 symbol。
;; Buffer
(put 'buffer 'end-op (lambda () (goto-char (point-max))))
(put 'buffer 'beginning-op (lambda () (goto-char (point-min))))
这玩意本身不是编程语言敏感的。想要编程语言敏感那就在 'end-op
和 'beginning-op
里写判斷当前 major mode 的好了
m-x info c-s elisp 回车
c-s syntax-table
也就是说这个东西是每个buffer独立的吗?
嗯,就是遇到了在js2-mode里面list的判断不太对,我自己的模式依赖这些东西,所以想针对一些具体的模式调整一下。
否定的。这个东西是全局都是同一个设置的。
原来如此,非常感谢!
还没有完全搞明白,在看为什么js2-mode里面,()
这样的东西不会被当作是一个list。
在官方定案前,你可以先行体验一下这个 tree-sitter 动态模块 elisp-tree-sitter/README.md at master · emacs-tree-sitter/elisp-tree-sitter · GitHub
这个tree-sitter支持的语言好少。
⋊> ls ~/.tree-sitter/bin/
agda.so css.so javascript.so php.so swift.so
bash.so fluent.so jsdoc.so python.so tsx.so
c.so go.so json.so ruby.so typescript.so
c_sharp.so html.so julia.so rust.so
cpp.so java.so ocaml.so scala.so
Lisp系的都没有…
- GitHub - colelawrence/lisp: Lisp parser and interpreter in Rust using Tree-Sitter
- GitHub - death/cl-tree-sitter: Tree-Sitter bindings for Common Lisp
- GitHub - oakmac/tree-sitter-clojure: Clojure / ClojureScript grammar for tree-sitter
- GitHub - tautologico/tree-sitter-racket: Tree-sitter parser for the Racket programming language
- https://www.npmjs.com/package/tree-sitter-mit-scheme
lisp系直接用自带的forward-sexp就行