我有一个移动到行尾的功能,但是 当已经在行尾时,回到之前调用它的最后一个点。
这需要将最后一个点的值存储在某处。
目前我将这一点存储在例如(defvar last-point 1)
中,但我认为
封装会更好(好吧,一致性可能因为它仍然会
在外面可见)使用(put 'my-move-end-of-line 'last-point 1)
和(get 'my-move-end-of-line 'last-point)
。
这样做有什么不利之处吗?
答案 0 :(得分:1)
属性比普通变量慢。它们也少用了 那些可能会阅读你的代码的人不太了解。
如果你想明确你的变量是一个内部变量,那么 是一个惯例,用双短划线来命名它 `我 - 最后点”
还要尝试在函数和变量的名称上加上一些前缀 与Emacs中使用的名称没有冲突。
最后,使用属性的主要问题是它们不是 缓冲局部,但你的变量应该在你的例子中:
(defvar my--last-point ())
(make-variable-buffer-local 'my--last-point)
(defun my-last-point ()
(interactive)
(if (and my--last-point (eolp))
(go to my--last-point and set it to nil))
(go to the end of line and set my--last-point))
就像那样,你的函数不会使用来自一个缓冲区的点值 另一个。
答案 1 :(得分:1)
此任务的变量更清晰。当您将信息存储到该符号时,应该使用符号属性(比如使用'禁用属性来禁用命令),这不是真的。
答案 2 :(得分:0)
用作变量的符号在其变量槽中只接受一个值,但启用属性列表,您可以在其中存储多个值。
属性列表可用于将多个品质链接到单个符号上。