Предотвратить щелчок мышью в неактивных кадрах из точки повторного позиционирования

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) функции , которые там перечислены.
юрист
Разве у ваших фреймов нет строки заголовка и рамки? Почему бы вам просто не щелкнуть те, а не щелкнуть в буфере?
Дрю
@lawlist: я не думаю, что это помогает, потому что событие up наступает даже позже. Я даже не могу сказать, что кадр был неактивен во время события down!
Эдам
2
@Drew: ну, я мог бы, но это скучно. Я предпочел бы просто иметь возможность щелкать в окне X, как я могу, когда emacs запускается в терминале.
Эдам
Это действительно очень раздражающее поведение. Я предотвращаю это, вообще не используя мышь, т.е. используя Alt + Tab и co. переключаться между кадрами.
GergelyPolonkai

Ответы:

1

Я не думаю, что это возможно изнутри Emacs. Проблема в том, что как только вы щелкаете по фрейму, оконный менеджер выбирает этот фрейм. Таким образом, Emacs сразу видит его как выбранный кадр.

Ваш собственный тестовый код показывает это. Никаких советов ни о mouse-drag-regionили mouse-set-point(или любой другой функции Emacs) не будет иметь никакого значения.

(Возможно, есть кое-что, что вы можете сделать на уровне X11 - не знаю.)

Нарисовался
источник
Не могли бы вы отследить выбранный кадр с помощью post-command-hook, записать все положения точек и отменить их при изменении выбранного кадра? Это не будет эффективным, но это будет работать.
PythonNut
@PythonNut: тьфу. Может быть. Попытайся. post-command-hookэто последнее прибежище негодяя. ;-) Мы все используем его для многих вещей, но это тяжелый молот.
Дрю
1

Не совсем то, что вы просите, но это хорошо работает для меня:

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

Это не совсем соответствует вашему запросу, так как активируется не только рамка, но и окно. Но я считаю, что это полезно. Двойной щелчок перемещает точку, одиночный щелчок - нет.

DaveL
источник