Otwieranie pliku z terminala tylko przez wpisanie jego nazwy

15

Wiem, że xdg-openotworzy z terminala plik w preferowanej aplikacji użytkownika, taki jak ten:

xdg-open filename

Zastanawiam się jednak, jak mogę otworzyć plik z bieżącego katalogu w domyślnej aplikacji, wpisując:

filename

następnie Enteroczywiście. Nic więcej.

Radu Rădeanu
źródło
1
Przypuszczalnie możesz zmodyfikować command_not_found_handle()funkcję w /etc/bash.bashrccelu sprawdzenia i xdg-otwórz plik w tym samym katalogu?
chronitis
1
Mogę zmniejszyć część twojego ryzyka, używając aliasu. alias open = „xdg-open” open jest zmienną po prostu. możesz zrobić to tak krótko, jak chcesz.
rɑːdʒɑ

Odpowiedzi:

20

Użyj command-not-foundhaka Ubuntu , jak określono w Command Command Found Magic . Obecnie służy do sugerowania pakietów do zainstalowania. Sprawdź, /usr/share/doc/command-not-found/READMEktóre powinny być zainstalowane w twoim systemie.

Jeszcze lepiej, ponieważ nie zależy to od command-not-foundpakietu, (ponownie) zaimplementuj wbudowane Bash, command_not_found_handleaby wykonać xdg-openif $1jest istniejącym plikiem i przekazać wszystkie pozostałe przypadki do poprzedniej implementacji.

# 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 "$1: command not found" 1>&2
            return 127
        }

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

Dobre pytanie, fajna funkcja.


Zastanówmy się nad tym: może ci się nie podobać tak, jak myślisz, chyba że rozszerzysz również bash_completionprogram obsługi. Wyobraź sobie, że chcesz otworzyć file-with-a-long-name.txt, a następnie ustawić

alias o='xdg-open'  

wystarczą (około) cztery naciśnięcia klawiszy:

o f<Tab><Enter>

Podczas gdy wpisywanie pełnej nazwy pliku zajmuje nużące 26 - i wyklucza to odstępy wsteczne w stosunku do nieuniknionych literówek.

zwets
źródło