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


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.