Emacs, изменяя рефлекс цитирования по умолчанию - PullRequest
1 голос
/ 02 сентября 2010

Я бы хотел изменить поведение emacs при использовании reftex, чтобы после нажатия клавиши 'Cc [' и выбора формата цитирования появилось регулярное выражение по умолчанию, которое даст мне цитату, которую я использовал в последний раз (нормальное поведениепо умолчанию слово перед курсором, что редко используется).Я часто цитирую один и тот же источник много раз подряд, особенно когда делаю заметки на одном листе, так что это был бы хороший способ сохранить несколько нажатий клавиш, и именно для этого мы все используем emacs, верно:)

Я знаю немного шумихи, так что я ожидаю, что в конце концов найду способ сделать это сам, но я подумал, что стоило бы спросить вокруг, чтобы посмотреть, сделал ли кто-нибудь еще это первым, нет смыслазаново изобретать колесо.(Если вы хотите эту функцию, но также не знаете, как ее реализовать, дайте мне знать, и я отправлю вам электронное письмо, когда я это сделаю.)

Спасибо

Ответы [ 2 ]

1 голос
/ 05 марта 2011

(ВНИМАНИЕ: Это первый код elisp, который я когда-либо написал, и который имеет длину более 3 строк, это может быть ужасный код. Но, похоже, это работает. Но любые комментарии по стилю или передовым методам были бы наиболее ценными. )

Я решил это! Просто добавьте следующий код в .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 голос
/ 15 февраля 2011

повторное определение 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)))
                                          )
    )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...