fman Der erweiterbare Dateimanager für ein beliebiges System

Als Entwickler verwende ich ständig den Dateimanager. Oft möchte ich den Dateimanager erweitern, um einige meiner Aufgaben zu automatisieren. Leider war der Standard-Dateimanager auf den meisten Systemen immer sehr einschränkend.

fman Dateimanager

Das fman Dateimanager ist ein Game-Changer. fman ist ein minimalistischer dualer Dateimanager. Es ist wie erweiterbar Erhabener Text mit Python. Es hat alle Tastatureinstellungen als Commander One und ähnliche Dateimanager. Sie können es weiter verwenden Mac OS, Windows, und Linux.

Seit Februar 2017 befindet sich fman noch in einem privaten Beta-Programm, für das jeder Zugriff beantragen kann. Der Autor plant, am 1. März 2017 mit dem Verkauf zu beginnen.

Power Go to

Eine der einzigartigen Funktionen von fman ist die Leistungsfähigkeit. Wenn Sie drücken Befehl-P, fman fordert zur Eingabe eines Verzeichnisnamens auf.

Power Go to

fman sucht nach Übereinstimmungen Wenn Sie viele Verzeichnisse mit dem Wort haben fman Sie sehen alle Verzeichnispfade, die dieses Wort enthalten. Dies macht es sehr einfach, das richtige Verzeichnis zu finden.

Nutzerpreferenzen

Wenn Ihnen die Standard-Hotkeys nicht gefallen, können Sie sie im ändern Nutzer Verzeichnis, in dem die Plugins leben. Auf Mac OS Das Plugins-Verzeichnis lautet ~ / Library / Anwendungssupport / fman / Plugins /

Unter Windows ist das Plugins-Verzeichnis % APPDATA% \ fman. Auf einem Linux-System lautet das Plugins-Verzeichnis ~ / .config / fman

Das Nutzer Das Verzeichnis im Plugins-Verzeichnis enthält die Datei Key Bindings.json. Diese JSON-formatierte Datei enthält Ihre Einstellungen für die Hotkeys. Das Dateiformat ist:

["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"], "Command": "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 "]," Befehl ":" move_cursor_down "," args ": " toggle_selection ": true, " keys ": [" Leertaste "]," command ":" toggle_selection ", " keys ": [" Backspace "] , "Befehl": "go_up", "Schlüssel": ["Eingabe"], "Befehl": "Öffnen", "Schlüssel": ["Return"], "Befehl": "Öffnen", "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": "umbenennen", "keys" : [“F6”], “Befehl”: “bewegen”, “Tasten”: [“F7”], “Befehl”: “Create_Verzeichnis”, “Tasten”: [“F8”], “Befehl” : "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 ": [" Strg + Rechts "]," command ":" open_in_right_pane ", " keys ": ["Strg + Links"], "Befehl": "open_in_left_pane", "keys": ["Cmd + C"], "command": "copy_to_clipboard", "keys": ["Cmd + V" ], "Befehl": "Einfügen", "Tasten": ["Cmd + Alt + V"], "Befehl": "Einfügen_Anschnitt", "Tasten": ["Cmd + A"], "Befehl ":" Select_all ", " keys ": [" Leertaste "]," Befehl ":" move_cursor_down "," args ": " toggle_selection ": true, " keys ": [" Cmd + Backspace " ], "Befehl": "move_to_trash", "keys": ["Cmd +."], "Command": "toggle_hidden_files", "keys": ["F2"], "command": "show_volumes"  , "Keys": ["Cmd + P"], "command": "go_to"]

In dieser Datei geben Sie die zu drückende Taste und den Befehl an, den Sie ausführen möchten. Ich verwende diese Datei, um herauszufinden, welche Befehle mit dem Programm geliefert werden.

Die Eingabeaufforderung

Drücken Sie Umschalt-Befehl-P im fman um die Eingabeaufforderung anzuzeigen, in der ein Befehl ausgeführt werden kann. Die Eingabeaufforderung zeigt alle Hotkey-Zuweisungen für den Befehl an. 

Um einen Befehl in der Eingabeaufforderung zu verwenden, geben Sie ein Leerzeichen anstelle eines Unterstrichs ein. Zum Beispiel der Befehl show_volumes wird durch Eingabe ausgeführt Volumina anzeigen in der Eingabeaufforderung.

Sie können jeden Befehl in einer Erweiterung über die Eingabeaufforderung starten. Diese Funktion ist eine bequeme und leistungsfähige Möglichkeit, Dinge zu erledigen.

Erweiterungen hinzufügen

