Emacs в режиме структуры автоматически расширяется на grep - PullRequest
3 голосов
/ 02 июля 2011

Я использую outline-mode (в основном в режиме org) в emacs и использую grep-mode для поиска.Что меня раздражает, так это то, что когда я перехожу по ссылкам в буфере grep , сложенные тексты не раскрываются.Есть ли способ автоматизировать это?

Аналогичная проблема заключается в автоматическом развертывании при вызове goto-line, этого можно достичь, определив рекомендацию для функции goto-line, однако defadvice для goto-line и goto-char не работаетдля мышиных событий.

В целом, что происходит, когда я нажимаю на ссылку в emacs?Я попытался отследить стек функций, но не могу найти источник из-за режима событий, используемого в emacs.

Ответы [ 2 ]

2 голосов
/ 09 декабря 2011

Для самой первой части вашего вопроса, вот хитрость, которую я использую.Комментарии следуют.

(setq org-directory "~/TOPDIR-OF-ORG-FILES")

(global-set-key "\C-cog" 'fp-org-grep)

(defun fp-org-grep (regexp)
  (interactive "MOrg grep? ")
  (if (string-equal regexp "")
      (error "Rien à trouver!")
    (require 'grep)
    (unless grep-find-template
      (grep-compute-defaults))
    (let ((grep-find-ignored-directories nil)
          (grep-find-ignored-files nil))
      (rgrep regexp "*.org" org-directory))
    (setq fp-org-isearch-string regexp)
    (save-excursion
      (set-buffer "*grep*")
      (setq next-error-function 'fp-org-grep-next-error))))

(defun fp-org-grep-next-error (n &optional reset)
  (compilation-next-error-function n reset)
  (org-reveal)
  (setq isearch-string fp-org-isearch-string)
  (when (or (null search-ring)
            (not (string-equal (car search-ring) fp-org-isearch-string)))
    (push fp-org-isearch-string search-ring)))

(defvar fp-org-isearch-string "")

Для скорости я сохраняю только три файла Org в своей повестке дня, но определяю команду "Cc og", чтобы рекурсивно просматривать все мои файлы Org.Когда вы переходите к любой записи обычным способом, выявляется окружающий контекст организации.Вы также можете нажать «C», чтобы выделить искомый текст.

Франсуа

1 голос
/ 03 июля 2011

Я знаю, что вы сказали «проблема решена», но если вы в основном используете org-mode, вы должны посмотреть на org-sparse-tree (C-c /), который позволяет вам показывать разреженное дерево элементов, которые соответствуют регулярным выражениям (или состояниям TODO, или рабочие процессы и т. д.).

...