6.24. Ncurses-6.1

Ncurses 软件包包含用于不依赖于特定终端的字符屏幕处理的库。

大致构建用时: 0.4 SBU
所需磁盘空间: 42 MB

6.24.1. 安装 Ncurses

不要安装静态库,它不受配置控制:

sed -i '/LIBTOOL_INSTALL/d' c++/Makefile.in

准备编译 Ncurses:

./configure --prefix=/usr           \
            --mandir=/usr/share/man \
            --with-shared           \
            --without-debug         \
            --without-normal        \
            --enable-pc-files       \
            --enable-widec

新配置选项的含义:

--enable-widec

这个选项会编译宽字符库(例如 libncursesw.so.6.1)来代替普通字符库(例如 libncurses.so.6.1)。宽字符库可用于多字节和传统的 8 位本地字符,而常规的库只能用于 8 位本地字符。宽字符库和常规的库是源文件兼容的,而不是二进制文件兼容的。

--enable-pc-files

该选项为 pkg-config 生成和安装 .pc 文件。

--without-normal

该选项用于禁用构建和安装大多数的静态库。

编译软件包:

make

该软件包有个测试套件,但只能在安装完软件包后运行。测试程序在 test/ 目录中。查看该目录中的 README 文件获取更详细信息。

安装软件包:

make install

移动共享库到期望的 /lib 文件夹:

mv -v /usr/lib/libncursesw.so.6* /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}w.pc        /usr/lib/pkgconfig/${lib}.pc
done

最后,确保在编译时会查找 -lcurses 的旧应用程序仍然可以编译:

rm -vf                     /usr/lib/libcursesw.so
echo "INPUT(-lncursesw)" > /usr/lib/libcursesw.so
ln -sfv libncurses.so      /usr/lib/libcurses.so

如果需要的话,安装 Ncurses 的帮助文档:

mkdir -v       /usr/share/doc/ncurses-6.1
cp -v -R doc/* /usr/share/doc/ncurses-6.1
[注意]

注意

上面的指令并不会创建非宽字符 Ncurses 库,因为没有从源文件中编译安装的软件包会在运行时链接它们。然而,已知的仅有二进制应用程序并能链接到非等宽字符的库,需要第 5 版的支持。如果你由于一些仅有二进制的应用程序或要和 LSB 兼容而必须要有这样的库,用下面的命令重新编译软件包:

make distclean
./configure --prefix=/usr    \
            --with-shared    \
            --without-normal \
            --without-debug  \
            --without-cxx-binding \
            --with-abi-version=5 
make sources libs
cp -av lib/lib*.so.5* /usr/lib

6.24.2. Ncurses 软件包内容

安装的程序: captoinfo (链接到 tic), clear, infocmp, infotocap (链接到 tic), ncursesw6-config, reset (链接到 tset), tabs, tic, toe, tput, 和 tset
安装的库: libcursesw.so (到 libncursesw.so 的符号链接和链接器脚本), libformw.so, libmenuw.so, libncursesw.so, libncurses++w.a, libpanelw.so, 以及库名称中没有「w」的对应的非宽字符部分。
安装目录: /usr/share/tabset, /usr/share/terminfo, 和 /usr/share/doc/ncurses-6.1

简要介绍

captoinfo

转换 termcap 描述为 terminfo 描述

clear

如果可以的话清空屏幕

infocmp

比较或输出 terminfo 描述

infotocap

转换 terminfo 描述为 termcap 描述

ncursesw6-config

P为 ncurses 提供配置信息

reset

重新初始化终端为默认设置

tabs

清空终端并设置制表符长度

tic

将 terminfo 文件从源文件格式转换到二进制格式的 terminfo 条目描述编译器需要 ncurses 例程 [terminfo 文件包含特定终端的功能信息]

toe

列出所有可用的终端类型,给出每个主名称和描述

tput

可以在 shell 中使用终端特定的功能值;也可用来重置或初始化终端或者报告它的完整名称

tset

可以用来初始化终端

libcursesw

libncursesw 的链接

libncursesw

包含在一个终端屏幕以多种复杂方式显示文本的函数;使用这些功能的一个好的例子是内核 make menuconfig 时的菜单显示

libformw

包含实现表单的函数

libmenuw

包含实现菜单的函数

libpanelw

包含实现面板的函数