gpt4 book ai didi

emacs - 为什么我不应该使用push-mark

转载 作者:行者123 更新时间:2023-12-04 17:42:28 28 4
gpt4 key购买 nike

我实现了一个小函数,它解析 SQL INSERT 语句并在光标位于列名上时突出显示列值,反之亦然。

然后我想添加一种在列名和列值之间快速跳转的可能性。我在我的实现中使用了 push-mark,所以我可以用 C-x C-x (交换点和标记)跳转。它也有效,唯一困扰我的是一个 elisp 文档,它说

Novice Emacs Lisp programmers often try to use the mark for the wrong purposes. The mark saves a location for the user's convenience. Most editing commands should not alter the mark.



我对标记的使用 - 正确吗?或者什么是更好的解决方案?

最佳答案

考虑与点位置的类比:用户在发出点移动命令时只希望点移动。如果像字体锁定这样的随机操作移动了这个点,那将是非常烦人的。因此建议将函数体包装在 (save-excursion ...) 中.

如果您的函数为用户明确设置了标记,那很好。 (在这种情况下,我建议将您的函数称为 sql-mark-column-value 以明确设置标记是它所做的事情之一。)您引用的文档的要点是命令不应因此偶然设置标记做别的事情。

如果您的函数恰好在用户将点放在 SQL 语句中的列名上时设置标记,那可能不太方便。想象一下某人试图剪切或复制 SQL 语句的一部分的用例;每次他们试图在语句中移动点时,他们的标记都会被破坏!对于这个用例,您可能希望提供一个单独的命令,例如 sql-goto-column-value而不是依赖 exchange-point-and-mark .

当然,如果这纯粹是你自己用的,什么都行。

关于emacs - 为什么我不应该使用push-mark,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/577714/

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