Essendo uno sviluppatore, uso sempre il file manager. Mi capita spesso di voler estendere il file manager per aiutarmi ad automatizzare alcune delle mie attività. Sfortunatamente, il gestore di file predefinito sulla maggior parte dei sistemi è sempre stato molto limitante.
File Manager fmanIl fman il file manager è un cambio di gioco. fman è un gestore di file doppio riquadro minimalista. È estensibile come Testo sublime usando Python. Ha tutte le stesse impostazioni di default della tastiera Comandante Uno e file manager simili. Puoi usarlo su Mac OS, finestre, e Linux.
A febbraio 2017, fman è ancora in un programma beta privato a cui chiunque può richiedere l'accesso. L'autore prevede di iniziare le vendite il 1 ° marzo 2017.
Una delle caratteristiche uniche di FAN è il potere andare a. Quando si preme Comando-P, fman richiede un nome di directory.
Potenza Vai afman cerca le partite. Se hai molte directory con la parola fman vedrai tutti i percorsi di directory che contengono quella parola. Ciò rende molto semplice trovare la directory giusta.
Se non ti piacciono i tasti di scelta rapida standard, puoi cambiarli in Utente directory in cui vivono i plugin. Sopra Mac OS la directory dei plugin è ~ / Library / Application Support / fman / Plugin /
.
Su Windows, la directory dei plugin è % Appdata% \ fman
. Su un sistema Linux, la directory dei plugin è ~ / .Config / fman
.
Il Utente
la directory nella directory plugins contiene il file Key Bindings.json
. Questo file in formato JSON contiene le tue preferenze per i tasti di scelta rapida. Il formato del file è:
["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"], "Comando": "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 ": [" Space "]," 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": "rinomina", "keys" : ["F6"], "comando": "sposta", "chiavi": ["F7"], "comando": "create_directory", "chiavi": ["F8"], "comando" : "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" ], "Comando": "incolla", "chiavi": ["Cmd + Alt + V"], "comando": "paste_cut", "chiavi": ["Cmd + A"], "comando ":" Select_all ", " keys ": [" Space "]," command ":" move_cursor_down "," args ": " toggle_selection ": true, " keys ": [" Cmd + Backspace " ], "Command": "move_to_trash", "keys": ["Cmd +."], "Command": "toggle_hidden_files", "keys": ["F2"], "command": "show_volumes" , "Keys": ["Cmd + P"], "command": "go_to"]
In questo file, si specifica il tasto da premere e il comando che si desidera eseguire. Io uso questo file per capire quali comandi sono forniti con il programma.
Il prompt dei comandistampa Maiuscole-Comando-P nel fman per mostrare il prompt dei comandi in cui un comando può essere eseguito. Il prompt dei comandi visualizza tutte le assegnazioni di tasti di scelta rapida al comando.
Per utilizzare un comando nel prompt dei comandi, digita uno spazio anziché un trattino basso. Ad esempio, il comando show_volumes
viene eseguito digitando mostra i volumi nel prompt dei comandi.
È possibile avviare qualsiasi comando in un'estensione dal prompt dei comandi. Questa funzione è un modo comodo e potente per fare le cose.
Le estensioni possono essere aggiunte a fman. Dalla pagina delle estensioni di fmansul sito Web, fai clic su qualsiasi estensione per scaricarlo. Quindi copiare la directory completa dell'estensione su plugins elenco.
fman Con Status Bar Extender PluginScaricando il Barra di stato Estensione
estensione, la barra di stato avrà più informazioni utili sulla directory corrente per ciascun riquadro.
Le estensioni possono modificare il comportamento predefinito di fman.
Ad esempio, la mia estensione OpenWithEditor
che sovrascrive il open_with_editor
comando integrato.
Il comando integrato apre il file con il programma predefinito per l'estensione. La mia estensione sovrascrive quel comando per aprire un file usando l'editor selezionato nel mio BitBar collegare currentFiles.1h.rb
creato nel tutorial BitBar su Tuts+.
Per creare estensioni, innanzitutto creare una directory per l'estensione nella directory dei plug-in.
In questo tutorial, voglio un'estensione che mi consenta di impostare una directory come directory del progetto ed eseguire uno script di comando ogni volta che si accede a questa directory quando un progetto diverso viene impostato come progetto corrente.
Quindi, quando lascio una directory di progetto che ho lavorato e vado a un altro progetto, eseguirà lo script per configurare il mio ambiente. Creerò questa estensione su Mac OS, ma la stessa estensione funzionerà finestre e Linux con alcune modifiche minori.
Per iniziare, crea la directory Responsabile del progetto nella directory dei plugin. Quindi creare un'altra directory in questa directory chiamata responsabile del progetto. Questa directory deve essere in minuscolo e senza spazi.
All'interno di questa directory, crea il file __init__.py. Puoi avere altri file nella directory che contiene anche il codice Python. Quando viene caricata l'estensione, il codice in questo file viene eseguito per primo. Dovrebbe caricare qualsiasi altro file, se necessario.
In questo file, aggiungi quanto segue:
# # Carica le librerie utilizzate in questi comandi. # da fman import DirectoryPaneCommand, DirectoryPaneListener, show_alert, load_json, DATA_DIRECTORY, show_prompt import os, stat # # Sto usando due globali perché è più veloce per controllare # le directory. Ho anche un flusso di lavoro Alfred che fa # uso di queste informazioni. # PROJECTDIR = os.path.expanduser ("~") + "/.currentprojectdir" PROJECTSLIST = os.path.expanduser ("~") + "/.projects"
Questo codice carica le librerie utilizzate in questa estensione. Sto tirando diverse funzioni dal fman
biblioteca. Questi elementi sono:
Biblioteca o funzione | Descrizione |
---|---|
DirectoryPaneCommand | Questo è l'oggetto da sottoclasse per creare un comando a livello di directory. |
DirectoryPaneListener | Questo è l'oggetto da sottoclasse per creare una funzione che ascolterà le modifiche nel riquadro della directory. |
show_alert | Questa funzione mostrerà una finestra di avviso con il messaggio fornito. |
load_json | Questo carica i file di dati json dalla directory User. |
DATA_DIRECTORY | Questa è la directory per la memorizzazione dei dati fman. |
show_prompt | Ciò ottiene un input dall'utente con il messaggio specificato. |
Puoi vedere tutte le funzioni disponibili in fman pagina di documentazione. Attualmente, è un elenco di nomi di funzioni e i loro input di default.
Dopo aver caricato le librerie, imposta due variabili globali: ProjectDir
e PROJESTSLIST
.
Questi globali aiutano a far funzionare rapidamente la funzione di controllo della directory. Questo è importante quando si scrive una routine che viene eseguita ogni volta fman cambia directory.
class SetProjectDirectory (DirectoryPaneCommand): # # Questo comando di directory serve per impostare una nuova directory # di progetto. Aggiungerà all'elenco delle directory del progetto # e imposterà la directory del progetto corrente nella directory. # def __call __ (self): # # Ottieni il percorso della directory. # selected_files = self.pane.get_selected_files () se len (selected_files)> = 1 o (len (selected_files) == 0 e self.get_chosen_files ()): if len (selected_files) == 0 e self.get_chosen_files (): selected_files.append (self.get_chosen_files () [0]) dirName = selected_files [0] se os.path.isfile (dirName): # # È un file, non una directory. Ottieni il nome della directory # per la directory padre di questo file. # dirName = os.path.dirname (dirName) # # Imposta la directory ottenuta come directory del progetto. # con open (PROJECTDIR, "w") come f: f.write (dirName) # # Aggiungi all'elenco dei progetti. Ottieni un nome # dall'utente. # projName, checked = show_prompt ("Assegna nome a questo progetto:") projEntry = projName + "|" + dirName writeappend = 'w' se os.path.isfile (PROJECTSLIST): writeappend = 'a' con open (PROJECTSLIST, writeappend) come f: f.write (projEntry + "\ n") # # Crea il file di script di avvio e apri nell'editor #. # scriptFile = dirName + "/.startproject" con open (scriptFile, 'w') come 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"] se scriptLoc è None: # # Apri il file con TextEdit su ogni Mac. # os.system ("/ usr / bin / open -a TextEdit '" + scriptFile + "'") else: # # Hanno l'estensione OpenWithEditor. Usalo. # os.system ("'" + scriptLoc + "" file "" + scriptFile + "' &") else: # # Tecnicamente, questo non sarà mai raggiunto. Solo qui # per completezza. # show_alert ("Nessuna directory selezionata")
Il SetProjectDirectory
la classe è una sottoclasse di DirectoryPaneCommand
. Il __chiamata__
il metodo viene eseguito ogni volta che il comando set_project_directory
è gestito.
Questa funzione ottiene la directory corrente, la imposta come progetto corrente, chiede all'utente un nome per il progetto, lo salva in un file di elenco dei progetti, crea il .startproject
file e lo apre nell'editor scelto da OpenWithEditor
estensione o TextEdit.
classe ClearProjectDirectory (DirectoryPaneCommand): # # Questo comando di directory sta eliminando il progetto corrente. # Questo è buono da fare prima di uscire da Fman. # def __call __ (self): con open (PROJECTDIR, 'w') come f: f.write ("")
Il prossimo comando è ClearProjectDirectory. Questo comando cancella il ~ / .Currentproject
file.
class EditProjectStartScript (DirectoryPaneCommand): # # Questo comando di directory sta eliminando il progetto corrente. # Questo è buono da fare prima di uscire da Fman. # def __call __ (self): # # Ottieni la directory del progetto corrente. # dirName = "" con open (PROJECTDIR, 'r') come f: dirName = f.read () se dirName! = "": # # Viene impostata una directory di progetto. Modifica il suo file di avvio. # scriptFile = dirName + "/.startproject" scriptLoc = load_json ("OpenWithEditor.json") ["scriptLoc"] se scriptLoc è None: # # Apre il file con TextEdit su ogni Mac. # os.system ("/ usr / bin / open -a TextEdit '" + scriptFile + "'") else: # # Hanno l'estensione OpenWithEditor. Usalo. # os.system ("'" + scriptLoc + "" file "" + scriptFile + "' &")
Il EditProjectStartScript comando ti permette di modificare il file .startproject
script per il progetto attualmente impostato.
Non è necessario essere nella directory principale del progetto per eseguire questo comando, ma è necessario disporre di un progetto valido.
class EnteringProjectDirectory (DirectoryPaneListener): # # Questo viene chiamato ogni volta che una directory viene modificata # in fman. Fai un rapido controllo per vedere se si tratta di una # directory del progetto. In tal caso, se non è il progetto corrente, # imposta il progetto corrente ed esegue lo # di script di installazione per il progetto. # def on_path_changed (self): # # Verifica se la nuova directory è una directory di progetto. # newDir = self.pane.get_path () scriptFile = newDir + "/.startproject" se os.path.isfile (scriptFile): # # Ottieni il nome del progetto corrente e controlla se # sono uguali. # projDir = "" con aperto (PROJECTDIR) come f: projDir = f.read () se projDir! = newDir: # # Sono diversi! Imposta la nuova directory del progetto # ed esegui lo script .startproject. # con open (PROJECTDIR, "w") come f: f.write (newDir) os.system ("'" + scriptFile + "'")
Il EnteringProjectDirectory comando è il comando principale per questa estensione. Tutti gli altri comandi fanno funzionare questo comando.
Dal momento che è una sottoclasse del DirectoryPaneListener
, viene eseguito ogni volta che vengono cambiate le directory. Per questa ragione, questa routine dovrebbe essere il più breve e veloce possibile. Altrimenti, fman diventerà molto ingombrante da usare.
Questo comando controlla se è entrato in una directory di progetto. Se è così, controlla che sia diverso dal progetto attualmente impostato. Se ciò è vero, imposta la nuova directory del progetto ed esegue i progetti .startproject
copione.
Per testare il sistema, ho aggiunto questo codice al .startproject
file:
#! / bin / sh echo "d.type = date \ nd.label = Esempio di data \ nd.default = 2007-05-30 17: 00 \ nd.time = 1" | /Applications/Pashua.app/Contents/MacOS/Pashua -
Questo usa il Pashua programma per mostrare un calendario e un orologio. Fa un rapido controllo visivo per vedere che il programma sta funzionando.
L'elemento successivo è l'assegnazione dei tasti di scelta rapida per l'estensione. Nella parte superiore della directory di estensione, aggiungere questo al Key Bindings.json
file:
["Keys": ["shift + s"], "command": "set_project_directory", "keys": ["shift + c"], "command": "clear_project_directory", "keys": ["Shift + e"], "command": "edit_project_start_script"]
Ad ogni estensione possono essere assegnati tasti di scelta rapida da utilizzare. Questi vengono caricati prima che lo stesso file venga caricato dal utenti
estensione.
In questo modo, l'utente può ignorare qualsiasi configurazione nelle estensioni. Sto assegnando Turni al set_project_directory
comando. Sto assegnando Shift-C al clear_project_directory
comando. E, sto assegnando Maiusc-E al edit_project_start_script
comando.
Se imposti il Responsabile del progetto directory come directory del progetto, dargli il nome del progetto Gestione del progettor, esci dalla directory, cancella i progetti con Shift-C o eseguendo il clear_project_directory
dal prompt dei comandi, quindi immettere di nuovo la directory.
Vedrai il Pashua prompt che mostra la data e l'ora. Ora puoi creare script di avvio che avviano l'editor di testo con i file di progetto e organizzano le finestre sullo schermo per un miglior funzionamento.
Io uso HammerSpoon per creare i layout delle finestre da uno script. Puoi anche eseguire osservatori di directory per ricompilare il tuo progetto e caricarlo in un browser web.
Le possibilità sono infinite.
Ora che sai come creare estensioni per fman, vai avanti e crea il tuo.
Esistono molti modi per estendere la funzionalità di questa semplice estensione. fman è molto divertente da usare ed è molto facile da estendere per avere la funzionalità di cui hai bisogno.