ncursesFM, file manager scritto in C

Condividi con noi i tuoi progetti e guide personali
Rispondi
nierro
Little John
Messaggi: 1019
Iscritto il: 19 novembre 2009, 17:51
Architettura: x86_64 (64bit)

ncursesFM, file manager scritto in C

Messaggio da nierro » 19 settembre 2015, 20:48

Ciao a tutti!
Volevo presentarvi il mio progetto degli ultimi mesi: un fm scritto in C con la UI in ncurses.
Penso che ormai sia piuttosto stabile e maturo.
Innanzitutto, link a github: https://github.com/FedeDP/ncursesFM .
Al link c'è una lista completa delle feature, vedo di riassumere le principali:
* 2 tab
* (un)mount di ISO files tramite fuseiso (se installato)
* tutte le funzionalità che vi aspettereste da un fm (copia/muovi/crea file, cartella/stampa file, rimuovi, rinomina...)
* funzionalità di ricerca di una stringa all'interno del path corrente; in più, può cercare la suddetta stringa anche all'interno degli archivi (senza estrarli)
* estrazione e creazione di archivi compressi tramite la libreria libarchive (senza utilizzare programmi esterni)
* lettura del file di config /etc/default/ncursesFM.conf tramite libconfig.
* Last, but not least, se compilato su un sistema avviato con systemd, e se abilitato nel file di configurazione (o tramite lo switch --inhibit=1 da linea di comando), inibirà tramite l'API sd-bus (compatibile sia col vecchio dbus sia con il futuro kdbus) la sospensione automatica del pc.

Alcune delle makedep sono opzionali, vi rimando ancora al github per avere più dettagli.
All'interno di ncursesFM, premete "l" o "L" (maiuscola o minuscola non fa differenza) per far comparire l'helper.
Devo essere sincero, mi è capitato spesso negli ultimi mesi di usare il mio fm ad esempio per montare facilmente le ISO, o per estrarre archivi (uso plasma5 dalla versione beta della 5.0 e ark l'han portato solo di recente; ogni tanto la versione frameworks faceva le bizze e allora usavo il mio programma), e non ho mai avuto problemi e anzi lo trovo un valido (per quanto minimale) sostituto ad altri progetti di fm per terminali.
Spero che possa risultare interessante per qualcuno di voi :)
È disponibile su AUR: https://aur.archlinux.org/packages/ncursesfm-git/ .

Qua uno screen:
Immagine

EDIT: thanks @trapanator...link allo screen a risoluzione accettabile: https://raw.githubusercontent.com/FedeD ... rsesfm.png :)
Ultima modifica di nierro il 21 settembre 2015, 10:42, modificato 1 volta in totale.

Avatar utente
trapanator
Little John
Messaggi: 908
Iscritto il: 22 gennaio 2009, 18:56
Località: Trentino

Re: ncursesFM, file manager scritto in C

Messaggio da trapanator » 21 settembre 2015, 8:02

un consiglio: cambia la screenshot con una migliore, è praticamente illeggibile :-)
PC Fisso: Intel E6300 - 4GB RAM - Nvidia Geforce 9300M - HD 320GB

nierro
Little John
Messaggi: 1019
Iscritto il: 19 novembre 2009, 17:51
Architettura: x86_64 (64bit)

Re: ncursesFM, file manager scritto in C

Messaggio da nierro » 21 settembre 2015, 14:22

Aggiunto un link alla immagine fullscreen :)
Grazie!

Avatar utente
trapanator
Little John
Messaggi: 908
Iscritto il: 22 gennaio 2009, 18:56
Località: Trentino

Re: ncursesFM, file manager scritto in C

Messaggio da trapanator » 22 settembre 2015, 8:20

Grazie a te :D Pubblica il tuo progetto anche nel forum di Archlinux in inglese! :D
PC Fisso: Intel E6300 - 4GB RAM - Nvidia Geforce 9300M - HD 320GB

nierro
Little John
Messaggi: 1019
Iscritto il: 19 novembre 2009, 17:51
Architettura: x86_64 (64bit)

Re: ncursesFM, file manager scritto in C

Messaggio da nierro » 22 settembre 2015, 10:20

Già fatto mesi fa :D
Dovrei aggiornare il post, a breve lo farò!

