我们当然知道linux是c语言项目中最强的项目工程了,但是大家想过没有这么强的工程是用什么软件开发的呢?
VS studio? Vs code? Emacs? Vim? 都不是大名顶顶的linus使用的是一个简陋到了极点编辑器,没有代码高亮,没有自动补全,甚至没有撤销Ctrl-Z!这个编辑器叫uemacs,(https://github/torvalds/uemacs)这个工程只有36个c文件!17000行c代码。下了代码,10秒不到就编译完了整个项目,生成的二进制只有500K!连1M也没有,就是这个编辑器带来了linux世界!

进入项目,最简单的是一个Makefile,Makefile是c世界中常见的项目管理方案,在这里按下make,项目就开始了编译过程。uemacs是一个TUI编辑器,他是跑在命令行里的,可能很多人的观念是命令行就是scanf,然后读取一行,打印输出,命令行不只是这样用的!或者说命令行其实是一个小白的说法!它的真正名字叫做终端(terminal), 终端在以前是一个巨大的实体物理设备,程序会跟终端通信,读取输入以及输出字符(stdin以及stdout),但是后来随着图形界面的流行,终端就退出了历史舞台。但是虚拟终端一直都在,它变成了windows的那黑乎乎以及ubuntu那紫乎乎的命令行。虚拟终端完全虚拟了以前的实体终端,所以以前的上古程序今天也能跑。包括今天介绍的uemacs!

但是终端的有一问题是,终端有很多版本,不同类型的终端控制不一样。很多现代的c++程序员可能想到可以用多态,用虚类,用接口!但是这里是c,我们只需要函数指针!下面是uemacs的“终端接口”,可以看到所有"virtual"方法都被抽象化成了函数指针,这个结构体是一个抽象的终端!可以看到这个终端有启动,关闭,获取字符,以及写入字符的方法。uemacs程序的逻辑就是一个个字符从终端中读取,根据状态上下移动光标或者输出字符到显示器中。

这个接口的unix的实现实现在tcap.c,在具体实现中用到了一个外部库"#include <curses.h>",
这个是一个外部的终端库,如果c语言的爱好者想要在终端中做一个小游戏不妨也去了解下。
不过windows的使用者应该去了解ncurse,这个跨平台的版本。

VS studio? Vs code? Emacs? Vim? 都不是大名顶顶的linus使用的是一个简陋到了极点编辑器,没有代码高亮,没有自动补全,甚至没有撤销Ctrl-Z!这个编辑器叫uemacs,(https://github/torvalds/uemacs)这个工程只有36个c文件!17000行c代码。下了代码,10秒不到就编译完了整个项目,生成的二进制只有500K!连1M也没有,就是这个编辑器带来了linux世界!

进入项目,最简单的是一个Makefile,Makefile是c世界中常见的项目管理方案,在这里按下make,项目就开始了编译过程。uemacs是一个TUI编辑器,他是跑在命令行里的,可能很多人的观念是命令行就是scanf,然后读取一行,打印输出,命令行不只是这样用的!或者说命令行其实是一个小白的说法!它的真正名字叫做终端(terminal), 终端在以前是一个巨大的实体物理设备,程序会跟终端通信,读取输入以及输出字符(stdin以及stdout),但是后来随着图形界面的流行,终端就退出了历史舞台。但是虚拟终端一直都在,它变成了windows的那黑乎乎以及ubuntu那紫乎乎的命令行。虚拟终端完全虚拟了以前的实体终端,所以以前的上古程序今天也能跑。包括今天介绍的uemacs!

但是终端的有一问题是,终端有很多版本,不同类型的终端控制不一样。很多现代的c++程序员可能想到可以用多态,用虚类,用接口!但是这里是c,我们只需要函数指针!下面是uemacs的“终端接口”,可以看到所有"virtual"方法都被抽象化成了函数指针,这个结构体是一个抽象的终端!可以看到这个终端有启动,关闭,获取字符,以及写入字符的方法。uemacs程序的逻辑就是一个个字符从终端中读取,根据状态上下移动光标或者输出字符到显示器中。

这个接口的unix的实现实现在tcap.c,在具体实现中用到了一个外部库"#include <curses.h>",
这个是一个外部的终端库,如果c语言的爱好者想要在终端中做一个小游戏不妨也去了解下。
不过windows的使用者应该去了解ncurse,这个跨平台的版本。






4u


