Isso não responde à pergunta real, mas infelizmente foi rejeitado como muito longo para um comentário.
Eu tornei a solução menos feia, removendo a nova parte da janela da extensão:
- A extensão usa IPC :: Run3 :: run3 para capturar stdout e stderr do subprocesso e grava isso no urxvt "direito" usando
$term->special_encode
e$term->cmd_parse
. (Não queless
tivesse algum resultado útil, mas apenas para torná-lo uma extensão de propósito geral.) - O comando configurado (em uma linha URxvt.keysym ... em ~ / .Xdefaults) é:
zsh -c 'stdin2fifo | read -r p && urxvt -e less -SNRfI -- "$p"'
- Script stdin2fifo lê stdin e o grava em um pipe chamado temp.
less -f
exibe o canal. Portanto, esperamos que não haja E / S de disco para os dados reais, apenas para uma entrada no sistema de arquivos.
Script stdin2fifo:
#!/bin/zsh
if [ $# -ne 0 ]; then
cat <<EOF
Usage: $(basename "$0")
Reads stdin, writes it to a new named pipe (in the background), and prints the
pipe's pathname.
Can be used (in zsh, at least) to "send stdin to another terminal". For example:
... | $(basename "$0") | read -r p && urxvt -e less -f -- "\$p"
EOF
exit 4
fi
set -e
dir=$(mktemp -d "/tmp/$(basename "$0")_XXXXXX")
pipe=$dir/pipe
mkfifo "$pipe"
(cat > "$pipe")&
echo "$pipe"