Ncurses 软件包包含用于不依赖于特定终端的字符屏幕处理的库。
6.20.1. 安装 Ncurses
准备编译 Ncurses:
./configure --prefix=/usr \ --mandir=/usr/share/man \ --with-shared \ --without-debug \ --enable-pc-files \ --enable-widec
新配置选项的含义:
-
--enable-widec
-
这个选项会编译宽字符库(例如
libncursesw.so.5.9
)而不是常规的)例如libncurses.so.5.9
)。宽字符库可用于多字节和传统的 8 位本地字符, 而常规的库只能用于 8 位本地字符。宽字符库和常规的库是源文件兼容的,而不是二进制文件兼容的。 -
--enable-pc-files
-
该选项为 pkg-config 生成和安装 .pc 文件。
编译软件包:
make
该软件包有个测试套件,但只能在安装完软件包后运行。测试程序在 test/
目录中。查看该目录中的 README
文件获取更详细信息。
安装软件包:
make install
移动共享库到期望的 /lib
文件夹:
mv -v /usr/lib/libncursesw.so.5* /lib
由于库已经被移走了,符号链接指向了一个不存在的文件。重建符号链接:
ln -sfv ../../lib/$(readlink /usr/lib/libncursesw.so) /usr/lib/libncursesw.so
很多应用程序仍然希望编辑器能找到非宽字符的 Ncurses 库。通过符号链接和链接器脚本欺骗这样的应用链接到宽字符库:
for lib in ncurses form panel menu ; do rm -vf /usr/lib/lib${lib}.so echo "INPUT(-l${lib}w)" > /usr/lib/lib${lib}.so ln -sfv lib${lib}w.a /usr/lib/lib${lib}.a ln -sfv ${lib}w.pc /usr/lib/pkgconfig/${lib}.pc done ln -sfv libncurses++w.a /usr/lib/libncurses++.a
最后,确保在编译时会查找 -lcurses
的旧应用程序仍然可以编译:
rm -vf /usr/lib/libcursesw.so echo "INPUT(-lncursesw)" > /usr/lib/libcursesw.so ln -sfv libncurses.so /usr/lib/libcurses.so ln -sfv libncursesw.a /usr/lib/libcursesw.a ln -sfv libncurses.a /usr/lib/libcurses.a
如果需要的话,安装 Ncurses 的帮助文档:
mkdir -v /usr/share/doc/ncurses-5.9 cp -v -R doc/* /usr/share/doc/ncurses-5.9
注意
上面的指令并不会创建非宽字符 Ncurses 库,因为没有从源文件中编译安装的软件包会在运行时链接它们。如果你由于一些仅有二进制的应用程序或要和 LSB 兼容而必须要有这样的库,用下面的命令重新编译软件包:
make distclean ./configure --prefix=/usr \ --with-shared \ --without-normal \ --without-debug \ --without-cxx-binding make sources libs cp -av lib/lib*.so.5* /usr/lib
6.20.2. Ncurses 软件包内容
简要介绍
转换 termcap 描述为 terminfo 描述 |
|
如果可以的话清空屏幕 |
|
比较或输出 terminfo 描述 |
|
转换 terminfo 描述为 termcap 描述 |
|
为 ncurses 提供配置信息 |
|
重新初始化终端为默认设置 |
|
清空终端并设置制表符长度 |
|
将 terminfo 文件从源文件格式转换到二进制格式的 terminfo 条目描述编译器需要 ncurses 例程 [terminfo 文件包含特定终端的功能信息] |
|
列出所有可用的终端类型,给出每个主名称和描述 |
|
可以在 shell 中使用终端特定的功能值;也可用来重置或初始化终端或者报告它的完整名称 |
|
可以用来初始化终端 |
|
到 |
|
包含在一个终端屏幕以多种复杂方式显示文本的函数;使用这些功能的一个好的例子是内核 make menuconfig 时的菜单显示 |
|
包含实现表单的函数 |
|
包含实现菜单的函数 |
|
包含实现面板的函数 |