Hola a todos, en mi trabajo (y anteriormente en mis estudios) a menudo uso C # y este lenguaje me es familiar, como dicen. Habiendo decidido practicar un poco en programación, escribí un editor de texto de consola para Linux. Describiré brevemente la experiencia adquirida.
En Mono, la clase System.Console no es totalmente compatible, pero Mono es notable porque, al igual que en .NET, puede usar P / Invoke para llamar a métodos de biblioteca nativa de C / C ++ Linux.
En mi caso, era una biblioteca ncurses. Se ve así:
public class Curses {
Todos los métodos ncurses en este proyecto se conectaron según sea necesario, en caso de que System.Console no funcionara correctamente, pero si el método estándar funcionaba, la vida era mucho más fácil.
Por ejemplo, el método ncurses wgetch () recibe dos bytes en lugar de uno para caracteres Unicode, y para el diseño cirílico tendría que usar un método más complejo al pasar el puntero. El uso de la consola estándar. ReadKey permitió dejar todo el código manejable y separar fácilmente las teclas de función de los caracteres de texto.
No hubo problemas con la lectura y escritura de archivos, y todo funcionó correctamente como lo hizo en .NET

Cuando todo funcionaba de manera estable, se intentó construir este portátil en Windows. Para no recopilar PDCurses de las fuentes, tomé un dll listo de MinGW, a saber, libpdcursesw.dll e hizo un buen trabajo como reemplazo de ncurses.
Ni siquiera necesitaba Mono para construir una computadora portátil, simplemente abrí la solución MonoDevelop en Visual Studio sin ninguna aventura.
Lo único que requirió ajuste fue la salida a la consola, tuve que abandonar mvwprintw y reescribí Print, la salida funcionó y los cambios en el código fueron mínimos:
public void Print(int x, int y, string message) { Console.SetCursorPosition(x, y); Console.Write(message); }
También tuve que ajustar el tamaño del espacio de trabajo y los métodos para cambiar el color del texto.
Todo esto me convenció de que C # es bastante adecuado para tareas bajo Linux y la solución, en cuyo caso es fácil de portar a Windows.
La implementación completa está disponible en
GitHub , la rama maestra para Linux y Windows para Windows.