gpt4 book ai didi

emacs - 从当前点获取最外层列表

转载 作者:行者123 更新时间:2023-12-04 00:08:44 27 4
gpt4 key购买 nike

如何从 Emacs 缓冲区内的当前位置获取包含该点的最外层列表/s 表达式?
下面举几个例子来说明我想要实现的目标:

示例 1:

(defun xpto(arg)
(+ 2 4)[point])

输出1:

(defun xpto(arg)
(+ 2 4))

示例 2:

(defun [point]xpto(arg)
(+ 2 4))

输出 2:

(defun xpto(arg)
(+ 2 4))

示例 3:

(defun xpto(arg)
(+ 2 4))[point]

输出 3:

NIL

Emacs 是否提供了实现上述行为的“现成”功能?
如果没有,您能指导我采用更简单的方法来完成它吗?

更新 #1

按照建议,我尝试了以下方法:

;; Gets the outermost brackets based on point position
(defun get-outermost-brackets()
(interactive)
(car (last (nth 9 (syntax-ppss)))))


;; Assigns that function to a key
(global-set-key [(control p)] 'get-outermost-brackets)

但是,在按下 CTRL+P 后,无论该点在哪里,我都没有得到任何输出。
我做错了什么?

最佳答案

您正在寻找的是函数 parse-partial-sexp返回 parser state (一个 10 元素的列表!)您可以使用它来确定您的性行为的开始和结束位置。

另一个有用的函数是scan-sexps .

更新#1:

您的函数 get-outermost-brackets 返回最外面的开放括号的位置,不是缓冲区的有用部分,并且该值无论如何都不会显示在回显区域中。

更新#2:

这会将封闭的 sexp 发送到回显区域和 *Messages* 缓冲区:

(defun get-enclosing-sexp (&optional pos)
(interactive)
(message "%s" (save-excursion
(goto-char (car (last (nth 9 (syntax-ppss)))))
(read (current-buffer)))))

如果您想从函数中返回 sexp 而不是仅仅显示它,请删除 message

我的百万呢?

关于emacs - 从当前点获取最外层列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19370089/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com