Je redémarre beaucoup mon emacs. Tout ce que je veux faire est de créer une fonction qui tue les emacs actuels, pour en créer une nouvelle à sa place. Idéalement, cela fonctionnerait également dans un ATS.
terminal-emacs
PythonNut
la source
la source
.emacs.d
, ce qui signifie que je redémarre emacs pour supprimer les déchets que j'ai envoyés dans mon environnement. C'est ce que je fais dans quelques autres cas d'utilisation, mais c'est le plus important.bash
de redémarrer après avoir terminé? Ouvi
? Ou tout autre processus, en règle générale? Non, car cela ne fait pas partie de leurs préoccupations et est traité correctement à l’extérieur. Quoi qu'il en soit, ce que vous voulez vraiment, c'est un moyen de réinitialiser emacs, en effaçant sa VM et en réexécutant votre code init ( sans tuer son processus). Ce serait utile et approprié à Emacs. Je ne sais pas s'il existe, cependant :)bash
à redémarrer avecexec bash
. Je n'ai aucune idée de Vim.emacs -q
Bien sûr, je peux exécuter et résoudre le problème, mais je préfère garder une "bonne" instance en fonctionnement tout le temps lors du piratage de ma configuration, pour des raisons de sécurité.Réponses:
Remarque: J'ai emballé les éléments suivants dans un package
restart-emacs
disponible ici .Voici un autre moyen d’atteindre ce que vous voulez en utilisant du pur elisp (pas vraiment puisque vous comptez sur un shell). Le truc consiste à engendrer un autre processus emacs juste avant que les emacs actuels soient tués.
Le code pour démarrer une version graphique d’emacs est simple. Le code pour démarrer emacs dans un terminal est un peu délicat. Il utilise le fait que vous pouvez passer une chaîne
suspend-emacs
qui serait transmise en tant qu'entrée de terminal au processus parent (le shell). De la documentationDonc, en principe, nous suspendons emacs juste avant de le tuer, disons au shell parent de reprendre les emacs actuellement suspendus (qui vont bientôt disparaître), puis de lancer un autre processus emacs. Notez que cela ne fonctionne pas sur les plates-formes sur lesquelles le terminal emacs peut / ne peut pas réellement suspendre mais démarre un sous-shell, par exemple sur Windows.
la source
sh -c "emacs &"
partir du shell, il s'arrête avec "emacs: standard input is not a tty
". (Quand je le faisM-x restart-emacs
je ne vois même pas ce message d'erreur, Emacs se termine juste.)Autant que je sache, vous ne pouvez pas dire à Emacs de redémarrer après la fin, mais vous pouvez définir le code de sortie de sorte que le processus qui a démarré Emacs puisse détecter que vous voulez redémarrer.
Par exemple, ce script shell redémarre Emacs s'il s'est arrêté avec le code 123.
Ensuite, nous définissons ce
kill-emacs-and-restart
qui oblige Emacs à se terminer avec un code de sortie égal au nombre magique reconnu par le script:Maintenant, si vous exécutez Emacs via ce script, vous pouvez recommencer par
M-x kill-emacs-and-restart
(ou le lier à une séquence de clés).la source
you cannot tell Emacs to re-start after terminating
. Est-ce une limitation technique?exec...
famille (sur les systèmes POSIX, de toute façon). Les fonctions de contrôle de processus Emacs Lisp n'exposent pas de tels appels de bas niveau. Je ne suis pas un expert, alors j'espère que quelqu'un de plus expérimenté interviendra.Volé de manière flagrante sur https://unix.stackexchange.com/questions/114238/is-it-possibe-to-change-parent-shells-working-directory-programmatically
En supposant que j'ai la syntaxe correcte pour incorporer "dans une chaîne, cela devrait le faire."
la source