เมื่อเทอร์มินัลใช้กระบวนการแอปปัจจุบันจะสูญเสียการโฟกัส


10

ขณะที่ฉันใช้งานโปรแกรมบางตัวใน Terminal (หรือ iTerm2) เมื่อโปรแกรมหยุดกระบวนการเดสก์ท็อป OS X จะเปลี่ยนโฟกัสจากแอปพลิเคชันปัจจุบันไปเป็นกระบวนการแยก เมื่อสิ่งนี้เกิดขึ้นชื่อกระบวนการแบบแยกส่วนจะแสดงในแถบเมนู OS X

สิ่งนี้น่ารำคาญเป็นพิเศษในขณะที่ใช้โหมดเต็มหน้าจอเนื่องจากทำให้เวิร์กสเปซเปลี่ยนเมื่อกระบวนการที่แยกได้รับโฟกัส

ฉันจะหยุดสวิตช์โฟกัสนี้ไม่ให้เกิดขึ้นได้อย่างไร โปรแกรมเทอร์มินัลเหล่านี้ขัดจังหวะงานที่ฉันทำในแอปพลิเคชันอื่นในขณะที่ทำงาน


โปรแกรมใดที่คุณโทรจากเทอร์มินัล
nohillside

Maven ปลั๊กอิน Maven Surefire สำหรับการเรียกใช้การทดสอบหน่วย Java ใช้คลาสForkedBooterซึ่งมักจะมุ่งเน้นไปที่เทอร์มินัล
jdgilday

มันไม่ใช่แค่ Maven แต่นี่เป็นหนึ่งในตัวอย่างที่เป็นรูปธรรมของฉัน
jdgilday

เป็นไปได้หรือไม่ที่มันจะเกิดขึ้นกับแอปพลิเคชัน Java เท่านั้น?
nohillside

บางที. หากฉันพบตัวอย่างแบบเคาน์เตอร์ฉันจะโพสต์
jdgilday

คำตอบ:


5

ในกรณีของฉันมันเป็นปลั๊กอิน Maven Failsafe ที่ทำให้เกิดการขโมยโฟกัสของหน้าต่างที่น่ารำคาญของ ForkedBooter และการตั้งค่าJAVA_TOOL_OPTIONSตัวแปรใน.bashrcไม่ได้ช่วยอะไร

การแก้ไขนี้ใช้กับทั้ง Failsafe และ Surefire (แม้ว่าในกรณีของฉัน Surefire ไม่ได้ขโมยโฟกัส)

ในของคุณpom.xmlเพิ่ม<argLine>-Djava.awt.headless=true</argLine>บรรทัดภายใน<configuration>สำหรับปลั๊กอินที่ไม่ปลอดภัย (และ / หรือ) surefire

มันจะมีลักษณะเช่นนี้:

<!-- 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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.