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.


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>


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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.