web-dev-qa-db-fra.com

Comment quitter l'explorateur de fichiers Ranger pour revenir à la commande Invite tout en conservant le répertoire actuel?

J'utilise l'explorateur de fichiers du terminal Ranger depuis un terminal Linux.
Dites que je commence à partir de la commande Invite dans le répertoire de base et lance ranger

user@/home/user $ ranger

ranger ouvre ..... et dans le programme de ranger j'explore de:

/media/ubuntu/sdf675d7sf5sdfs7/some_directory

Si je tape ensuite sur q pour quitter Ranger, je suis replacé dans le même dossier que celui dans lequel j'ai lancé ranger. c'est à dire.

user@/home/user $

Est-il possible de quitter Ranger et de rester dans le répertoire où j’étais avec Ranger, i.

user@/media/ubuntu/sdf675d7sf5sdfs7/some_directory $  
25
the_velour_fog

Selon son manuel

--choosedir=targetfile    
    Allows you to pick a directory with ranger. When you exit ranger, it will write the last visited directory into targetfile.

Il suffit donc de créer un alias comme celui-ci:

alias ranger='ranger --choosedir=$HOME/.rangerdir; LASTDIR=`cat $HOME/.rangerdir`; cd "$LASTDIR"'

Et l’écriture de cet alias dans le rc de votre shell préféré est recommandée.

22
Gombai Sándor

S

Si vous appuyez sur S, un nouveau shell est ouvert sur le répertoire en cours.

Ensuite, si vous appuyez sur Ctrl + D sur le shell, il retourne à ranger.

Cette solution de contournement est souvent suffisante.

J'ai trouvé une solution plus facile. Lorsque vous installez ranger, il mettra un script dans votre dossier bin qui, s’il est exécuté, lancera le programme. Mais si vous le sourcez, avec

$ ranger source

il lancera ranger et vous déposera dans le dernier dossier visité lorsque vous quitterez.

donc si vous voulez ce comportement par défaut, il suffit de faire

$ alias ranger = 'source ranger'

ou mieux encore, mettez-le dans votre fichier .bashrc.

Pour voir la documentation et l'implémentation de cette fonctionnalité, lisez le script ranger dans votre dossier bin.

6
Ogino Knaus

Pour répondre à la réponse de Gombai Sándor, je suggère de modifier légèrement le pseudonyme:

alias ranger='ranger --choosedir=$HOME/.rangerdir; LASTDIR=`cat $HOME/.rangerdir`; cd "$LASTDIR"'

En remplaçant "$ Home/rangerdir" par "$ Home/.rangerdir", vous masquez le fichier créé par l'alias. fait juste pour qu'il ne soit pas ennuyeux encombrer le dossier de départ. cela ne fait aucune différence fonctionnelle dans son fonctionnement.

4
dduxx

Merci à Gombai pour l'inspiration, mais sur Ubuntu 14.04 LTS, j'ai trouvé que la solution ne fonctionnait pas tout à fait. En le modifiant légèrement et en enregistrant comme alias dans mon .bashrc, les éléments suivants fonctionnaient parfaitement (après la création du fichier rangerdir):

alias ranger='ranger --choosedir=$HOME/rangerdir;cd "$(cat $HOME/rangerdir)"'

Le message suivant sur askubuntu m'a aidé lorsque j'essayais de comprendre pourquoi les solutions que j'essayais ne fonctionnaient pas: https://askubuntu.com/questions/404141/why-cant -i-pipe-into-cd

1
garzai

Je suis tombé sur une question similaire ailleurs avec meilleure réponse par rapport à Gambai et ses autres variantes proposées. C'est mieux depuis.

  1. il s’occupera du fichier créé en le mettant dans le dossier tmp afin qu’il puisse être supprimé par le système
  2. c'est un code plus propre (bien que la réponse de Gambai puisse être convertie en une fonction)

Il y a déjà une fonction dans un fichier shell dans le dépôt git de ranger:

https://github.com/ranger/ranger/blob/master/examples/bash_automatic_cd.sh

function ranger-cd {
    # create a temp file and store the name
    tempfile="$(mktemp -t tmp.XXXXXX)"

    # run ranger and ask it to output the last path into the
    # temp file
    ranger --choosedir="$tempfile" "${@:-$(pwd)}"

    # if the temp file exists read and the content of the temp
    # file was not equal to the current path
    test -f "$tempfile" &&
    if [ "$(cat -- "$tempfile")" != "$(echo -n `pwd`)" ]; then
        # change directory to the path in the temp file
        cd -- "$(cat "$tempfile")"
    fi

    # its not super necessary to have this line for deleting
    # the temp file since Linux should handle it on the next
    # boot
    rm -f -- "$tempfile"
}

Vous pouvez insérer cette fonction dans le fichier rc du shell de votre favori (par exemple, ~/.zshrc) et créer un alias et/ou le lier à une combinaison de touches (à nouveau les deux peuvent être insérés dans le fichier rc):

alias nav=ranger-cd

et/ou

# This will run the function by Ctrl+O through returning
# the string "ranger-cd" in addition to a new-line character
# to act as Enter key-press
bindkey -s "^o" "ranger-cd\n"

Avertissement: La bindkey ci-dessus fonctionne dans ZSH et vous devez la modifier en fonction de votre shell préféré.

1
Mehrad Mahmoudian

puis-je vous une-up up? passer par les autres arguments peut être utile, alors mettez ceci dans votre shellrc

function ranger () {
    /usr/bin/ranger --choosedir=$HOME/.rangerdir $@
    LASTDIR=`cat $HOME/.rangerdir` 
    cd $LASTDIR
    echo -n > $HOME/.rangerdir
}
1
Michael Kraume

Voici un moyen plus élégant de le faire en écrivant un wrapper de fonction. Utilisez simplement la commande ranger, et si vous souhaitez que le répertoire de synchronisation soit redéfini sur le shell principal, quittez ranger avec capital Q.

(Les codes ci-dessous sont testés avec Bash et ZSH.)

function ranger {
  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")" != "$PWD" ]]; then
    cd -- "$(cat -- "$tempfile")" || return
  fi
  command rm -f -- "$tempfile" 2>/dev/null
}

Cela vous permettra de synchroniser le changement de répertoire à la demande . Utilisez :q pour quitter normalement, Q pour quitter et modifier votre répertoire.

0
Simba

C'est un peu vieux maintenant mais je me suis retrouvé ici avec le même problème. Ciro Santilli a déclaré ci-dessus que si vous appuyez sur "S" lorsque vous êtes dans un garde forestier, il s'ouvre dans une nouvelle coque. Bien sur mon système, appuyer sur "S" sur un répertoire ouvre le répertoire dans le shell actuel, exactement ce que je voulais qu'il fasse. J'espère que cela aide d'autres personnes.

0
girvain