49 votes

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

J'utilise Explorateur de fichiers du terminal Ranger à partir d'un terminal linux.
Supposons que je démarre l'invite de commande dans le répertoire personnel et que je lance ranger

user@/home/user $ ranger

ranger opens..... et au sein du programme ranger que j'explore :

/media/ubuntu/sdf675d7sf5sdfs7/some_directory

Si j'appuie ensuite sur q pour quitter ranger, je suis renvoyé dans le même dossier que celui à partir duquel j'ai lancé ranger.

user@/home/user $

Est-il possible de quitter ranger, et de rester dans le répertoire dans lequel j'étais avec ranger, c'est à dire.

user@/media/ubuntu/sdf675d7sf5sdfs7/some_directory $

2voto

Simba Points 1078

Voici une façon plus élégante d'y parvenir en écrivant une fonction d'habillage. Il suffit d'utiliser la commande ranger Si vous voulez synchroniser le répertoire, revenez au Shell principal, quittez ranger avec la majuscule 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 à nouveau le changement de répertoire. sur demande . Utiliser :q pour quitter normalement, Q pour quitter et changer de répertoire.

1voto

Try431 Points 146

Merci à Gombai pour l'inspiration, mais sur Ubuntu 14.04 LTS j'ai trouvé que la solution ne fonctionnait pas tout à fait. En la modifiant légèrement et en l'enregistrant en tant qu'alias dans mon .bashrc, ce qui suit a parfaitement fonctionné (après avoir créé le fichier rangerdir ) :

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

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

1voto

Michael Kraume Points 11

Je me permets de vous faire une remarque. il peut être utile de passer en revue les autres arguments, alors mettez ceci dans votre shellrc.

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

0voto

SLN Points 121

Vous pouvez remapper votre q en suivant les instructions ci-dessous dans votre rc.conf. La prochaine fois que vous appuierez sur q, vous garderez le chemin dans le terminal

map q shell $SHELL

-1voto

Johan Chane Points 1

Chdir lorsque l'on quitte ranger

1. ~/.bashrc

ref : Réponse de Gombai Sándor

# ### ranger
function rangerfunc {
    ranger --choosedir=$HOME/.rangerdir
    if [[ -n $(cat $HOME/.rangerchdir) ]]; then
        cd $(cat $HOME/.rangerdir)
        true > $HOME/.rangerchdir
    fi
}

alias ranger='rangerfunc'
alias ra='rangerfunc'

2. ~/.config/ranger/rc.conf

map     x quit_chdir
map     X quitall_chdir

3. créer deux commandes

  • quit_chdir

    comme l'abandon de ranger.

  • quitall_chdir

    comme tout le monde dans le ranger.

3.1 Créer un paquet pour utiliser le module commands_full

ranger --copy-config=commands_full
ranger --copy-config=commands
touch ~/.config/ranger/__init__.py

3.2 ~/.config/ranger/commandes.py

import sys
sys.path.append('.')

from commands_full import quit, quitall

class quit_chdir(quit):
    """:chdir to working directory of ranger when quit on ranger.

    """
    def execute(self):
        os.system('echo 1 > $HOME/.rangerchdir')
        super().execute()

class quitall_chdir(quitall):
    """:chdir to working directory of ranger when quitall on ranger.

    """
    def execute(self):
        os.system('echo 1 > $HOME/.rangerchdir')
        super().execute()

X(quitall) chdir vers le répertoire de travail de l'onglet actuel, le résultat du test.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X