คำสั่ง Bash เพื่อมุ่งเน้นหน้าต่างเฉพาะ


49

มีวิธีในบรรทัดคำสั่ง bash หรือไม่เพื่อให้ความสำคัญกับหน้าต่างเฉพาะของกระบวนการที่กำลังทำงานอยู่ สมมติว่าฉันรู้ชื่อกระบวนการหมายเลขและสิ่งอื่นใดที่ฉันต้องการ

ตัวอย่างเช่นถ้าฉันมีอินสแตนซ์เดียวของ Firefox ที่ทำงานอยู่ แต่จะย่อเล็กสุด (หรือมีหน้าต่างอื่นอยู่ด้านบน) ฉันต้องการคำสั่ง bash ที่แสดงและให้ความสำคัญกับหน้าต่าง Firefox โดยทำให้เป็นหน้าต่างที่ใช้งานอยู่

คำตอบ:


76

ดูเหมือนว่าคำสั่ง wmctrl จะทำงาน ติดตั้งแล้วสำหรับฉัน แต่มีให้บริการในที่เก็บในกรณีที่ทุกคนต้องการ

wmctrl -l 

แสดงรายการหน้าต่างที่เปิดอยู่ในปัจจุบัน (รวมถึงพาเนล gnome)

wmctrl -a STRING

ให้ความสำคัญกับหน้าต่างที่มี STRING ในชื่อเรื่อง ฉันไม่แน่ใจว่าจะเกิดอะไรขึ้นหากมีมากกว่าหนึ่งหน้าต่างตามเงื่อนไขนั้น
ในกรณีของฉันคำสั่งคือ:

wmctrl -a Firefox

6
ยินดีที่ได้เห็นบางคนกำลังอ่านหนังสือและฉันไม่เพียง แต่เดินเล่นกับตัวเอง =)
Malabarba

1
ลองxdotoolด้วย
Andres Riofrio

สิ่งนี้ยอดเยี่ยมมากสำหรับการตั้งค่าโฟกัสกลับเป็น gdb (ดีบักเกอร์) เมื่อเปิดตัวเป้าหมายการดีบักเกอร์ด้วยหน้าต่างที่ขโมยโฟกัสเช่น kvm ใช้คำสั่ง gdb shell wmctrl -a somethingโดยที่บางสิ่งบางอย่างอยู่ในชื่อเทอร์มินัลการดีบักเกอร์
doug65536

ขอบคุณมากนี่เป็นทองคำบริสุทธิ์ฉันกลัวว่าฉันสูญเสียงานที่ค้างอยู่ทั้งหมดในหน้าต่าง Chrome บางหน้าต่างที่หายไปในพื้นหลังอย่างใดมันก็ใช้ได้!
Osmar

8

การใช้wmctrlร่วมกับxdotoolคุณสามารถสลับโฟกัสไปที่ Firefox จากนั้นดำเนินการกับแป้นพิมพ์หรือเมาส์

ในตัวอย่างนี้:

wmctrl -R firefox && \
  xdotool key --clearmodifiers ctrl+t ctrl+l && \
  xdotool type --delay=250 google && \
  xdotool key --clearmodifiers Tab Return

ขั้นตอนต่อไปนี้จะถูกดำเนินการ:

  1. ให้ความสำคัญกับหน้าต่าง Firefox ที่ตรงกันแรก
  2. เปิดแท็บเบราว์เซอร์ใหม่
  3. วางโฟกัสในแถบที่อยู่
  4. พิมพ์ "google"
  5. แท็บไปยังผลลัพธ์ที่สมบูรณ์แบบอัตโนมัติของเบราเซอร์
  6. กดปุ่ม Return (หรือ Enter)

4

สคริปต์ด้านล่างที่ฉันใช้ใน ubuntu pc เป็นอย่างไร กรณีการใช้งานเป็นเช่นนี้

   $ ./focus_win.sh 1            # focus on a application window that executed at first
   $ ./focus_win.sh 2            # second executed application window

ฉันกำลังใช้งานอยู่หลังจากกำหนดด้วยแป้นพิมพ์ลัดที่กำหนดเอง ctrl + 1, ctrl + 2, ...

cat focus_win.sh

#! /bin/sh

if [ "" = "$1" ] ; then
    echo "usage $0 <win index>"
    exit 1;
fi

WIN_ID=`wmctrl -l | cut -d ' ' -f1 | head -n $1 | tail -n 1`

if [ "" = "$WIN_ID" ] ; then
    echo "fail to get win id of index $1"
    exit 1;
fi
wmctrl -i -a $WIN_ID
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.