如何让lesskey独立于终端?

如何让lesskey独立于终端?

在 bash 脚本中,我们可以用来tput设置与终端无关的 less 变量:

export LESS_TERMCAP_me=$(tput sgr0; )

我们可以用 做同样的事情lesskey吗?

答案1

简短回答

  • 是的您可以将变量放入文件LESS_TERMCAP_melesskey,但它需要修复源代码并构建您自己的less版本(我在下面解释)。

  • lesskey文件不能包含外部命令,以便tput与终端无关。但是,您可以lesskey按照以下建议使用多个文件托马斯·迪基的回答

lesskey文件

命令lesskey用于将人类可读的文本内容转换为命令的二进制配置文件less。该配置文件名为lesskey文件通常是文件~/.less.

该文件包含三个部分:

  1. 命令(例如:q quit
  2. 行编辑(例如^G abort
  3. less环境变量(例如LESS_TERMCAP_me = \033(B\033[m

将变量放入文件LESS_TERMCAP_*lesskey

$ cat > lesskey.txt << EOF
#env
LESS = -iSrsM +Gg
LESS_TERMCAP_md = $(tput bold; tput setaf 6)
LESS_TERMCAP_me = $(tput sgr0)
LESS_TERMCAP_so = $(tput bold; tput setaf 3; tput setab 4)
LESS_TERMCAP_se = $(tput rmso; tput sgr0)
LESS_TERMCAP_us = $(tput smul; tput bold; tput setaf 7)
LESS_TERMCAP_ue = $(tput rmul; tput sgr0)
LESS_TERMCAP_mr = $(tput rev)
LESS_TERMCAP_mh = $(tput dim)
EOF

$ lesskey lesskey.txt  # By default lesskey writes ~/.less

$ man bash             # By default man uses less (pager)

漏洞

该命令less读取配置~/.less太晚了:
就在搜索变量之后LESS_TERMCAP_*

此错误影响487版于 2017 年 3 月 29 日发布(当然还有之前的版本)。

我刚刚向维护人员发送了错误报告和相应的修复程序。当修复应用于下一个less版本时,我将更新此答案......

自己修复一下

  1. 从以下位置下载源代码存档:

  2. 反转文件中main.c第 113 行的两行
    之前:

    /*
     * Process command line arguments and LESS environment arguments.
     * Command line arguments override environment arguments.
     */
    is_tty = isatty(1);
    get_term();
    init_cmds();
    init_charset();
    init_line();
    

    后:

    /*
     * Process command line arguments and LESS environment arguments.
     * Command line arguments override environment arguments.
     */
    is_tty = isatty(1);
    init_cmds();         /* Load lesskey file before */ 
    get_term();          /* getting variables LESS_TERMCAP_* */
    init_charset();
    init_line();
    
  3. 安装构建所需的依赖项

    ./configure
    

    如果./configure失败,请确定缺少的依赖项。
    就我而言,我已经安装了ncurses-devel获取 header term.h

  4. 建造

    make 
    
  5. 将您自己编译的内容保存less在某个地方,例如个人目录~/bin

    mkdir -p ~/bin
    cp ./less ~/bin
    PATH="$PATH:~/bin"
    

    不要忘记PATH在您的文件中设置环境变量~/.profile,或者如果您更喜欢任何其他文件~/.bashrc~/.login...

额外提示

  • 请参阅TERMCAPS手册页中使用的

    LESS_TERMCAP_DEBUG=1 man bash
    
  • TERMCAPS使用编码检索手册页

    MANPAGER='tee man.txt' man bash
    
  • 结合这两个技巧

    MANPAGER='tee man.txt' man bash
    LESS_TERMCAP_DEBUG=1 less man.txt
    

答案2

您可以为每种终端类型less读取不同的lesskey文件,例如,通过在 shell 初始化中设置LESSKEY(或) 环境。LESSKEY_SYSTEM执行此操作的简单方法是使用变量TERM作为文件名的一部分,并让 shell 在设置变量之前检查这些与终端相关的文件是否存在LESSKEY

相关内容