Erweiterungen können hinzugefügt werden fman. Von der Erweiterungsseite von fmanKlicken Sie auf eine beliebige Erweiterung, um sie herunterzuladen. Kopieren Sie dann das vollständige Verzeichnis der Erweiterung in das Verzeichnis Plugins Verzeichnis.

fman Mit Statusbar Extender Plugin

Durch das Herunterladen der Statusleistenerweiterung Neben der Erweiterung enthält die Statusleiste weitere hilfreiche Informationen zum aktuellen Verzeichnis für jeden Bereich.

Erweiterungen können das Standardverhalten von ändern fman

Zum Beispiel meine Erweiterung OpenWithEditor das überschreibt die open_with_editor eingebauter Befehl. 

Der integrierte Befehl öffnet die Datei mit dem Standardprogramm für die Erweiterung. Meine Erweiterung überschreibt diesen Befehl, um eine Datei mit dem in my ausgewählten Editor zu öffnen Bitbar Plugin currentFiles.1h.rb erstellt im BitBar-Tutorial zu Tuts+.

Erweiterungen schreiben

Um Erweiterungen zu erstellen, erstellen Sie zunächst ein Verzeichnis für die Erweiterung im Plugins-Verzeichnis. 

In diesem Lernprogramm möchte ich eine Erweiterung, mit der ich ein Verzeichnis als Projektverzeichnis festlegen und ein Befehlsskript ausführen kann, wenn dieses Verzeichnis aufgerufen wird, wenn ein anderes Projekt als aktuelles Projekt festgelegt ist. 

Wenn ich also ein Projektverzeichnis hinterlasse, in dem ich gearbeitet habe, und zu einem anderen Projekt gehe, wird das Skript ausgeführt, um meine Umgebung einzurichten. Ich werde diese Erweiterung am erstellen Mac OS, aber genau dieselbe Erweiterung funktioniert in Windows und Linux mit einigen kleinen Modifikationen.

Erstellen Sie zunächst das Verzeichnis Projektmanager im Plugins-Verzeichnis. Dann erstellen Sie ein anderes Verzeichnis in diesem Verzeichnis Projektmanager. Dieses Verzeichnis muss aus Kleinbuchstaben bestehen und darf keine Leerzeichen enthalten. 

Erstellen Sie in diesem Verzeichnis die Datei __init__.py. Sie können auch andere Dateien in dem Verzeichnis haben, das Python-Code enthält. Wenn die Erweiterung geladen wird, wird der Code in dieser Datei zuerst ausgeführt. Es sollte alle anderen Dateien nach Bedarf laden. 

Fügen Sie in dieser Datei Folgendes hinzu:

# # Laden Sie die Bibliotheken, die in diesen Befehlen verwendet werden. # from fman import DirectoryPaneCommand, DirectoryPaneListener, show_alert, load_json, DATA_DIRECTORY, show_prompt import os, stat # # Ich verwende zwei globale Variablen, da # sie die Verzeichnisse schneller überprüfen. Ich habe auch einen Alfred-Workflow, der diese Informationen nutzt. # PROJECTDIR = os.path.expanduser ("~") + "/.currentprojectdir" PROJECTSLIST = os.path.expanduser ("~") + "/.projects"

Dieser Code lädt die in dieser Erweiterung verwendeten Bibliotheken. Ich ziehe mehrere Funktionen aus dem fman Bibliothek. Diese Artikel sind:

 Bibliothek oder Funktion 
Beschreibung
DirectoryPaneCommand
Dies ist das Objekt der Unterklasse, um einen Befehl auf Verzeichnisebene zu erstellen.
DirectoryPaneListener Dies ist das Objekt der Unterklasse, um eine Funktion zu erstellen, die Änderungen im Verzeichnisbereich überwacht.
show_alert
Diese Funktion zeigt einen Alarmdialog mit der angezeigten Nachricht. 
load_json
Dies wird in json-Datendateien aus dem Benutzerverzeichnis geladen. 
DATA_DIRECTORY 
Dies ist das Verzeichnis zum Speichern von Fman-Daten. 
show_prompt 
Dadurch erhält der Benutzer eine Eingabe mit der angegebenen Nachricht.

Sie können alle verfügbaren Funktionen in sehen fman Dokumentationsseite. Derzeit ist es eine Liste von Funktionsnamen und deren Standardeingaben.

Richten Sie nach dem Laden der Bibliotheken zwei globale Variablen ein: PROJECTDIR und PROJESTSLISTE.

Diese globalen Werte sorgen dafür, dass die Verzeichnisprüfung schnell abläuft. Das ist wichtig, wenn Sie eine Routine schreiben, die jedes Mal ausgeführt wird fman wechselt Verzeichnisse.

