我希望(在TeX相关模式中)波形键可以像往常一样插入自身,如果点在任何东西(特别是线端),但是如果一个点在空间上,我会喜欢波浪线到覆盖它。 (在将某些东西粘贴到TeX源文件中之后,这将是一个非常有用的功能。)我这样做了:
(defun electric-tie ()
"Inserts a tilde at point unless the point is at a space
character, in which case it deletes the space first."
(interactive)
(while (equal (char-after) 32) (delete-char 1))
(while (equal (char-before) 32) (delete-char -1))
(insert "~"))
(add-hook 'TeX-mode-hook (lambda () (local-set-key "~" 'electric-tie)))
我的问题很简单:它是否正确(似乎有效)并且可以做得更好吗? (我假设如果第一个问题的答案是肯定的,后者就是风格问题。)
答案 0 :(得分:3)
如前所述,最好使用“字符”文字而非数字文字。您可以在?
,?\
和?\s
之间进行选择,其中最后一个仅在Emacs-22之后受到支持,但在其他方面是推荐的方式,因为它(正如您所说)“更多容易看见“并且没有风险,空格字符将被填充段落或空白修剪等内容转换为其他内容(或删除)。
您确实可以使用eq
代替equal
,但区别并不重要。
最后,我打电话给(call-interactively 'self-insert-command)
而不是手工插入,但区别并不重要(例如,它会让你用C-u ~
插入3个波浪号。)
答案 1 :(得分:2)
有些观点:
而不是32
使用?
(问号空间)来表达字符文字。
不是在主模式挂钩中定义键,而是在eval-after-load
块中执行。不同之处在于每次使用主模式时都会运行主模式挂钩,但每个主模式只有一个键映射。因此,重复修改其中的密钥毫无意义。
看起来这个命令不应该采用数字参数,但是值得理解交互式规范,以了解如何通过考虑数值参数使您编写的其他命令更加灵活。 / p>
关于您的新修改的另一个注意事项:
你清除周围空间的方法并没有错,但我这样做了:
(defun foo ()
(interactive)
(skip-chars-forward " ")
(delete-region (point) (+ (point) (skip-chars-backward " "))))