Als ontwikkelaar gebruik ik altijd de bestandsbeheerder. Ik merk vaak dat ik de bestandsbeheerder wil uitbreiden om me te helpen sommige van mijn taken te automatiseren. Helaas was de standaard bestandsbeheerder op de meeste systemen altijd zeer beperkt.
fman BestandsbeheerDe fman bestandsbeheer is een game-wisselaar. fman is een minimalistische bestandsbeheerder met dubbel scherm. Het is uitbreidbaar zoals Sublieme tekst Python gebruiken. Het heeft allemaal dezelfde toetsenbordstandaards als Commandant Eén en vergelijkbare bestandsbeheerders. Je kunt het gebruiken MacOS, ramen, en Linux.
Vanaf februari 2017 bevindt fman zich nog in een privé bètaprogramma dat iedereen toegang kan vragen. De auteur is van plan om vanaf 1 maart 2017 met de verkoop te beginnen.
Een van de unieke kenmerken van fman is de kracht om te gaan. Wanneer u op drukt Command-P, fman vraagt om een mapnaam.
Power Go Tofman zoekt naar wedstrijden. Als u veel mappen met het woord hebt fman je ziet alle mappaden die dat woord bevatten. Dit maakt het vinden van de juiste directory erg gemakkelijk.
Als u niet van de standaard sneltoetsen houdt, kunt u deze wijzigen in de Gebruiker directory waar de plug-ins leven. Op MacOS de map met plug-ins is ~ / Bibliotheek / Application Support / fman / Plugins /
.
In Windows is de map met plug-ins % APPDATA% \ fman
. Op een Linux-systeem is de map met plug-ins ~ / .Config / fman
.
De Gebruiker
map in de map met plug-ins bevat het bestand Key Bindings.json
. Dit JSON-geformatteerde bestand bevat uw voorkeuren voor de sneltoetsen. Het bestandsformaat is:
["Keys": ["Down"], "command": "move_cursor_down", "keys": ["Shift + Down"], "command": "move_cursor_down", "args": "toggle_selection" : true, "keys": ["Up"], "command": "move_cursor_up", "keys": ["Shift + Up"], "command": "move_cursor_up", "args": "Toggle_selection": true, "keys": ["Home"], "command": "move_cursor_home", "keys": ["Shift + Home"], "command": "move_cursor_home", "Args": "toggle_selection": true, "keys": ["End"], "command": "move_cursor_end", "keys": ["Shift + End"], "command": "Move_cursor_end", "args": "toggle_selection": true, "keys": ["PgDwn"], "command": "move_cursor_page_down", "keys": ["Shift + PgDown"], "Opdracht": "move_cursor_page_down", "args": "toggle_selection": true, "keys": ["PgUp"], "command": "move_cursor _page_up ", " keys ": [" Shift + PgUp "]," command ":" move_cursor_page_up "," args ": " toggle_selection ": true, " keys ": [" Ins "]," command ":" move_cursor_down "," args ": " toggle_selection ": true, " keys ": [" Spatie "]," command ":" toggle_selection ", " keys ": [" Backspace "] , "Command": "go_up", "keys": ["Enter"], "command": "open", "keys": ["Return"], "command": "open", "Keys": ["F4"], "command": "open_with_editor", "keys": ["Shift + F4"], "command": "open_with_editor", "args": "create_new": true, "keys": ["F5"], "command": "copy", "keys": ["Shift + F6"], "command": "rename", "keys" : ["F6"], "commando": "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 + Left"], "command": "open_in_left_pane", "keys": ["Cmd + C"], "command": "copy_to_clipboard", "keys": ["Cmd + V" ], "Command": "paste", "keys": ["Cmd + Alt + V"], "command": "paste_cut", "keys": ["Cmd + A"], "command ":" Select_all ", " keys ": [" Spatie "]," command ":" move_cursor_down "," args ": " toggle_selection ": true, " keys ": [" Cmd + Backspace " ], "Opdracht": "move_to_trash", "keys": ["Cmd +."], "Command": "toggle_hidden_files", "keys": ["F2"], "command": "show_volumes" , "Keys": ["Cmd + P"], "command": "go_to"]
In dit bestand geeft u de toets op die moet worden ingedrukt en de opdracht die u wilt uitvoeren. Ik gebruik dit bestand om erachter te komen welke opdrachten bij het programma horen.
De opdrachtpromptdruk op Shift-Command-P in fman om de opdrachtprompt weer te geven waarin een opdracht kan worden uitgevoerd. De opdrachtprompt geeft eventuele sneltoetstoewijzingen voor de opdracht weer.
Als u een opdracht in de opdrachtprompt wilt gebruiken, typt u een spatie in plaats van een onderstrepingsteken. Bijvoorbeeld het commando show_volumes
wordt uitgevoerd door te typen toon volumes in de opdrachtprompt.
U kunt elke opdracht in een extensie starten vanaf de opdrachtprompt. Deze functie is een handige en krachtige manier om dingen voor elkaar te krijgen.
Extensies kunnen worden toegevoegd aan fman. Van de extensiespagina van fmanwebsite, klik op een extensie om het te downloaden. Kopieer de volledige map van de extensie naar de plugins directory.
fman Met Status Bar Extender PluginDoor het te downloaden Statusbalkvergroter
extensie, heeft de statusbalk meer nuttige informatie over de huidige map voor elk paneel.
Extensies kunnen het standaardgedrag van wijzigen fman.
Bijvoorbeeld mijn extensie OpenWithEditor
dat overschrijft de open_with_editor
ingebouwd commando.
De ingebouwde opdracht opent het bestand met het standaardprogramma voor de extensie. Mijn extensie overschrijft die opdracht om een bestand te openen met de editor die is geselecteerd in mijn BitBar inpluggen currentFiles.1h.rb
gemaakt in de BitBar-zelfstudie over Tuts+.
Als u extensies wilt maken, maakt u eerst een map voor de extensie in de map met plug-ins.
In deze zelfstudie wil ik een extensie waarmee ik een map kan instellen als de projectmap en een opdrachtscript kan uitvoeren wanneer ik deze map deel wanneer een ander project is ingesteld als het huidige project.
Dus wanneer ik één projectdirectory verlaat die ik heb gebruikt en naar een ander project ga, zal het het script uitvoeren om mijn omgeving in te stellen. Ik ga deze extensie maken MacOS, maar exact dezelfde extensie zal werken ramen en Linux met enkele kleine wijzigingen.
Maak om te beginnen de map Projectleider in de map met plug-ins. Maak vervolgens een andere map aan in deze opgeroepen map projectleider. Deze map moet allemaal in kleine letters en geen spaties zijn.
Maak het bestand in deze map __init__.py. U kunt ook andere bestanden in de directory met pythoncode hebben. Wanneer de extensie is geladen, wordt de code in dit bestand eerst uitgevoerd. Het zou alle andere bestanden naar behoefte moeten laden.
Voeg in dit bestand het volgende toe:
# # Laad de bibliotheken die in deze opdrachten worden gebruikt. # from fman import DirectoryPaneCommand, DirectoryPaneListener, show_alert, load_json, DATA_DIRECTORY, show_prompt import os, stat # # Ik gebruik twee globals omdat het sneller is # te controleren in de mappen. Ik heb ook een Alfred-workflow die # gebruikmaakt van deze informatie. # PROJECTDIR = os.path.expanduser ("~") + "/.currentprojectdir" PROJECTSLIST = os.path.expanduser ("~") + "/.projects"
Deze code laadt de bibliotheken die in deze extensie worden gebruikt. Ik trek verschillende functies uit de fman
bibliotheek. Deze items zijn:
Bibliotheek of functie | Omschrijving |
---|---|
DirectoryPaneCommand | Dit is het sub-object om een opdracht op directoryniveau te maken. |
DirectoryPaneListener | Dit is het subclass-object om een functie te maken die naar wijzigingen in het directoryvenster luistert. |
show_alert | Deze functie toont een waarschuwingsdialoog met het gegeven bericht. |
load_json | Hiermee worden json-gegevensbestanden uit de gebruikersmap geladen. |
DATA_DIRECTORY | Dit is de map voor het opslaan van fman-gegevens. |
show_prompt | Dit krijgt een invoer van de gebruiker met het gegeven bericht. |
U kunt alle functies bekijken die beschikbaar zijn in de fman documentatiepagina. Momenteel is het een lijst met functienamen en hun standaardinvoer.
Na het laden van de bibliotheken, stelt u twee globale variabelen in: Projectmap
en PROJESTSLIST
.
Deze globals helpen de directorycontrolefunctie snel te laten werken. Dat is belangrijk bij het schrijven van een routine die elke keer wordt uitgevoerd fman verandert mappen.
class SetProjectDirectory (DirectoryPaneCommand): # # Deze mapopdracht is voor het opzetten van een nieuwe # directory voor projecten. Het zal toevoegen aan de lijst met projectmappen # en de huidige projectdirectory instellen op de map. # def __call __ (zelf): # # Download het directorypad. # selected_files = self.pane.get_selected_files () if len (selected_files)> = 1 of (len (selected_files) == 0 en self.get_chosen_files ()): if len (selected_files) == 0 en self.get_chosen_files (): selected_files.append (self.get_chosen_files () [0]) dirName = selected_files [0] if os.path.isfile (dirName): # # Het is een bestand, geen map. Haal de map # naam voor de bovenliggende map van dit bestand. # dirName = os.path.dirname (dirName) # # Stel de map in die is verkregen als een projectmap. # met open (PROJECTDIR, "w") als f: f.write (dirName) # # Voeg toe aan de lijst met projecten. Krijg een naam # van de gebruiker. # projName, checked = show_prompt ("Noem dit project:") projEntry = projName + "|" + dirName writeappend = 'w' if os.path.isfile (PROJECTSLIST): writeappend = 'a' with open (PROJECTSLIST, writeappend) als f: f.write (projEntry + "\ n") # # Maak het startscript-bestand en open het in de # editor. # scriptFile = dirName + "/.startproject" met open (scriptFile, 'w') als 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"] als scriptLoc Geen is: # # Open het bestand met de TextEdit die op elke Mac staat. # os.system ("/ usr / bin / open -a TextEdit '" + scriptFile + "'") else: # # Ze hebben de extensie OpenWithEditor. Gebruik het. # os.system ("'" + scriptLoc + "" file "" + scriptFile + "' &") else: # # Technisch gezien zal dit nooit worden bereikt. Gewoon hier # voor de volledigheid. # show_alert ("Geen map geselecteerd")
De SetProjectDirectory
klasse is een subklasse van DirectoryPaneCommand
. De __call__
methode wordt uitgevoerd wanneer het commando set_project_directory
wordt uitgevoerd.
Deze functie haalt de huidige map op, stelt deze in als het huidige project, vraagt de gebruiker om een naam voor het project, slaat deze op in een projectlijstbestand, maakt de .startproject
bestand, en opent het in de editor van keuze door de OpenWithEditor
extensie of TextEdit.
class ClearProjectDirectory (DirectoryPaneCommand): # # Deze mapopdracht maakt het huidige project leeg. # Dit is goed om te doen voordat je Fman verlaat. # def __call __ (zelf): met open (PROJECTDIR, 'w') als f: f.write ("")
Het volgende commando is ClearProjectDirectory. Met deze opdracht verwijdert u de ~ / .Currentproject
het dossier.
class EditProjectStartScript (DirectoryPaneCommand): # # Deze mapopdracht maakt het huidige project leeg. # Dit is goed om te doen voordat je Fman verlaat. # def __call __ (zelf): # # Download de huidige projectdirectory. # dirName = "" met open (PROJECTDIR, 'r') als f: dirName = f.read () if dirName! = "": # # Een projectdirectory is ingesteld. Bewerk het startbestand. # scriptFile = dirName + "/.startproject" scriptLoc = load_json ("OpenWithEditor.json") ["scriptLoc"] als scriptLoc Geen is: # # Open het bestand met de TextEdit die op elke Mac staat. # os.system ("/ usr / bin / open -a TextEdit '" + scriptFile + "'") else: # # Ze hebben de extensie OpenWithEditor. Gebruik het. # os.system ("'" + scriptLoc + "" bestand "" + scriptFile + "' &")
De EditProjectStartScript commando kunt u de .startproject
script voor het momenteel ingestelde project.
U hoeft niet in de hoofddirectory van het project te zijn om deze opdracht uit te voeren, maar u moet wel een geldige projectopstelling hebben.
class EnteringProjectDirectory (DirectoryPaneListener): # # Dit wordt elke keer dat een map # in fman wordt gewijzigd, genoemd. Doe een snelle controle om te zien of het een project # map is. Als dat het geval is, # stel dan in op het huidige project en voer het setup-script # voor het project uit. # def on_path_changed (self): # # Kijk of de nieuwe map een projectdirectory is. # newDir = self.pane.get_path () scriptFile = newDir + "/.startproject" als os.path.isfile (scriptFile): # # Haal de huidige projectnaam op en kijk of ze # hetzelfde zijn. # projDir = "" met open (PROJECTDIR) als f: projDir = f.read () if projDir! = newDir: # # Ze zijn anders! Stel de nieuwe projectdirectory # in en voer het script .startproject uit. # met open (PROJECTDIR, "w") als f: f.write (newDir) os.system ("'" + scriptFile + "'")
De EnteringProjectDirectory opdracht is de hoofdopdracht voor deze extensie. Alle andere opdrachten zorgen ervoor dat dit commando werkt.
Omdat het een subklasse is van de DirectoryPaneListener
, het werkt telkens wanneer directories worden gewijzigd. Om deze reden zou deze routine zo kort en snel mogelijk moeten zijn. Anders, fman zal erg omslachtig worden om te gebruiken.
Deze opdracht controleert of er een projectdirectory is ingevoerd. Als dit het geval is, controleert het of het afwijkt van het momenteel ingestelde project. Als dat waar is, wordt de nieuwe projectdirectory ingesteld en worden de projecten uitgevoerd .startproject
script.
Om het systeem te testen, heb ik deze code toegevoegd aan de .startproject
het dossier:
#! / bin / sh echo "d.type = datum \ nd.label = Voorbeelddatum \ nd.default = 2007-05-30 17: 00 \ nd.time = 1" | /Applications/Pashua.app/Contents/MacOS/Pashua -
Dit gebruikt de Pashua programma om een kalender en klok te tonen. Het zorgt voor een snelle visuele controle om te zien dat het programma werkt.
Het volgende item zijn de sneltoetstoewijzingen voor de extensie. Voeg dit in de top van de extensiemap toe aan de Key Bindings.json
het dossier:
["Keys": ["shift + s"], "command": "set_project_directory", "keys": ["shift + c"], "command": "clear_project_directory", "keys": ["Shift + e"], "command": "edit_project_start_script"]
Elke extensie kan toegewezen sneltoetsen gebruiken. Deze worden geladen voordat hetzelfde bestand wordt geladen vanuit de gebruikers
uitbreiding.
Op die manier kan de gebruiker elke instelling in de extensies negeren. Ik wijs toe Shift-S naar de set_project_directory
commando. Ik wijs toe Shift-C naar de clear_project_directory
commando. En ik ben aan het toewijzen Shift-E naar de edit_project_start_script
commando.
Als u de Projectleider map als projectmap, geef deze de projectnaam Projectbeheerr, verlaat de map, schakel de projecten uit met Shift-C of het uitvoeren van de clear_project_directory
vanaf de opdrachtprompt en voer de map opnieuw in.
Je zult het zien Pashua prompt met de datum en tijd. Nu kunt u startscripts maken waarmee de teksteditor met de projectbestanden wordt gestart en de vensters op het scherm worden georganiseerd om beter te kunnen werken.
ik gebruik HammerSpoon om de vensterlay-outs van een script te maken. U kunt ook directory-watchers uitvoeren om uw project opnieuw te compileren en in een webbrowser te laden.
De mogelijkheden zijn eindeloos.
Nu weet je hoe je extensies moet maken fman, ga je gang en maak je eigen.
Er zijn veel manieren om de functionaliteit van deze eenvoudige extensie uit te breiden. fman is heel leuk om te gebruiken en is heel gemakkelijk uit te breiden om de functionaliteit te hebben die je nodig hebt.