2013-04-07 3 views
5

Vorrei impostare una funzione che equivalesse a contrassegnare l'intero buffer e che esegua C-u M-| per richiedere un comando, reindirizzare il buffer al comando e sostituire il buffer con l'output. Quindi magari impostalo su shift-f5 o qualcosa del genere.Comando shell Emacs sul buffer

Ho solo per quanto riguarda questo:

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

Come posso fare il resto?

risposta

5

questo funziona per me:

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

Grazie, l'ho provato. Questo mi apre un nuovo buffer - idealmente mi piacerebbe che sostituisse il buffer corrente, come C-u M- | lo fa. – teppic

+0

Ah, scusa, il mio suggerimento iniziale ha lo stesso comportamento C-u di 'shell-command-on-region'. Modificato per rispondere meglio alla tua richiesta – brontitall

+0

No luck I'm paura - mi suggerisce il comando ma dà un errore di numero errato di argomenti. – teppic

4

Questo ha il vantaggio di utilizzare il "comando di shell" storia minibuffer invece della storia generale minibuffer.

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

Si noti che il comando read-shell è stato introdotto in GNU Emacs nella versione 23.1. Se è necessario essere compatibili con le versioni precedenti, non si vorrà utilizzare questo, o sarà necessario aggiungere codice che controlli la presenza di read-shell-command prima di provare a chiamarlo. –