Cuando Terminal bifurca el proceso, la aplicación actual pierde el foco

Mientras ejecuto algún programa en Terminal (o iTerm2), cuando el programa bifurca el proceso, el escritorio OS X cambia el enfoque de la aplicación actual al proceso bifurcado. Cuando esto sucede, el nombre del proceso bifurcado se muestra en la barra de menú de OS X.

Esto es especialmente molesto cuando se usa el modo de pantalla completa, ya que hace que el espacio de trabajo cambie cuando el proceso bifurcado recibe el foco.

¿Cómo puedo evitar que suceda este cambio de enfoque? Estos programas de terminal interrumpen el trabajo que estoy haciendo en otras aplicaciones mientras se ejecutan.

¿Qué programas estás llamando desde la Terminal?
Experto. El complemento Maven Surefire para ejecutar pruebas de unidades Java utiliza esta clase ForkedBooter que siempre desvía el foco de la terminal.
No es solo Maven, pero este es uno de mis ejemplos concretos.
¿Será que solo ocurre con las aplicaciones Java?
Tal vez. Si encuentro un contraejemplo, lo publicaré.
Puedo confirmar que sucede monoen un escenario similar.
También sucede con IntelliJ. Si ejecuto pruebas JUnit desde IntelliJ, la aplicación pierde el foco. ¿Alguien sabe si esto todavía sucede en Mavericks?

Respuestas (3)

En mi caso, fue el Maven Failsafe Plugin el que causó el molesto robo del enfoque de la ventana de ForkedBooter, y configurar la JAVA_TOOL_OPTIONSvariable .bashrcno ayudó.

Esta solución se aplica tanto a Failsafe como a Surefire (aunque en mi caso, Surefire no estaba robando el foco).

En su pom.xml, agregue una <argLine>-Djava.awt.headless=true</argLine>línea dentro de <configuration>para el complemento a prueba de fallas (y / o) seguro.

Se verá así:

<!-- this is inside your <project><build><plugins> block -->
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>${maven.surefire.plugin.version}</version>
    <configuration>
      <includes>
        <include>**/unit/**/*Test*.java</include>
      </includes>
      <!-- prevent the annoying ForkedBooter process from stealing window 
        focus on Mac OS -->
      <argLine>-Djava.awt.headless=true</argLine>
    </configuration>
  </plugin>
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-failsafe-plugin</artifactId>
    <version>${maven.failsafe.plugin.version}</version>
    <configuration>
      <!-- prevent the annoying ForkedBooter process from stealing window 
        focus on Mac OS -->
      <argLine>-Djava.awt.headless=true</argLine>
      <includes>
        <include>**/integration/**/*Test*</include>
      </includes>
    </configuration>
    <executions>
      <execution>
        <goals>
          <goal>integration-test</goal>
          <goal>verify</goal>
        </goals>
      </execution>
    </executions>
  </plugin>

Como sugirió @patrix, parece que solo tengo este problema con los procesos de Java.

Esta respuesta en StackOverflow parece resolver el problema

¿Puedes ejecutar tu programa de terminal en segundo plano? Creo que esto también evitará que se enfoque en el escritorio. Simplemente agregue '&' al final del comando de terminal para ejecutar un proceso en segundo plano.

Entonces, si su comando de terminal fuera:

sh algúnproceso.sh

cambiarlo a:

sh algúnproceso.sh &

Para traer un proceso en segundo plano al primer plano en la terminal, use el comando:

fg