2013-04-20 4 views
7

So sieht der Puffer aus, wenn ich rgrep ausführen. Ich möchte nur meine Ergebnisse sehen - alle anderen Informationen sind bedeutungslos für mich.Header-Informationen aus RGREP/Grep-Ausgabe in Emacs entfernen?

-*- mode: grep; default-directory: "~/.emacs/" -*- 
Grep started at Sat Jan 20 12:42:21 

grep --exclude=.\#\* --exclude=\*.o --exclude=\*\~ --exclude=\*.bin --exclude=\*.lbin --exclude=\*.so --exclude=\*.a --exclude=\*.ln --exclude=\*.blg --exclude=\*.bbl --exclude=\*.elc --exclude=\*.lof --exclude=\*.glo --exclude=\*.idx --exclude=\*.lot --exclude=\*.fmt --exclude=\*.tfm --exclude=\*.class --exclude=\*.fas --exclude=\*.lib --exclude=\*.mem --exclude=\*.x86f --exclude=\*.sparcf --exclude=\*.dfsl --exclude=\*.pfsl --exclude=\*.d64fsl --exclude=\*.p64fsl --exclude=\*.lx64fsl --exclude=\*.lx32fsl --exclude=\*.dx64fsl --exclude=\*.dx32fsl --exclude=\*.fx64fsl --exclude=\*.fx32fsl --exclude=\*.sx64fsl --exclude=\*.sx32fsl --exclude=\*.wx64fsl --exclude=\*.wx32fsl --exclude=\*.fasl --exclude=\*.ufsl --exclude=\*.fsl --exclude=\*.dxl --exclude=\*.lo --exclude=\*.la --exclude=\*.gmo --exclude=\*.mo --exclude=\*.toc --exclude=\*.aux --exclude=\*.cp --exclude=\*.fn --exclude=\*.ky --exclude=\*.pg --exclude=\*.tp --exclude=\*.vr --exclude=\*.cps --exclude=\*.fns --exclude=\*.kys --exclude=\*.pgs --exclude=\*.tps --exclude=\*.vrs --exclude=\*.pyc --exclude=\*.pyo -i -nH -e grep *.el 

    init.el:236:(global-set-key (kbd "s-f") 'rgrep) 
    init.el:237:(global-set-key (kbd "C-f") 'lgrep) 

Grep finished (matches found) at Sat Jan 20 12:42:21 
+0

Alternativ '' '(add-hook‚grep-mode-hook (my-grep-mode-hook() (setq truncate-Linien t) defun) 'my-grep-mode-hook) 'was die Kopfzeilen (und andere Zeilen) wickeln sich nicht um und sind daher weniger aufdringlich. Sie können 'toggle-truncate-lines' aufrufen, wenn Sie die umrahmten Zeilen sehen wollen, aber ich brauche das selten, also finde ich diesen Ansatz sehr angenehm. – phils

Antwort

10

Der Kopfeinsatz wird in einem Aufruf compilation-start tief in rgrep begraben. Es gibt keine einfache Möglichkeit, diese Funktionen vom Einfügen des Headers abzuhalten. Aber Sie können die ersten vier Zeilen des Puffers ziemlich einfach ausblenden, indem Sie einen Ratschlag definieren.

(defun delete-grep-header() 
    (save-excursion 
    (with-current-buffer grep-last-buffer 
     (goto-line 5) 
     (narrow-to-region (point) (point-max))))) 

(defadvice grep (after delete-grep-header activate) (delete-grep-header)) 
(defadvice rgrep (after delete-grep-header activate) (delete-grep-header)) 

Sie können später erweitern diese Zeilen offenbaren wieder mit C-xnw.

Wenn Sie auch lgrep, grep-find und zrgrep beraten möchten, können Sie die defadvice Makros oben mit einem programmatischen wie diese Beratung ersetzen:

(defvar delete-grep-header-advice 
    (ad-make-advice 
    'delete-grep-header nil t 
    '(advice lambda() (delete-grep-header)))) 

(defun add-delete-grep-header-advice (function) 
    (ad-add-advice function delete-grep-header-advice 'after 'first) 
    (ad-activate function)) 

(mapc 'add-delete-grep-header-advice 
     '(grep lgrep grep-find rgrep zrgrep)) 
+0

Ich bin sehr spät zu dieser Party, aber vielen Dank für diese Antwort! –

1

Ein kleiner Zusatz Michael Hoffman Antwort: Wir haben eine kleine Schaltfläche hinzufügen zum grep Puffer, um den verborgenen Text zu wechseln:

(defmacro with-grep-buffer-writable (&rest body) 
    `(save-excursion 
    (with-current-buffer grep-last-buffer 
     (setq buffer-read-only nil) 
     ,@body 
     (setq buffer-read-only t)))) 

(defun hide-grep-header (&rest ignored) 
    "Hides (by narrowing) the first few lines of a grep buffer leaving only 
the results. Additionally, a button is created to toggle the lines." 
    (with-grep-buffer-writable 
    ;;HACK: If we (goto-line 5), the button is inserted *after* the results. 
    (goto-line 4) 
    (end-of-line) 
    (insert "\n") 
    (narrow-to-region (point) (point-max)) 
    (insert-text-button "(...)" 
         'help-echo "Toggle display of grep invocation" 
         'action #'click-show-grep-button))) 

(defun click-hide-grep-button (button) 
    (with-grep-buffer-writable 
    (button-put button 'action #'click-show-grep-button) 
    (narrow-to-region (button-start button) (point-max)))) 

(defun click-show-grep-button (button) 
    (with-grep-buffer-writable 
    (button-put button 'action #'click-hide-grep-button) 
    (widen)) 
    ; HACK: goto-line won't have any effect because of save-excursion 
    (with-current-buffer grep-last-buffer 
    (goto-line 1))) 

(advice-add 'grep :after #'hide-grep-header) 
(advice-add 'rgrep :after #'hide-grep-header)