如何获得鼠标相对于终端 window 的位置?
How do I get the mouse's position relative to the terminal's window?
如何在 Linux 上获取鼠标相对于终端的位置?
这是我目前所拥有的:
use std::ptr;
use x11::xlib;
fn main() {
unsafe {
let display = xlib::XOpenDisplay(ptr::null());
if display.is_null() {
panic!("XOpenDisplay failed");
}
let mut root_return = 0;
let mut child_return = 0;
let mut root_x_return = 0;
let mut root_y_return = 0;
let mut win_x_return = 0;
let mut win_y_return = 0;
let mut mask_return = 0;
let screen = xlib::XDefaultScreen(display);
let window = xlib::XRootWindow(display, screen);
xlib::XQueryPointer(
display,
window,
&mut root_return,
&mut child_return,
&mut root_x_return,
&mut root_y_return,
&mut win_x_return,
&mut win_y_return,
&mut mask_return,
);
// root_x_return and root_y_return are the same as win_x_return and win_y_return
dbg!(root_x_return, root_y_return, win_x_return, win_y_return,);
}
}
它为我提供了全局鼠标在整个屏幕上的位置。我需要做什么才能获得仅与当前终端的 window 相关的输出?所以0, 0从第一个终端单元格像素开始。
看起来您正在使用 XRootWindow() 获取根 window,然后将其作为 window 传递给 XQueryPointer() 以获取相对鼠标坐标。在那种情况下,您会期望 root_return 和 win_return 值相同。
如果您创建了一个新的 X window,并将其传递给 XQueryPointer(),那么对于 win_*_return 值,您应该获得相对于该新 window 而不是到根 window.
获取当前终端 window 有点棘手,因为它实际上属于另一个进程(运行 和 shell 的终端进程)。您从终端 window 启动的进程正在通过 OS 发送和接收文本,并且无法直接访问终端进程或者它是 windows。您可能会找到终端的进程 ID,然后找到属于该进程的 X window ID,但这绝不是微不足道的
如何在 Linux 上获取鼠标相对于终端的位置? 这是我目前所拥有的:
use std::ptr;
use x11::xlib;
fn main() {
unsafe {
let display = xlib::XOpenDisplay(ptr::null());
if display.is_null() {
panic!("XOpenDisplay failed");
}
let mut root_return = 0;
let mut child_return = 0;
let mut root_x_return = 0;
let mut root_y_return = 0;
let mut win_x_return = 0;
let mut win_y_return = 0;
let mut mask_return = 0;
let screen = xlib::XDefaultScreen(display);
let window = xlib::XRootWindow(display, screen);
xlib::XQueryPointer(
display,
window,
&mut root_return,
&mut child_return,
&mut root_x_return,
&mut root_y_return,
&mut win_x_return,
&mut win_y_return,
&mut mask_return,
);
// root_x_return and root_y_return are the same as win_x_return and win_y_return
dbg!(root_x_return, root_y_return, win_x_return, win_y_return,);
}
}
它为我提供了全局鼠标在整个屏幕上的位置。我需要做什么才能获得仅与当前终端的 window 相关的输出?所以0, 0从第一个终端单元格像素开始。
看起来您正在使用 XRootWindow() 获取根 window,然后将其作为 window 传递给 XQueryPointer() 以获取相对鼠标坐标。在那种情况下,您会期望 root_return 和 win_return 值相同。
如果您创建了一个新的 X window,并将其传递给 XQueryPointer(),那么对于 win_*_return 值,您应该获得相对于该新 window 而不是到根 window.
获取当前终端 window 有点棘手,因为它实际上属于另一个进程(运行 和 shell 的终端进程)。您从终端 window 启动的进程正在通过 OS 发送和接收文本,并且无法直接访问终端进程或者它是 windows。您可能会找到终端的进程 ID,然后找到属于该进程的 X window ID,但这绝不是微不足道的