En tant que développeur, j'utilise tout le temps le gestionnaire de fichiers. Je souhaite souvent étendre le gestionnaire de fichiers pour m'aider à automatiser certaines de mes tâches. Malheureusement, le gestionnaire de fichiers par défaut sur la plupart des systèmes a toujours été très contraignant.
Gestionnaire de fichiers fmanle fman gestionnaire de fichiers est un changeur de jeu. fman est un gestionnaire de fichiers minimaliste à double volet. Il est extensible comme Texte sublime en utilisant Python. Il a tous les mêmes paramètres par défaut du clavier que Commandant un et des gestionnaires de fichiers similaires. Vous pouvez l'utiliser sur macOS, les fenêtres, et Linux.
Depuis février 2017, fman est toujours dans un programme de bêta privé accessible à tous. L'auteur envisage de commencer les ventes le 1er mars 2017.
Une des caractéristiques uniques de fman est le pouvoir aller à. Lorsque vous appuyez sur Commande-P, fman demande un nom de répertoire.
Pouvoir aller àfman recherche des correspondances. Si vous avez plusieurs répertoires avec le mot fman vous verrez tous les chemins de répertoire contenant ce mot. Cela facilite la recherche du bon répertoire.
Si vous n'aimez pas les raccourcis clavier standard, vous pouvez les modifier dans le menu déroulant. Utilisateur répertoire où vivent les plugins. Sur macOS le répertoire des plugins est ~ / Bibliothèque / Application Support / fman / Plugins /
.
Sous Windows, le répertoire des plugins est % APPDATA% \ fman
. Sur un système Linux, le répertoire plugins est ~ / .config / fman
.
le Utilisateur
répertoire dans le répertoire plugins contient le fichier Key Bindings.json
. Ce fichier au format JSON contient vos préférences pour les raccourcis clavier. Le format de fichier est:
[“Keys”: [“Down”], “command”: “move_cursor_down”, “keys”: [“Maj + Bas”], “command”: “move_cursor_down”, “args”: “toggle_selection” : true, “keys”: [“Up”], “command”: “move_cursor_up”, “keys”: [“Maj + Haut”], “command”: “move_cursor_up”, “args”: “Toggle_selection”: true, “keys”: [“Home”], “command”: “move_cursor_home”, “keys”: [“Maj + Accueil”], “command”: “move_cursor_home”, “Args”: “toggle_selection”: true, “keys”: [“End”], “command”: “move_cursor_end”, “keys”: [“Maj + Fin”], “command”: "Move_cursor_end", "args": "toggle_selection": true, "keys": ["PgDwn"], "commande": "move_cursor_page_down", "keys": ["Maj + PgDown"], “Commande”: “move_cursor_page_down”, “args”: “toggle_selection”: true, “keys”: [“PgUp”], “commande”: “move_cursor _page_up ”, “ keys ”: [“ Maj + PgUp ”],“ command ”:“ move_cursor_page_up ”,“ args ”: “ toggle_selection ”: true, “ keys ”: [“ Ins ”],“ commande ":" move_cursor_down "," args ": " toggle_selection ": true, " keys ": [" Espace "]," command ":" toggle_selection ", " keys ": [" Retour arrière "] , “Commande”: “go_up”, “clés”: [“Entrée”], “commande”: “ouvert”, “clés”: [“Retour”], “commande”: “ouvert”, “Keys”: [“F4”], “command”: “open_with_editor”, “keys”: [“Shift + F4”], “command”: “open_with_editor”, “args”: “create_new”: true, “keys”: [“F5”], “command”: “copier”, “keys”: [“Maj + F6”], “command”: “renommer”, “keys” : [“F6”], “command”: “move”, “keys”: [“F7”], “command”: “create_directory”, “keys”: [“F8”], “command” : “Move_to_trash”, “keys”: [“D elete ”],“ command ”:“ move_to_trash ”, “ keys ”: [“ F9 ”],“ command ”:“ open_terminal ”, “ keys ”: [“ F10 ”],“ command ”:“ open_native_file_manager ”, “ Keys ”: [“ F11 ”],“ command ”:“ copy_paths_to_clipboard ”, “ keys ”: [“ Ctrl + Right ”],“ command ”:“ open_in_right_pane ”, “ keys ”: [“Ctrl + Gauche”], “commande”: “open_in_left_pane”, “keys”: [“Cmd + C”], “command”: “copy_to_clipboard”, “keys”: [“Cmd + V” ], “Commande”: “coller”, “touches”: [“Cmd + Alt + V”], “commande”: “paste_cut”, “touches”: [“Cmd + A”], “commande ”:“ Select_all ”, “ keys ”: [“ Space ”],“ command ”:“ move_cursor_down ”,“ args ”: “ toggle_selection ”: true, “ keys ”: [“ Cmd + Backspace ” , "Commande": "move_to_trash", "keys": ["Cmd +."], "Command": "toggle_hidden_files", "keys": ["F2"], "command": "show_volumes" , “Keys”: [“Cmd + P”], “command”: “go_to”]
Dans ce fichier, vous spécifiez la touche sur laquelle vous souhaitez appuyer et la commande que vous souhaitez exécuter. J'utilise ce fichier pour comprendre quelles commandes sont fournies avec le programme.
L'invite de commandepresse Maj-Commande-P dans fman pour afficher l'invite de commande dans laquelle une commande peut être exécutée. L'invite de commande affiche les affectations de raccourcis clavier à la commande..
Pour utiliser une commande dans l'invite de commande, tapez un espace au lieu d'un trait de soulignement. Par exemple, la commande show_volumes
est exécuté en tapant montrer les volumes dans l'invite de commande.
Vous pouvez lancer n'importe quelle commande d'une extension à partir de l'invite de commande. Cette fonctionnalité est un moyen pratique et puissant de faire avancer les choses..
Les extensions peuvent être ajoutées à fman. De la page des extensions de fmanLe site Web de, cliquez sur une extension pour le télécharger. Copiez ensuite le répertoire complet de l’extension dans le répertoire plugins annuaire.
fman avec plugin d'extension de barre d'étatEn téléchargeant le Extender Barre d'état
extension, la barre d'état contiendra des informations plus utiles sur le répertoire en cours pour chaque volet.
Les extensions peuvent changer le comportement par défaut de fman.
Par exemple, mon extension OpenWithEditor
qui annule la open_with_editor
commande intégrée.
La commande intégrée ouvre le fichier avec le programme par défaut pour l'extension. Mon extension remplace cette commande pour ouvrir un fichier en utilisant l'éditeur sélectionné dans mon BitBar brancher currentFiles.1h.rb
créé dans le tutoriel BitBar sur Tuts+.
Pour créer des extensions, créez d'abord un répertoire pour l'extension dans le répertoire plugins.
Dans ce tutoriel, je souhaite une extension qui me permette de définir un répertoire comme répertoire du projet et d'exécuter un script de commande chaque fois que vous entrez dans ce répertoire lorsqu'un projet différent est défini comme projet en cours..
Ainsi, lorsque je quitte un répertoire de projet sur lequel je travaillais et que je passe à un autre projet, le script est exécuté pour configurer mon environnement. Je vais créer cette extension sur macOS, mais la même extension exacte fonctionnera dans les fenêtres et Linux avec quelques modifications mineures.
Pour commencer, créez le répertoire Chef de projet dans le répertoire plugins. Créez ensuite un autre répertoire dans ce répertoire appelé Chef de projet. Ce répertoire doit être tout en minuscule et sans espace.
Dans ce répertoire, créez le fichier __init__.py. Vous pouvez également inclure dans le répertoire d'autres fichiers contenant du code python. Lorsque l'extension est chargée, le code de ce fichier est exécuté en premier. Il convient de charger d'autres fichiers si nécessaire.
Dans ce fichier, ajoutez les éléments suivants:
# # Charge les bibliothèques utilisées dans ces commandes. # from fman import DirectoryPaneCommand, DirectoryPaneListener, show_alert, load_json, DATA_DIRECTORY, show_prompt import os, stat # # J'utilise deux éléments globaux car il est plus rapide de vérifier # les répertoires. J'ai aussi un flux de travail Alfred qui # utilise ces informations. # PROJECTDIR = os.path.expanduser (“~“) + “/.currentprojectdir” PROJECTSLIST = os.path.expanduser (“~“) + “/.projects”
Ce code charge les bibliothèques utilisées dans cette extension. Je tire plusieurs fonctions de la fman
bibliothèque. Ces articles sont:
Bibliothèque ou fonction | La description |
---|---|
DirectoryPaneCommand | Ceci est l'objet à sous-classe pour créer une commande de niveau répertoire. |
DirectoryPaneListener | Ceci est l'objet à sous-classe pour créer une fonction qui écoutera les modifications dans le volet de répertoire. |
show_alert | Cette fonction affichera un dialogue d'alerte avec le message donné. |
load_json | Cela charge dans les fichiers de données json à partir du répertoire utilisateur. |
DATA_DIRECTORY | C'est le répertoire pour stocker les données fman. |
show_prompt | Ceci obtient une entrée de l'utilisateur avec le message donné. |
Vous pouvez voir toutes les fonctions disponibles dans fman page de documentation. Actuellement, il s’agit d’une liste de noms de fonctions et de leurs entrées par défaut.
Après avoir chargé les bibliothèques, définissez deux variables globales: PROJECTDIR
et LISTE DE PROJETS
.
Ces globales permettent d’exécuter rapidement la fonction de vérification des annuaires. Cela est important lors de l'écriture d'une routine qui s'exécute à chaque fois fman change de répertoire.
class SetProjectDirectory (DirectoryPaneCommand): # # Cette commande de répertoire sert à configurer un nouveau répertoire de projet #. Il sera ajouté à la liste des répertoires de projet # et définira le répertoire du projet actuel sur le répertoire. # def __call __ (self): # # Récupère le chemin du répertoire. # selected_files = self.pane.get_selected_files () si len (selected_files)> = 1 ou (len (selected_files) == 0 et self.get_chosen_files ()): si len (selected_files) == 0 et self.get_chosen_files (): selected_files.append (self.get_chosen_files () [0]) dirName = selected_files [0] si os.path.isfile (dirName): # # C'est un fichier, pas un répertoire. Obtenez le nom du répertoire pour le répertoire parent de ce fichier. # dirName = os.path.dirname (dirName) # # Définit le répertoire obtenu en tant que répertoire de projet. # avec open (PROJECTDIR, “w”) en tant que f: f.write (dirName) # # Ajouter à la liste des projets. Obtenez un nom de l'utilisateur. # nom_projet, vérifié = show_prompt ("Nommez ce projet:") projEntry = nom_projet + "|" + nomDuc Writeappend = 'w' si os.path.isfile (PROJECTSLIST): Writeappend = 'a' avec open (PROJECTSLIST, Writeappend) as f: f.write (projEntry + “\ n”) # # Créez le fichier de script de lancement et ouvrez-le dans l’éditeur #. # scriptFile = dirName + “/.startproject” avec open (scriptFile, 'w') sous la forme f: f.write (“#! / bin / sh \ n \ n”) os.chmod (scriptFile, stat.S_IEXEC | stat .S_IRUSR | stat.S_IWUSR) scriptLoc = load_json («OpenWithEditor.json») [«scriptLoc»] si scriptLoc est Aucun: # # Ouvrez le fichier avec le TextEdit se trouvant sur chaque Mac. # os.system (“/ usr / bin / open -a TextEdit '” + scriptFile + “'“) else: # # Ils ont l'extension OpenWithEditor. Utilise le. # os.system ("'" + scriptLoc + "" fichier "" + scriptFichier + "' et") sinon: # # Techniquement, cela ne sera jamais atteint. Juste ici # pour être complet. # show_alert (“Aucun répertoire sélectionné”)
le SetProjectDirectory
classe est une sous-classe de DirectoryPaneCommand
. le __appel__
La méthode est exécutée à chaque fois que la commande set_project_directory
est couru.
Cette fonction récupère le répertoire en cours, le définit comme projet en cours, demande à l’utilisateur un nom pour le projet, l’enregistre dans un fichier de liste de projets, crée le .démarrer le projet
fichier et l’ouvre dans l’éditeur de choix par le OpenWithEditor
extension ou TextEdit.
class ClearProjectDirectory (DirectoryPaneCommand): # # Cette commande de répertoire efface le projet en cours. # C’est bon à faire avant de quitter fman. # def __call __ (self): avec open (PROJECTDIR, 'w') comme f: f.write (““)
La prochaine commande est ClearProjectDirectory. Cette commande efface le ~ / .currentproject
fichier.
class EditProjectStartScript (DirectoryPaneCommand): # # Cette commande de répertoire efface le projet en cours. # C’est bon à faire avant de quitter fman. # def __call __ (self): # # Récupère le répertoire du projet en cours. # dirName = “” avec open (PROJECTDIR, 'r') comme f: dirName = f.read () si dirName! = ““: # # Un répertoire de projet est défini. Editez son fichier de démarrage. # scriptFile = dirName + “/.startproject” scriptLoc = load_json (“OpenWithEditor.json”) [“scriptLoc”] si scriptLoc est Aucun: # # Ouvrez le fichier avec le TextEdit se trouvant sur chaque Mac. # os.system (“/ usr / bin / open -a TextEdit '” + scriptFile + “'“) else: # # Ils ont l'extension OpenWithEditor. Utilise le. # os.system ("'" + scriptLoc + "" fichier "" + scriptFichier + "' &")
le EditProjectStartScript commande vous permet de modifier le .démarrer le projet
script pour le projet actuellement défini.
Vous n'avez pas besoin d'être dans le répertoire principal du projet pour exécuter cette commande, mais vous devez avoir un projet valide configuré.
class EnteringProjectDirectory (DirectoryPaneListener): # # Ceci est appelé à chaque fois qu'un répertoire est modifié # dans fman. Faites une vérification rapide pour voir s’il s’agit d’un répertoire de projet. Si tel est le cas, s'il ne s'agit pas du projet actuel, # définissez-le sur le projet actuel et exécutez le script d'installation # pour le projet. # def on_path_changed (self): # # Voir si le nouveau répertoire est un répertoire de projet. # newDir = self.pane.get_path () scriptFile = newDir + "/.startproject" si os.path.isfile (scriptFile): # # Récupère le nom du projet actuel et voit s'il est identique. # projDir = "" avec open (PROJECTDIR) en tant que f: projDir = f.read () si projDir! = newDir: # # Ils sont différents! Définissez le nouveau répertoire de projet # et exécutez le script .startproject. # avec open (PROJECTDIR, "w") sous la forme f: f.write (newDir) os.system ("'" + scriptFile + "'")
le EntrerProjectDirectory commande est la commande principale pour cette extension. Toutes les autres commandes font fonctionner cette commande.
Puisqu'il s'agit d'une sous-classe du DirectoryPaneListener
, il s'exécute chaque fois que les répertoires sont modifiés. Pour cette raison, cette routine devrait être aussi courte et rapide que possible. Autrement, fman deviendra très lourd à utiliser.
Cette commande vérifie si elle est entrée dans un répertoire de projet. Si tel est le cas, il vérifie s'il est différent du projet actuellement défini. Si cela est vrai, alors il définit le nouveau répertoire du projet et exécute le projet .démarrer le projet
scénario.
Pour tester le système, j'ai ajouté ce code à la .démarrer le projet
fichier:
#! / bin / sh echo “d.type = date \ nd.label = Exemple de date \ nd.default = 2007-05-30 17: 00 \ nd.time = 1” | /Applications/Pashua.app/Contents/MacOS/Pashua -
Cela utilise le Pashua programme pour afficher un calendrier et une horloge. Cela permet une vérification visuelle rapide du fonctionnement du programme..
L'élément suivant est l'attribution des raccourcis clavier pour le poste. En haut du répertoire des extensions, ajoutez ceci à la Key Bindings.json
fichier:
[“Keys”: [“shift + s”], “command”: “set_project_directory”, “keys”: [“shift + c”], “command”: “clear_project_directory”, “keys”: [“Shift + e”], “commande”: “edit_project_start_script”]
Des raccourcis clavier peuvent être attribués à chaque poste. Ceux-ci sont chargés avant que le même fichier soit chargé à partir du Utilisateurs
extension.
De cette manière, l'utilisateur peut remplacer n'importe quelle configuration des extensions. J'assigne Maj-S au set_project_directory
commander. J'assigne Maj-C au clear_project_directory
commander. Et j'assigne Maj-E au edit_project_start_script
commander.
Si vous définissez le Chef de projet répertoire en tant que répertoire du projet, donnez-lui le nom du projet Gestion de projetr, quittez le répertoire, effacez les projets avec Maj-C ou exécuter le clear_project_directory
à partir de l'invite de commande, puis entrez à nouveau dans le répertoire.
Vous verrez le Pashua invite indiquant la date et l'heure. Vous pouvez maintenant créer des scripts de démarrage qui lancent l'éditeur de texte avec les fichiers de projet et organisent les fenêtres à l'écran pour un meilleur fonctionnement..
j'utilise HammerSpoon pour créer les dispositions de fenêtre à partir d'un script. Vous pouvez également exécuter des observateurs d'annuaire pour recompiler votre projet et le charger dans un navigateur Web..
Les possibilités sont infinies.
Maintenant que vous savez comment créer des extensions pour fman, allez-y et créez le vôtre.
Vous pouvez étendre les fonctionnalités de cette extension simple de plusieurs façons.. fman est très amusant à utiliser et très facile à étendre pour avoir les fonctionnalités dont vous avez besoin.