Impedisci il clic del mouse nei riquadri inattivi dal punto di riposizionamento


11

Voglio impedire che il "primo" clic su un fotogramma in una finestra X inattiva abbia alcun effetto, se non quello di rendere attivo il fotogramma. In particolare, non voglio che si riposiziona punto.

Il problema è che non riesco a rilevare che il frame era inattivo quando ricevo il clic del mouse. Quindi il seguente codice mostra sempre"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)

Come posso rilevare che il frame era precedentemente inattivo?

Oppure qualcuno ha già realizzato ciò che sto cercando di fare altrove?

Nota: sto chiedendo qualcosa di diverso rispetto a questa altra domanda , che riguarda le finestre inattive, non i frame inattivi.


Vuoi modificare la scorciatoia da tastiera mouse-set-pointe creare la tua funzione per fare quello che vuoi. Fai il C-h kclic del mouse e vedi le due (2) funzioni che sono elencate lì.
elenco delle leggi

Le tue cornici non hanno una barra del titolo e un bordo? Perché non fai semplicemente clic su quelli, invece di fare clic in un buffer?
Estratto il

@lawlist: non credo che questo aiuti perché l'evento up arriva anche più tardi. Non posso nemmeno dire che il frame era inattivo durante l'evento down!
edam,

2
@Drew: bene, potrei, ma è fiddley. Preferirei solo essere in grado di fare clic nella finestra X, come posso quando emacs viene eseguito in un terminale.
edam,

Questo è davvero un comportamento molto fastidioso. Lo prevengo non usando affatto il mouse, cioè. usando Alt + Tab e co. per passare da un frame all'altro.
GergelyPolonkai,

Risposte:


1

Non credo sia possibile all'interno di Emacs. Il problema è che non appena si fa clic sulla cornice, il gestore finestre seleziona quella cornice. Emacs lo vede quindi immediatamente come il frame selezionato.

Il tuo codice di prova mostra questo. Nessun avviso di o mouse-drag-regiono mouse-set-point(o di qualsiasi altra funzione di Emacs) farà alcuna differenza.

(Forse c'è qualcosa che puoi fare a livello di X11 - non so.)


Non è possibile tenere traccia del fotogramma selezionato tramite post-command-hook, registrare tutte le posizioni dei punti e ripristinarle quando il fotogramma selezionato cambia? Non sarebbe efficiente, ma funzionerebbe.
PythonNut,

@PythonNut: Ugh. Può essere. Provalo. post-command-hookè l'ultima risorsa di un mascalzone. ;-) Lo usiamo tutti per molte cose, ma è un martello pesante.
Estratto il

1

Non esattamente quello che stai chiedendo, ma questo funziona bene per me:

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

Questo non corrisponde esattamente alla tua richiesta in quanto non solo il frame è attivo ma anche la finestra viene cliccata. Ma trovo che sia utile. Il doppio clic sposta il punto, il singolo clic no.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.