Поместите это в исполняемый файл с именем «пейджер»:
#! /usr/bin/env bash
TEMP=/tmp/file-$$.txt
trap "rm -f $TEMP" EXIT HUP INT TERM
echo '-*- outline -*-' > $TEMP
cat "$@" >> $TEMP
emacs $TEMP 0<&1
Начальная строка временного текстового файла переводит emacs в режим структуры. Затем cat
добавляет ноль -или -более указанного файла (с ). Наконец, редактор позволяет просматривать введенный текст в вашем любимом режиме, затем trap EXIT
очищает временный файл.
Нулевые файлы подразумевают чтение со стандартного ввода.
В обычных условиях git log | pager
не было бы хорошей поддержки, поскольку канал может мешать стандартному вводу, подключенному к клавиатуре. (Диагностика в этом случае :"стандартный ввод emacs :не является tty". )Ожидаем, что stdout будет подключен к терминалу, то есть pager
находится в конце конвейера. Учитывая, что 0<&1
способен выйти из ситуации подключив стандартный ввод к тому же терминалу pty к которому подключен стандартный вывод, что позволяет успешно завершить сеанс редактирования.