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

10

Mientras ejecuto algún programa en Terminal (o iTerm2), cuando el programa bifurca el proceso, el escritorio OS X cambia el foco 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 utiliza el modo de pantalla completa, ya que hace que el espacio de trabajo cambie cuando el proceso bifurcado recibe el foco.

¿Cómo puedo detener este cambio de enfoque? Estos programas de terminal están interrumpiendo el trabajo que estoy haciendo en otras aplicaciones mientras se ejecutan.

jdgilday
fuente
¿A qué programas llamas desde la Terminal?
nohillside
Maven El complemento Maven Surefire para ejecutar pruebas de la Unidad Java utiliza esta clase ForkedBooter que siempre aleja la atención del terminal
jdgilday
No es solo Maven, sino que este es uno de mis ejemplos concretos
jdgilday
¿Podría ser que solo sucede con aplicaciones Java?
nohillside
Quizás. Si encuentro un contraejemplo, lo publicaré
jdgilday

Respuestas:

5

En mi caso, fue el complemento Maven Failsafe el que provocó el molesto robo del foco de la ventana de ForkedBooter, y la configuración de 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 foco).

En su pom.xml, agregue una <argLine>-Djava.awt.headless=true</argLine>línea dentro del complemento a <configuration>prueba de fallos (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>
michele b
fuente
4

Como ha sugerido @patrix, parece que solo estoy teniendo este problema con los procesos de Java.

Esta respuesta en StackOverflow parece resolver el problema

jdgilday
fuente
0

¿Puedes ejecutar tu programa de terminal en segundo plano? Creo que esto evitará que se centre también 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 someprocess.sh

cámbielo a:

sh someprocess.sh &

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

fg

Todo en uno
fuente