2010-04-01 12 views
6

mi piace per visualizzare le attuali differenze nei file di origine su cui sto lavorando con un comando come:E 'possibile e-mail i contenuti di vim utilizzando HTML

vim <(svn diff -dub) 

Quello che mi piacerebbe davvero essere in grado di fare è mandare via email quella diff colorata. So che Vim può esportare HTML con: TOhtml, ma come faccio a eseguire la pipeline di questo output in un'email html? Idealmente. Mi piacerebbe essere in grado di inviare un diff html con un singolo comando di script della shell.

risposta

10

Di seguito uno-liner produce un file HTML denominato email.html:

diff file1 file2 | vim - +TOhtml '+w email.html' '+qall!' 

È ora possibile utilizzare il codice di Pekka per inviare l'e-mail.

Tuttavia,, credo nell'utilizzo dello strumento giusto per il lavoro giusto - e VIM potrebbe non essere lo strumento giusto qui. Esistono altri evidenziatori e il loro uso è più appropriato qui.

Per esempio, Pygments può essere sfruttata per produrre lo stesso risultato, molto più efficiente e senza problemi:

diff -u report.log .report.log | pygmentize -l diff -f html > email.html 

Si noti che questo produce solo corpo del testo vero e proprio, non il foglio di stile, né lo scaffold HTML circostante. Questo deve essere aggiunto separatamente, ma non è nemmeno difficile. Ecco uno script completo bash per produrre un file HTML minimo valido:

echo '<!DOCTYPE html><html><head><title>No title</title><style>' > email.html 
pygmentize -S default -f html >> email.html 
echo '</style></head><body>' >> email.html 
diff -u report.log .report.log | pygmentize -l diff -f html >> email.html 
echo '</body></html>' >> email.html 

EDIT Nel caso in cui il codice di Pekka non ha funzionato - per quanto mi riguarda - perché non avete le versioni richieste di mail e mutt installato quindi è possibile utilizzare sendmail come segue per inviare l'e-mail HTML:

(echo 'To: [email protected]' 
    echo 'Content-Type: text/html' 
    echo 'Subject: test' 
    echo '' 
    cat email.html) | sendmail -t 

e 'importante lasciare una riga vuota tra l'intestazione e il corpo del messaggio. Inoltre, si noti che non è ovviamente necessario creare il file temporaneo email.html. Basta incollare il resto dei comandi nel posto giusto sopra e cancellare i reindirizzamenti sul file.

+0

hai una definizione interessante di "più efficiente e senza problemi". +1 per come ottenere vim da scrivere e uscire dalla riga di comando. – rampion

+0

è possibile modificare "+ w email.html" in '+%! Mutt' o qualsiasi altra cosa per invocare direttamente il comando mail – rampion

+0

@rampion: L'avvio di Vim in questo modo è in realtà abbastanza inefficiente. I picchi facilmente lo superano.Semplicemente, voglio dire che il flusso di lavoro di Pygments è concettualmente più semplice ("sintassi-evidenzia una diff", invece di "aprire una diff in un editor, eseguire un comando, chiudere l'editor") anche se è più testo Scrivi. Entrambi i metodi hanno i loro meriti, penso. –

1

Io non sono un Linux Guru, ma questo sembra che dovrebbe servire le vostre esigenze per pipe l'output in:

Send an HTML file as email from the command line. (usa mail)

C'è anche una sola riga mutt esempio here:

questo genererà una pura e-mail HTML senza un'alternativa di puro testo - per questo si dovrebbe costruire la posta multi-parte ... Ma forse lo farà per quello che ti serve.

+0

Cura di spiegare il downvote? C'è qualcosa di tecnicamente sbagliato qui? –

Problemi correlati