Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

utiliser un script existant dans l'edition de textes sous Emacs

4 réponses
Avatar
JeanMichel.Mermet
Bonjour,

j'=E9dite souvent des textes "=E0 la main" et j'ai souvent de petites
proc=E9dures =E0 effectuer sous emacs. Si elles d=E9passent de simples
"rechercher/remplacer" je ne sais plus faire en lisp. Par contre, je me
d=E9brouille en php et je sais construire des fonctions qui, =E0 partir
du contenu d'une variable, font le traitement dont j'ai besoin.

Alors voil=E0 ce que je voudrais : je s=E9lectionne un bout de texte dans
emacs, je tape un raccourci clavier, ce bout de texte est transmis =E0
un script php effectu=E9 en ligne de commande (je suis sous Mac OS X,
donc c'est "php monscript.php ma_valeur" en ligne de commande). Le
r=E9sultat du traitement remplace alors ma s=E9lection dans emacs... de
fa=E7on transparente.

Voil=E0, c'est un r=E8ve. Quelqu'un saurait comment faire ?

Un grand merci !

Amicalement

4 réponses

Avatar
Matthieu Moy
"" writes:

Bonjour,



Bonjour,

Alors voilà ce que je voudrais : je sélectionne un bout de texte dans
emacs, je tape un raccourci clavier, ce bout de texte est transmis à
un script php effectué en ligne de commande (je suis sous Mac OS X,
donc c'est "php monscript.php ma_valeur" en ligne de commande). Le
résultat du traitement remplace alors ma sélection dans emacs... de
façon transparente.

Voilà, c'est un rève.



Rève éveillé, mon cher ;-)

C-u M-|

(shell-command-on-region avec argument)

--
Matthieu
Avatar
Georges Ko
Matthieu Moy a ecrit :

Voilà, c'est un rève.



Rève éveillé, mon cher ;-)

C-u M-|

(shell-command-on-region avec argument)



En Elisp, ça donnerait un truc comme ça:

(defun jmm:monscript (n)
(interactive "p")
(shell-command-on-region (mark) (point)
(format "php monscript.php %d" n) nil t))

qu'on pourra appeler avec: « Esc ma-valeur M-x jmm:monscript », ou
alors l'affecter à une touche:

(global-set-key [f3] 'jmm:monscript)

ce qui permet d'utiliser: « Esc ma-valeur f3 ».

Si votre monscript.php n'est pas super compliqué, vous pouvez
envisager de le remplacer par du code Elisp.
--
Georges Ko 2005-04-08
Si vous n'etes pas dans ma liste blanche, ajoutez [m2gko] dans le sujet de
votre courrier.
Avatar
Sébastien Kirche
Le 7 avr 2005, Georges Ko a dit :

qu'on pourra appeler avec: « Esc ma-valeur M-x jmm:monscript », ou
alors l'affecter à une touche:

(global-set-key [f3] 'jmm:monscript)

ce qui permet d'utiliser: « Esc ma-valeur f3 ».



Ça marche aussi avec C-u ma-valeur f3 ... mais qu'avec ma-valeur = argument
numérique...

S'il fallait lire une chaîne, je suppose que (interactive "s") devrait
convenir.

--
Sébastien Kirche
Avatar
Matthias
Matthieu Moy écrivait :

(shell-command-on-region avec argument)



Au passage, je signale deux choses qui peuvent ajouter à votre confort
lorsque vous utilisez cette commande.

D'abord, la bibliothèque `shell-command' de Masatoshi Tsuchiya
(http://namazu.org/~tsuchiya/elisp/shell-command.el.) qui ajoute la
complétion automatique pour les saisies en rapport avec les commandes
`shell-command', `grep', `compile', etc.

C'est extrêmement pratique (toutefois sachez que la bibliothèque
`eshell' offre la même fonctionnalité, voir la variable
`eshell-prefer-to-shell').

(require 'shell-command)
(dolist (variable '(shell-command-prompt
shell-command-on-region-prompt
grep-prompt
grep-find-prompt
compile-prompt))
(set variable "[%w]%$ "))
(shell-command-completion-mode 1)

Enfin, le second bidule très utile : le rappel de la commande dans la
première ligne des tampons *Shell Command Output* et consorts.

(defadvice shell-command (after insert-command-comment activate)
"Insert COMMAND as a comment at the top of the output buffer."
;; Alternatives to truncating multi-line commands:
;; 1. Replace each newline with a semicolon.
;; 2. Truncate, but append an ellipsis.
(save-excursion
;; (ad-get-arg 0) == COMMAND
;; (ad-get-arg 1) == OUTPUT-BUFFER
(set-buffer (or (ad-get-arg 1)
"*Shell Command Output*"))
(setq header-line-format
(replace-regexp-in-string "%" "%%"
(substring (ad-get-arg 0)
0
(string-match "n"
(ad-get-arg 0)))
nil t))))

Peut-être que ce bazar arrive par défaut avec les nouvelles versions
d'Emacs.

Cordialement,
--
Matthias