คุณสามารถเปิดใช้งาน / (นำมาด้านหน้า) emacs โดยใช้ elisp ดั้งเดิมได้หรือไม่? (เช่นเมื่อทำงานในโปรแกรมอื่น)


16

ฉันต้องการบังคับให้ 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

4
ลองraise-frameดู
Tom Tromey

ขอบคุณสำหรับคำแนะนำ การลดขนาดเฟรมใช้งานได้ แต่การเพิ่มเฟรมไม่เพิ่มขึ้นอีกครั้งด้วยเหตุผลบางประการ
Leo Ufimtsev

ฉันเชื่อว่า @TomTromey ถูกต้อง คุณสามารถทดสอบได้ดังนี้ (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 ไม่ได้รับการเพิ่ม ... ความคิด?
Leo Ufimtsev

1
ฉันใช้ emacs รุ่น Gui หรือเปล่า (ไม่ใช่เวอร์ชั่นเทอร์มินัล) คุณใช้ gui ด้วยหรือไม่
Leo Ufimtsev

คำตอบ:


16

หากคุณใช้ระบบ Window คุณอาจใช้งานx-focus-frameได้

บันทึก:

  • x-focus-frame ทำงานได้กับ Windows และ Linux
  • ก่อนที่จะ Emacs 23.1 ใช้w32-focus-frameบน Windows

ใช่แน่นอน. (x-focus-frame ไม่มี) เพิ่มหน้าต่าง emacs เรียบร้อย!
Leo Ufimtsev

1

ไม่ว่าจะทำ(x-focus-frame nil)หรือ(other-frame 0)จะทำ ฉันไม่แน่ใจว่ามีพฤติกรรมที่แตกต่างกันระหว่างสองคนนี้หรือไม่

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