2013-04-07 9 views
5

Chciałbym ustawić funkcję, która ma odpowiednik zaznaczenia całego bufora i uruchomić C-u M-|, aby zapytać o polecenie, przepuścić bufor do polecenia i zastąpić bufor wyjściem. A może ustawić na shift-f5 lub coś podobnego.Polecenie powłoki Emacsa na buforze

Mam tylko tak daleko, jak to:

(defun shell-command-on-buffer() 
    (interactive) 
    (mark-whole-buffer)) 

Jak mogę zrobić z resztą?

Odpowiedz

5

Działa to dla mnie:

(defun shell-command-on-buffer (command) 
    (interactive "sShell command on buffer: ") 
    (shell-command-on-region (point-min) (point-max) command t)) 
+0

Dzięki, spróbowałem. Otwiera to dla mnie nowy bufor - najlepiej, jeśli zastąpi bieżący bufor jako C-u M- | robi. – teppic

+0

Ach, przepraszam, moja pierwsza sugestia ma takie samo zachowanie C-u jak "polecenie-powłoki-na-obszarze". Edytowany, aby lepiej odpowiedzieć na Twoją prośbę – brontitall

+0

Bez powodzenia obawiam się - monituje mnie o polecenie, ale podaje błąd o niewłaściwej liczbie argumentów. – teppic

4

Ten ma tę zaletę, że za pomocą „poleceń shell” historię minibuforze zamiast ogólnej historii minibufora.

(defun shell-command-on-buffer() 
    (interactive) 
    (shell-command-on-region (point-min) (point-max) (read-shell-command "Shell command on buffer: ") t)) 
+1

Należy zauważyć, że polecenie-odczytu zostało wprowadzone do GNU Emacs w wersji 23.1. Jeśli chcesz być kompatybilny ze starszymi wersjami, nie będziesz chciał tego użyć lub będziesz musiał dodać kod, który sprawdza obecność polecenia-odczytu, zanim spróbujesz go wywołać. –

Powiązane problemy