ป้องกันการคลิกเมาส์ในเฟรมที่ไม่ใช้งานจากจุด reposistioning


11

ฉันต้องการป้องกันการคลิก "ครั้งแรก" บนเฟรมในหน้าต่าง X ที่ไม่ใช้งานไม่ให้มีผลกระทบใด ๆ นอกจากจะทำให้เฟรมใช้งานได้ โดยเฉพาะฉันไม่ต้องการให้เปลี่ยนตำแหน่ง

ปัญหาคือว่าฉันไม่สามารถดูเหมือนจะตรวจสอบว่าเขากรอบก็ไม่ได้ใช้งานเมื่อฉันได้รับการคลิกเมาส์ ดังนั้นรหัสต่อไปนี้จะแสดง"y":

;; detect if frame is active when clicking
(defun my/mouse-drag-region (event)
  (interactive "e")
  (mouse-minibuffer-check event)
  (let* ((window (caadr event))
         (frame (window-frame window)))
    (if (eql frame (selected-frame))
        (print "y")
      (print "n"))))
(global-set-key [down-mouse-1] 'my/mouse-drag-region)

ฉันจะตรวจสอบได้อย่างไรว่าเฟรมไม่ได้ใช้งานมาก่อน

หรือมีใครบางคนประสบความสำเร็จในสิ่งที่ฉันพยายามจะทำที่อื่น?

หมายเหตุ:ฉันกำลังถามหาสิ่งที่แตกต่างจากคำถามอื่นซึ่งเกี่ยวกับหน้าต่างที่ไม่ได้ใช้งานไม่ใช่เฟรมที่ไม่ได้ใช้งาน


คุณต้องการแก้ไขแป้นพิมพ์ลัดmouse-set-pointและสร้างฟังก์ชันของคุณเองเพื่อทำสิ่งที่คุณต้องการ ทำC-h kสิ่งที่คลิกเมาส์และดูสองฟังก์ชั่น (2)ที่ระบุไว้ที่นั่น
กฎหมาย

เฟรมของคุณไม่มีแถบชื่อเรื่องและเส้นขอบใช่ไหม ทำไมคุณไม่คลิกที่เหล่านั้นแทนที่จะคลิกในบัฟเฟอร์?
Drew

@ ลอว์ลิสต์: ฉันไม่คิดว่าจะช่วยได้เพราะมีเหตุการณ์ขึ้นมาในภายหลัง ฉันไม่สามารถบอกได้เลยว่าเฟรมนั้นไม่ทำงานในระหว่างกิจกรรมลง!
edam

2
@ ดึง: ดีฉันทำได้ แต่มันเป็นซอ ฉันต้องการเพียงแค่สามารถคลิกในหน้าต่าง X เช่นเดียวกับที่ฉันสามารถทำได้เมื่อ emacs ทำงานใน terminal
edam

นี่เป็นพฤติกรรมที่น่ารำคาญอย่างมาก ฉันป้องกันมันโดยไม่ใช้เมาส์เลย ใช้ Alt + Tab และร่วม เพื่อสลับระหว่างเฟรม
GergelyPolonkai

คำตอบ:


1

ฉันไม่คิดว่ามันเป็นไปได้จากใน Emacs ปัญหาคือทันทีที่คุณคลิกในเฟรมตัวจัดการหน้าต่างจะเลือกเฟรมนั้น Emacs มองเห็นมันทันทีที่เฟรมที่เลือก

รหัสทดสอบของคุณแสดงให้เห็นสิ่งนี้ ไม่มีการให้คำปรึกษาใด ๆmouse-drag-regionหรือmouse-set-point(หรือฟังก์ชั่น Emacs อื่น ๆ ) จะสร้างความแตกต่าง

(อาจมีบางสิ่งที่คุณสามารถทำได้ในระดับ X11 - ดันโน่)


คุณไม่สามารถติดตามเฟรมที่เลือกผ่านpost-command-hookบันทึกตำแหน่งทั้งหมดและย้อนกลับเมื่อเฟรมที่เลือกเปลี่ยนไปหรือไม่ มันจะไม่มีประสิทธิภาพ แต่มันจะได้ผล
PythonNut

@ PythonNut: ฮึ อาจจะ. ลองมัน. post-command-hookเป็นทางเลือกสุดท้ายของวายร้าย ;-) เราทุกคนใช้มันเพื่อสิ่งต่าง ๆ มากมาย แต่มันเป็นค้อนหนัก
Drew

1

ไม่ใช่สิ่งที่คุณต้องการ แต่สิ่งนี้ทำงานได้ดีสำหรับฉัน:

(global-unset-key [down-mouse-1])   ; no dragging nonsense
(global-set-key [mouse-1] 'mouse-select-window)  ; no setting point

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

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