Avatar utente
trapanator
Little John
Messaggi: 908
Iscritto il: 22 gennaio 2009, 18:56
Località: Trentino

Re: ncursesFM, file manager scritto in C

Messaggio da trapanator » 22 settembre 2015, 11:22

Provando ad installare il pacchetto da AUR, mi da questo errore:

Codice: Seleziona tutto

==> Avvio di build() in corso...
libX11 support enabled.
libcups support enabled.
libconfig support enabled.
logind support enabled.
cd src/; gcc -c *.c -Wall  -DLIBX11_PRESENT -DLIBCUPS_PRESENT -DLIBCONFIG_PRESENT -DSYSTEMD_PRESENT
main.c: In function ‘read_config_file’:
main.c:121:50: warning: passing argument 3 of ‘config_lookup_string’ from incompatible pointer type [-Wincompatible-pointer-types]
             config_lookup_string(&cfg, "editor", &config.editor)
                                                  ^
In file included from main.c:26:0:
/usr/include/libconfig.h:282:26: note: expected ‘const char **’ but argument is of type ‘char (*)[4096]’
 extern LIBCONFIG_API int config_lookup_string(const config_t *config,
                          ^
main.c:122:9: error: expected ‘;’ before ‘}’ token
         }
         ^
main.c:125:63: error: ‘str_starting_dir’ undeclared (first use in this function)
             config_lookup_string(&cfg, "starting_directory", &str_starting_dir);
                                                               ^
main.c:125:63: note: each undeclared identifier is reported only once for each function it appears in
makefile:44: set di istruzioni per l'obiettivo "objects" non riuscito
make: *** [objects] Errore 1
==> ERRORE: Si è verificato un errore in build().
    L'operazione sta per essere interrotta...
PC Fisso: Intel E6300 - 4GB RAM - Nvidia Geforce 9300M - HD 320GB

nierro
Little John
Messaggi: 1019
Iscritto il: 19 novembre 2009, 17:51
Architettura: x86_64 (64bit)

Re: ncursesFM, file manager scritto in C

Messaggio da nierro » 22 settembre 2015, 11:31

Ops -.-
Sistemo subito, scusa! :D

EDIT: fixed. Scusa, è che non avendo installato libconfig non mi testava la compilazione di quella parte di codice, che ho cambiato proprio in questi giorni (scordandomi di reinstallare libconfig per testarla ovviamente -.- )

Avatar utente
trapanator
Little John
Messaggi: 908
Iscritto il: 22 gennaio 2009, 18:56
Località: Trentino

Re: ncursesFM, file manager scritto in C

Messaggio da trapanator » 23 settembre 2015, 10:55

Adesso funziona :D

Sarebbe bello se riuscissi ad implementare anche i server SFTP / SAMBA ... sarebbe comodissimo per noi sviluppatori!
PC Fisso: Intel E6300 - 4GB RAM - Nvidia Geforce 9300M - HD 320GB

nierro
Little John
Messaggi: 1019
Iscritto il: 19 novembre 2009, 17:51
Architettura: x86_64 (64bit)

Re: ncursesFM, file manager scritto in C

Messaggio da nierro » 23 settembre 2015, 12:12

Vorrei prima implementare una lista dei block device collegati e quindi dare la possibilità di montarli tramite udisks2 e chiamata a dbus/kdbus (sempre con l'api sd-bus).
Non so come potrei fare per implementare ciò che mi richiedi...non li ho mai usati purtroppo. Ma lo aggiungo alla TODO, poi cercherò di capire come potrei fare!
Mi piacerebbe anche cercare un modo per installare i pacchetti premendo "invio" su di essi, ma è un po' complicato da fare...vedrò :)
Per ora mi concentro sul primo!

nierro
Little John
Messaggi: 1019
Iscritto il: 19 novembre 2009, 17:51
Architettura: x86_64 (64bit)

Re: ncursesFM, file manager scritto in C

Messaggio da nierro » 24 settembre 2015, 14:35

Ok, ho implementato il mount di device usb tramite udisks2 e sd-bus. A breve aggiorno il pkgbuild su aur per rispecchiare le nuove modifiche.
Semplicemente, premi 'm' (o 'M', non cambia) con ncursesFM avviato e passerai alla modalità device, in cui puoi selezionare un device per il mount.
Al momento il tutto secondo me è un po' macchinoso, ma come prima implementazione non c'è male :) se hai / avete suggerimenti fatemi sapere!
Ovviamente udisks2 è una dipendenza opzionale (senza non si potrà montare nessun device usb).