class SetProjectDirectory (DirectoryPaneCommand): # # Dieser Verzeichnisbefehl dient zum Einrichten eines neuen Projektverzeichnisses. Es fügt der Liste der Projektverzeichnisse # hinzu und setzt das aktuelle Projektverzeichnis auf das Verzeichnis. # def __call __ (self): # # Liefert den Verzeichnispfad. # selected_files = self.pane.get_selected_files () wenn len (selected_files)> = 1 oder (len (selected_files) == 0 und self.get_chosen_files ()): wenn len (selected_files) == 0 und self.get_chosen_files (): selected_files.append (self.get_chosen_files () [0]) dirName = selected_files [0] wenn os.path.isfile (dirName): # # Dies ist eine Datei und kein Verzeichnis. Rufen Sie das Verzeichnis # name für das übergeordnete Verzeichnis dieser Datei ab. # dirName = os.path.dirname (dirName) # # Legt das als Projektverzeichnis erhaltene Verzeichnis fest. # mit open (PROJECTDIR, "w") als f: f.write (dirName) # # Zur Liste der Projekte hinzufügen. Holen Sie sich einen Namen vom Benutzer. # projName, checked = show_prompt ("Name dieses Projekts:") projEntry = projName + "|" + dirName writeappend = 'w' wenn os.path.isfile (PROJECTSLIST): writeappend = 'a' mit offen (PROJECTSLIST, writeappend) als f: f.write (projEntry + "\ n") # # Erstellen Sie die Startskriptdatei und öffnen Sie sie im # Editor. # scriptFile = dirName + "/.startproject" mit 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"], wenn scriptLoc None ist: # # Öffnen Sie die Datei mit dem TextEdit, das sich auf jedem Mac befindet. # os.system ("/ usr / bin / open -a TextEdit '" + scriptFile + "" ") else: # # Sie haben die OpenWithEditor-Erweiterung. Benutze es. # os.system ("'" + scriptLoc + "" file "" + scriptFile + "" & ") else: # # Technisch wird dies nie erreicht. Nur hier # zur Vollständigkeit. # show_alert ("Kein Verzeichnis ausgewählt")

Das SetProjectDirectory Klasse ist eine Unterklasse von DirectoryPaneCommand. Das __Anruf__ Die Methode wird immer ausgeführt, wenn der Befehl ausgeführt wird set_project_directory es läuft. 

Diese Funktion ruft das aktuelle Verzeichnis ab, legt es als aktuelles Projekt fest, fragt den Benutzer nach einem Namen für das Projekt, speichert dieses in einer Projektlistendatei, erstellt die .Startprojekt Datei und öffnet sie im Editor der Wahl durch die OpenWithEditor Erweiterung oder TextEdit.

class ClearProjectDirectory (DirectoryPaneCommand): # # Dieser Verzeichnisbefehl löscht das aktuelle Projekt. # Dies ist gut, bevor Sie fman verlassen. # def __call __ (selbst): mit open (PROJECTDIR, 'w') als f: f.write ("")

Der nächste Befehl lautet ClearProjectDirectory. Dieser Befehl löscht das ~ / aktuelles Projekt Datei.

Klasse EditProjectStartScript (DirectoryPaneCommand): # # Dieser Verzeichnisbefehl löscht das aktuelle Projekt. # Dies ist gut, bevor Sie fman verlassen. # def __call __ (self): # # Das aktuelle Projektverzeichnis abrufen. # dirName = "" mit open (PROJECTDIR, 'r') als f: dirName = f.read () wenn dirName! = "": # # Ein Projektverzeichnis ist gesetzt. Bearbeiten Sie die Startdatei. # scriptFile = dirName + "/.startproject" scriptLoc = load_json ("OpenWithEditor.json") ["scriptLoc"], wenn scriptLoc None ist: # # Öffnen Sie die Datei mit dem TextEdit, der auf jedem Mac vorhanden ist. # os.system ("/ usr / bin / open -a TextEdit '" + scriptFile + "" ") else: # # Sie haben die OpenWithEditor-Erweiterung. Benutze es. # os.system ("'" + scriptLoc + "" file "" + scriptFile + "" & ")

Das EditProjectStartScript Mit dem Befehl können Sie das bearbeiten .Startprojekt Skript für das aktuell eingestellte Projekt. 

Sie müssen sich nicht im Hauptverzeichnis des Projekts befinden, um diesen Befehl auszuführen, aber Sie müssen über ein gültiges Projekt verfügen.

