我目前正在尝试在Sylpheed上创建一个过滤规则,它可以根据命令从服务器上删除一条消息,我正在考虑编写一个bash脚本,当你按下像F8这样的东西时返回true,然后将其用作参数。
不幸的是,这似乎比预期的要难。到目前为止,我已经尝试过以下代码:
#!/bin/sh
f8='^[[19~'
f9='^[[20~'
echo please enter the F8 function key
read -n5 key # Read 5 characters.
echo -n "$key" | grep "$f8" #Check if character code detected.
if [ "$?" -eq $SUCCESS ]
then
echo "F8 key pressed."
return 0
fi
echo -n "$key" | grep "$f9" #Check if character code detected.
if [ "$?" -eq $SUCCESS ]
then
echo "F9 key pressed."
return 0
fi这是我在网上找到的,并做了一些修改,但不幸的是,它似乎不起作用(使用Fedora LXDE)。我通过在终端中使用control v,然后按F8和F9,获得了F8和F9键的按键数据。
我尝试过它的变体,通过删除^并将read -n5改为read -n4,但grep仍然不断地说"grep: Unmatched“等等。有人能帮助我吗?
也开放给任何人谁可以告诉我如何在Slypheed上创建过滤器从服务器上删除电子邮件作为替代解决方案(显然这是可能的,但我还没能让它工作;目前正在gmail帐户上测试它,在客户端删除的任何消息都不会在gmail上删除,我似乎不能让过滤器在标记消息或彩色消息上运行,或上面的任何变体,让用户选择他们想要从服务器上删除的消息)。由于客户端规范,我无法切换到IMAP。
发布于 2019-01-22 23:10:21
在web上找到了以下脚本:
#!/bin/bash
_key()
{
local kp
ESC=$'\e'
_KEY=
read -d '' -sn1 _KEY
case $_KEY in
"$ESC")
while read -d '' -sn1 -t1 kp
do
_KEY=$_KEY$kp
case $kp in
[a-zA-NP-Z~]) break;;
esac
done
;;
esac
printf -v "${1:-_KEY}" "%s" "$_KEY"
}
_key x
case $x in
$'\e[11~' | $'\e[OP') key=F1 ;;
$'\e[12~' | $'\e[OQ') key=F2 ;;
$'\e[13~' | $'\e[OR') key=F3 ;;
$'\e[14~' | $'\e[OS') key=F4 ;;
$'\e[15~') key=F5 ;;
$'\e[16~') key=F6 ;;
$'\e[17~') key=F7 ;;
$'\e[18~') key=F8 ;;
$'\e[19~') key=F9 ;;
$'\e[20~') key=F10 ;;
$'\e[21~') key=F11 ;;
$'\e[22~') key=F12 ;;
$'\e[A' ) key=UP ;;
$'\e[B' ) key=DOWN ;;
$'\e[C' ) key=RIGHT ;;
$'\e[D' ) key=LEFT ;;
?) key=$x ;;
*) key=??? ;;
esac
echo "You have pressed $key"发布于 2021-03-06 06:18:31
我也面临着这个问题。其中一个问题是,不同的不可打印密钥具有不同的字符数,因此在经过一些实验后,我编写了以下脚本:
# Special keypress could take variable amount of characters
keypress=""
# waiting for any key press down
read -rsN1 keytap
# loop while read can read any additional character and join all of them
while [ -n "$keytap" ]; do
keypress="${keypress}${keytap}"
read -sN1 -t 0.01 keytap
done现在您可以使用case来检查:
case "$keypress" in
$'\e[11~') echo F1
$'\e[21~') echo F10
$'\e[A') echo Up arrow
$'\t') echo Tab key
$'\e[3~') echo Del key
esachttps://stackoverflow.com/questions/54292077
复制相似问题