2015-11-03 4 views
0

Я пытаюсь проверить, видно ли какое-то положение окна Emacs, и не перекрывается ни одним окном, ни каким-то образом скрывается средствами отделки. С этой целью я установил положение мыши в определенную точку, а затем сравнил установленные значения с (mouse-position). Однако я получаю несколько разные значения.Когда установлено положение мыши и положение мыши по-разному?

Как фактическое (mouse-position) отличается от установленного значения? (При условии, что мышь не перемещается пользователем).

Чтобы проверить это быстро C-й С-Й

(list (set-mouse-position (selected-frame) 4 4) (mouse-position)) 

Как для pos-visible-in-window-p, это не выполняет фактическую проверку. Чтобы увидеть этот

(progn (sleep-for 5) (pos-visible-in-window-p 1)) 

с С-у С-й С-е и ниже, скрыть окно. Увы, это правда.

+0

IIRC, Emacs не может этого знать. Он мог бы узнать, действительно ли это * нарисовало * эту часть буфера на экране, но теперь с компоновкой оконных менеджеров приложениям часто приходится рисовать каждую часть своих окон, даже если в конце они будут закрыты что-то другое. Другой способ взглянуть на это: что, если он слегка затенен прозрачным окном на 90%? А как насчет 10% прозрачного окна? – Stefan

+0

@Stefan: По крайней мере, метод, который я описываю, работает (в основном). Он может обнаруживать множество аномалий, например, некоторые бары, которые скрывают область эха. Однако это не идеально. – false

+0

@Stefan: Для прозрачности это зависит. Можете ли вы поместить мышь в это место, а затем «иметь» мышь? Вот что здесь важно. Так что прозрачность сама по себе не интересна только в тех местах, где вы действительно можете что-то сделать. – false

ответ

0

Казалось бы, pos-visible-in-window-p должен делать то, что вы хотите.

Обратите внимание, что ваше выражение перемещает фактический указатель мыши, т. Е. Он отображается пользователю.

+0

Правильно, он перемещает мышь, на самом деле, я сохраняю и восстанавливаю исходную позицию мыши-пикселя – false

Смежные вопросы