是否可以在普通终端中添加这些效果?修改终端?从头开始编写一些代码以增加乐趣?每 3 秒播放一次声音,并在 3 秒内平滑降低光标高亮的强度。
答案1
这是一个有趣的想法。我会用它。
不幸的是,终端不支持淡入淡出文本或淡入淡出反向视频。因此,您可以选择一些 ANSI 颜色来循环并自行重写屏幕。这让您完全陷入“从头开始编写代码以取乐”的境地。
此任务可以使用 Bash、Python、C 或数百种其他能够执行 shell 命令的语言中的任意一种来完成。选择一种您想要学习或已经熟悉的语言。
假设您正在使用 bash 或其他 shell,您可以使用命令play
(来自 sox 包)播放音频。还有许多其他命令行媒体播放器根据音频格式进行选择。
解析 的输出watch -d
以识别更改会有点困难。大多数命令管道都喜欢处理完整的文件。从无休止的文件(如 的 stdout)中检测屏幕刷新watch -d
并将其拆分成块是关键。您可能会发现将监视的命令的输出存储在变量或临时文件中更容易,您可以在下次运行中对其进行比较。
下面是一个如何在 bash 中开始行动的例子:
#!/bin/bash
# depends on wdiff, play and cmp
# sudo apt install wdiff sox diffutils
#
# Takes the command to watch as arguments. Example:
# ./submarine-watch.sh date
CMD="$@"
CLEAR="\e[H\e[J"
show_change() {
for bg in {251..232}; do
fg=$((256-(bg>244)*(bg-245)*4))
DISPLAY=$(
wdiff -1y"\e[48;5;${bg};38;5;${fg}m" -z"\e[0m" \
<(echo "$OUT") <(echo "$NEWOUT")
)
echo -e "${CLEAR}$DISPLAY"
sleep 0.15
done
echo -e "${CLEAR}$NEWOUT"
}
OUT=$($CMD)
echo -e "${CLEAR}$OUT"
while true; do
sleep 5 # update interval in seconds, like watch -n
NEWOUT=$($CMD)
if ! cmp -s <(echo "$OUT") <(echo "$NEWOUT"); then
play ~/Music/submarine.wav &>/dev/null &
show_change &
fi
NEWOUT="$OUT"
done
我们可以像这样运行:./submarine-watch.sh date
检查输出动画:
此示例的硬编码刷新率为 5 秒。您可以添加参数解析或仅更改硬编码延迟以满足您的需求。此示例在运行提供的任何命令之前不进行输入验证。您的安全蜘蛛感应应该会大大增强。请勿在共享系统上以任何提升的权限使用此示例。