J'ai défini certaines fonctions pour exécuter un processus d'arrière-plan asynchrone à l'aide async-shell-command
de mon .emacs, mais chaque fois que j'exécute les commandes, une nouvelle fenêtre (pas un cadre) est créée et le tampon du processus y est affiché. Comment pourrais-je exécuter la commande sans le tampon "pop up"?
23
start-process
pour une commande sudo? J'ai essayé envelopper mon appel àstart-process
en ,(let ((default-directory "/sudo::")) ... )
mais cela n'a pas fonctionné pour moi."program"
dans ce cas, ce n'est que le nom du programme (par exemple nautilus, caja, firefox) et"arg1 arg2 ..."
doit être dans le quatrième argument positionnel destart-process
. J'ai compris cela en lisant la documentation :)Comme Tikhon l'a mentionné,
(start-process)
c'est la voie à suivre. Dans le cas où vous ne souhaitez pas créer de tampon mais souhaitez tout de même réagir à l'état du processus d'arrière-plan, vous pouvez également l'utiliser(set-process-sentinel)
. Voici un exemple modifié que je prends de monprojector
package:De la description de la fonction Emacs:
Les pages de manuel GNU sur les processus sont assez bonnes pour plus d'informations.
la source
set-process-sentinel
fait un peu plus précisément? J'ai l'idée générale d'avoir une fonction qui gère le processus, mais je ne comprends pas tous les détails. Merci!M-x describe-function
et entrez,set-process-sentinel
vous obtiendrez la réponse courte de la documentation Emacs: (set-process-sentinel PROCESS SENTINEL) Donnez à PROCESS la sentinelle SENTINEL; nul par défaut. La sentinelle est appelée en fonction lorsque le processus change d'état. Il obtient deux arguments: le processus et une chaîne décrivant le changement.C-h f
...Il n'est pas nécessaire de modifier la façon dont vous exécutez une commande asynchrone. Emacs a une capacité générique pour vous permettre de contrôler où ou si un tampon apparaîtra, en modifiant une seule structure de données, le
display-buffer-alist
.Dans la solution ci-dessous, vous pouvez voir que la fonction d'action
display-buffer-no-window
(c.-à-d. Pas de fenêtre contextuelle) est définie pour être associée à tout tampon dont le nom commence*Asynchronous Shell Command*
(emacs ajoute un suffixe incrémentiel lorsqu'il est demandé d'en créer plusieurs).Pour voir la liste des autres options d'affichage disponibles, saisissez
C-h f display-buffer
et recherchez la liste des "fonctions d'action".la source