Lorsque Terminal forks traite, l'application actuelle perd le focus

10

Pendant que j'exécute un programme dans Terminal (ou iTerm2), lorsque le programme bifurque le processus, le bureau OS X bascule le focus de l'application actuelle vers le processus bifurqué. Lorsque cela se produit, le nom du processus bifurqué s'affiche dans la barre de menus OS X.

Cela est particulièrement gênant lors de l'utilisation du mode plein écran car il modifie l'espace de travail lorsque le processus forké reçoit le focus.

Comment puis-je empêcher ce changement de focus de se produire? Ces programmes terminaux interrompent le travail que je fais dans d'autres applications pendant leur exécution.

jdgilday
la source
Quels programmes appelez-vous depuis Terminal?
nohillside
Maven. Le plugin Maven Surefire pour l'exécution de tests unitaires Java utilise cette classe ForkedBooter qui détourne toujours l'attention du terminal
jdgilday
Ce n'est pas seulement Maven mais c'est un de mes exemples concrets
jdgilday
Se pourrait-il que cela ne se produise qu'avec les applications Java?
nohillside
Peut-être. Si je trouve un contre-exemple, je
posterai

Réponses:

5

Dans mon cas, c'est le plugin Maven Failsafe qui a provoqué le vol de focus ennuyeux de la fenêtre de ForkedBooter, et la définition de la JAVA_TOOL_OPTIONSvariable dans .bashrcn'a pas aidé.

Ce correctif s'applique à la fois à Failsafe et à Surefire (bien que dans mon cas, Surefire ne volait pas le focus).

Dans votre pom.xml, ajoutez une <argLine>-Djava.awt.headless=true</argLine>ligne à l'intérieur du <configuration>plug-in de sécurité (et / ou) infaillible.

Il ressemblera à ceci:

<!-- 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
la source
4

Comme l'a suggéré @patrix, il semble que je n'ai ce problème qu'avec les processus Java.

Cette réponse sur StackOverflow semble résoudre le problème

jdgilday
la source
0

Pouvez-vous exécuter votre programme de terminal en arrière-plan? Je pense que cela l'empêchera de se concentrer également sur le bureau. Ajoutez simplement '&' à la fin de la commande du terminal pour exécuter un processus en arrière-plan.

Donc, si votre commande de terminal était:

sh someprocess.sh

changez-le en:

sh someprocess.sh &

Pour mettre un processus d'arrière-plan au premier plan dans le terminal, utilisez la commande:

fg

Tout en un
la source