Etkin olmayan çerçevelerde yeniden depolama noktasından fare tıklatmasını önleme


11

Etkin olmayan bir X penceresindeki bir kareye "ilk" tıklamanın, kareyi etkin kılmaktan başka bir etkiye sahip olmasını önlemek istiyorum. Özellikle, noktayı yeniden konumlandırmasını istemiyorum.

Sorun o çerçeve olduğunu tespit etmek için görünmüyor olmasıdır oldu ben klik aldığımda inaktif. Yani aşağıdaki kod her zaman gösterir "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)

Çerçevenin daha önce etkin olmadığını nasıl anlarım?

Ya da, başka bir yerde yapmaya çalıştığım biri zaten var mı?

Not: Etkin olmayan çerçevelerle değil, etkin olmayan pencerelerle ilgili bu diğer sorudan farklı bir şey istiyorum .


Klavye kısayolunu değiştirmek ve istediğinizi yapmak mouse-set-pointiçin kendi işlevinizi oluşturmak istiyorsunuz. C-h kFare tıklatma işlemini yapın ve orada listelenen iki (2) işlevi görün .
hukukçu

Çerçevelerinizin başlık çubuğu ve kenarlığı yok mu? Neden bir tamponu tıklatmak yerine bunları tıklatmıyorsunuz?
Drew

@lawlist: Bunun yardımcı olduğunu düşünmüyorum çünkü up etkinliği daha sonra geliyor. Down olayı sırasında karenin etkin olmadığını bile söyleyemem!
edam

2
@ Çekti: Evet, yapabilirdim, ama kıpır kıpır. Emacs bir terminalde çalıştığında olduğu gibi X penceresine tıklamayı tercih ederim.
edam

Bu gerçekten çok can sıkıcı bir davranış. Fareyi hiç kullanmamaya çalışıyorum. Alt + Tab ve co. çerçeveler arasında geçiş yapmak için.
GergelyPolonkai

Yanıtlar:


1

Bunun Emacs içinden mümkün olduğunu sanmıyorum. Sorun, çerçeveyi tıklattığınız anda pencere yöneticisinin o kareyi seçmesidir. Emacs böylece onu hemen seçilen çerçeve olarak görür.

Kendi test kodunuz bunu gösterir. Herhangi bir mouse-drag-regionveya mouse-set-point(veya başka Emacs işlevine) ilişkin herhangi bir tavsiyede bulunmak herhangi bir fark yaratmayacaktır.

(Belki de X11 seviyesinde yapabileceğiniz bir şey var - dunno.)


Seçilen kareyi, üzerinden izleyemediniz, post-command-hooktüm nokta konumlarını kaydedip seçilen kare değiştiğinde geri döndüremiyor musunuz? Verimli olmazdı, ama işe yarardı.
PythonNut

@PythonNut: Ugh. Olabilir. Dene. post-command-hookbir aletin son çaresi. ;-) Hepimiz birçok şey için kullanıyoruz, ancak ağır bir çekiç.
Drew

1

Tam olarak istediğin şey değil, ama bu benim için iyi çalışıyor:

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

Bu, isteğinizle tam olarak eşleşmiyor, yalnızca çerçeve etkin değil, aynı zamanda pencere de tıklanıyor. Ama bunu faydalı buluyorum. Çift tıklama noktayı taşır, tek tıklama hareket etmez.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.