2010-09-02 61 views
1

我想修改emacs在使用reftex时的行为,以便在按下'Cc ['并选择引用格式后,出现的默认正则表达式就是一个会引用我的引用我最后使用了(正常行为默认为光标前面的单词,这很少有用)。我经常连续多次引用相同的源代码,特别是在单张纸上做笔记的时候,所以这将是一个很好的方法来保存一些按键,这就是我们所有使用emacs的原因,对吧:)Emacs,更改默认的reftex引用

我知道一点小小的诽谤,所以我希望最终我会自己找出一种方法来做到这一点,但我认为值得问问是否有其他人先做过,发明车轮。 (如果你想要这个功能,而且不知道如何去实现它,让我知道,我送你一个电子邮件时,我已经做到了。)

感谢

回答

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)) 

感谢您的帮助莫蒂默,没有您的出发点我从来没有到过这里!

(只是想知道,你的解决方案没有使用的原因是什么defadvice?正如我上面所说的,elisp对我来说都是非常新鲜的东西,因此了解最佳的做事方式会很有用。)

1

后redifining reftex-get-bibkey-default你已经加载了reftex(例如在你的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))) 
             ) 
    ) 
+0

谢谢,但那并不完全符合我想要的。 (但现在我至少有一个想法如何开始!)我希望它默认,以便默认情况下出现的正则表达式不是我上次输入的正则表达式,而是保证我最后引用的论文来作为默认(/只)选择。因此,如果我将“McDowell”作为正则表达式输入,然后继续向下滚动以从我的参考书目文件中选择一个特定的论文,它将默认为“McDowell”,并将该论文的名称作为正则表达式,所以我不必再次滚动它。 – dbdkmezz 2011-02-16 22:09:15

+0

插入的键会干什么? – Mortimer 2011-02-17 09:17:51

+0

不是真的,因为我最后插入的关键字通常会给我很多条目,我会从中选择一个。我希望我最后选择的那个始终是默认的,所以这样做的一种方式是使我的标题,作者和年份使用默认的默认键。 (对于慢速回复,抱歉,未收到关于您评论的电子邮件通知。) – dbdkmezz 2011-03-04 16:22:48