大家好,在我的工作中(以及我学习的早期阶段),我经常使用C#,正如他们所说,这种语言已经让我很熟悉。 决定在编程方面进行一些练习之后,我为Linux编写了一个控制台文本编辑器。 我将简要描述获得的经验。
在Mono中,不完全支持System.Console类,但是Mono的独特之处在于,就像在.NET中一样,您可以使用P / Invoke来调用本机C / C ++ Linux库的方法。
就我而言,这是一个ncurses库。 看起来像这样:
public class Curses {
如果System.Console无法正常工作,则可以根据需要连接此项目中的所有ncurses方法,但是如果标准方法可以工作,则将使工作变得更加轻松。
例如,ncurses wgetch()方法接收两个字节而不是一个Unicode字符,而对于西里尔字母布局,我将不得不使用一种更复杂的方法来传递指针。 使用标准的Console.ReadKey可以使所有代码易于管理,并可以轻松地将功能键与文本字符分开。
读写文件没有任何问题,一切都像在.NET上一样正常工作

当一切稳定运行时,便尝试在Windows上构建此笔记本。 为了不从源头收集PDCurses,我从MinGW提取了现成的dll,即libpdcursesw.dll,它很好地替代了ncurses。
我什至不需要Mono来构建笔记本,我只是在Visual Studio中打开MonoDevelop解决方案而没有任何冒险。
唯一需要调整的是向控制台的输出,我不得不放弃mvwprintw,并且重写了Print,输出有效并且代码中的更改很小:
public void Print(int x, int y, string message) { Console.SetCursorPosition(x, y); Console.Write(message); }
我还必须调整工作区的大小,以及更改文本颜色的方法。
所有这些使我确信C#非常适合Linux和该解决方案下的任务,在这种情况下,很容易移植到Windows。
完整的实现可在
GitHub ,Linux的master分支和Windows的windows上获得。