Запобігайте клацанню миші в неактивних кадрах від точки перестановки


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: Я не думаю, що це допомагає, оскільки подія з’являється ще пізніше. Я навіть не можу сказати, що кадр був неактивним під час події вниз!
Едам

2
@Drew: ну, міг би, але це загадково. Я вважаю за краще просто мати можливість натискати у вікні X, як я можу, коли emacs працює в терміналі.
Едам

Це дійсно дуже дратує поведінку. Я перешкоджаю цьому, не використовуючи миші взагалі, тобто. за допомогою Alt + Tab та co. для перемикання між кадрами.
GergelyPolonkai

Відповіді:


1

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

Це показує ваш власний тестовий код. Жодне консультування жодної mouse-drag-regionабо mouse-set-point(або будь-якої іншої функції Emacs) не матиме жодного значення.

(Можливо, є щось, що ви можете зробити на рівні X11 - dunno.)


Не могли ви відстежувати вибраний кадр через 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

Це не відповідає вашому запиту в тому, що не тільки кадр активований, але і натискається вікно. Але я вважаю це корисним. Подвійне клацання переміщує точку, один клацання не робить.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.