2011-07-01 112 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狀態,或工作流項目等的疏樹)。