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


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.