Est-il possible d'envoyer la sortie d'un filtre de processus au *Messages*
tampon et de supprimer cette sortie de message d'apparaître dans la zone d'écho, de sorte que je puisse utiliser simultanément des commandes interactives sans minibuffer-prompt
être effacé par la sortie du filtre de sous-presse en cours?
(defun rsync-process-filter (proc string)
(when (not (or
(string-match "files...\r" string)
(string-match "files to consider\n" string)))
(message "%s" string)))
EDIT (3 janvier 2015): Ce qui suit est un lien vers une question similaire, cependant, je n'ai pas encore pu le faire fonctionner avec une chaîne de processus où la chaîne exacte est inconnue - le titre du fil est: Emacs - Désactiver certains messages du mini-tampon :
minibuffer
process
echo-area
liste des lois
la source
la source
*Messages*
tampon - les projets liés à la synchronisation en font partie. Il y a encore quelques choses que je n'ai pas essayées ( parce que je pensais qu'il y avait peut-être une solution intégrée ), comme rendre le*Messages*
tampon temporairement accessible en écritureinhibit-read-only
et l'utiliserinsert
àpoint-max
- je ne sais pas si cela apparaîtra dans la zone d'écho également. Je vais y travailler à nouveau ce soir. . .M-x report-emacs-bug
et demander cela en tant que fonctionnalité?(let ((inhibit-read-only t)) (with-current-buffer (get-buffer-create "*Messages*") (goto-char (point-max)) (insert string)))
et j'ai publié un projet de réponse, qui pourra être accepté après l'expiration de la période d'attente obligatoire sur la propre question d'un utilisateur. J'ai déposé une demande de fonctionnalité auprès dereport-emacs-bug
: debbugs.gnu.org/cgi/bugreport.cgi?bug=19495(messages-buffer)
pour obtenir le tampon , si vous vous en tenez à cette méthode, et notez que(point-max)
ce ne sera pas toujours le début d'une nouvelle ligne (par exemple, utilisationC-g
).Réponses:
Vous pouvez supprimer l'affichage dans le mini-tampon en réglant
minibuffer-message-timeout
sur 0.Par exemple, j'utilise quelque chose comme ça à quelques endroits où je veux basculer un mode mineur dans une invite de mini-tampon (comme ido find-file) sans être interrompu par un message `` mode activé '':
la source
(let ((minibuffer-message-timeout 0)) (message "%s" string))
toujours des affichages dans la zone d'écho / mini-tampon lors de la saisie de fonctions interactives commeexecute-extended-command
ouswitch-to-buffer-other-window
- c'est-à-dire que l'invite et les compléments suggérés sont effacés par les messages de sortie de processus.Première ébauche (3 janvier 2015): ébauche initiale révisée basée sur le commentaire utile de @phils concernant l'utilisation de la fonction
messages-buffer
pour localiser ou créer la mémoire tampon appropriée (et la placer dansmessages-buffer-mode
); et, ajouté une vérification pour savoir sipoint-max
est au début de la ligne (sinon, insérez une nouvelle ligne avant d'insérer la chaîne de message).EDIT (4 janvier 2015): Il y a des situations où la chaîne insérée ne se termine pas nécessairement par une nouvelle ligne, et la fonction
message
n'a pas de vérification pour s'assurer qu'elle se trouve au début d'une nouvelle ligne, donc nous prenons soin de cela dans cette fonction. Ainsi, à tout moment oùmessage
insère une nouvelle ligne, cette ligne commencera à gauche de la mémoire tampon.la source
En parcourant la docstring,
message
il semble qu'il devrait être possible d'atteindre ce que vous voulez en appelant un message avec unnil
argument immédiatement après avoir appelémessage
avec le contenu souhaité. De la docstring demessage
Donc, modifier votre fonction en quelque chose comme ce qui suit devrait fonctionner
Je l'ai testé en procédant comme suit
Et ça semble marcher
la source
*Messages*
mémoire tampon, puis en appelant la commande interactiveexecute-extended-command
, montre les éléments suivants: l'invite interactive (c'est-à-direM-x
et tout achèvement partiel) et la sortie du processus - c'est-à-dire que les deux commutent en arrière et à la vitesse de la lumière, mais le scintillement entre les deux est perceptible. Cela semble être le cas parce que le processus particulier en cause crache constamment de nouveaux messages et que ce nouveau message est affiché pendant une fraction de seconde dans la zone d'écho.