class EnteringProjectDirectory (DirectoryPaneListener): # # Wird immer aufgerufen, wenn ein Verzeichnis in fman geändert wird. Überprüfen Sie kurz, ob es sich um ein Projektverzeichnis handelt. Wenn ja, wenn es nicht das aktuelle Projekt ist, setzen Sie # auf das aktuelle Projekt und führen Sie das Setup-Skript # für das Projekt aus. # def on_path_changed (self): # # Prüfen Sie, ob das neue Verzeichnis ein Projektverzeichnis ist. # newDir = self.pane.get_path () scriptFile = newDir + "/.startproject" if os.path.isfile (scriptFile): # # Ruft den aktuellen Projektnamen ab und prüft, ob sie # gleich sind. # projDir = "" mit open (PROJECTDIR) als f: projDir = f.read () if projDir! = newDir: # # Sie sind verschieden! Legen Sie das neue Projektverzeichnis # fest und führen Sie das Skript .startproject aus. # mit open (PROJECTDIR, "w") als f: f.write (newDir) os.system ("'" + scriptFile + "" ")

Das ProjectDirectory eingeben Befehl ist der Hauptbefehl für diese Erweiterung. Alle anderen Befehle bringen diesen Befehl zum Laufen.

Da ist es eine Unterklasse der DirectoryPaneListener, Es wird jedes Mal ausgeführt, wenn Verzeichnisse geändert werden. Aus diesem Grund sollte diese Routine so kurz und schnell wie möglich sein. Andernfalls, fman wird sehr umständlich zu bedienen. 

Dieser Befehl prüft, ob ein Projektverzeichnis eingegeben wurde. Wenn ja, prüft es, ob es sich vom aktuell eingestellten Projekt unterscheidet. Wenn dies der Fall ist, legt es das neue Projektverzeichnis fest und führt das Projekt aus .Startprojekt Skript. 

Um das System zu testen, fügte ich diesen Code hinzu .Startprojekt Datei:

#! / bin / sh echo “d.type = Datum \ nd.label = Beispieldatum \ nd.default = 2007-05-30 17: 00 \ nd.time = 1” | /Anwendungen/Pashua.app/Contents/MacOS/Pashua -

Dies verwendet die Pashua Programm, um einen Kalender und eine Uhr anzuzeigen. Es ermöglicht eine schnelle visuelle Überprüfung, ob das Programm funktioniert.

Der nächste Punkt ist die Hotkey-Zuweisung für die Erweiterung. Fügen Sie dies im oberen Teil des Erweiterungsverzeichnisses dem hinzu Key Bindings.json Datei:

["Keys": ["shift + s"], "command": "set_project_directory", "keys": ["shift + c"], "command": "clear_project_directory", "keys": ["Shift + e"], "command": "edit_project_start_script"]

Jeder Nebenstelle können Hotkeys zugewiesen werden. Diese werden geladen, bevor dieselbe Datei vom geladen wird Benutzer Erweiterung. 

Auf diese Weise kann der Benutzer alle Einstellungen in den Erweiterungen überschreiben. Ich weise zu Verschiebungen zum set_project_directory Befehl. Ich weise zu Umschalttaste-C zum clear_project_directory Befehl. Und ich ordne zu Umschalttaste-E zum edit_project_start_script Befehl.

Wenn Sie das einstellen Projektmanager Verzeichnis als Projektverzeichnis, geben Sie den Projektnamen an Projekt verwaltenr, verlassen Sie das Verzeichnis, löschen Sie die Projekte mit Umschalttaste-C oder laufen lassen clear_project_directory Geben Sie an der Eingabeaufforderung das Verzeichnis erneut ein.

Ausführen des Testskripts für den Projektmanager

Sie werden das sehen Pashua Eingabeaufforderung mit Datum und Uhrzeit. Jetzt können Sie Startskripte erstellen, die den Texteditor mit den Projektdateien starten und die Fenster auf dem Bildschirm für ein besseres Arbeiten organisieren. 

ich benutze Hammerlöffel um die Fensterlayouts aus einem Skript zu erstellen. Sie können auch Verzeichnisüberwacher ausführen, um Ihr Projekt neu zu kompilieren und in einen Webbrowser zu laden. 

Die Möglichkeiten sind endlos.

Fazit

Jetzt wissen Sie, wie Sie Erweiterungen für erstellen fman, Mach weiter und erstelle dein eigenes.

Es gibt viele Möglichkeiten, die Funktionalität dieser einfachen Erweiterung zu erweitern. fman macht viel Spaß und ist sehr einfach zu erweitern, um die Funktionalität zu haben, die Sie benötigen.