我实现了一个小函数,它解析SQL INSERT语句并在光标位于列名上时突出显示列值,反之亦然.
然后我想添加一种在列名和列值之间快速跳转的可能性.我在实现中使用了push-mark,因此我可以使用Cx Cx(交换点和标记)跳转.它也有效,唯一令我困扰的是elisp doc,它说
新手Emacs Lisp程序员经常尝试将标记用于错误的目的.标记保存了一个位置,方便用户使用.大多数编辑命令不应改变标记.
我对马克的使用 - 这是正确的吗?或者什么是更好的解决方案?
考虑点的位置的类比:用户只需要在发出点移动命令时移动点.如果像字体锁定这样的随机操作移动了这一点,那将会非常烦人.因此建议将函数体包装起来(save-excursion ...)
.
如果您的函数为用户明确设置了标记,那很好.(在这种情况下,我建议调用你的函数sql-mark-column-value
,以明确设置标记是它所做的事情之一.)你引用的文档的要点是命令不应该由于做某事而偶然设置标记其他.
如果您的函数恰好在用户将指针放在SQL语句中的列名称时设置标记,那可能不太方便.想象一下某人试图剪切或复制SQL语句的一个用例; 每当他们试图在声明中移动点时,他们的标记就会被破坏!对于此用例,您可能希望提供单独的命令,sql-goto-column-value
而不是依赖exchange-point-and-mark
.
当然,如果这纯粹是为了您自己的使用,那么任何事情都会发生.