2.main函数
来源:互联网 发布:凯立德自适应端口文件 编辑:程序博客网 时间:2024/06/03 22:48
int main (int argc, char *argv[]){ XEvent event; // 见解说1 int c; // 用于保存用户输入的参数 Bool bBackground = True;// 见解说2 // 解析命令行参数,见解说2、3 while((c = getopt(argc, argv, "dDvh")) != -1){ switch(c){ case 'd':// 见解说2 /* nothing to do */ break; case 'D':// 见解说2 bBackground = False; break; case 'v':// 输出版本号 Version(); return 0; case 'h':// h或者其他任何不合法的参数均,输出参数帮助信息 case '?': Usage(); return 0; } } // 下面两行代码用于检查当前系统使用的是否是UTF字符集。相当于在字符终端执行“locale charmap”。[6] setlocale (LC_CTYPE, "");// 设置字符分类为当前系统类型,见解说4 bIsUtf8 = (strcmp (nl_langinfo (CODESET), "UTF-8") == 0); /* 先初始化 X 再加载配置文件,因为设置快捷键从 keysym 转换到 * keycode 的时候需要 Display */ if (!InitX ()) exit (1);// xWindow是必须的。如果此处初始化失败,程序肯定无法运行。个人认为应该输出输出相关信息的语句,或采用断言。如果可能发生,出了错就应该有信息输出。如果不可能发生就使用断言,写成: // bReturn = InitX (); // ASSERT(bReturn); // (个人观点,仅供参考) // 加载用户配置文件,通常是“~/.fcitx/config”,如果该文件不存在就从安装目录中拷贝“/data/config”到“~/.fcitx/config”,详细的解说见《LoadConfig及LoadProfile函数》 LoadConfig (True); // 创建字体。实际上,就是根据用户的设置,使用xft读取字体的相关信息。xft是x11提供的处理字体的相关函数集。详细参考[7] CreateFont (); // 根据字体计算输入窗口的高度 CalculateInputWindowHeight (); // 加载配置文件,这个配置文件不是用户配置的,而是用于记录fctix的运行状态的,比如是全角还是半角等等。通常是“~/.fcitx/profile”,如果该文件不存在就从安装目录中拷贝“/data/profile”到“~/.fcitx/profile”,详细的解说见《LoadConfig及LoadProfile函数》 LoadProfile (); // 加载字典文件,详见《字典及成语的处理》 LoadPuncDict (); // 加载成语,详见《字典及成语的处理》 LoadQuickPhrase (); // 从 ~/.fcitx/AutoEng.dat (如果不存在,则从 /usr/local/share/fcitx/data/AutoEng.dat) 读取需要自动转换到英文输入状态的情况的数据[8]。 LoadAutoEng (); // 以下是界面的处理。详细解说见《界面的处理》 // 创建主窗口,即输入法状态窗口 CreateMainWindow (); // 处理颜色,即候选词窗口的颜色,也就是我们在“~/.fcitx/config”定义的那些颜色信息 InitGC (mainWindow); // 创建候选次窗口 CreateVKWindow (); // 创建输入窗口 CreateInputWindow (); // 创建关于窗口,(说实话,用了这么长时间的fctix了,还从来没有见到过这个窗口) CreateAboutWindow (); // 将本程序加入到输入法组,告诉系统,使用我输入字符。 SetIM (); // 处理主窗口的显示。详细解说见《界面的处理》 if (hideMainWindow != HM_HIDE) { DisplayMainWindow (); DrawMainWindow (); } // 初始化输入法,详细解说见《我是输入法》 if (!InitXIM (mainWindow)) exit (4); //以后台方式运行 if (bBackground) { pid_t id; id = fork (); if (id == -1) { printf ("Can't run as a daemon!\n"); exit (1); } else if (id > 0) exit (0); } // 处理相关的信号 SetMyExceptionHandler (); // 主循环,相当与windows下GUI程序的消息循环。详细解说见《事件处理》 for (;;) { // 等待一个事件发生 XNextEvent (dpy, &event); // 如果是超时,等待下一个事件 if (XFilterEvent (&event, None) == True) continue; // 处理事件 MyXEventHandler (&event); } return 0;}
XEvent是xlib里面定义的结构。它用来保存从X服务器那里接受到的事件,包括事件的类型,以及与事件相关的数据(例如在屏幕什么地方生成的事件,鼠标键的事件等等),需要根据事件类型来读取相应的事件里的数据 1 。详细用法请参考“man XEvent”。
该变量用以标示是否以daemon运行。fcitx 启动时默认作为 daemon 运行(这个更常见些)。如需不作为 daemon运行,可使用 -D 选项。原来的 -d 选项仍保留,但什么也不做2。
daemon:守护程序,操作系统的后台进程,通常具有root安全级别许可权。守护程序通常隐藏在后台,直至被某个事件(例如特定的时间或日期、时间间隔、收到电子邮件等)触发后它才会进入活动状态3。相当于windows下的服务的概念。
使用 getopt 解析命令行选项。使用 getopt 可以提供更一致的(相对于系统中的其他程序而言)命令行选项处理方式4。
getopt:unix下解析命令行参数的函数,定义于:getopt.h 通常通过包含unistd.h间接包含它。具体用法请执行“man getopt”或参考5。
setlocal不是一个函数,而是一个宏,实际上调用的是_Xsetlocale。setlocale(分类, locale)来初始化locale数据. 当locale设置为空时, locale的值便从系统的环境变量中取得。详细信息见源代码”usr/include/x11/xlocale.h”或参考6
参考资料:
- http://www.vekee.net/b55300/ ↩
- http://fcitx.net/browser/trunk/src/main.c ↩
- http://tech.ccidnet.com/art/2511/20050331/230889_1.html ↩
- http://fcitx.net/browser/trunk/src/main.c ↩
- 《用Getopt在Linux下获取命令行参数的方法》 ↩
- 《Linux 国际化本地化和中文化(二)》 ↩
阅读全文
0 0
- 2.main函数
- main()函数
- main函数
- main函数
- main函数
- main函数
- main函数
- main()函数
- main函数
- main函数
- main()函数
- main函数
- main函数
- main函数
- main函数
- Main 函数
- Main函数
- Main函数
- 基于force布局的map
- Python求一个数对应二进制最低位为1对应的数字lowbit
- java学习路线图
- vue不支持ie8以下 原因?
- Linux命令缩写(转)
- 2.main函数
- 人工智能PK人类?这部电影超前地预见了人类社会的终极形态
- PYPL 10 月 IDE 指数榜:Eclipse 反超 Visual Studio
- 未来五年最具前景的一门编程语言是什么?
- 神经网络中的过拟合、泛化能力、L2正则化
- Oracle EBS财务模块(二)基本组成模块
- ASP.NET MVC Gzip 压缩
- eclipse配置tomcat
- Android studio使用svn创建分支及合并分支----终极图解