web-dev-qa-db-fra.com

Ranger cd dans un dossier (et invoquer Shell)?

J'utilise Ranger pour naviguer dans mon système de fichiers.

Y a-t-il un raccourci où je cd dans un dossier sans quitter Ranger (comme dans bash ouvert avec un emplacement d'un dossier trouvé en naviguant dans Ranger) ?

29
Philip Kirkbride

J'ai trouvé la réponse à cela dans les pages de manuel :

S Ouvrez un shell dans le répertoire courant

Oui, vous auriez probablement dû lire cela avant de demander ici.

32
Philip Kirkbride

Vous pouvez également utiliser :cd /path/to/folder si vous êtes déjà dans Ranger.

Mise à jour: la question a été modifiée depuis que cette réponse a été donnée, la rendant invalide.

10
345422

Vous pouvez également le faire dans l'autre sens et utiliser ranger-cd pour changer automatiquement le répertoire en bash après la fermeture de ranger avec ce script .

function ranger-cd {
    local IFS=$'\t\n'
    local tempfile="$(mktemp -t tmp.XXXXXX)"
    local ranger_cmd=(
        command
        ranger
        --cmd="map Q chain Shell echo %d > "$tempfile"; quitall"
    )

    ${ranger_cmd[@]} "$@"
    if [[ -f "$tempfile" ]] && [[ "$(cat -- "$tempfile")" != "$(echo -n `pwd`)" ]]; then
        cd -- "$(cat "$tempfile")" || return
    fi
    command rm -f -- "$tempfile" 2>/dev/null
}

Votre shell ne change le répertoire que lorsque vous quittez ranger avec le raccourci clavier Q (voir map Q si vous voulez changer cela).

Je l'utilise avec

alias r=ranger-cd

Vous pouvez également adapter ce script pour faire d'autres choses, par exemple quittez ranger et passez à une session vim dans ce répertoire.

8
laktak

Une autre approche consiste à faire en sorte que le shell sous-jacent "suive" ranger(1) autour du système de fichiers afin qu'après avoir navigué dans un nouveau répertoire et que ranger(1) soit quitté (ou suspendu; d'habitude ctrl+z) le Shell sous-jacent sera déjà dans le même répertoire ranger(1) a été quitté.

Pour ce faire, ayez le shell "source" ranger(1) soit en préfixant la commande avec le mot . ( c'est-à-dire le point ou le point) ou le mot source sur certains shells.

. ranger

Maintenant, votre Shell "suivra" ranger(1) autour du système de fichiers.

Cela fonctionne parce que la commande ranger (qui est python) a un script bash(1) qui est lu lors de l'approvisionnement du Notez que cela ne fonctionne que sur les shells compatibles bash(1) .

À partir d'un bloc de commentaires dans le script :

Ce script bash intégré peut être exécuté en recherchant ce fichier. Il sera enregistré sur le dernier emplacement du ranger après l'avoir quitté. Le premier argument spécifie la commande pour exécuter ranger, la valeur par défaut est simplement "ranger". (Pas ce fichier lui-même!) Les autres arguments sont passés à ranger.

Si cela devient votre mode préféré pour utiliser ranger(1) dans, ajoutez-le en tant que alias dans votre script d'initialisation des shells.

1
Neurognostic
rangercd () {
    tmp="$(mktemp)"
    ranger --choosedir="$tmp" "$@"
    if [ -f "$tmp" ]; then
        dir="$(cat "$tmp")"
        rm -f "$tmp"
        if [ -d "$dir" ]; then
            if [ "$dir" != "$(pwd)" ]; then
                cd "$dir"
            fi
        fi
    fi
}

bindkey -s '^o' 'rangercd\n'
0
R0ckyY2