Å være en utvikler, bruker jeg filbehandling hele tiden. Jeg finner ofte at jeg ønsker å utvide filbehandleren for å hjelpe meg å automatisere noen av oppgavene mine. Dessverre har standardfilbehandling på de fleste systemer alltid vært svært begrenset.
fman filbehandlingDe fman Filbehandling er en spillveksler. fman er en minimalistisk dual panel filbehandling. Det er uttrekkbar som Sublim tekst bruker python Den har alle de samme tastaturstandardene som Commander One og lignende filbehandlere. Du kan bruke den på Mac os, Windows, og Linux.
Fra februar 2017 er fman fortsatt i et privat beta-program som alle kan be om tilgang til. Forfatteren planlegger å starte salget 1. mars 2017.
En av de unike egenskapene til Fman er kraften til. Når du trykker på Kommando-P, fman ber om et katalognavn.
Kraft går tilfman søker etter kamper. Hvis du har mange kataloger med ordet fman Du vil se alle katalogbanene som inneholder det ordet. Dette gjør det vanskelig å finne riktig katalog.
Hvis du ikke liker standard hurtigtaster, kan du endre dem i Bruker katalog hvor pluginene bor. På Mac os plugin-katalogen er ~ / Bibliotek / Application Support / fman / Plugins /
.
På Windows er plugin-katalogen % Appdata% \ fman
. På et Linux-system er plugin-katalogen ~ / .Config / fman
.
De Bruker
katalog i plugin-katalogen inneholder filen Key Bindings.json
. Denne JSON formaterte filen inneholder dine preferanser for hurtigtaster. Filformatet er:
["Nøkler": ["Ned"], "kommando": "move_cursor_down", "keys": ["Shift + Down"], "kommando": "move_cursor_down", "args": "toggle_selection" : "true", "keys": ["Up"], "kommando": "move_cursor_up", "keys": ["Shift + Up"], "kommando": "move_cursor_up", "args" "Toggle_selection": true, "keys": ["Hjem"], "kommando": "move_cursor_home", "keys": ["Shift + Home"], "kommando": "move_cursor_home" "Args": "toggle_selection": true, "keys": ["End"], "kommando": "move_cursor_end", "keys": ["Shift + End"], "kommando" "Move_cursor_end", "args": "toggle_selection": true, "keys": ["PgDwn"], "kommando": "move_cursor_page_down", "keys": ["Shift + PgDown"], "Kommando": "move_cursor_page_down", "args": "toggle_selection": true, "keys": ["PgUp"], "kommando": "move_cursor ["Shift + PgUp"], "command": "move_cursor_page_up", "args": "toggle_selection": true, "keys": ["Ins"], " kommando ":" move_cursor_down "," args ": " toggle_selection ": true, " keys ": [" Space "]," kommando ":" toggle_selection ", " keys ": [" Backspace "] , "Kommando": "open", "keys": ["Return"], "kommando": "åpen", "Keys": ["F4"], "kommando": "open_with_editor", "keys": ["Shift + F4"], "kommando": "open_with_editor", "args": "create_new" true ", " keys ": [" F5 "]," kommando ":" copy ", " keys ": [" Shift + F6 "]," kommando " ["F7"], "kommando": "create_directory", "keys": ["F8"], "kommando" : "Move_to_trash", "keys": ["D "command": "open_terminal", "keys": ["F10"], "kommando": "open_native_file_manager ", " Keys ": [" F11 "]," kommando ":" copy_paths_to_clipboard ", " keys ": [" Ctrl + Høyre "]," kommando ":" open_in_right_pane ", " keys " ["Ctrl + Venstre"], "kommando": "open_in_left_pane", "keys": ["Cmd + C"], "kommando": "copy_to_clipboard", "keys": ["Cmd + V" ], "Kommando": "paste", "keys": ["Cmd + Alt + V"], "kommando": "paste_cut", "keys": ":" Select_all ", " keys ": [" Space "]," kommando ":" move_cursor_down "," args ": " toggle_selection ": true, " keys ": [" Cmd + Backspace " ], "Kommando": "move_to_trash", "keys": ["Cmd +."], "Kommando": "toggle_hidden_files", "keys": ["F2"], "kommando": "show_volumes" , "Keys": ["Cmd + P"], "kommando": "go_to"]
I denne filen angir du nøkkelen til å trykke og kommandoen du vil utføre. Jeg bruker denne filen for å finne ut hvilke kommandoer som følger med programmet.
Kommandoprompttrykk Skift-Kommando-P i fman for å vise kommandoprompten der en kommando kan utføres. Kommandoprompten viser noen hurtigtastoppgaver til kommandoen.
For å bruke en kommando i kommandoprompten skriv et mellomrom i stedet for en understreking. For eksempel, kommandoen show_volumes
drives av å skrive vis volumer i ledeteksten.
Du kan starte en kommando i en utvidelse fra ledeteksten. Denne funksjonen er en praktisk og en kraftig måte å få ting gjort på.
Utvidelser kan legges til fman. Fra utvidelsessiden til fmans nettsted, klikk på en utvidelse for å laste den ned. Deretter kopierer du utvidelsens full katalog til plugins katalog.
fman Med Status Bar Extender PluginVed å laste ned Status Bar Extender
forlengelse, vil statuslinjen ha mer nyttig informasjon om gjeldende katalog for hver rute.
Extensions kan endre standard oppførsel av fman.
For eksempel, utvidelsen min OpenWithEditor
som overstyrer open_with_editor
innebygd kommando.
Den innebygde kommandoen åpner filen med standardprogrammet for utvidelsen. Min utvidelse overstyrer den kommandoen for å åpne en fil ved hjelp av redigeringsprogrammet valgt i min BitBar plugg inn currentFiles.1h.rb
opprettet i BitBar-opplæringen på Tuts+.
For å opprette utvidelser må du først opprette en katalog for utvidelsen i plugin-katalogen.
I denne veiledningen vil jeg ha en utvidelse som tillater meg å sette en katalog som prosjektkatalogen og kjøre et kommandoskript når du skriver inn denne katalogen når et annet prosjekt er satt som det nåværende prosjektet.
Så når jeg forlater en prosjektkatalog som jeg har jobbet og går til et annet prosjekt, vil det utføre skriptet for å sette opp miljøet mitt. Jeg lager denne utvidelsen på Mac os, men nøyaktig samme utvidelse vil fungere i Windows og Linux med noen mindre endringer.
For å starte, lag katalogen Project i plugin-katalogen. Deretter oppretter du en annen katalog i denne katalogen prosjektleder. Denne katalogen må være lav og ingen mellomrom.
Inne i denne katalogen, opprett filen __init__.py. Du kan ha andre filer i katalogen som inneholder python-kode også. Når utvidelsen er lastet, blir koden i denne filen først utført. Det burde laste alle andre filer etter behov.
I denne filen legger du til følgende:
# # Legg inn biblioteker som brukes i disse kommandoene. # fra fman import DirectoryPaneCommand, DirectoryPaneListener, show_alert, load_json, DATA_DIRECTORY, show_prompt import os, stat # # Jeg bruker to globals fordi det er raskere for å sjekke # katalogene. Jeg har også en Alfred-arbeidsflyt som gjør # bruk av denne informasjonen. # PROJECTDIR = os.path.expanduser ("~") + "/.currentprojectdir" PROJECTSLIST = os.path.expanduser ("~") + "/.projects"
Denne koden laster inn biblioteker som brukes i denne utvidelsen. Jeg trekker flere funksjoner fra fman
bibliotek. Disse elementene er:
Bibliotek eller funksjon | Beskrivelse |
---|---|
DirectoryPaneCommand | Dette er objektet til underklasse for å opprette en katalognivåkommando. |
DirectoryPaneListener | Dette er objektet til underklasse for å lage en funksjon som vil lytte til endringer i katalogruten. |
show_alert | Denne funksjonen viser en varslingsdialog med meldingen gitt. |
load_json | Dette laster i json datafiler fra brukerkatalogen. |
DATA_DIRECTORY | Dette er katalogen for lagring av fman-data. |
show_prompt | Dette får en innspilling fra brukeren med den oppgitte meldingen. |
Du kan se alle funksjonene som er tilgjengelige i fman dokumentasjonsside. For tiden er det en liste over funksjonsnavn og standardinngangene.
Etter å ha lastet inn bibliotekene, sett opp to globale variabler: PROJECTDIR
og PROJESTSLIST
.
Disse globals bidrar til at katalogkontrollfunksjonen går raskt. Det er viktig når du skriver en rutine som utfører hver gang fman endrer kataloger.
klasse SetProjectDirectory (DirectoryPaneCommand): # # Denne katalogkommandoen er for å sette opp et nytt prosjekt # katalog. Det legges til i listen over prosjektkataloger # og setter gjeldende prosjektkatalog til katalogen. # def __call __ (selv): # # Hent katalogbanen. # selected_files = self.pane.get_selected_files () hvis len (selected_files)> = 1 eller (len (selected_files) == 0 og self.get_chosen_files ()): hvis len (selected_files) == 0 og self.get_chosen_files (): selected_files.append (self.get_chosen_files () [0]) dirName = selected_files [0] hvis os.path.isfile (dirName): # # Det er en fil, ikke en katalog. Få katalogen # navn for denne filens overordnede katalog. # dirName = os.path.dirname (dirName) # # Still inn katalogen som er oppnådd som en prosjektkatalog. # med åpne (PROJECTDIR, "w") som f: f.write (dirName) # # Legg til listen over prosjekter. Få et navn # fra brukeren. # projName, checked = show_prompt ("Navn dette prosjektet:") projEntry = projName + "|" + dirName writeappend = 'w' hvis os.path.isfile (PROJECTLIST): writeappend = 'a' med åpne (PROJECTLIST, writeappend) som f: f.write (projEntry + "\ n") # # Lag lanseringsskriptfilen og åpne i # editoren. # scriptFile = dirName + "/.startproject" med åpen (scriptFile, 'w') som 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"] hvis scriptLoc er None: # # Åpne filen med TextEdit som er på hver Mac. # os.system ("/ usr / bin / open -a TextEdit '" + scriptFile + "'") ellers: # # De har OpenWithEditor-utvidelsen. Bruk det. # os.system ("'" + scriptLoc + "" fil "" + scriptFile + "' &") annet: # # Teknisk vil dette aldri bli nådd. Bare her # for fullstendighet. # show_alert ("Ingen katalog valgt")
De SetProjectDirectory
klassen er en underklasse av DirectoryPaneCommand
. De __anrop__
Metoden kjøres når kommandoen set_project_directory
kjøres.
Denne funksjonen får den nåværende katalogen, setter den som det nåværende prosjektet, ber brukeren om et navn på prosjektet, lagrer det til en prosjektlistefil, lager den .startproject
fil, og åpner den i redaktøren som er valgt av OpenWithEditor
forlengelse eller TextEdit.
klasse ClearProjectDirectory (DirectoryPaneCommand): # # Denne katalogen kommandoen er å fjerne det nåværende prosjektet. # Dette er godt å gjøre før du avslutter fman. # def __call __ (selv): med åpen (PROJECTDIR, 'w') som f: f.write ("")
Den neste kommandoen er ClearProjectDirectory. Denne kommandoen rydder ut ~ / .Currentproject
fil.
klasse EditProjectStartScript (DirectoryPaneCommand): # # Denne katalogen kommandoen er å fjerne det nåværende prosjektet. # Dette er godt å gjøre før du avslutter fman. # def __call __ (selv): # # Få den nåværende prosjektkatalogen. # dirName = "" med åpen (PROJECTDIR, 'r') som f: dirName = f.read () hvis dirName! = "": # # En prosjektkatalog er angitt. Rediger det er startfilen. # scriptFile = dirName + "/.startproject" scriptLoc = load_json ("OpenWithEditor.json") ["scriptLoc"] hvis scriptLoc er None: # # Åpne filen med TextEdit som er på hver Mac. # os.system ("/ usr / bin / open -a TextEdit '" + scriptFile + "'") ellers: # # De har OpenWithEditor-utvidelsen. Bruk det. # os.system ("'" + scriptLoc + "" fil "" + scriptFile + "' &")
De EditProjectStartScript kommandoen lar deg redigere .startproject
skript for det nåværende prosjektet.
Du behøver ikke å være i prosjektets hovedkatalog for å kjøre denne kommandoen, men du må ha et gyldig prosjektoppsett.
klasse EnteringProjectDirectory (DirectoryPaneListener): # # Dette kalles hver gang en katalog er endret # i fman. Gjør en rask sjekk for å se om det er et prosjektkatalog. Hvis det er tilfelle, hvis det ikke er det nåværende prosjektet, sett # til det aktuelle prosjektet og kjør installasjonsskriptet # for prosjektet. # def on_path_changed (self): # # Se om den nye katalogen er en prosjektkatalog. # newDir = self.pane.get_path () scriptFile = newDir + "/.startproject" hvis os.path.isfile (scriptFile): # # Få det nåværende prosjektnavnet og se om de # er de samme. # projDir = "" med åpen (PROJECTDIR) som f: projDir = f.read () hvis projDir! = newDir: # # De er forskjellige! Sett inn den nye prosjektkatalogen # og kjør .startproject script. # med åpne (PROJECTDIR, "w") som f: f.write (newDir) os.system ("'" + scriptFile + "'")
De EnteringProjectDirectory kommandoen er hovedkommandoen for denne utvidelsen. Alle de andre kommandoene får denne kommandoen til å fungere.
Siden det er en underklasse av DirectoryPaneListener
, det kjører hver gang kataloger endres. Derfor bør denne rutinen være så kort og rask som mulig. Ellers, fman vil bli svært tungvint å bruke.
Denne kommandoen kontrollerer for å se om den har kommet inn i en prosjektkatalog. I så fall kontrollerer den at den er forskjellig fra det nåværende prosjektet. Hvis det er sant, setter det den nye prosjektkatalogen og kjører prosjektets .startproject
manus.
For å teste systemet, la jeg denne koden til .startproject
fil:
#! / bin / sh echo "d.type = dato \ nd.label = Eksempel dato \ nd.default = 2007-05-30 17: 00 \ nd.time = 1" | /Applications/Pashua.app/Contents/MacOS/Pashua -
Dette bruker Pashua Program for å vise en kalender og klokke. Det gir en rask visuell kontroll for å se at programmet fungerer.
Neste punkt er hurtigtastoppdragene for utvidelsen. I toppen av utvidelseskatalogen legger du til dette i Key Bindings.json
fil:
["" + "", "Kommando": "set_project_directory", "keys": ["shift + c"], "kommando": "clear_project_directory", "keys" ["Skift + e"], "kommando": "edit_project_start_script"]
Hver utvidelse kan ha tilordnet hurtigtaster å bruke. Disse blir lastet før den samme filen blir lastet fra brukere
forlengelse.
På den måten kan brukeren overstyre alt oppsett i utvidelsene. Jeg tilordner Skift-S til set_project_directory
kommando. Jeg tilordner Skift-C til clear_project_directory
kommando. Og jeg tilordner Skift-E til edit_project_start_script
kommando.
Hvis du setter inn Project katalog som prosjektkatalogen, gi det prosjektnavnet Prosjektbehandlingr, avslutte katalogen, fjern prosjektene med Skift-C eller kjører clear_project_directory
fra ledeteksten, og skriv deretter inn katalogen igjen.
Du vil se Pashua spør om dato og klokkeslett. Nå kan du lage startskript som starter tekstredigeringsprogrammet med prosjektfilene og organiserer vinduene på skjermen for bedre arbeid.
jeg bruker HammerSpoon å lage vinduet layoutene fra et skript. Du kan også kjøre katalogvaktere for å kompompilere ditt prosjekt og laste inn i en nettleser.
Mulighetene er endeløse.
Nå som du vet hvordan du lager utvidelser for fman, gå videre og lag din egen.
Det er mange måter du kan utvide funksjonaliteten til denne enkle utvidelsen. fman er veldig morsomt å bruke og er veldig enkelt å strekke for å ha den funksjonaliteten du trenger.