2010-09-02 4 views
1

Je voudrais modifier le comportement d'emacs en utilisant reftex, de sorte qu'après avoir appuyé sur 'Cc [' et en choisissant un format de citation, l'expression rationnelle par défaut qui apparaît est celle qui me donnera la citation J'ai utilisé le dernier (le comportement normal est de faire défaut au mot avant le curseur, ce qui est rarement utile). Je cite souvent la même source plusieurs fois de suite, en particulier lorsque je fais des notes sur un seul papier, donc ce serait une bonne façon d'enregistrer quelques frappes, et c'est pour ça que nous utilisons tous les emacs, juste :)Emacs, en changeant la référence par défaut du reftex

Je sais un peu de zèle, alors je pense que je finirai par trouver un moyen de le faire moi-même, mais je pensais que ça valait la peine de demander aux autres si quelqu'un d'autre l'avait déjà fait. inventer la roue. (Si vous ne voulez cette fonctionnalité, mais aussi ne sais pas comment y parvenir, laissez-moi savoir et je vous laisse tomber un e-mail quand je l'ai fait.)

Merci

Répondre

1

(AVERTISSEMENT:. Ceci est le premier code elisp que j'ai jamais écrit qui est plus de 3 lignes, il pourrait être terrible code mais il semble travail, mais tous les commentaires sur le style ou les meilleures pratiques seraient les plus appréciés.)

Je l'ai compris! Il suffit d'ajouter le code suivant à .emacs il se comporte exactement comme je l'avais espéré. Si vous n'avez rien cité auparavant, alors il se comporte normalement, sinon la citation par défaut est la dernière utilisée.

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

Merci pour l'aide Mortimer, sans votre point de départ je ne serais jamais arrivé!

(Je me demandais simplement s'il y avait une raison pour laquelle votre solution n'utilisait pas defadvice?) Comme je l'ai dit plus haut, elisp est très nouveau pour moi, donc il serait utile de connaître la meilleure façon de faire.

1

redifining reftex-get-bibkey-default après vous avez chargé reftex (par exemple dans votre crochet de mode AUCTeX) devrait le faire. Le plus simple serait donc:

(defun reftex-get-bibkey-default() (car reftex-cite-regexp-hist)) 

Cependant, cela détruira le comportement par défaut et ne rien retourner si votre histoire est vide, pour garder le « mot précédent au point » le comportement de reftex dans ce cas et utiliser l'histoire, vous pouvez redéfinir la façon suivante:

(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

Merci, mais cela ne fait pas tout à fait ce que je voulais faire. (Mais maintenant j'ai au moins une idée de comment commencer!) Je le veux par défaut de sorte que l'expression rationnelle qui apparaît par défaut n'est pas l'expression rationnelle que j'ai entrée la dernière fois, mais plutôt celle qui garantira que le papier que j'ai cité vient comme sélection par défaut (/ seulement). Donc, si j'ai entré "McDowell" comme regex, mais que j'ai ensuite fait défiler vers le bas pour choisir un papier particulier parmi les nombreux dans mon fichier de bibliographie, il sera par défaut "McDowell" et le nom de ce papier comme regex, donc je n'ai pas besoin de faire défiler pour ça à nouveau. – dbdkmezz

+0

est-ce que la clé insérée le ferait? – Mortimer

+0

Pas vraiment, puisque souvent la clé que j'ai insérée en dernier me donnera beaucoup d'entrées, et j'en aurai choisi une. Je veux que celui que j'ai choisi en dernier soit toujours par défaut, donc une façon de le faire serait de faire le titre, l'auteur et l'année de l'entrée que j'ai utilisée pour la dernière fois par défaut la clé par défaut. (Désolé pour la réponse lente, n'a pas eu une notification par email de votre commentaire.) – dbdkmezz

Questions connexes