Configurazione
Dove sta ogni cosa
Tutto è un file che puoi leggere, confrontare e copiare su un'altra macchina:
config.toml le impostazioni
keymap.toml le tue assegnazioni di tasti, sopra il profilo
session.toml dov'erano i pannelli
themes/ gli schemi di colore
sites.toml le connessioni salvate
Stanno dove la piattaforma tiene queste cose — ~/.config/fcmd su Linux, Library/ Application Support su macOS, %APPDATA% su Windows. fcmd --dump-config stampa le
impostazioni con cui il programma sta davvero girando, che è il modo più rapido di vedere come
si chiama una chiave.
L'orologio nell'angolo in alto a destra è spento finché non lo chiedi, in F9 → Opzioni → Impostazioni dell'interfaccia: è l'unica cosa sullo schermo che cambia senza che nessuno prema
niente, quindi con lui acceso il programma si sveglia quando scatta il minuto per ridisegnare
quattro caratteri. È un ridisegno al minuto, e su ssh è traffico che stai pagando tu — che è
tutto il motivo per cui non è acceso di default.
F9 → Opzioni → Tutti i parametri è ogni impostazione che esiste, in un elenco: la chiave, il
valore a cui sta, e un · su quelle che non sono più quelle con cui il programma è stato
costruito. Scrivi per filtrare, Invio o F4 per scrivere un valore, Spazio per invertire un
sì-o-no, Canc per rimettere il valore di partenza. I dialoghi sopra, in quel menu, sono la
dozzina di impostazioni che si cambiano più spesso, con le parole che dicono cosa significa
ognuna; questo è tutto il resto, ed è il modo di scoprire come si chiama una chiave.
Opzioni → Salva impostazioni scrive il file delle impostazioni; nient'altro lo fa, quindi
un'impostazione cambiata per vedere cosa fa non c'è più al prossimo avvio. Se preferisci il
contrario, Salva le impostazioni all'uscita in Opzioni → Impostazioni dell'interfaccia
(ui.save_setup_on_exit) scrive il file anche quando esci. Dov'erano i pannelli è un altro
file e torna in ogni caso.
Cosa viene ricordato
Fra una sessione e l'altra il programma tiene, nel suo file di stato accanto alle impostazioni:
le righe di comando eseguite (Alt+F8), dov'era stato ciascun pannello (Alt+F12), i file
che hai letto o modificato (Alt+F11), le cartelle che tieni a portata di mano, le linguette
di entrambi i pannelli e dove erano. ui.command_history e ui.file_history dicono quanti
tenere del primo e del terzo elenco, e ui.history_lifetime quanti giorni si tiene una riga
che nessuno ha fissato dopo l'ultima volta che è stata usata — novanta di default, 0 per
tenerle per sempre. Ins in uno qualunque dei tre elenchi fissa la riga sotto il cursore, e
niente spinge fuori una riga fissata.
Un file che hai già letto si riapre dove l'avevi lasciato — la posizione, la code page, il modo, l'andata a capo e i dieci segnalibri — a meno che non togli Ricorda posizione e codifica di ogni file in Opzioni → Impostazioni del visualizzatore. Si tengono gli ultimi cinquecentododici file.
L'elenco dei file viene scritto ogni volta che un visualizzatore o un editor si apre, quindi è
lo stesso elenco qualunque tasto abbia aperto il file. Un file su un server è ricordato per il
suo percorso remoto, non per la copia che è stata scaricata per leggerlo; un file riaperto
sale in cima invece di comparire due volte. Enter su una riga lo legge, F4 lo modifica, e
una riga il cui file non c'è più lo dice.
I tasti
La mappatura dei tasti è un profilo più le tue modifiche. Ne arrivano due: far, che è quello
per default, e mc. Una tua assegnazione è una riga in keymap.toml:
[[bind]]
keys = ["Ctrl+D"]
scope = "panel"
cmd = "file.delete"
scope è dove vale — global, panel, viewer, editor o dialog — e cmd è uno dei nomi
nella pagina "Tutti i comandi" di questo aiuto. fcmd --check-keymap dice se una mappatura sta
in piedi e nomina tutto quello che è assegnato due volte.
Prima di riassegnare qualcosa vale la pena sapere cosa manda davvero il tuo terminale:
Opzioni → Impara i tasti disegna una casella per ogni tasto che vale la pena provare — i
tasti funzione con ogni modificatore, le frecce con Ctrl e Shift, i tasti di modifica — e
accende la casella quando quel tasto arriva. Premili e guarda. Una casella che non si accende
mai è un tasto che il tuo terminale non sta mandando affatto, e nessuna assegnazione lo farà
comparire; la riga sotto dice a cosa è legato l'ultimo tasto che invece è arrivato, che è come
si distingue "il terminale l'ha mangiato" da "è arrivato e non fa niente". Due Esc escono,
perché un Esc è un tasto sotto prova come tutti gli altri.
Midnight Commander, da cui questa cosa viene, ti lascia anche scrivere a mano la sequenza di escape che un tasto avrebbe dovuto mandare. Qui no: le sequenze le legge una libreria che ha una tabella per i terminali in uso, e lo fa meglio di qualunque cosa scritta a mano — quindi quello che qui manca manca al terminale, e la risposta è un tasto diverso, non una tabella diversa.
I colori
Ctrl+Shift+T passa da un tema all'altro; il menu li offre come elenco. Un tema è un file TOML
di nomi di colore, e uno messo dentro themes/ viene trovato all'avvio — non c'è niente da
registrare e niente da ricompilare.
Il tema per default è la tavolozza di FAR, presa dal suo codice e non da uno screenshot.
Colorare i file per quello che sono
Un tema dice che aspetto ha un archivio o un file nascosto. Un gruppo [[highlight]] in
fcmd.toml lo dice per quello che vuoi tu: una maschera, una dimensione, un'età, gli
attributi, file o cartelle — scritti come li scrive il dialogo dei filtri.
[[highlight]]
name = "Rust"
mask = "*.rs"
fg = "#d7875f"
[[highlight]]
name = "Scritti oggi"
age = "<=1"
fg = "brightgreen"
[[highlight]]
name = "Grandi e nascosti"
size = "1G-"
attrs = "h-s"
fg = "red"
bg = "idx:52"
Decide il primo gruppo che corrisponde a una riga, quindi l'ordine nel file è l'ordine che
conta, e i gruppi predefiniti vengono dopo i tuoi. L'inchiostro è un colore — #d7875f, red,
idx:208 — oppure il nome di un colore del tema come file.archive, che poi segue il tema
quando lo cambi. Un gruppo che non si legge viene nominato nella schermata di avvio e saltato;
il programma parte in ogni caso.
Non sei obbligato a scrivere il file. F9 → Opzioni → Evidenziazione dei file elenca i gruppi
nell'ordine in cui vengono provati, ogni riga disegnata con i suoi colori: Enter o F4 ne
modifica uno, Ins ne crea uno nuovo accanto, Del ne toglie uno, e Ctrl+↑/Ctrl+↓ ne
spostano uno oltre il vicino quando due corrispondono allo stesso file. Ogni riga del dialogo
prende esattamente quello che prende il file, e una condizione che non si legge torna indietro
con il problema nominato invece di essere tenuta. Una modifica vale subito sui pannelli;
Opzioni → Salva la configurazione è quello che la scrive nel file.
Colonne tue
Le dieci viste sono elenchi di colonne che ha deciso qualcun altro. Un blocco [[column_set]]
ne rende tua una: l'id è la cifra su cui sta la vista, quindi id = 3 è quello che disegna
Ctrl+3, e una vista per cui nessuno ha scritto un set resta quella predefinita.
[[column_set]]
id = 3
columns = [
{ type = "name", width = "*" },
{ type = "size", width = 10, align = "right", fmt = "bytes" },
{ type = "mtime", width = 16, fmt = "%Y-%m-%d %H:%M" },
]
I tipi sono name, ext, size, allocated, mtime, btime, atime, attrs, owner,
group, links e descr — gli stessi campi che disegnano le viste predefinite. Una larghezza
è un numero di colonne, una percentuale del pannello, * per prendere quello che resta, oppure
0 per la larghezza naturale della colonna, che per un nome o una descrizione vuol dire
"quello che resta" perché nessuno dei due ha una larghezza propria. align è left o right
dove l'abitudine della colonna non è quella che vuoi; fmt è human o bytes su una
dimensione — 1.18 M contro 1 234 567 — e una stringa strftime su una data.
Una colonna per cui il pannello non ha spazio viene lasciata cadere da destra, e un set che lascerebbe il nome illeggibile ne lascia cadere un'altra, che è la regola che la vista dettagliata segue già con le sue date in più. Una colonna che costa una interrogazione per file — il proprietario, il gruppo, il numero di nomi, la descrizione — viene recuperata dallo stesso worker che usa la vista che la mostra, quindi si riempie un momento dopo l'elenco; una vista il cui set non ne chiede nessuna non paga niente.
Venendo da FAR puoi scrivere invece la coppia di stringhe che scrive il suo dialogo delle modalità del pannello:
[[column_set]]
id = 4
far_types = "N,SC,DM"
far_widths = "0,9,16"
Quello che FAR ha e questo programma no — la dimensione dello stream, l'ora di modifica dei metadati, il numero di stream — viene nominato nella schermata di avvio invece di essere lasciato fuori in silenzio, e un set in cui non c'è niente di leggibile lascia in pace la vista predefinita di quel tasto.
Accanto alle colonne ci sono gli interruttori dello stesso dialogo di FAR, che appartengono alla modalità e non al programma:
[[column_set]]
id = 4
columns = [{ type = "name", width = "*" }, { type = "size", width = 10 }]
fullscreen = true # questa vista dà al pannello tutto lo schermo
align_extensions = true # l'estensione di un file a destra del campo del nome
align_folder_extensions = false # e quella di una cartella: spento, il punto fa parte del nome
folders_upper = false # nomi delle cartelle in maiuscolo
files_lower = false # nomi dei file in minuscolo
upper_to_lower = false # un nome *tutto* maiuscolo disegnato in minuscolo
Ognuno lasciato fuori è quello che il pannello disegnava prima che esistessero: le estensioni
dei file allineate, e nient'altro. fullscreen è il Ctrl+F1 fatto dalla modalità — scegliere
la vista nasconde l'altro pannello e uscirne restituisce lo schermo — ma un pannello che hai
nascosto tu con il tasto resta com'è. upper_to_lower è per i nomi 8.3 che restituisce un
volume FAT, tutti maiuscoli e mai pensati per essere letti così; un nome senza lettere non è
tutto maiuscolo, quindi README cambia e 2026 no.
Cosa è un file
panel.descriptions decide se il descript.ion della cartella venga letto o no. Acceso per
default: Ctrl+Z scrive una riga su un file, Ctrl+6 e Ctrl+7 le mostrano, e il pannello
informativo ne riporta una per esteso. Spento, il file non viene mai aperto — che è quello che
vuole chi non tiene descrizioni su una condivisione di rete, dove un file di servizio per
cartella è un giro di rete per cartella.
Due impostazioni di FAR dicono dove sta quel file e come viene scritto:
[panel]
description_names = ["files.bbs", "descript.ion"] # quali nomi, e in che ordine
description_utf8 = false # tieni la code page in cui era
I nomi vengono cercati in ordine e il primo è quello sotto cui viene scritto un file nuovo;
una lista vuota sono i due qui sopra. Con description_utf8 spento il file torna nella
code page in cui è stato letto — non c'è altro su cui basarsi, e indovinare quella della
macchina trasformerebbe un descript.ion russo in uno latino. Un file che ancora non c'è,
uno che era già UTF-8 e uno la cui pagina non può contenere quello che hai scritto vengono
scritti in UTF-8 lo stesso: un file che un programma DOS non legge è meglio di una riga che
ha perso le parole.
Rompere la parità
panel.sort_chain dice cosa risolve due righe che la chiave di ordinamento lascia pari:
[panel]
sort = "size"
sort_chain = ["ext", "name"]
Fino a tre chiavi — name, ext, size, mtime, btime, atime — interrogate nell'ordine
in cui sono scritte. Il nome ha comunque l'ultima parola dopo di esse, così l'ordine non cambia
fra due letture della stessa cartella, e invertire l'ordinamento inverte tutto l'insieme invece
del solo primo passo.
Mettere davanti certi tipi di file
Un blocco [[sort_group]] in fcmd.toml è una fascia dell'elenco: una maschera, e da quale
parte dei file normali sta. Le fasce tirano certi tipi di file davanti all'elenco e ne spingono
altri dietro, qualunque sia l'ordinamento del pannello.
[[sort_group]]
name = "sorgenti"
mask = "*.rs,*.toml"
[[sort_group]]
name = "prodotti della compilazione"
mask = "*.o,*.rlib,*.d"
place = "back"
Le fasce davanti tengono l'ordine in cui sono scritte, così quelle dietro, e i file che non
corrispondono a nessuna fascia stanno in mezzo. Dentro una fascia vale ancora l'ordinamento
normale, le cartelle tengono il loro posto in cima, e reverse inverte ogni fascia invece di
scambiare le fasce fra loro. Scrivere i blocchi le accende; Shift+F11 — Gruppi sulla barra
dei tasti — le spegne e le riaccende, un pannello per volta. Un blocco che non si legge viene
nominato nella schermata di avvio e saltato, come un gruppo di evidenziazione.
L'editor della tavolozza
F9 → Opzioni → Colori… elenca ogni colore che l'interfaccia usa, con il valore come lo
scrive un file di tema e due suoi campioni: il colore come inchiostro e il colore come sfondo.
Enter chiede quello nuovo — un nome (red, brightcyan, default), uno dei 256
(idx:208), oppure #ff8000 — e lo schermo cambia mentre rispondi, che è l'unico modo di
giudicare un colore.
F2 scrive il risultato in fcmd.toml come blocco [[theme]] sotto l'id del tema, così
l'avvio successivo parte con quello e Shift+F12 continua a girare fra i temi. Uscire senza
F2 tiene i colori per questa sessione e lo dice.
Il tuo menu
F2 apre un menu che scrivi tu. Sta in fcmd-menu.toml accanto alle impostazioni —
fcmd --paths dice esattamente dove — e una riga è un'etichetta, un tasto con cui prenderla, e
le righe di comando da eseguire:
[[menu]]
key = "c"
label = "Compila (cargo)"
when = "panel.has('Cargo.toml')"
run = ["cargo build --release"]
[[menu]]
key = "g"
label = "Git"
submenu = [
{ key = "s", label = "stato", run = ["git status -sb"] },
{ key = "l", label = "storia", run = ["git log --oneline -40"] },
]
Una riga è la stessa riga di comando che prende la riga di comando stessa, quindi le
sostituzioni funzionano: {file} è il file sotto il cursore fra apici, {selection} i nomi che
hai scelto, {list} un file che li contiene, {ask:title=Ramo} ti chiede qualcosa prima che
parta tutto. Più righe vengono eseguite una dopo l'altra e si fermano al primo errore.
when decide se una riga venga mostrata. Quattro fatti — panel.has('Cargo.toml'),
file.is('*.rs'), panel.selected, panel.local — con !, && e || fra di essi. Una
condizione che non riesce a leggere lascia la riga sullo schermo e dice perché, invece di
nasconderla in silenzio.
Una cartella può portarsi il suo .fcmd-menu.toml, e le sue righe stanno sopra quelle che
valgono sempre: il menu del progetto in cui sei è quello che vuoi mentre ci sei dentro.