项目地址http://code.csdn.net/os_camp/16/proposals/65
在https://code.csdn.net/xhu_eternalcc/foldcolumn下载源码,里面有 tar/foldcolumn-xx.tar.gz,解压这个tar包:
(1)首先安装unibreak库 ,在thirdparty目录下
参考thirdparty/libunibreak-1.1/README.md
(2)安装foldcolumn库和命令行工具
cd tar
tar xzvf foldcolumn-xx.tar.gz
cd foldcolumn-xx
./configure --prefix=xxx
make
sudo make install
可以通过查看man/foldcolumn.1这个manpage或者是foldcolumn -h 来获得如下信息
只有指定列中只包含一个数值时(不支持逗号),才会对指定进行浮点数精度处理
指定列不换行时,以此列的各行中最大列宽输出
参见:库接口介绍参见开源夏令营之foldcolumn工具及解决方案(一)
#include <stdio.h> #include <stdlib.h> #include <locale.h> #include "foldcolumn.h" int main(int argc,char**argv){ char**fIns=NULL;/*input files*/ int fInsNum=1;/*input file number*/ char*fOut=NULL;/*output files, NULL for stdout*/ char mode[3]="wb";/*output mode, or ab*/ /*define foco_t*/ foco_t fc; setlocale(LC_ALL,""); /*init foco_t*/ if(foco_STATUS_OK!=foco_init(&fc)){ fprintf(stderr,"init foco_t error \n"); exit(EXIT_FAILURE); } /*specify input files*/ if(NULL==(fIns=(char**)malloc(sizeof(char*)*fInsNum))){ fprintf(stderr,"Malloc error \n"); exit(EXIT_FAILURE); } fIns[0]="sample.txt"; /*specify output file*/ if(NULL!=fOut){ if(NULL==(fc.out=fopen(fOut,mode))){ fprintf(stderr,"open file %s failed\n",fOut); exit(EXIT_FAILURE); } } /*You can modify fc attributes here*/ //table mode ,0-3 fc.table=3; //table width fc.width=140; //column number, only print the first N columns fc.columnSize=7; //column delimiter fc.delimiter=' '; //-1 for specifying column width by reading input file one time, or else will average table with into each column fc.widthSize=-1; //fc.widths[i]=x;/*specify the first widthSize column width*/ //column i need to process precision, index starts from 0 fc.numeric[4]=true; //percision fc.precision=2; //alignment for column i fc.alignment[0]=foco_ALIGN_RIGHT; fc.alignment[4]=foco_ALIGN_RIGHT; //lines beginning with reg will not be broken into columns //fc.lines=reg; //column i need not to be broken into lines if possible , or else will ignore this parameter //fc.columns[i]=true; //print empty line //fc.blank=true; if(foco_STATUS_OK!=foco_foldcolumn(&fc,fIns,foco_ARGV_FN,fInsNum)) fprintf(stderr,"foldcolumn execute error\n"); /*destroy foco_t*/ foco_destroy(&fc); if(NULL!=fOut){ fclose(fc.out); free(fOut); } if(NULL!=fIns) free(fIns); return EXIT_SUCCESS; }编译运行
(1)完成了所有基本功能,并对各个功能模块和整体进行了测试。
(2)时间过得真快,在foldcolumn编写期间既提高了自己的编程能力,同时也学到了很多新东西:字符编码知识、manpage的制作、automake的使用、git的使用,更重要的是从与张老师的交流中了解到了开源界的交流习惯,为以后参与开源打下了基础,在此感谢张老师的耐心指导。但是由于我个人原因,最近奔波于找工作,耽误了foldcolumn的进度,导致项目后期测试与扩展未能满足张老师的需求,打算9月底至10月继续完善foldcolumn,做到有始有终。