Discussion:
[emacs] pre/post command beim buffer Schreiben?
(zu alt für eine Antwort)
Ulli Horlacher
2014-05-27 09:48:39 UTC
Permalink
Gibts beim emacs eine Konfigurationsmoeglichkeit um vor bzw nach dem
buffer Schreiben ein bestimmtes shell-Kommando auszufuehren?

Bei vim geht das beispielsweise so via .vimrc :

autocmd BufWritePre * execute '! vv -s ' . shellescape(@%)
autocmd BufWritePost * execute '! vv -b ' . shellescape(@%)
--
Ullrich Horlacher Informationssysteme und Serverbetrieb
Rechenzentrum IZUS/TIK E-Mail: ***@tik.uni-stuttgart.de
Universitaet Stuttgart Tel: ++49-711-68565868
Allmandring 30a Fax: ++49-711-682357
70550 Stuttgart (Germany) WWW: http://www.tik.uni-stuttgart.de/
Tim Landscheidt
2014-05-27 10:01:56 UTC
Permalink
Post by Ulli Horlacher
Gibts beim emacs eine Konfigurationsmoeglichkeit um vor bzw nach dem
buffer Schreiben ein bestimmtes shell-Kommando auszufuehren?
before-save-hook/after-save-hook und dann shell-command*
oder die komplexeren Prozessfunktionen.

Tim
Ulli Horlacher
2014-05-27 12:14:11 UTC
Permalink
Post by Tim Landscheidt
Post by Ulli Horlacher
Gibts beim emacs eine Konfigurationsmoeglichkeit um vor bzw nach dem
buffer Schreiben ein bestimmtes shell-Kommando auszufuehren?
before-save-hook/after-save-hook und dann shell-command*
oder die komplexeren Prozessfunktionen.
Das klingt ja einfach :-)

Was muss ich dann konkret ins .emacs init-file schreiben?
Vor dem buffer-save soll 'vv -s $filename' und danach 'vv -b $filename'
ausgefuehrt werden.
--
Ullrich Horlacher Informationssysteme und Serverbetrieb
Rechenzentrum IZUS/TIK E-Mail: ***@tik.uni-stuttgart.de
Universitaet Stuttgart Tel: ++49-711-68565868
Allmandring 30a Fax: ++49-711-682357
70550 Stuttgart (Germany) WWW: http://www.tik.uni-stuttgart.de/
Ulli Horlacher
2014-05-27 23:19:14 UTC
Permalink
Post by Ulli Horlacher
Post by Tim Landscheidt
before-save-hook/after-save-hook und dann shell-command*
oder die komplexeren Prozessfunktionen.
Was muss ich dann konkret ins .emacs init-file schreiben?
Vor dem buffer-save soll 'vv -s $filename' und danach 'vv -b $filename'
ausgefuehrt werden.
Habs selber rausgekriegt:

(add-hook 'before-save-hook
(lambda () (shell-command (concat "vv -s " (buffer-file-name)))))
(add-hook 'after-save-hook
(lambda () (shell-command (concat "vv -b " (buffer-file-name)))))

Scheint auch zu funktionieren :-)

Siehe dazu: http://fex.rus.uni-stuttgart.de/fstools/vv.html
--
Ullrich Horlacher Informationssysteme und Serverbetrieb
Rechenzentrum IZUS/TIK E-Mail: ***@tik.uni-stuttgart.de
Universitaet Stuttgart Tel: ++49-711-68565868
Allmandring 30a Fax: ++49-711-682357
70550 Stuttgart (Germany) WWW: http://www.tik.uni-stuttgart.de/
Michael Albinus
2014-05-28 07:49:43 UTC
Permalink
Post by Ulli Horlacher
Post by Ulli Horlacher
Was muss ich dann konkret ins .emacs init-file schreiben?
Vor dem buffer-save soll 'vv -s $filename' und danach 'vv -b $filename'
ausgefuehrt werden.
(add-hook 'before-save-hook
(lambda () (shell-command (concat "vv -s " (buffer-file-name)))))
(add-hook 'after-save-hook
(lambda () (shell-command (concat "vv -b " (buffer-file-name)))))
Scheint auch zu funktionieren :-)
Fuer lokale Files, ja. Wenn sie keine Sonderzeichen enthalten, die die
Shell verwirren.

Falls jemand Tramp benutzt, wird vv auf dem remote Rechner
ausgefuehrt. Und (buffer-file-name) gibt den Filenamen in Tramp Syntax
aus, was vv sicher verwirren wird.

Du koenntest also schreiben

(add-hook
'before-save-hook
(lambda ()
(shell-command
(concat
"vv -s "
(shell-quote-argument
(or (file-remote-p (buffer-file-name) 'localname))
(buffer-file-name)))))

Garantiert ungetestet :-)
Post by Ulli Horlacher
Siehe dazu: http://fex.rus.uni-stuttgart.de/fstools/vv.html
Hmm. In Emacs wuerde ich das eher mit nativen Mitteln realisieren. Schau
Dir mal die Variablen backup-directory-alist, version-control,
kept-old-versions, kept-new-versions, delete-old-versions und
trim-versions-without-asking an.

Ciao, Michael.
Ulli Horlacher
2014-05-28 09:03:46 UTC
Permalink
Post by Michael Albinus
Post by Ulli Horlacher
(add-hook 'before-save-hook
(lambda () (shell-command (concat "vv -s " (buffer-file-name)))))
(add-hook 'after-save-hook
(lambda () (shell-command (concat "vv -b " (buffer-file-name)))))
Scheint auch zu funktionieren :-)
Fuer lokale Files, ja. Wenn sie keine Sonderzeichen enthalten, die die
Shell verwirren.
Falls jemand Tramp benutzt, wird vv auf dem remote Rechner
ausgefuehrt. Und (buffer-file-name) gibt den Filenamen in Tramp Syntax
aus, was vv sicher verwirren wird.
Du koenntest also schreiben
(add-hook
'before-save-hook
(lambda ()
(shell-command
(concat
"vv -s "
(shell-quote-argument
(or (file-remote-p (buffer-file-name) 'localname))
(buffer-file-name)))))
Garantiert ungetestet :-)
Test bringt:

Wrong number of arguments: #[(argument) "^HÃ ^L
Post by Michael Albinus
Post by Ulli Horlacher
Siehe dazu: http://fex.rus.uni-stuttgart.de/fstools/vv.html
Hmm. In Emacs wuerde ich das eher mit nativen Mitteln realisieren.
vv funktioniert mit vielen Editoren. Das muss ich dann nur einmal warten
statt fuer x Editoren x Scripte schreiben. Ausserdem kann ich kein elisp.
--
Ullrich Horlacher Informationssysteme und Serverbetrieb
Rechenzentrum IZUS/TIK E-Mail: ***@tik.uni-stuttgart.de
Universitaet Stuttgart Tel: ++49-711-68565868
Allmandring 30a Fax: ++49-711-682357
70550 Stuttgart (Germany) WWW: http://www.tik.uni-stuttgart.de/
Michael Albinus
2014-05-28 09:19:04 UTC
Permalink
Post by Ulli Horlacher
Post by Michael Albinus
Garantiert ungetestet :-)
Wrong number of arguments: #[(argument) "^HÃ ^L
Dann eben mit Test (eine Klammer war verrutscht :-)

(add-hook
'before-save-hook
(lambda ()
(shell-command
(concat
"vv -s "
(shell-quote-argument
(or (file-remote-p (buffer-file-name) 'localname)
(buffer-file-name)))))))

Ciao, Michael.

Loading...