Emacs outline-mode автоматически расширяет grep

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

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

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


person charles    schedule 01.07.2011    source источник
comment
проблема решена. Я пропустил сообщение от F1-K, в котором говорится, что событие щелчка мыши сопоставлено с функцией compile-goto-error.   -  person charles    schedule 02.07.2011
comment
Лучше добавить замечание о решенной проблеме в качестве ответа и отметить его правильным, чтобы другие люди не беспокоили;)   -  person Mirzhan Irkegulov    schedule 26.10.2011


Ответы (2)


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

(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, но определил команду «C-c o g» для рекурсивного поиска по всем моим файлам Org. Когда вы переходите к любой записи обычными способами, раскрывается окружающий контекст организации. Вы также можете нажать «C-s», чтобы выделить искомый текст.

Франсуа

person icule    schedule 09.12.2011

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

person SkydiveMike    schedule 03.07.2011