我想在使用reftex时修改emacs的行为,这样在按下'Cc ['并选择引用格式后,出现的默认正则表达式会给我一个我上次使用的引用(正常行为)是默认为光标前的单词,很少使用)。我经常连续多次引用相同的来源,特别是在单张纸上做笔记时,所以这是保存一些按键的好方法,这就是我们所有人都使用emacs,对吧:) p>
我知道一点点口齿不清,所以我希望我最终会找到一种方法来做到这一点,但我觉得值得四处询问是否有其他人先做过,没有意义。 - 发明轮子。 (如果你确实想要这个功能,但也不知道如何实现它,请告诉我,当我完成它时,我会给你发一封电子邮件。)
由于
答案 0 :(得分:1)
reftex-get-bibkey-default
(例如在你的AUCTeX模式挂钩中)应该这样做。最简单的是:
(defun reftex-get-bibkey-default () (car reftex-cite-regexp-hist) )
然而,如果您的历史记录为空,这将破坏默认行为并且不会返回任何内容,在这种情况下保持reftex的“前一个单词点”行为然后使用历史记录,您可以通过这种方式重新定义它:
(defun reftex-get-bibkey-default () (if reftex-cite-regexp-hist
(car reftex-cite-regexp-hist)
(let* ((macro (reftex-what-macro 1)))
(save-excursion
(if (and macro (string-match "cite" (car macro)))
(goto-char (cdr macro)))
(skip-chars-backward "^a-zA-Z0-9")
(reftex-this-word)))
)
)
答案 1 :(得分:1)
(警告:这是我写的第一个超过3行的elisp代码,它可能是可怕的代码。但它似乎有效。但是对风格或最佳实践的任何评论都会受到最高的评价。 )
我已经解决了!只需将以下代码添加到.emacs,它的行为就像我希望的那样。如果您之前没有引用任何内容,则表现正常,否则默认引用是最后使用的。
(defvar reftex-last-citation nil)
(defadvice reftex-citation (after reftex-citation-and-remember-citation activate)
"Save last citation to 'reftex-last-citation after running 'reftex-citation"
(setq reftex-last-citation ad-return-value))
(defadvice reftex-get-bibkey-default (around reftex-just-return-last-citation activate)
"If there is a 'reftex-last-citation then just return that instead of running 'reftex-get-bibkey-default"
(if reftex-last-citation
(setq ad-return-value reftex-last-citation)
ad-do-it))
感谢Mortimer的帮助,没有你的起点,我从未到过这里!
(只是想知道,你的解决方案没有使用defadvice
有什么理由吗?正如我上面暗示的那样,elisp对我来说都是新手,所以了解最好的做法是有用的的东西。)