【问题标题】:How can you clear (reset) the screen in unix/posix? (not curses/newlines)如何在 unix/posix 中清除(重置)屏幕? (不是诅咒/换行符)
【发布时间】:2014-09-05 10:11:18
【问题描述】:

我想知道(如果可能的话)如何在 linux/mac/unix(不是 DOS)中清除/重置终端屏幕,就像在 windows/DOS 上使用“conio.h”中的 clrscr() 一样”。 我知道这里和网络上一般都有类似的问题,但我找不到能回答我的特殊情况的问题。

注意:我知道 curses/ncurses 和模拟 system("clear") 的解决方案,但这不是我想要的。 我想完全重置终端缓冲区(即我不想向下滚动或添加换行符来清除屏幕),请不要使用 curses/ncurses(我不喜欢 ncurses 屏幕模式,我想坚持默认模式)。

这是可能的还是我在问一些不可能的事情? :P 我正在尝试制作一个没有诅咒的控制台游戏(不完全是 roguelike),而且我不喜欢在通过向上滚动来清除之前看到我在屏幕上打印的内容。

编辑:我已经尝试过 system("reset"),这不是使用系统调用的好方法,使用该命令的延迟很糟糕,但它接近我想要做的......有什么可以做类似事情的函数/库?

我认为这也是一个很好的解决方案,可以执行 move(0,0) 之类的操作,然后再次打印我需要的内容或只是空白空间(这样我就不会滚动和上面的旧文本)。但我不知道是否有一个库可以做到这一点而无需取消诅咒模式。

现在在下面查看我自己的答案,我正在使用

printf("\033c");

目前工作正常,解决了我的问题。如果有人知道此解决方案有任何问题,请告诉我。 我对光标可见性有疑问。如果它被隐藏了,这段代码会再次显示,你知道解决方法吗?

谢谢,

佐加托内

【问题讨论】:

  • 你的意思是像reset 命令吗?
  • @Jayesh 没有重置将重新加载 bash shell 的 bash 命令?我不知道这是否能解决问题,但 system('reset') 恕我直言是个糟糕的选择
  • 刚刚测试过,每次调用它都会导致严重的延迟,显示白屏。这不是我想要的,但如果我能修复延迟,这几乎就是我想做的
  • 我认为printf '\033c' 会清除所有内容。也包括滚动条。
  • 你说的是这个吗? [code] #include #include main() { printf("按任意键运行clrscr().\n"); getch(); clrscr(); printf("清屏后\n"); printf("按任意键退出...\n"); getch();返回0; } [/code]

标签: c unix terminal console


【解决方案1】:

别名 cls='printf "\e[3J\033c"'

清除屏幕和回滚缓冲区。

【讨论】:

    【解决方案2】:

    我正在使用这个:

    write(STDOUT_FILENO, "\x1b[2J", 4);
    

    【讨论】:

      【解决方案3】:

      感谢 Jayesh,我刚刚发现这个转义码会正确清除我的屏幕, 谢谢!

      printf("\033c");
      

      编辑:需要修复!如果之前隐藏光标,这会将光标设置为可见。如何在不更改光标可见性的情况下获得相同的东西?

      如果有人指出有关 posix/unix (linux/mac) 系统的可移植性问题,我会用更好的解决方案更新答案。

      干杯

      【讨论】:

        【解决方案4】:

        对于 POSIX,您可以使用 terminfo。使用 tigetstr 请求“清除”命令,并使用 putp 输出命令。

        对于 Windows,您会考虑使用 FillConsoleOutputCharacter 并用空格填充控制台。

        那么只要把这两个方法抽象出来,你就有了一个跨平台的机制。

        【讨论】:

        • 我已经试过了。这将打印新的空行并向下滚动。不幸的是,这不是我想要的..
        • 对于 windows clrscr() in "conio.h" 很好,但我只需要 posix 的帮助
        【解决方案5】:
        #include<stdio.h>
        #include<conio.h>
        
        main()
        {
           printf("Press any key to run clrscr().\n");
           getch();
           clrscr();
           printf("After clearing the screen.\n");
           printf("Press any key to exit..\n");
           getch();
           return 0;
        }
        

        在linux系统中(清除); :)

        【讨论】:

        • @Jayesh nope.. 顺便说一句,我说过不要在我的问题中使用 conio.h,因为那只是 windows/DOS。我看到他没有阅读我的整个问题
        • 如果不是这个线程可能会帮助stackoverflow.com/questions/11823904/…
        • @rm_beginners 但 OP 说没有诅咒/ncurses。
        • @rm_beginners 我使用 Jayesh 解决方案解决了: printf("\033c");不,我不想使用 curses/ncurses
        • @rm_beginners 请花点时间再次阅读我的问题。 system("clear") 将添加新的空行并向下滚动屏幕,我不希望这样!我想要类似于 system("reset") 的东西,但这不能很好地工作,因为它被延迟了。 printf("\033c") 现在工作了
        猜你喜欢
        • 2014-05-25
        • 2011-06-13
        • 2013-11-13
        • 1970-01-01
        • 2014-09-17
        • 1970-01-01
        • 2021-06-27
        • 2017-09-16
        • 2011-06-16
        相关资源
        最近更新 更多