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

eshell toggle

7 réponses
Avatar
eric
Bonjour,

Je tente d'obtenir une fonction "eshell-toggle" :
à partir d'un source /tmp/prog/essai.pas, je voudrais compiler,
splitter la fenêtre et executer le programme un eshell dans
l'autre buffer.

En fait, je veux automatiser :
M-x pascal-compile ( une fonction compile :))
;; éventuellement
C-x 2
C-x o
;;
M-x eshell
cd /tmp/prog <entrée>
./essai <entrée>

J'ai tenté avec peu de succès de modifier shell-toggle.
Auriez-vous une solution à mon problème ?

--
E.Depardieu
Une base de TeXtes :<http://base.latekexos.org>

7 réponses

Avatar
eric
Le 10/01/2004, Matthieu Moy a écrit :

(E.Depardieu) writes:

J'ai tenté avec peu de succès de modifier shell-toggle.
Auriez-vous une solution à mon problème ?



J'ai déjà modifié shell-toggle pour pouvoir utiliser "term" à la place
de "shell".

Regardes ici

http://www-verimag.imag.fr/~moy/emacs/shell-toggle-patched.el



Merci de ta réponse.
Mais en fait, c'est de cette version dont je dispose et que j'ai un
peu (tenté de ) modifier en remplaçant partout shell par eshell
et (defun shell-toggle-ansi-term () ...) par :

(defun eshell-toggle-ansi-term ()
(eshell))

Ce n'est pas satisfaisant mais faut dire que je comprend mal ce que je
tente :(

Je voudrais, si possible, remplacer le "cd DIR" du make-cd par le nom du
programme.

--
E.Depardieu
Une base de TeXtes :<http://base.latekexos.org>
Avatar
Matthieu Moy
(E.Depardieu) writes:

Regardes ici

http://www-verimag.imag.fr/~moy/emacs/shell-toggle-patched.el



Merci de ta réponse.
Mais en fait, c'est de cette version dont je dispose et que j'ai un
peu (tenté de ) modifier en remplaçant partout shell par eshell
et (defun shell-toggle-ansi-term () ...) par :



Alors,

Regardes ici

http://www-verimag.imag.fr/~moy/emacs/shell-toggle-patched.el





Ça a un peu changé pour l'occasion :-)

(setq 'shell-toggle-launch-shell 'shell-toggle-eshell)
(add-hook 'shell-toggle-goto-shell-hook '(lambda () (interactive)
(insert "ls") (eshell-send-input)))

Par exemple, me met dans un buffer "eshell" et execute la commande
"ls" quand je fais un "shell-toggle".

(Le secret est dans le (eshell-send-input), que tu aurais pu obtenir
d'un C-h c RET dans *eshell*.


A notter aussi la présence d'une commande
M-x shell-toggle-this-is-the-shell-buffer RET
pour quand on a plusieurs shells ouverts.


Et maintenant, ça marche ?

--
Matthieu
Avatar
Matthieu Moy
(E.Depardieu) writes:

Bonjour,



Re-

En fait, je veux automatiser :



Je lis dans tes pensées et ajoute une étape :

M-x pascal-compile ( une fonction compile :))
;; éventuellement
C-x 2
C-x o
;;
M-x eshell
cd /tmp/prog <entrée>
./essai



<Attendre que le programme ai fini de compiler>

<entrée>



J'avais un truc tout sale dans mon .emacs.el pour faire ça, mais je
l'ai mis au propre :

http://www-verimag.imag.fr/~moy/emacs/moy-compilation-schedule-execute.el

Le principe est tout con : Avoir une fonction qui fait prèsque la même
chose que RET, mais qui attends que la compilation soit terminée pour
le faire. (Et ça marche en shell, en eshell, en ansi-term, et même en
gud pour faire du débugage !) (Typiquement à binder sur C-M-RET ou
quelque chose comme ça)

Comme toujours, version initiale, pas trop testée, retours bienvenus.


Matthieu Moy writes:

Regardes ici

http://www-verimag.imag.fr/~moy/emacs/shell-toggle-patched.el





Ça a un peu changé pour l'occasion :-)

(setq 'shell-toggle-launch-shell 'shell-toggle-eshell)
(add-hook 'shell-toggle-goto-shell-hook '(lambda () (interactive)
(insert "ls") (eshell-send-input)))



Donc, dans cette proposition, tu peux remplacer

(eshell-send-input)

par

(moy-compilation-schedule-execute-in-eshell)

--
Matthieu
Avatar
eric
Le 11/01/2004, Matthieu Moy a écrit :


Je lis dans tes pensées et ajoute une étape :

M-x pascal-compile ( une fonction compile :))
;; éventuellement
C-x 2
C-x o
;;
M-x eshell
cd /tmp/prog <entrée>
./essai



