Saya ingin mencegah klik "pertama" pada bingkai di jendela X tidak aktif dari efek apa pun, selain membuat bingkai aktif. Secara khusus, saya tidak ingin mereposisi titik.
Masalahnya adalah bahwa saya tidak dapat mendeteksi bahwa frame dia tidak aktif ketika saya mendapatkan klik mouse. Jadi kode berikut selalu ditampilkan "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)
Bagaimana saya mendeteksi bahwa frame itu sebelumnya tidak aktif?
Atau, sudahkah seseorang mencapai apa yang saya coba lakukan di tempat lain?
Catatan: Saya meminta sesuatu yang berbeda dari pertanyaan lain ini , yaitu tentang windows yang tidak aktif, bukan frame yang tidak aktif.
mouse-set-point
dan membuat fungsi Anda sendiri untuk melakukan apa pun yang Anda inginkan. LakukanC-h k
hal klik mouse dan lihat dua (2) fungsi yang tercantum di sana.Jawaban:
Saya tidak berpikir ini mungkin dari dalam Emacs. Masalahnya adalah segera setelah Anda mengklik di bingkai, manajer jendela memilih bingkai itu. Dengan demikian Emacs segera melihatnya sebagai bingkai yang dipilih.
Kode tes Anda sendiri menunjukkan ini. Tidak ada nasihat tentang salah satu
mouse-drag-region
ataumouse-set-point
(atau fungsi Emacs lainnya) yang akan membuat perbedaan.(Mungkin ada sesuatu yang dapat Anda lakukan di tingkat X11 - tak tahu.)
sumber
post-command-hook
, merekam semua posisi titik dan mengembalikannya ketika bingkai yang dipilih berubah? Itu tidak akan efisien, tetapi itu akan berhasil.post-command-hook
adalah pilihan terakhir dari bajingan. ;-) Kita semua menggunakannya untuk banyak hal, tetapi ini adalah palu yang berat.Bukan apa yang Anda minta, tetapi ini bekerja dengan baik untuk saya:
Ini tidak sesuai dengan permintaan Anda karena tidak hanya bingkai dibuat aktif tetapi juga jendela yang diklik. Tapi, saya menemukan itu berguna. Klik dua kali memindahkan titik, satu klik tidak.
sumber