使用新屏幕的控制台应用程序

时间:2018-08-19 21:22:34

标签: c# c linux windows console-application

就像vim,nano和其他一些命令行文本编辑器一样。 进入应用程序时,它会变成另一个基于文本的屏幕,并且应用程序可以独立地将每个单个字符修改为UI,而无需任何命令行屏幕滚动(当仅输出字符以填充我自己的程序中的屏幕时,终端会自动滚动),甚至可以处理控制台屏幕中的鼠标事件。

var countBs = function (word) {
  var count = 0;
  for (var i = 0; i < word.length; i++){
    if (word.charAt(i) == 'B'){
      count += 1;
    };
  }
  return count;
}

然后退出应用程序,屏幕将恢复,并且看起来该应用程序从不输出(应用程序屏幕根本不可能覆盖外部输出):

  1 
~                                          
~                                          
~                                          
~                                          
~                                          
~                                          
~                                          
-- VISUAL --             0,0-1         All

对于Windows,曾经有一个类似的“ EDIT”命令。

如何制作相似的文字来实现基于文本的UI?我应该调用哪种API?

这取决于操作系统还是终端类型?

我希望它可以在Linux(以及通过SSH)和Windows命令行上运行。有什么解决方案可以同时使用这两种解决方案,还是我必须分别实施?

我需要用C#(.NET Core)开发它,因此首选托管代码解决方案,但可以使用本机(C语言)解决方案。

1 个答案:

答案 0 :(得分:2)

理论上可以用多种方法来完成,但是想到的最明显的解决方案是ncurses。它被广泛用于基于控制台的应用程序,包括Vim。

这是一个C库,在http://tldp.org/HOWTO/NCURSES-Programming-HOWTO/上有一个很好的教程

当我还是C语言的新手时,ncurses是我玩过的第一个库,所以我可以说,如果您已经知道少量的C语言,那么它很容易使用。

尽管您说自己可能只满足于纯C库,但搜索表明它存在C#包装器,例如https://github.com/sushihangover/CursesSharp

编辑:我已经从Linux的角度回答了;我现在意识到您也想要Windows答案。我没有在Windows中尝试过ncurses,但是上面链接的ncurses网站声称它已移植到MinGW,并且已使其可以在Windows 7中工作。