如果我在终端(LINUX)中使用CTRL + A CTRL + K,它会清除我在终端输入的线路。我想通过代码中的system()
调用来执行此功能。我将哪些参数传递给system()
以使其运行CTRL + A CTRL + K?
答案 0 :(得分:2)
如果您只想将当前行清除为您的应用输出并将光标移至开头,则不需要使用system()
;而只是使用printf
。代码\r
表示回车,并将光标移动到行的开头,ANSI转义序列CSI 2 K
将清除整行 - CSI由2个字符组成:ASCII ESC({{ 1}})和\033
。
因此:
[
答案 1 :(得分:0)
你很可能试图做错事。
首先是一个小注释,你可以用^ U来清理这条线。 ^ K从当前位置移除东西,^ A将您带到开头,这是一种圆形的方式。
大多数程序不应该接受交互式输入,而是从命令行(argc和argv东西)中获取参数。在不太可能的情况下,程序必须是交互式的,您通常不希望进行任何明确的屏幕操作。在更不可能的情况下,做上述操作是有意义的,你想使用像ncurses这样的东西。
那就是说,我强烈建议你详细说明你的实际问题。
答案 2 :(得分:0)
这没有任何意义,但你可以在system()
中使用Ctrl + A Ctrl + K来制作一个分配PTY的命令,运行像bash
这样的readline命令,然后写入ASCII 0x01 0x0B它。 script
和printf
可以让您这样做:
void main() {
system(
"{ sleep 1; "
"echo -n 'part of a line. deleting with Ctrl+A Ctrl+K soon...'; "
"sleep 3; "
"printf '\x01\x0b'; "
"sleep 2; "
"} | script -q 'bash'"
);
}
这将显示bash提示,模拟写入"行的一部分..",然后它将Ctrl-A Ctrl-K写入其中,删除它。
请务必逐字尝试,不做任何更改,因为它无法适应在较大程序中执行任何有用的操作。
PS:如果你想编写并覆盖一行来创建微调器或进度条,你应该问的问题是"如何编写和覆盖一行来创建微调器或进度条?&# 34;
答案 3 :(得分:-3)
首先检查终端控制序列这些命令给出的内容。您可以通过在命令之前按CTRL + V来执行此操作。你可能会得到
^A^K
如果您想通过system()
调用执行此操作,则必须使用它调用命令,该命令会将此终端控制序列弹出到您的屏幕。最简单的命令就是/bin/echo
。甲
/bin/echo -ne '^A^K'
也会这样做。将其提交给system()
:
system("/bin/echo -ne '^A^K'");
并且好奇。