在 Mercurial 命令中覆盖终端宽度

在 Mercurial 命令中覆盖终端宽度

一些 Mercurial 命令会根据终端的宽度以不同的方式格式化输出。当我只需要查看输出时,这很方便,但当输出不是发送到终端而是发送到管道或文件时,这非常不方便。

有没有什么方法可以让我覆盖终端宽度并让 Mercurial 格式化针对我在命令行上指定的宽度进行优化的输出?

下面是我遇到的问题的一个例子:

$ hg log --stat -r 4210 | wc
     10      37     375
$ hg log --stat -r 4210 | wc
     10      37     375
$ hg log --stat -r 4210 | wc
     10      37     512
$ hg log --stat -r 4210 | wc
     10      37     512
$ 

我在执行这一序列命令的过程中更改了窗口的大小,Mercurial 开始产生不同的输出。我想要的是这样的:

$ hg log --width 79 --stat -r 4210 | wc
     10      37     374
$ 

我可以以某种方式指定我希望输出格式化,好像终端宽度为 79 个字符,而不管终端的实际宽度。

答案1

可以在以下位置找到以下功能/usr/lib/python2.7/dist-packages/mercurial/ui.py

def termwidth(self):
    '''how wide is the terminal in columns?
    '''
    if 'COLUMNS' in os.environ:
        try:
            return int(os.environ['COLUMNS'])
        except ValueError:
            pass
    return util.termwidth()

由此显然可以知道,答案是COLUMNS=79在命令前面简单地写入hg即可实现所需的结果:

$ COLUMNS=79 hg log --stat -r 4210 | wc
     10      37     374

相关内容