Ho provato anche a pensare a come installare i pacchetti, e potrei sempre utilizzare l'API sd-bus e l'interfaccia dbus di packagekit. Non so ancora come implementare la richiesta della pwd all'utente per installare il pacchetto.

nierro
Little John
Messaggi: 1019
Iscritto il: 19 novembre 2009, 17:51
Architettura: x86_64 (64bit)

Re: ncursesFM, file manager scritto in C

Messaggio da nierro » 26 settembre 2015, 14:04

Ok, adesso se l'utente preme invio sul file di un pacchetto scaricato, chiederà se installarlo, e poi nel caso lo installa. Se il pacchetto ha delle dipendenze, si scarica le dipendenze e le installa.
Utilizzo ancora sd-bus come API, e packagekit. Ho aggiornato il PKGBUILD (e quindi il pacchetto aur) aggiungendo la nuova dipendenza opzionale.
Se si è in ambiente grafico packagekit richiederà la password dell'utente, altrimenti, se si è da tty, non riuscendo a guadagnare i diritti di superuser, l'installazione fallirà (ahimè).
Attendo feedback e consigli :)

Avatar utente
trapanator
Little John
Messaggi: 908
Iscritto il: 22 gennaio 2009, 18:56
Località: Trentino

Re: ncursesFM, file manager scritto in C

Messaggio da trapanator » 28 settembre 2015, 8:09

nierro ha scritto:Ok, adesso se l'utente preme invio sul file di un pacchetto scaricato, chiederà se installarlo, e poi nel caso lo installa. Se il pacchetto ha delle dipendenze, si scarica le dipendenze e le installa.
Utilizzo ancora sd-bus come API, e packagekit. Ho aggiornato il PKGBUILD (e quindi il pacchetto aur) aggiungendo la nuova dipendenza opzionale.
Se si è in ambiente grafico packagekit richiederà la password dell'utente, altrimenti, se si è da tty, non riuscendo a guadagnare i diritti di superuser, l'installazione fallirà (ahimè).
Attendo feedback e consigli :)
Non capisco perché un file manager debba installare pacchetti... forse è un file manager per sviluppatori? :D
PC Fisso: Intel E6300 - 4GB RAM - Nvidia Geforce 9300M - HD 320GB

nierro
Little John
Messaggi: 1019
Iscritto il: 19 novembre 2009, 17:51
Architettura: x86_64 (64bit)

Re: ncursesFM, file manager scritto in C

Messaggio da nierro » 28 settembre 2015, 11:11

Boh, vado a memoria: il fm di ubuntu lo fa (se clicchi due volte su un pacchetto .deb lancia l'installatore).
Diciamo che se un utente scarica un file pacchetto, non vedo perché il fm non debba gestirlo; è un file come gli altri: cosi come monta le ISO o estrae gli archivi, può tornare comodo che installi il pacchetto. E poi mi piaceva impratichirmi con l'api sd-bus e vedere come funziona packagekit; direi soprattutto questo :D
E...funziona davvero bene, è un'ottima astrazione sul package management delle singole distro, nulla da dire, stan facendo davvero un gran bel lavoro!

EDIT: ah ieri ho aggiunto una "fast browse mode": quando attivata, con la ',' (virgola), ti permette di muoverti tra le cartelle e i file semplicemente iniziando a scrivere il loro nome (e premendo invio per aprire i file/muoversi tra le cartelle). Va disattivata premendo ancora virgola :)

nierro
Little John
Messaggi: 1019
Iscritto il: 19 novembre 2009, 17:51
Architettura: x86_64 (64bit)

Re: ncursesFM, file manager scritto in C

Messaggio da nierro » 24 ottobre 2015, 19:01

Ultime modifiche:
1) anche il mount delle iso è stato portato a sd-bus (tramite udisks2).
2) rimossa la dipendenza su libmagic
3) aggiunti 2 sorting differenti dei file/cartelle: per dimensione e per ultima modifica (cambiare tipo di sorting in uso con '.' (punto) )
4) finalmente supporto il ridimensionamento del terminale
5) qualche bugfix, pulizia e ottimizzazione del codice.

Rispondi