Gdy Terminal rozwiąże proces, bieżąca aplikacja traci koncentrację

10

Kiedy uruchamiam jakiś program w Terminalu (lub iTerm2), gdy program rozwidla proces, pulpit OS X przełącza fokus z bieżącej aplikacji na rozwidlony proces. Kiedy tak się dzieje, rozwidlona nazwa procesu pojawia się na pasku menu OS X.

Jest to szczególnie denerwujące podczas korzystania z trybu pełnoekranowego, ponieważ powoduje zmianę obszaru roboczego, gdy fokusuje się rozwidlony proces.

Jak mogę zatrzymać to przełączanie ostrości? Te programy terminalowe zakłócają pracę, którą wykonuję w innych aplikacjach podczas ich działania.

jdgilday
źródło
Do jakich programów dzwonisz z terminala?
nohillside
Maven Wtyczka Maven Surefire do uruchamiania testów Java Unit korzysta z tej klasy ForkedBooter, która zawsze odwraca uwagę od terminala
jdgilday
To nie tylko Maven, ale to jeden z moich konkretnych przykładów
jdgilday
Czy to możliwe, że dzieje się tak tylko w przypadku aplikacji Java?
nohillside
Być może. Jeśli znajdę kontrprzykład, opublikuję
jdgilday

Odpowiedzi:

5

W moim przypadku to wtyczka Maven Failsafe spowodowała irytujące kradzież okna w ForkedBooter, a ustawienie JAVA_TOOL_OPTIONSzmiennej .bashrcnie pomogło.

Ta poprawka dotyczy zarówno Failsafe, jak i Surefire (chociaż w moim przypadku Surefire nie kradł ostrości).

W swoim pom.xmldodaj <argLine>-Djava.awt.headless=true</argLine>linię wewnątrz <configuration>wtyczki surefire dla bezpiecznego (i / lub) awaryjnego.

Będzie to wyglądać tak:

<!-- 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
źródło
4

Jak sugeruje @patrix, wydaje mi się, że mam tylko ten problem z procesami Java.

Ta odpowiedź w StackOverflow wydaje się rozwiązać problem

jdgilday
źródło
0

Czy potrafisz uruchomić swój program terminalowy w tle? Wierzę, że dzięki temu nie będzie się koncentrować na komputerze. Wystarczy dodać „&” na końcu polecenia terminalu, aby uruchomić proces w tle.

Więc jeśli twoje polecenie terminalu to:

sh someprocess.sh

zmień na:

sh someprocess.sh &

Aby przenieść proces działający w tle na pierwszy plan w terminalu, użyj polecenia:

fg

Wszystko w jednym
źródło