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


10

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

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

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


Какие программы вы вызываете из терминала?
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>


0

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

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

sh someprocess.sh

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

sh someprocess.sh &

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

фг

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.