2017-10-07 4 views
1

Utiliser ranger,Ranger Commande personnalisée pour déplacer le fichier vers un répertoire prédéfini?

  1. Comment créer un :command qui déplace les fichiers actuellement sélectionnés dans un répertoire prédéfini? Dites, en sélectionnant un file et en tapant :move_to_path il fonctionne

    fichier mv/chemin/emplacement/fichier

  2. Comment pourrais-je faire la même chose qu'avec (1), mais se lier à la place une :command clé? Dites en mettant en évidence un fichier et en tapant mf il exécute :move_to_path sur le fichier sélectionné.

Répondre

2

Je ne suis pas un utilisateur de ranger, mais j'ai vu une entrée dans le wiki de garde qui semble être utile: https://github.com/ranger/ranger/wiki/Commands.

TL; DR: modifier le fichier ~/.config/ranger/commands.py

from ranger.api.commands import Command 
class move_to_path(Command): 
    """ 
    :move_to_path 
    Move file to a directory 
    """ 
    def execute(self): 
     import shutil # for shutil.copy, os.rename works fine too 
     shutil.move(self.fm.thisfile.path, "/your/directory/" + self.fm.thisfile.basename) 

Vous avez maintenant votre commande que vous pouvez lancer avec: move_to_path. Vous pouvez écrire du code Python pour savoir où obtenir le nom du répertoire: fixe, dans un fichier de configuration de votre choix, etc.

Maintenant, pour ajouter un raccourci clavier, nous allons jeter un oeil à: https://github.com/ranger/ranger/wiki/Keybindings ou à: http://ranger.nongnu.org/ranger.1.html#KEY-BINDINGS Si Je ne me trompe pas, vous pouvez éditer le ~/.config/ranger/config/rc.conf et ajouter un raccourci ici. Par exemple, vous pouvez ajouter une ligne:

map mf move_to_path 

Je pense que cela devrait faire l'affaire. Et je vous remercie de me faire découvrir ranger, je vais essayer demain :)

Edit: Pour déplacer plusieurs fichiers sélectionnés, vous pouvez faire:

def execute(self): 
     import shutil # for shutil.copy, os.rename works fine too 
     from os import basename 
     for file in self.fm.thistab.get_selection(): 
      shutil.move(file, "/your/directory/" + basename(file)) 
+0

Cela fonctionne parfaitement, sauf que ce n'est pas '~/.config/ranger/config/rc.conf' est en fait '~/.config/ranger/rc.conf' qui doit être édité avec' map mf move_to_path'. – George

+0

Aussi: savez-vous s'il existe un moyen facile de faire en sorte que cette commande affecte les fichiers sélectionnés par opposition au fichier actuellement affiché? – George

+0

Je vais devoir essayer de faire une réponse acceptable, mais je pense que le wiki sur github contient beaucoup d'informations, il est aussi possible de voir les fichiers sources de python pour obtenir quelques indices. Je vais modifier la réponse. – RobinG