ฉันต้องการบังคับให้ emacs เปิดใช้งานถูกซื้อให้เป็นแบบ frond และโฟกัส 'ขโมย' ในบางสถานการณ์ เช่นเมื่อฉันเรียนจบ Pomodoro หรือในระหว่างการแจ้งเตือนการนัดหมายที่สำคัญ
ตอนนี้ฉันกำลังมองหาวิธี 'ดั้งเดิม' ที่จะทำเช่นนั้นเพียงเพื่อลดการพึ่งพาจากภายนอก (เฉพาะลีนุกซ์ก็โอเคสำหรับฉันข้ามแพลตฟอร์มน่าจะดีกว่า)
เทคนิคนี้เป็นไปได้จาก emacs ภายในหรือไม่
[แก้] วิธีแก้ไข:
หากใช้ GUI สิ่งนี้จะทำงานได้ดี:
(x-focus-frame nil)
[ด้วยเหตุผลทางประวัติศาสตร์ ... ] ฉันได้ลอง:
การมองเห็นเฟรม (ไม่ทำงาน)
(make-frame-visible)
และนอกจากนี้ยังมี:
(make-frame-invisible)
(make-frame-visible)
แต่สิ่งเหล่านี้ดูเหมือนจะใช้ได้เฉพาะเมื่อ Emacs เปิดใช้งานแล้ว
การเพิ่มเฟรม (ไม่ทำงาน)
กรอบด้านล่างดูเหมือนจะซ่อน emacs จริง
(lower-frame)
แต่การเพิ่มเฟรมจากตัวจับเวลาไม่ได้ คือไม่มีอะไรเกิดขึ้น
(raise-frame)
ดูเหมือนว่า 'เปิดใช้งาน emacs' หายไปก่อนที่จะเพิ่ม
[หมายเหตุเกี่ยวกับโซลูชันภายนอก]
ปัจจุบันเป็น (วิธีแก้ปัญหา / การแก้ปัญหา?) ฉันใช้ elisp เล็กน้อย:
(call-process "activateEmacs")
และสคริปต์ทุบตีที่เกี่ยวข้อง: (คุณอาจต้องติดตั้ง xdotool บนระบบของคุณก่อน)
#!/bin/sh
sleep 0.5
xdotool search --onlyvisible --class emacs windowactivate
(defvar my-timer (run-with-idle-timer 5 t (lambda () (raise-frame))))
ขั้นแรกให้สร้างจับเวลาไม่ได้ทำงาน: M-x (suspend-frame)
ระงับกรอบด้วย ใน 5 วินาทีเฟรมนั้นจะปรากฏขึ้นอีกครั้ง
(suspend-frame)
รออยู่โดยไม่คลิกเข้าไปในหน้าต่างอื่น แต่ถ้าคุณระงับเฟรมและไปทำงานในแอปพลิเคชันอื่นแสดงว่า emac ไม่ปรากฏขึ้นอีกครั้ง อย่างน้อยไม่ได้อยู่ในระบบของฉัน (fedora 21 พร้อม Mate desktop) ตัวอย่างง่ายๆคือ: : (run-at-time "5 sec" nil '(lambda () (interactive) (message "trying to raise frame") (raise-frame)))
เรียกใช้และแท็บ alt ไปยังแอปพลิเคชันอื่น ข้อความจะปรากฏในบัฟเฟอร์ แต่ emacs ไม่ได้รับการเพิ่ม ... ความคิด?
raise-frame
ดู