비활성 프레임의 마우스 클릭으로 인한 반응 방지


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

프레임에 제목 표시 줄과 테두리가 없습니까? 버퍼를 클릭하는 대신 그냥 클릭하지 않겠습니까?
Drew

@ lawlist : up 이벤트가 나중에 발생하기 때문에 이것이 도움이되지 않는다고 생각합니다. 다운 이벤트 중에 프레임이 비활성화되었다고 말할 수도 없습니다!
edam

2
@ 드류 : 글쎄, 할 수 있지만, 어리석은 일입니다. 이맥스가 터미널에서 실행될 때처럼 X 윈도우를 클릭하는 것을 선호합니다.
edam 2018 년

이것은 실제로 매우 성가신 행동입니다. 마우스를 전혀 사용하지 않아서 방지합니다. Alt + Tab 및 co. 프레임 사이를 전환합니다.
GergelyPolonkai 2016 년

답변:


1

나는 이것이 Emacs 내에서 가능하다고 생각하지 않습니다. 문제는 프레임을 클릭하자마자 창 관리자가 해당 프레임을 선택한다는 것입니다. 따라서 Emacs는이를 즉시 선택된 프레임으로 간주합니다.

자신의 테스트 코드가 이것을 보여줍니다. mouse-drag-region또는 mouse-set-point(또는 다른 Emacs 기능)에 대한 조언은 차이가 없습니다.

(아마도 X11 수준에서 할 수있는 일이 있습니다-dunno.)


를 통해 선택한 프레임을 추적하고 post-command-hook모든 포인트 위치를 기록하고 선택한 프레임이 변경되면 되돌릴 수 없습니까? 효율적이지 않지만 작동합니다.
PythonNut

@PythonNut : 어이. 아마도. 시도 해봐. post-command-hook악당의 마지막 수단입니다. ;-) 우리 모두는 그것을 많은 물건에 사용하지만 무거운 망치입니다.
Drew

1

정확히 당신이 요구하는 것은 아니지만 이것은 나를 위해 잘 작동합니다.

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

이것은 프레임이 활성화 될뿐만 아니라 창이 클릭되었다는 점에서 귀하의 요청과 정확히 일치하지 않습니다. 그러나 나는 그것이 유용하다는 것을 알았습니다. 두 번 클릭하면 포인트가 이동하고 한 번 클릭해도 이동하지 않습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.