0

我正在git diff使用 tmux 编写脚本输出的显示(嗯,它只是程序):一旦检测到文件系统更改,shell 脚本就会执行tmux send-keys q enter C-l "git diff" enter,它可以有效地刷新git diff视图。

您可能会认为这类似于iTerm 的 coprocesses提供的功能。

问题是,我希望它在刷新时滚动回它所在的位置。

使用 tmux 的原因之一是窗口实际上是一个完全正常的交互式终端会话,可以正常交互以滚动查看完整输出。

但我想以某种方式获得滚动位置。

假设我想实际对终端窗口本身的文本内容进行计算,就像 iTerm2 的协同进程一样,但是我可以在 Linux 上使用它(通过 ssh)。tmux 提供这种能力吗?

4

2 回答 2

1

我不确定是否用脚本捕获它,但less -N会显示行号。-jn或者--jump-target=n可以跳转到某个位置。

于 2013-05-03T07:06:51.717 回答
0

关于 iTerm 的协同进程,

tmux有一个命令pipe-pane,可用于将 shell 命令的输入和输出通过管道传输到 . 指定的目标窗格的输出和输入-t

因此,如果我有一个 shell 程序,~/script.sh例如:

#!/usr/bin/env bash
while read line; do
    if [[ "$line" = "are you there?"* ]]; then
        echo "echo yes"
    fi
done

请注意,read line它将读取打印到窗格的每一行,即提示。

我可以将其标准输入和标准输出连接到窗格 0,my-session:my-window如下所示:

tmux pipe-pane -IO -t my-session:my-window.0 "~/script.sh"

然后在提示符下键入echo are you there?,它会响应:

$ echo are you there?
are you there?
$ echo yes
yes

一起使用时要小心-IO,因为它很容易导致反馈循环(我在试验这个功能时不得不杀死 tmux 服务器几次,哈哈)。

于 2018-04-28T03:32:38.603 回答