Come uscire dal Ranger file explorer tornare al prompt dei comandi, ma mantenere la directory corrente?


28

Sto usando Ranger Terminal File Explorer da un terminale Linux.
Di 'che inizio dal prompt dei comandi nella home directory e lancio ranger

user@/home/user $ ranger

ranger si apre ..... e all'interno del programma ranger esploro di:

/media/ubuntu/sdf675d7sf5sdfs7/some_directory

Se poi premo q per uscire da Ranger, vengo riportato nella stessa cartella da cui ho lanciato Ranger. vale a dire

user@/home/user $

E 'possibile uscire da ranger, e rimanere nella directory ero con ranger, i.

user@/media/ubuntu/sdf675d7sf5sdfs7/some_directory $  

Risposte:


29

Secondo il suo manuale

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

Quindi tutto ciò che devi fare è creare un alias come questo:

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

Ed è consigliato a scrivere questo alias nella rc della vostra shell favorito.


2
wow questo è abbastanza intelligente, non è mai venuto a me si potrebbe dare un comando per un programma, terminare con una ;e quindi specificare più comandi dopo il punto e virgola, che - Im assumendo vengono eseguiti in corrispondenza del punto si chiude ranger, grazie!
the_velour_fog

1
Prendi in considerazione l'utilizzo .rangerdirinvece di renderlo nascosto. Oppure cancellalo alla fine rm -d $HOME/rangerdir,.
Mateen Ulhaq,

Questo è grande, ma se ho capito bene, questo significherebbe che si dispone che il comportamento in modo permanente. Sarebbe bello se ci fosse un modo per avere l'opzione di uscire nella directory ranger corrente O nella directory in cui ti trovavi quando hai avviato ranger.
neverfox

neverfox Una volta creato un alias, dipende da te se offri la selezione della directory per atterrare all'interno di tale alias. La selezione può essere effettuata prima che il binario è chiamata o dopo che è finito.
Gombai Sándor

Grazie per questa soluzione impressionante! Mi capita di essere utilizzando la shell di pesce, in modo da impostare il mio alias, ho usato fish_confige ha aggiunto l'abbreviazione di ranger --choosedir="$HOME/.rangerdir"; cd (cat $HOME/.rangerdir)
rockzombie2


7

Ho trovato una soluzione più facile. Quando si installa ranger, metterà uno script nella vostra cartella bin che, se eseguito, inizierà il programma. Ma se lo legge, con

$ Fonte ranger

che lancerà ranger e che vi porterà in ultima cartella visitata quando si esce.

quindi se si desidera questo comportamento di default, basta fare

$ Alias ​​ranger = 'fonte ranger'

o meglio ancora metterlo nel file .bashrc.

Per consultare la documentazione e l'implementazione di questa funzione, leggere la sceneggiatura ranger nella cartella bin.


Apparentemente questa tecnica (che può essere abbreviata solo con l'esecuzione . ranger) è menzionata nel wiki
cjauvin,

4

Per dare una occhiata alla risposta di Gombai Sándor, suggerisco di fare un piccolo adattamento all'alias:

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

Cambiando "$ HOME / rangerdir" a "$ HOME / .rangerdir" a fare la file creato dal alias nascosto. appena lo rende così non è fastidiosamente ingombrano la cartella home. non fa alcuna differenza funzionale a come funziona.


2

Sono incappato in una domanda simile altrove con risposta migliore rispetto a Gambai e le sue altre varianti proposte. E 'meglio allora.

  1. si prenderà cura del file creato mettendolo nella cartella tmp in modo che possa essere eliminato dal sistema
  2. è codice più pulito (anche se la del Gambai risposta può essere convertito in una funzione)

C'è una funzione in un file di shell già in repo git del 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"
}

È possibile inserire questa funzione nel vostro di preferiti shell rc (ad esempio ~/.zshrcfile) e sia creare alias e / o si legano ad una combinazione di tasti (di nuovo entrambi possono andare nel file rc):

alias nav=ranger-cd

e / o

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

Disclaimer: i bindkeylavori di cui sopra in ZSH e si dovrebbe cambiare in base alla shell preferita


1

Grazie per Gombai per l'ispirazione, ma su Ubuntu 14.04 LTS ho trovato la soluzione non ha del tutto il lavoro. Modificare leggermente e salvare come alias nel mio .bashrc la seguente ha funzionato perfettamente (dopo la creazione del rangerdirfile):

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

Il seguente post su Ask Ubuntu mi ha aiutato quando stavo cercando di capire il motivo per cui diverse soluzioni Stavo cercando di non funzionavano: /ubuntu/404141/why-cant-i-pipe-into-cd


1

Posso one-up y'all? passando per gli altri argomenti può essere utile, in modo da mettere questo nel vostro shellrc

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

0

Ecco un modo più elegante per scrivendo una funzione wrapper. Basta usare il comando ranger, e se si desidera sincronizzare il cambiamento directory torna alla shell principale, uscire ranger con il capitale Q.

(I codici sotto è prova con Bash e 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
}

Ciò ti consentirà di sincronizzare nuovamente la modifica della directory su richiesta . Utilizzare :qper uscire normalmente, Qper uscire e modificare la directory.


(1) Sembra che tu hai qualche problema con citazione. (2) Che cosa si intende per '' on demand ''?
Scott
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.