Quando o Terminal bifurca o processo, o aplicativo atual perde o foco

10

Enquanto estou executando algum programa no Terminal (ou iTerm2), quando o programa bifurca o processo, a área de trabalho do OS X alterna o foco do aplicativo atual para o processo bifurcado. Quando isso acontece, o nome do processo bifurcado é exibido na barra de menus do OS X.

Isso é especialmente irritante ao usar o modo de tela cheia, pois faz com que o espaço de trabalho mude quando o processo bifurcado recebe foco.

Como posso impedir que essa mudança de foco aconteça? Esses programas de terminal estão interrompendo o trabalho que estou fazendo em outros aplicativos enquanto eles são executados.

jdgilday
fonte
Para quais programas você está ligando do Terminal?
nohillside
Maven. O plug-in Maven Surefire para a execução de testes de unidade Java usa este ForkedBooter classe que sempre toma o foco longe do terminal
jdgilday
Não é apenas Maven, mas este é um dos meus exemplos concretos
jdgilday
Será que isso acontece apenas com aplicativos Java?
nohillside
Possivelmente. Se eu encontrar um contra-exemplo, vou postar
jdgilday 27/08

Respostas:

5

No meu caso, foi o Maven Failsafe Plugin que causou o foco irritante da janela roubando o ForkedBooter, e definir a JAVA_TOOL_OPTIONSvariável .bashrcnão ajudou.

Essa correção se aplica ao Failsafe e ao Surefire (embora no meu caso, o Surefire não estivesse roubando o foco).

No seu pom.xml, adicione uma <argLine>-Djava.awt.headless=true</argLine>linha dentro do <configuration>plug-in à prova de falhas (e / ou) do surefire.

Isso parecerá assim:

<!-- 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
fonte
4

Como o @patrix sugeriu, parece que só estou tendo esse problema com os processos Java.

Esta resposta no StackOverflow parece resolver o problema

jdgilday
fonte
0

Você pode executar seu programa de terminal em segundo plano? Acredito que isso manterá o foco também na área de trabalho. Basta adicionar '&' ao final do comando do terminal para executar um processo em segundo plano.

Portanto, se o seu comando do terminal fosse:

sh someprocess.sh

altere para:

sh someprocess.sh &

Para trazer um processo em segundo plano para o primeiro plano no terminal, use o comando:

fg

Tudo em um
fonte