¿Cómo puedo detectar que el modo de compilación está esperando entrada?

8

Esto a menudo me hace tropezar cuando construyo núcleos de Linux. Patearé una compilación y después de un tiempo me doy cuenta de que no está completa. Lo que generalmente sucede es que la configuración predeterminada ha cambiado, está esperando la entrada del usuario en la ventana de compilación. Por ejemplo, encuentro la ventana de compilación detenida en lo siguiente:

-*- mode: compilation; default-directory: "~/lsrc/kvm/kernel-v8.build/" -*-
Compilation started at Tue Nov 25 10:34:20

cd /home/alex/lsrc/kvm/kernel-v8.build && ARCH=arm64 make -j9
  GEN     ./Makefile
scripts/kconfig/conf --silentoldconfig Kconfig
*
* Restart config...
*
*
* File systems
*
Second extended fs support (EXT2_FS) [Y/n/m/?] y
  Ext2 extended attributes (EXT2_FS_XATTR) [N/y/?] n
  Ext2 execute in place support (EXT2_FS_XIP) [N/y/?] n
Ext3 journalling file system support (EXT3_FS) [Y/n/m/?] y
  Default to 'data=ordered' in ext3 (EXT3_DEFAULTS_TO_ORDERED) [N/y/?] n
  Ext3 extended attributes (EXT3_FS_XATTR) [N/y/?] n
The Extended 4 (ext4) filesystem (EXT4_FS) [Y/n/m/?] y
  Ext4 POSIX Access Control Lists (EXT4_FS_POSIX_ACL) [N/y/?] n
  Ext4 Security Labels (EXT4_FS_SECURITY) [N/y/?] n
  EXT4 debugging support (EXT4_DEBUG) [N/y/?] n
JBD (ext3) debugging support (JBD_DEBUG) [N/y/?] n
JBD2 (ext4) debugging support (JBD2_DEBUG) [N/y/?] n
Reiserfs support (REISERFS_FS) [N/m/y/?] n
JFS filesystem support (JFS_FS) [N/m/y/?] n
XFS filesystem support (XFS_FS) [N/m/y/?] n
GFS2 file system support (GFS2_FS) [N/m/y/?] n
Btrfs filesystem support (BTRFS_FS) [N/m/y/?] n
NILFS2 file system support (NILFS2_FS) [N/m/y/?] n
Dnotify support (DNOTIFY) [Y/n/?] y
Inotify support for userspace (INOTIFY_USER) [Y/n/?] y
Filesystem wide access notification (FANOTIFY) [Y/n/?] y
  fanotify permissions checking (FANOTIFY_ACCESS_PERMISSIONS) [Y/n/?] y
Quota support (QUOTA) [N/y/?] n
Kernel automounter version 4 support (also supports v3) (AUTOFS4_FS) [N/m/y/?] n
FUSE (Filesystem in Userspace) support (FUSE_FS) [Y/n/m/?] y
  Character device in Userspace support (CUSE) [Y/n/m/?] y
Overlay filesystem support (OVERLAY_FS) [N/m/y/?] (NEW) 

Sería útil si pudiera detectar esto programáticamente para poder marcar una notificación en mi línea de modo. ¿Alguna idea de cómo podría detectar esto?

stsquad
fuente

Respuestas:

6

Emacs no puede detectar por qué un proceso secundario está esperando. Se podría esperar, ya que está llamando read()en stdin, pero puede ser que del mismo modo que sólo realizar un cálculo caros, mientras que la optimización de código C.

Sin embargo, lo que puede detectar es si el proceso de compilación ha escrito un mensaje. El modo de compilación se ejecuta compilation-filter-hookcada vez que inserta la salida del proceso de compilación en el búfer de compilación. Usted es libre de agregarle sus propias funciones.

Por ejemplo, podría escribir una función que busque un mensaje en particular en la salida y emita una advertencia:

(defun my-compilation-mode-warn-about-prompt ()
  (save-excursion
    (let ((re '(rx "[" (one-or-more (any "n" "N" "m" "M" "Y" "y") "/") "?]"
                   (optional " (NEW)") (zero-or-more whitespace) buffer-end)))
      (when (re-search-backward re nil 'no-error)
        (lwarn 'emacs :warning "Compilation process in %s seems stalled!"
               (buffer-name))))))

(add-hook 'compilation-filter-hook
          #'my-compilation-mode-warn-about-prompt)

Esto abrirá un búfer de advertencia cada vez que el proceso de compilación imprima un mensaje al final del búfer. La solicitud se reconoce al buscar variaciones de la [Y/n/?]pieza. Yo uso rxpara escribir una expresión regular legible.

Esto debería manejar el caso en el que el proceso de compilación imprime un mensaje y luego espera la entrada. En este caso, la solicitud será el último texto insertado en el búfer.

Puede causar algunos falsos positivos (no lo intenté), pero como es solo una advertencia, estos deberían ser tolerables.

Lunaryorn
fuente
He agregado un ejemplo de salida a mi pregunta.
stsquad
@stsquad Actualicé mi respuesta en consecuencia. Espero que ayude.
Lunaryorn
Creo que puede tener un aparato ortopédico desequilibrado allí.
stsquad
@stsquad Oh, lo siento, parece que no pasó por el canal copy-pasta. Fijo.
lunaryorn