Ubuntu: Opening a file from terminal only by typing its name

Question:

I know that xdg-open will open from terminal a file in the user's preferred application like this:

xdg-open filename

But I wonder how can I open a file from the current directory in its default application only by typing:

filename

followed by Enter, of course. Nothing more.

Solution:1

Use Ubuntu's command-not-found hook, as specified in Command Not Found Magic. It is currently used to suggest packages to install. Refer to /usr/share/doc/command-not-found/README which should be installed on your system.

Better yet, because it does not depend on the command-not-found package, (re)implement the Bash builtin command_not_found_handle to do an xdg-open if $1 is an existing file, and to delegate all other cases to the previous implementation.

# 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 }

Good question, nifty feature.

Thinking it over some more: you might not like the feature as much as you think, unless you also extend the bash_completion handler. Imagine wanting to open file-with-a-long-name.txt, then setting

alias o='xdg-open'

will make (about) four key presses suffice:

o f<Tab><Enter>

Whereas typing the full file name takes a tedious 26 - and that excludes backspacing over the inevitable typos.

Note:If u also have question or solution just comment us below or mail us on toontricks1994@gmail.com