Como encadear vários scripts LESSOPEN?

5

As distribuições do Linux hoje em dia têm um LESSOPEN padrão definido como /usr/bin/lesspipe , o que permite inspecionar facilmente, por exemplo. arquivos compactados ou arquivos PDF.

Agora eu queria ver se posso adicionar realce de sintaxe a menos. Isso é facilmente realizado com destaque da fonte . Eu usei LESSOPEN="| /usr/bin/source-highlight -i %s -q -f esc" e funciona bem.

Mas agora o problema se torna: Como obtenho o comportamento de menos destaque de fonte e menos? Basta anexar um após o outro não funciona:

$ export LESSOPEN="| /usr/bin/lesspipe %s | /usr/bin/source-highlight -i %s -q -f esc"
$ less foo
Invalid LESSOPEN variable

Também não faz sentido, então isso não é realmente surpreendente.

É possível configurá-lo sem escrever scripts elaborados? O melhor caso seria ter o encadeamento, ou seja, fornecer realce de sintaxe para um arquivo compactado também.

    
por musiKk 20.03.2015 / 18:06

1 resposta

2

O comando na variável LESSOPEN após o pipe inicial é executado pelo shell indicado pela variável de ambiente SHELL e deve produzir o conteúdo desejado em sua saída padrão.

Você pode passar a saída de lesspipe como entrada para outro comando que lê da entrada padrão e grava na saída padrão. No entanto, para que source-highlight leia sua entrada padrão, é necessário que ele saiba qual idioma destacar, portanto, source-highlight não funciona dessa maneira.

Quando lesspipe não reconhece um formato de arquivo, ele não imprime nada, o que menos interpreta como uma indicação para ler o arquivo original. Se você tiver ifne de Moreutils de Joey Hess , você pode usá-lo para detectar este caso e tente source-highlight . Você precisará salvar o nome do arquivo original em uma variável para poder usá-lo duas vezes.

LESSOPEN='|file=%s; /usr/bin/lesspipe "$file" | /usr/bin/ifne -n /usr/bin/source-highlight -i "$file" -o STDOUT 2>/dev/null'

Você precisará incluir -r ou -R em $LESS ou digitar -r ou -R depois de iniciar less para que menos cores sejam renderizadas.

    
por 22.03.2015 / 01:43