Ranger: não tente exibir arquivos grandes (preview)

1

Estou usando o Ranger como um explorador de arquivos e, por sinal, é ótimo ...

Eu tenho um problema porque o Ranger pode exibir uma visualização do arquivo atualmente selecionado. O que é bastante útil, mas se torna problemático para arquivos grandes. De fato, para arquivos grandes, leva muito tempo e recursos para criar um pré-visualização.

Minha pergunta é: existe uma maneira de definir o tamanho máximo para o qual o Ranger não tenta exibir uma prévia?

    
por PinkFloyd 26.02.2015 / 08:45

2 respostas

4

Eu encontrei a solução, pelo menos para arquivos de texto, o problema estava no destacando ... Ranger estava tentando destacar arquivos longos ... a solução alternativa I encontrado é mostrado no seguinte trecho de ~/.config/ranger/scope.sh

#!/usr/bin/env sh

path="$1"    # Full path of the selected file
width="$2"   # Width of the preview pane (number of fitting characters)
height="$3"  # Height of the preview pane (number of fitting characters)
maxln=54    # Stop after $maxln lines.  Can be used like ls | head -n $maxln

# Find out something about the file:
mimetype=$(file --mime-type -Lb "$path")
extension=${path##*.}

try() { output=$(eval '"$@"'); }
dump() { echo "$output"; }
trim() { head -n "$maxln"; }
hl() { command head -n "$maxln" "$path" | highlight --syntax="$extension" --out-format=ansi; test $? = 0 -o $? = 141; }

case "$mimetype" in
    # Syntax highlight for text files:
    text/* | */xml)
        try hl && { dump | trim; exit 5; } || exit 2;;
esac
exit 1

A ideia é selecionar apenas as primeiras linhas do arquivo de texto e depois chamar highligh apenas nessa parte.

    
por 26.02.2015 / 11:25
0

Você pode incluir comandos, em algumas partes do seu scope.sh , para verificar o tamanho do arquivo.

Primeiro, adicione uma nova função (cole o código acima de handle_extension() in scope.sh ):

drop_bigsize() {
    # 51200 == 50 MB * 1024
    # change this number for different sizes
    if [[ 'du "${FILE_PATH}" | cut -f1' -gt 51200 ]]; then
        echo '----- TOO BIG FILE -----'
        exit 0
    fi
}

Em segundo lugar, chame essa função em algum lugar em scope.sh .
Por exemplo, o código abaixo impedirá de visualizar qualquer arquivo com tamanho maior que 50MB (as últimas linhas de scope.sh ):

...
MIMETYPE="$( file --dereference --brief --mime-type -- "${FILE_PATH}" )"

### start of new block ###
drop_bigsize
### end of new block ###

if [[ "${PV_IMAGE_ENABLED}" == 'True' ]]; then
    handle_image "${MIMETYPE}"
fi

handle_extension
handle_mime "${MIMETYPE}"
handle_fallback

exit 1

Para fazer isso com alguns tipos de arquivo específicos, por exemplo, para alguns arquivos, você precisaria colocar o mesmo bloco de código em partes diferentes do seu scope.sh :

...
handle_extension() {
    case "${FILE_EXTENSION_LOWER}" in
        # Archive
        a|ace|alz|arc|arj|bz|bz2|cab|cpio|deb|gz|jar|lha|lz|lzh|lzma|lzo|\
        rpm|rz|t7z|tar|tbz|tbz2|tgz|tlz|txz|tZ|tzo|war|xpi|xz|Z|zip)
            ### start of new block ###
            drop_bigsize
            ### end of new block ###
            atool --list -- "${FILE_PATH}" && exit 5
            bsdtar --list --file "${FILE_PATH}" && exit 5
            exit 1;;
        rar)
            # Avoid password prompt by providing empty password
            unrar lt -p- -- "${FILE_PATH}" && exit 5
            exit 1;;
...
    
por 19.09.2018 / 15:25

Tags