xdotool type 和 stty 有时会截断输入的第一个字母

xdotool type 和 stty 有时会截断输入的第一个字母

我定义了一个简单的函数prepend(如下),它应该自动在以下输入提示中放置 bash 命令的重复术语。例如,通过prepend git在终端中键入,所有以下输入都应该已经git输入。大多数情况下,prepend这样做;然而,看似随机,prepend将切断该单词的第一个字母(例如,在以下输入提示中$prepend sensors产生)。$ensors

我想知道为什么会发生这种情况以及如何解决它。但是,如果有一种替代/规范的方式将文本输入到输入提示中,我不介意以不同的方式实现这一点。

#!/bin/bash

#stty to stop text from being displayed before $PS1

function prepend {
    if ! [ -z "$1" ]
        then
            PROMPT_COMMAND="stty -echo && xdotool type $1 && stty echo"
            set PROMPT_COMMAND
    else
        unset PROMPT_COMMAND
    fi
}

答案1

我相信当已经按住该字符的键时,第一个字母就会被切断。要查看此效果,您可以在终端中运行以下命令:

$ xdotool type foof

如果您f在按下之前松开该键Return,则会进行打印foof,但如果您在按住最后一个键f的同时按下Return该键,则会进行打印oof。我相信发生这种情况是因为 xdotool 正在发送keydown事件,当按键已经按下时,这些事件没有任何效果。

您可以通过手动发送事件来解决此问题keyup

$ xdotool keyup f type foof

将始终foof正确打印。

就您而言,这会稍微复杂一些;您需要检测字符串的第一个字符才能发送正确的keyup.但是,一旦您这样做了,这种方法也应该适合您。

相关内容