Під час обробки вилки терміналу поточна програма втрачає фокус


10

Хоча я запускаю якусь програму в терміналі (або iTerm2), коли програма роздвоює процес, робочий стіл OS X перемикає фокус від поточної програми на процес розщеплення. Коли це відбувається, назва роздвоєного процесу відображається в рядку меню OS X.

Це особливо дратує при використанні повноекранного режиму, оскільки це призводить до зміни робочої області, коли роздвоєний процес отримує фокус.

Як я можу зупинити цей фокус-перемикач від того, що відбувається? Ці термінальні програми переривають роботу, яку я виконую в інших додатках, поки вони працюють.


Які програми ви телефонуєте з Терміналу?
nohillside

Мейвен. Плагін Maven Surefire для запуску тестів Java Unit використовує цей клас ForkedBooter, який завжди відводить фокус від терміналу
jdgilday

Це не просто Мейвен, але це один із моїх конкретних прикладів
jdgilday

Чи може це статися лише з програмами Java?
nohillside

Можливо, Якщо я знайду зустрічний приклад, який я опублікую
jdgilday

Відповіді:


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 &

Щоб вивести фоновий процес на перший план у терміналі, використовуйте команду:

fg

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.