如何使用 xdotool 在所有 4 个对角线方向上移动鼠标?

如何使用 xdotool 在所有 4 个对角线方向上移动鼠标?

如何将鼠标移动xdotool到显示屏的第二象限或第四象限?

我所说的“象限”

将鼠标移动xdotool到象限 I 可以正常工作:

mousemouve_x=100
mousemouve_y=100
xdotool mousemove_relative -- -$mousemouve_x -$mousemove_y

将鼠标移动xdotool到象限 III 可以正常工作,如下所示:

mousemouve_x=100
mousemouve_y=100
xdotool mousemove_relative $mousemove_x $mousemove_y

如何将鼠标移动xdotool到显示屏的第二象限或第四象限方向?

评论:

  • 尝试了一下之后,我似乎清楚该怎么做了。特别感谢 Kamil Maciorowski:
  • 下面的“mousemove_relative -- x100 y100”接受 x 和 y 的正数和负数。下面的“mousemove_relative x100 y100”接受 y 的正数和负数。
  • 负的 x 值会给出错误消息,正值则正常工作。这看起来就像是 xdotools 的一个小错误。如果有人知道如何报告此错误,请报告 xdotools 的小错误。

答案1

数学中的象限并不完全适用于此,因为在计算机图形和显示中,Y 坐标几乎总是从顶部(图像或屏幕)向下增长。在数学中,“X 增加,Y 增加”和“向右上方移动”这两个短语通常是等价的,但在计算机中它们通常不是。

如果您的命令确实有效,您会看到差异。有拼写错误(mousemouvevs mousemove),有未加引号的变量可能会扩展为零。在新的 shell 中,这两个命令都不会沿对角线移动光标。如果它们对您有效(或曾经有效),那么可能是因为存在(或曾经存在)名称包含mousemove声明的非空变量较早

要明确的是:这些是您的固定命令(即没有拼写错误):

mousemove_x=100
mousemove_y=100
xdotool mousemove_relative -- "-$mousemove_x" "-$mousemove_y"
mousemove_x=100
mousemove_y=100
xdotool mousemove_relative -- "$mousemove_x" "$mousemove_y"

它们可以工作并沿着其中一个对角线方向移动光标。我理解您的问题是:如何沿另一个对角线方向移动光标?

当你在 shell 中运行某个程序时,你可以提供零个或多个参数,例如字符串。该工具可能会将其中一些解释为数字。Herexdotool mousemove_relative --需要特定格式的两个参数,因此它可以将它们解释为数字。看起来像正数的字符串将导致相应坐标增加(如果可能);看起来像负数的字符串将导致相应坐标减少(如果可能)。

在您的 (固定) 尝试中,您xdotool只需扩展其值本身看起来像正数 ( ) 的变量,即可使传递的字符串看起来像正数100。然后,通过在看起来像正数的扩展值前添加字符,使传递给另一个的字符串xdotool看起来像负数-

要沿另一条对角线方向移动光标,需要将一个字符串解释为负数,将另一个字符串解释为正数:

# poor code though
mousemove_x=100
mousemove_y=100
xdotool mousemove_relative -- "$mousemove_x" "-$mousemove_y"

或者

# still poor code
mousemove_x=100
mousemove_y=100
xdotool mousemove_relative -- "-$mousemove_x" "$mousemove_y"

我称其为“糟糕的代码”,因为它概念上错误

从概念上来说数据

mousemove_x=100
mousemove_y=100

这是代码

xdotool mousemove_relative -- "-$mousemove_x" "$mousemove_y"

到目前为止,我们通过更改代码来选择方向。正确的方法是更改​​数据:

mousemove_x=100
mousemove_y=100
xdotool mousemove_relative -- "$mousemove_x" "$mousemove_y"
mousemove_x=-100
mousemove_y=100
xdotool mousemove_relative -- "$mousemove_x" "$mousemove_y"
mousemove_x=-100
mousemove_y=-100
xdotool mousemove_relative -- "$mousemove_x" "$mousemove_y"
mousemove_x=100
mousemove_y=-100
xdotool mousemove_relative -- "$mousemove_x" "$mousemove_y"

请注意,四种情况下的代码都相同,它是通用的。只需提供正确的数据,您就可以获得任何可能的运动。

使用 eg 的代码-$mousemove_x并不通用,因为您无法通过这种方式传递看起来像正数的字符串。如果您尝试通过存储-100在变量中来反转方向,那么您最终会得到--100;这不会被解释为正数。

相关内容