นี่เป็นอีกวิธีการหนึ่งที่ยึดตามแนวทางของ UNIX!
ตั้งแต่แรกเห็นมันไม่สวยเท่าของคุณ @ t7ko:
xdotool search --onlyvisible --class 'gvim' getwindowpid %@ | xargs -I{} xdotool search --all --pid {} --name 'TODO' getwindowgeometry | sed -r -n 's/.*Position: ([-0-9,+x]+) .*/\1/p'
แต่ทนกับฉัน! มีความงามซ่อนเร้นอยู่บ้าง
ในระยะสั้นนั้น
- มีโครงสร้างแบบเส้นตรงแทนที่จะเป็นโครงสร้างแบบต้นไม้เช่นเดียวกับแบบสองมิติ
- ใช้มากขึ้นไวยากรณ์เปลือกที่รู้จักกันดี
- ไม่ตอบคำถามของคุณจริง: มันตั้งอยู่หน้าต่าง
(ไม่ว่าประเด็นเหล่านี้จะขึ้นอยู่กับบริบทหรือไม่ - ลองเพิกเฉยต่อมุมมองนี้* )
ฉันจะแสดงรหัสเดียวกันในรูปแบบที่มีโครงสร้างมากขึ้นด้านล่างเพื่อให้ง่ายต่อการเข้าใจทีละขั้นตอน
แต่โปรดสังเกตว่าการเยื้องคือการอธิบายคำสั่ง - มันไม่ได้ระบุการซ้อนหรือดังนั้นทั้งหมดยังคงเป็นไปป์ไลน์ UNIX เชิงเส้น
คำสั่งเดียวกันเพียงแยกหลังไพพ์ ( |
):
xdotool search --onlyvisible --class 'gvim' getwindowpid %@ |
xargs -I{} xdotool search --all --pid {} --name 'TODO' getwindowgeometry |
sed -r -n 's/.*Position: ([-0-9,+x]+) .*/\1/p'
คำสั่งเต็มรูปแบบดังที่แสดงไว้ด้านบนให้ตำแหน่งพิกเซลของgvim
หน้าต่างส่งคืนพิกัดพิกเซลที่สัมพันธ์กับมุมซ้ายบนของหน้าจอ (อาจเป็นเสมือนจริง) ในx,y
ปัจจุบันเช่น42,433
, ชอบหรืออาจเป็น-5375,-3809
เมื่อหน้าจอเสมือนสี่หรือสี่หน้าจอแรก และอันที่หนึ่งอยู่ด้านขวามือ
สำหรับตอนนี้ฉันจะย่อคำสั่งเพื่อหา ID หน้าต่าง X11 เท่านั้น - นั่นอาจเป็นสิ่งที่ OP ต้องการจริงๆ แต่ก็ไม่แน่ใจว่า:
ไพพ์ไลน์คำสั่งแบบย่อ, คำสั่งเชลล์แยกจากกันในแต่ละบรรทัด:
xdotool search --onlyvisible --class 'gvim' getwindowpid %@ |
xargs -I{} xdotool search --all --pid {} --name 'TODO'
ตอนนี้มันเริ่มอ่านได้:
xdotool \
search --onlyvisible --class 'gvim' \
getwindowpid %@ |
xargs -I{} \
xdotool search --all --pid {} --name 'TODO'
xdotool
คำสั่งsearch
ที่ใช้ในการค้นหาหน้าต่างกับ " ระดับ " gvim
ออกจากหน้าต่างออกบาง "ภายใน" ผลลัพธ์ถูกแสดงรายการเป็นPID
's (ตัวระบุกระบวนการ)
สำหรับแต่ละPID
, xargs
วิ่งอีกxdotool search
การตรวจสอบ "ชื่อ" สำหรับรูปแบบตัวอย่างของเราTODO
- PID
หลังจากการตรวจสอบสำหรับ
(ในกรณี: บรรทัดที่ลงท้ายด้วย\
- เรียกว่าสายต่อเนื่อง - จำเป็นต้องลงท้ายด้วย\
และไม่มีช่องว่างก่อน newline)
กลับไปที่คำสั่งดั้งเดิม:
xdotool \
search --onlyvisible --class 'gvim' \
getwindowpid %@ |
xargs -I{} \
xdotool \
search --all --pid {} --name 'TODO' \
getwindowgeometry |
sed -r -n 's/.*Position: ([-0-9,+x]+) .*/\1/p'
ส่วนที่เหลือแสดงรายละเอียดบางอย่างเกี่ยวกับหน้าต่างรวมถึงตำแหน่ง sed
ตรงกับคำสั่งและผลตอบแทนเพียงx,y
ค่าตำแหน่ง
ตัวอย่างเช่นการรันคำสั่งด้านบนของหน้าจอเสมือนจริงที่ 16 (จาก 4 คูณ 4) ด้วย "สิ่งที่ต้องทำ" gvim
บนหน้าจอ 1:
$ xdotool search --onlyvisible --class 'gvim' getwindowpid %@ | xargs -I{} xdotool search --all --pid {} --name 'TODO' getwindowgeometry | sed -r -n 's/.*Position: ([-0-9,+x]+) .*/\1/p'
-7653,-4732
*) คำเตือน: ฉันชอบรหัสของ @ t7ko มาก!
xdotool
ห่วย ... นี่เป็นการดำเนินการที่ง่ายและไม่มีวิธีที่จะทำได้อย่างหรูหรา