Когда Терминал разветвляется, текущее приложение теряет фокус

10

Пока я запускаю какую-то программу в Терминале (или iTerm2), когда программа разветвляет процесс, рабочий стол OS X переключает фокус с текущего приложения на разветвленный процесс. Когда это происходит, имя разветвленного процесса отображается в строке меню OS X.

Это особенно раздражает при использовании полноэкранного режима, так как вызывает изменение рабочей области, когда разветвленный процесс получает фокус.

Как я могу остановить это переключение фокуса? Эти терминальные программы прерывают работу, которую я выполняю в других приложениях, пока они работают.

jdgilday
источник
Какие программы вы вызываете из терминала?
nohillside
Maven. Плагин Maven Surefire для запуска модульных тестов Java использует этот класс ForkedBooter, который всегда отвлекает внимание от терминала
jdgilday
Это не просто Maven, но это один из моих конкретных примеров
jdgilday
Может ли быть так, что это происходит только с приложениями Java?
nohillside
Может быть. Если я найду контрпример, я
выложу

Ответы:

5

В моем случае это был плагин Maven Failsafe, который вызвал раздражающую кражу фокуса окна ForkedBooter, и установка JAVA_TOOL_OPTIONSпеременной в .bashrcне помогла.

Это исправление относится как к Failsafe, так и к Surefire (хотя в моем случае Surefire не фокусировался).

В вашем pom.xml, добавьте <argLine>-Djava.awt.headless=true</argLine>строку внутри <configuration>для безотказного (и / или) надежного плагина.

Это будет выглядеть так:

<!-- 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>
Микеле Б
источник
4

Как предположил @patrix, похоже, у меня проблема только с процессами Java.

Этот ответ в StackOverflow, кажется, решает проблему

jdgilday
источник
0

Можете ли вы запустить свою терминальную программу в фоновом режиме? Я считаю, что это не позволит сосредоточиться на настольном компьютере. Просто добавьте '&' в конец команды терминала, чтобы запустить процесс в фоновом режиме.

Итак, если ваша команда терминала:

sh someprocess.sh

измените это на:

sh someprocess.sh &

Чтобы вывести фоновый процесс на передний план в терминале, используйте команду:

фг

Все в одном
источник