¿Es posible enviar la salida de un filtro de proceso al *Messages*
búfer y suprimir que la salida del mensaje aparezca en el área de eco, de modo que pueda usar simultáneamente comandos interactivos sin que la minibuffer-prompt
salida del filtro de subpresión en curso lo borre?
(defun rsync-process-filter (proc string)
(when (not (or
(string-match "files...\r" string)
(string-match "files to consider\n" string)))
(message "%s" string)))
EDITAR (3 de enero de 2015): el siguiente es un enlace a una pregunta similar, sin embargo, aún no he podido hacer que funcione con una cadena de proceso donde la cadena exacta es desconocida; el título del hilo es: Emacs - Deshabilitar algunos mensajes de minibúfer :
minibuffer
process
echo-area
lista de leyes
fuente
fuente
*Messages*
búfer: uno de ellos es la sincronización de proyectos relacionados. Todavía hay un par de cosas que no he probado ( porque pensé que podría haber una solución integrada ), como hacer que el*Messages*
búfer se pueda escribir temporalmenteinhibit-read-only
y usarloinsert
enpoint-max
- No sé si eso aparecerá en el área del eco también. Trabajaré en ello de nuevo esta noche. . .M-x report-emacs-bug
y solicitar esto como una característica?(let ((inhibit-read-only t)) (with-current-buffer (get-buffer-create "*Messages*") (goto-char (point-max)) (insert string)))
y publiqué un borrador de respuesta, que será elegible para aceptación después de que haya transcurrido el período de espera obligatorio en la propia pregunta del usuario. Presenté una solicitud de función conreport-emacs-bug
: debbugs.gnu.org/cgi/bugreport.cgi?bug=19495(messages-buffer)
para obtener el búfer , si sigue con este método, y tenga en cuenta que(point-max)
no siempre será el comienzo de una nueva línea (por ejemplo, usoC-g
).Respuestas:
Puede suprimir la visualización en el minibúfer configurando
minibuffer-message-timeout
a 0.Por ejemplo, uso algo como esto en algunos lugares donde quiero alternar un modo menor mientras estoy en un indicador de minibúfer (como ido find-file) sin ser interrumpido por un mensaje de 'modo habilitado':
fuente
(let ((minibuffer-message-timeout 0)) (message "%s" string))
pantallas fijas en el área de eco / minibúfer al escribir funciones interactivas comoexecute-extended-command
oswitch-to-buffer-other-window
, es decir, el mensaje y las finalizaciones sugeridas se borran con los mensajes de salida del proceso.Primer borrador preliminar (3 de enero de 2015): borrador inicial revisado basado en el útil comentario de @phils sobre el uso de la función
messages-buffer
para localizar o crear el búfer apropiado (y ponerlo enmessages-buffer-mode
); y, agregó una verificación de sipoint-max
está al comienzo de la línea (si no, inserte una nueva línea antes de insertar la cadena del mensaje).EDITAR (4 de enero de 2015): hay situaciones en las que la cadena insertada no necesariamente termina en una nueva línea, y la función
message
no tiene una comprobación para asegurarse de que está al comienzo de una nueva línea, por lo que nos ocupamos de eso en esta función Por lo tanto, en cualquier punto cuandomessage
inserte una nueva línea, dicha línea comenzará a la izquierda del búfer.fuente
Ir a través de la cadena de documentos
message
parece que debería ser posible lograr lo que desea llamando al mensaje con unnil
argumento inmediatamente después de llamarmessage
con el contenido deseado. De la cadena de documentos demessage
Entonces, modificar su función a algo como lo siguiente debería funcionar
Lo probé haciendo lo siguiente
Y parece funcionar
fuente
*Messages*
búfer y luego se llama al comando interactivoexecute-extended-command
, muestra lo siguiente: el mensaje interactivo (es decir,M-x
y cualquier finalización parcial) y la salida del proceso, es decir, los dos cambian y hacia adelante a la velocidad de la luz, pero el parpadeo entre los dos es perceptible. Este parece ser el caso porque el proceso particular en cuestión es escupir constantemente nuevos mensajes, y ese nuevo mensaje se muestra durante una fracción de segundo en el área de eco.