------------------------------------------------------- (let ((buffer (get-buffer-create "*test*")) (test (let ((after-make-frame-functions nil)) (make-frame `((parent-frame . ,(window-frame)) (no-accept-focus . t) (border-width . 0) (internal-border-width . 0) (vertical-scroll-bars . nil) (horizontal-scroll-bars . nil) (left-fringe . 0) (right-fringe . 0) (menu-bar-lines . 0) (tool-bar-lines . 0) (line-spacing . 0) (unsplittable . t) (no-other-frame . t) (undecorated . t) (cursor-type . nil) (minibuffer . nil) (no-special-glyphs . t) (inhibit-double-buffering . t) (width . 10) (height . 10))))) (pos (posn-x-y (posn-at-point (point) (selected-window))))) (set-window-buffer (frame-root-window test) buffer) (set-frame-position test (car pos) (cdr pos)) (with-current-buffer buffer (setq mode-line-format nil) (erase-buffer) (insert " -------------------- -------------------- --------------------")) (fit-frame-to-buffer test)) ----------------------------------------------------------- 1. eval above code at , a child-frame will be at 2. move mouse curse on the top of this child-frame 3. type "a", the "a" should be inserted into the position , on Windows, it is, but on linux, the "a" is inserted into the child-frame's buffer instead of position