File Explorer

/proc/self/task/9/root/usr/share/bash-completion/completions

This explorer reads the filesystem of the server it runs on, so /workspace/user isn't present here. Browsing and the terminal still work against this server's own disk from /.

gio3.9 KB · 130 lines
## Copyright (C) 2018 Red Hat, Inc.## This library is free software; you can redistribute it and/or modify# it under the terms of the GNU Lesser General Public License as# published by the Free Software Foundation; either version 2.1 of the# licence, or (at your option) any later version.## This is distributed in the hope that it will be useful, but WITHOUT# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public# License for more details.## You should have received a copy of the GNU Lesser General Public License# along with this library; if not, see <http://www.gnu.org/licenses/>.## SPDX-License-Identifier: LGPL-2.1-or-later # shellcheck shell=bash # Check for bash[ -z "$BASH_VERSION" ] && return #################################################################################################### # Check whether the suggestions have common prefix (i.e. suggestions won't be# shown and prefix will be completed first)__gio_has_common_prefix() {    local i    for (( i = 1; i < ${#COMPREPLY[@]}; i++ )); do        if [[ "${COMPREPLY[i-1]:${#cur}:1}" != "${COMPREPLY[i]:${#cur}:1}" ]]; then            return 1 # False        fi    done     return 0 # True} # Complete file location__gio_location() {    local gio_binary    gio_binary="$1"    # Prevent breaking on colons, we have to work with uris    local cur    _get_comp_words_by_ref -n : cur     # Resolve dirname for dir listing    local dir=""    if [[ $cur =~ "/"$ ]]; then        dir="$cur"    elif [[ $cur =~ "/" ]]; then        # Subtract basename because dirname cmd doesn't work well with schemes        dir=${cur%"$(basename "$cur")"}    fi     # List volumes and mounts    local mounts=( )    local mount    while IFS=$'\n' read -r mount; do        # Do not care about local mounts        [[ "$mount" =~ ^"file:" ]] && continue         # Use only matching mounts        [[ "$mount" =~ ^"$cur" && "$mount" != "$cur" ]] && mounts+=("$mount")    done < <("$gio_binary" mount -li | sed -n -r 's/^ *(default_location|activation_root)=(.*)$/\2/p' | sort -u)     # Workaround to unescape dir name (e.g. "\ " -> " ")    local -a tmp="( ${dir} )"    local unescaped_dir="${tmp[0]}"     # List files    local files=()    local names=()    local name type    while IFS=$'\t' read -r name _ type; do        # Escape name properly        local escaped_name        escaped_name="$(printf "%q" "$name")"         # Append slash for directories and space for files        if [[ "$type" == "(directory)" ]]; then            escaped_name="$escaped_name/"        else            escaped_name="$escaped_name "        fi         local path="$dir$escaped_name"         # Use only matching paths        if [[ "$path" =~ ^"$cur" ]]; then            files+=("$path")            names+=("$escaped_name")        fi    done < <("$gio_binary" list -hl "$unescaped_dir" 2> /dev/null)     COMPREPLY=("${files[@]}" "${mounts[@]}")     # Workaround to show suggestions as basenames only    if ! __gio_has_common_prefix; then        COMPREPLY=("${mounts[@]} ${names[@]}")         # Workaround to prevent overwriting suggestions, it adds empty        # suggestion, otherwise names with colons will be corrupted        COMPREPLY+=(" ")         return 0    fi     # Workaround to complete names with colons, it removes colon prefix from    # COMPREPLY    __ltrim_colon_completions "$cur"} __gio() {    # Complete subcommands    if (( COMP_CWORD == 1 )); then        # shellcheck disable=SC2207        COMPREPLY=($(compgen -W "help version cat copy info launch list mime mkdir monitor mount move open rename remove save set trash tree" -- "${COMP_WORDS[1]}"))        compopt +o nospace        return 0    fi     # Complete file locations    __gio_location "$1"} #################################################################################################### complete -o nospace -F __gio gio