Abrindo um arquivo do terminal digitando apenas seu nome

14

Eu sei que xdg-open abrirá do terminal um arquivo no aplicativo preferido do usuário assim:

xdg-open filename

Mas eu me pergunto como posso abrir um arquivo do diretório atual em seu aplicativo padrão apenas digitando:

filename

seguido por Enter , é claro. Nada mais.

    
por Radu Rădeanu 24.10.2013 / 10:48

1 resposta

19

Use o command-not-found hook do Ubuntu, conforme especificado em Command Not Found Magic . Atualmente é usado para sugerir pacotes para instalação. Consulte /usr/share/doc/command-not-found/README , que deve estar instalado no seu sistema.

Melhor ainda, porque não depende do pacote command-not-found , (re) implementar o Bash incorporado em command_not_found_handle para fazer um xdg-open if é um arquivo existente e para delegar todos os outros casos para a implementação anterior.

# Save the existing code for the handler as prev_command_not_found_handle.
# Bit of a hack, as we need to work around bash's lack of lexical closure,
# and cover the case when it is not defined at all.
eval "prev_$(declare -f command_not_found_handle)" >& /dev/null \
     || prev_command_not_found_handle () { 
            echo ": command not found" 1>&2
            return 127
        }

# Define the new implementation, delegating to prev_handler.
command_not_found_handle () {
    if [ -f "" ]; then
        xdg-open ""
    else
        prev_command_not_found_handle "$@"
    fi
}

Boa pergunta, excelente recurso.

Pensando mais: você pode não gostar do recurso tanto quanto você pensa, a menos que você também estenda o manipulador bash_completion . Imagine querer abrir file-with-a-long-name.txt e, em seguida, definir

alias o='xdg-open'  

fará com que cerca de quatro pressionamentos de tecla sejam suficientes:

o f<Tab><Enter>

Considerando que digitar o nome completo do arquivo requer um tedioso 26 - e isso exclui o retrocesso sobre os erros inevitáveis.

    
por zwets 24.10.2013 / 10:59