2011-07-01 61 views
3

我在emacs中使用outline-mode(主要是组织模式),并使用grep-mode进行搜索。 让我感到懊恼的是,当我按照grep缓冲区中的链接时, 折叠文本不能展开。有没有办法让它自动化?Emacs轮廓模式自动扩展grep

类似的问题是,当goto-line被调用时,这个 可以通过定义一个咨询意见,转到线功能, 然而,defadvice为goto-linegoto-char不适合 鼠标事件的工作来实现自动展开。

更一般地说,当我点击emacs中的链接时会发生什么?我试图 追踪功能堆栈,但由于emacs中使用的事件模式 而无法找到源。

+1

问题解决了。我忽略** F1-K **的消息,它告诉鼠标点击事件映射到** compile-goto-error **函数。 – charles

+0

最好将“解决问题”的评论作为答案添加,并标记为其他人不要打扰的正确答案;) –

回答

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

对于速度,我只有三个组织的文件保存到我的日程,但定义一个“C-C 0 G”命令,通过我的所有组织文件的grep递归。当您通过常规方式进入任何入场时,组织环境背景就会显现出来。您也可以点击“C-s”突出显示搜索到的文字。

François

1

我知道你说的“问题解决”,但如果你主要是利用org-mode你应该看看org-sparse-treeC-c /),它可以让你表现出相匹配的正则表达式(或TODO状态,或工作流项目等的疏树)。