<Attendre que le programme ai fini de compiler>

<entrée>





Menteur! J'y avais pas pensé :)

En fait, j'ose même pas dire le genre de programme qui seront
compilés : vraiment pas le temps de même penser au mot café pendant la
compilation :)

J'ai un peu honte que tu perdes du temps sur mon problème, c'est un
peu de la confiture pour un cochon : je suis pas capable de piger :(

Alors j'ai mis dans mon .emacs :

(autoload 'shell-toggle-patched "~/.lisp/shell-toggle-patched"
"Toggles between the *shell* buffer and whatever buffer you are editing."
t)
(autoload 'moy-compilation-schedule-execute "~/.lisp/moy-compilation-schedule-execute"
"Compilation ..." t)

(setq shell-toggle-launch-shell 'shell-toggle-eshell)
;; j'ai viré un quote

(add-hook 'shell-toggle-goto-shell-hook
(lambda () (interactive)
(moy-compilation-schedule-execute-in-eshell)
))

Mais en faisant M-x shell-toggle-patched, j'obtiens :
Autoloading failed to define function shell-toggle-patched

Si ensuite je fais M-x shell-toggle,
eshell est bien lancé, "activé" mais j'obtiens :

Symbol's value as variable is void: compilation-in-progress


Comme toujours, version initiale, pas trop testée, retours bienvenus.



Bon, ben disons que c'est un retour ...
--
E.Depardieu
Une base de TeXtes :<http://base.latekexos.org>
Avatar
Matthieu Moy
(E.Depardieu) writes:

J'ai un peu honte que tu perdes du temps sur mon problème, c'est un
peu de la confiture pour un cochon : je suis pas capable de piger :(



Tu n'est pas le seul à compiler et a executer des programmes ;-)

J'ai juste ajouté le support de eshell dans shell-toggle, et mis au
propre mes fichiers de config !

(autoload 'shell-toggle-patched "~/.lisp/shell-toggle-patched"
"Toggles between the *shell* buffer and whatever buffer you are editing."
t)



(autoload 'shell-toggle "~/.lisp/shell-toggle-patched"
"Toggles between the *shell* buffer and whatever buffer you are editing."
t)

(la fonction s'appelle shell-toggle, et le fichier s'appelle
shell-toggle-patched.el)

(setq shell-toggle-launch-shell 'shell-toggle-eshell)
;; j'ai viré un quote



Oups, je m'étais gourré alors :-(

Mais en faisant M-x shell-toggle-patched, j'obtiens :
Autoloading failed to define function shell-toggle-patched



Normal (cf. ci-dessus)

Si ensuite je fais M-x shell-toggle,
eshell est bien lancé, "activé" mais j'obtiens :

Symbol's value as variable is void: compilation-in-progress



Ah, c'est que la variable compilation-in-progress n'est définie que
quand tu lances ta première compilation.

Solution : M-x compile RET une fois avant "shell-toggle", ou utiliser
la dernière version de moy-compilation-schedule-execute.el. (Qui fait
un (require 'compile) en plus.)

--
Matthieu
Avatar
eric
Encore moi :)

Déjà, merci : shell-toggle fonctionne bien avec eshell et c'est
vraiment pratique.

Il me reste le
(add-hook 'shell-toggle-goto-shell-hook
'(lambda () (interactive)
(insert <??>)
(moy-compilation-schedule-execute-in-eshell)
))

dans lequel je n'arrive pas à remplacer <??> par le nom du buffer
contenant le source sans l'extension.

J'ai essayé (buffer-name), (buffer-file-name) ...

--
E.Depardieu
Une base de TeXtes :<http://base.latekexos.org>
Avatar
Matthieu Moy
(E.Depardieu) writes:

Il me reste le
(add-hook 'shell-toggle-goto-shell-hook
'(lambda () (interactive)
(insert <??>)
(moy-compilation-schedule-execute-in-eshell)
))

dans lequel je n'arrive pas à remplacer <??> par le nom du buffer
contenant le source sans l'extension.

J'ai essayé (buffer-name), (buffer-file-name) ...



Normal : le hook est executé dans le buffer *eshell* ...

Solution :

(defun my-shell-toggle () (interactive)
(let ((filename (file-name-nondirectory
(file-name-sans-extension
(buffer-file-name)))))
(shell-toggle nil)
(insert filename)
(moy-compilation-schedule-execute-in-eshell)))

à peu de chose près, ça devrait marcher ...

--
Matthieu