Empêchez le clic de la souris dans les cadres inactifs du point de repositionnement

11

Je veux empêcher le "premier" clic sur un cadre dans une fenêtre X inactive d'avoir un effet autre que de rendre le cadre actif. Plus précisément, je ne veux pas qu'il repositionne le point.

Le problème est que je n'arrive pas à détecter qu'il était inactif lorsque je clique sur la souris. Ainsi, le code suivant affiche toujours"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)

Comment puis-je détecter que le cadre était précédemment inactif?

Ou, quelqu'un a-t-il déjà réalisé ce que j'essaie de faire ailleurs?

Remarque: je demande quelque chose de différent de cette autre question , qui concerne les fenêtres inactives, pas les cadres inactifs.

Edam
la source
Vous souhaitez modifier le raccourci clavier mouse-set-pointet créer votre propre fonction pour faire ce que vous voulez. Faites le C-h kclic de souris et voyez les deux (2) fonctions qui y sont répertoriées.
lawlist
Vos cadres n'ont-ils pas une barre de titre et une bordure? Pourquoi ne cliquez-vous pas simplement dessus, au lieu de cliquer dans un tampon?
Drew
@lawlist: Je ne pense pas que cela aide, car l'événement up arrive encore plus tard. Je ne peux même pas dire que le cadre était inactif pendant l'événement down!
edam du
2
@Drew: eh bien, je pourrais, mais c'est fiddley. Je préfère simplement pouvoir cliquer dans la fenêtre X, comme je le peux quand emacs s'exécute dans un terminal.
edam
C'est vraiment un comportement très ennuyeux. Je l'empêche en n'utilisant pas du tout la souris, ie. en utilisant Alt + Tab et co. pour basculer entre les images.
GergelyPolonkai

Réponses:

1

Je ne pense pas que cela soit possible depuis Emacs. Le problème est que dès que vous cliquez dans le cadre, le gestionnaire de fenêtres sélectionne ce cadre. Emacs le voit donc immédiatement comme l'image sélectionnée.

Votre propre code de test le montre. Aucun conseil concernant mouse-drag-regionou mouse-set-point(ou toute autre fonction Emacs) ne fera aucune différence.

(Peut-être que vous pouvez faire quelque chose au niveau X11 - ne sais pas.)

A dessiné
la source
Ne pourriez-vous pas suivre l'image sélectionnée via le post-command-hook, enregistrer toutes les positions des points et les inverser lorsque l'image sélectionnée change? Ce ne serait pas efficace, mais cela fonctionnerait.
PythonNut
@PythonNut: Ugh. Peut être. Essayez-le. post-command-hookest le dernier recours d'un scélérat. ;-) Nous l'utilisons tous pour beaucoup de choses, mais c'est un gros marteau.
Drew
1

Pas exactement ce que vous demandez, mais cela fonctionne bien pour moi:

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

Cela ne correspond pas exactement à votre demande, car non seulement le cadre est activé, mais la fenêtre est également cliquée. Mais je trouve cela utile. Le double clic déplace le point, pas le simple clic.

DaveL
la source