staging.inyokaproject.org

File Manager und File selection widgets

Status: Ungelöst | Ubuntu-Version: Ubuntu 22.10 (Kinetic Kudu)
Antworten |

Palmstroem

Anmeldungsdatum:
20. Juni 2016

Beiträge: 35

Ich versuche etwas zu verstehen. Vielleicht kann mir jemand helfen. Es gibt einerseits verschiedene Filemanager wie Nautilus, Dolphin, Caja usw. um Files zu manipulieren. Das sind Standalone-Anwendungen. Wenn ich in einem Programm wie Libre-Office oder einem Mail-Client ein File laden oder speichern will, gibt es dafür in den jeweiligen Programmen so File-Selection-Dialoge.

Jetzt meine Frage. Hängen diese unterschiedlichen Dinge irgendwie zusammen? Wenn ich also etwa meinen Filemanager ändere, ändern sich dann auch die File-Selection-Dialoge in den Anwendungsprogrammen? Ich nehme mal nicht an, aber vielleicht könnt ihr mich da aufklären. Weil oft verwenden ja unterschiedliche Filemanager unterschiedliche Iconsets etwa für Ordner und so. Ändern sich die dann in den File-Selection-Dialogen auch von wegen konsistenter Nutzererfahrung?

Wenn ich jetzt für meine Sache eine Funktionalität einem Filemanager hinzufügen möchte, dann könnte ich mit den Entwicklern reden, einen Branch abspalten und das probieren. Und wenn's gelingt und gefällt, dann könnte man das wieder zum Hauptbranch joinen oder eine eigene Variante rausbringen. Wie auch immer. Aber dadurch würden meine Änderungen noch nicht in die File-Selection-Dialoge der Anwendungsprogramme kommen. Oder sind diese so quasi Miniversionen des aktuellen Filemanagers? Muss ein Filemanager diese Funktionalität quasi auch anbieten? Ich nehme mal nicht an.

WO aber müsste ich Änderungen anbringen, damit diese auch in den File-Selection-Dialogen verwendbar werden? Ich nehme mal an, das sind Libraries, die die Entwickler halt in ihre Programme einbinden. Aber davon gibt's wahrscheinlich unzählige, und für all die müsste ich meine Änderungen einarbeiten, damit diese in den unterschiedlichsten Anwendungsprogrammen wirksam werden. Oder gibt's da quasi eine Standard-Library? Allein schon in unterschiedlichen Programmiersprachen gibt's da ja wahrscheinlich Verschiedenste.

Oder sind diese File-Dialoge gar eine Betriebssystem-funktionalität, und ich müsste meine Änderungen auf dieser Ebene einfügen? Wie gesagt. Vorerst will ich das einmal nur verstehen.

ChickenLipsRfun2eat Team-Icon

Supporter
Avatar von ChickenLipsRfun2eat

Anmeldungsdatum:
6. Dezember 2009

Beiträge: 12070

Hallo!

Da hast du dir gleich ein schönes Thema rausgesucht 😉

Palmstroem schrieb:

…sind Standalone-Anwendungen.

Jein. Ist aber vorerst irrelevant.

Wenn ich in einem Programm wie Libre-Office oder einem Mail-Client ein File laden oder speichern will, gibt es dafür in den jeweiligen Programmen so File-Selection-Dialoge.

Alternativer Suchbegriff „file chooser“.

Jetzt meine Frage. Hängen diese unterschiedlichen Dinge irgendwie zusammen? Wenn ich also etwa meinen Filemanager ändere, ändern sich dann auch die File-Selection-Dialoge in den Anwendungsprogrammen?

Lässt sich pauschal nicht sagen. Ich versuche es mal mit anderem Ansatz: Jedes Framework bietet einen Standard-Dialog für den Zweck an, auf den viele Programme zurückgreifen. Unter GTK wäre das bspw. FileChooserDialog unter Qt QFileDialog. Diese Dialoge siehst du, wenn nichts explizit ausgewählt wurde oder kein eigener integriert ist.

Mit Hilfe von Umgebungsvariablen lässt sich da in vielen Anwendungen ein gemeinsamer Dialog festlegen. Heutzutage wird oftmals xdg-desktop-portal-{wlr,gnome,…} verwendet, bspw. auf Kommandozeile aufrufbar mit GTK_USE_PORTAL=1 programmname. Das ermöglicht den FileDialog der Oberfläche zu verwenden.

Einige Programme unterstützen das allerdings nicht und erzwingen eine eigene Version der Framework-Dialoge, da sie bspw. Anpassungen für Voransichten, Optionen, etc. integriert haben. Kommt also sehr darauf an um welches Programm es geht.

Als weitere Abstraktion kommen Container (Flatpak,Snap,…) hinzu. Bei flatpak müssen bspw. alle entsprechenden flatpak-portale installiert sein, um das in die Container durchzureichen.

Und nicht zuletzt: Dateidialoge sollten den nativen Dateidialog nutzen, damit der Nutzer sein gewohntes Bild, seine Shortcuts, etc. verfügbar hat. Dafür gibt es den Portalkram — ist aber nicht verpflichtend.

WO aber müsste ich Änderungen anbringen…

…liegt also bei jedem Projekt etwas anders.

Was konkret schwebt dir denn an Änderungen vor? Möglicherweise lassen diese sich an den nativen Dialog durchreichen.

Palmstroem

(Themenstarter)

Anmeldungsdatum:
20. Juni 2016

Beiträge: 35

Herzlichen Dank. Sehr gut erklärt. Hm. Wie ich befürchtet habe, sieht das nach kompliziert aus. Und wie ich befürchtet habe fragst du, was ich denn machen will.

Kurz gesagt: Das lässt sich kurz nicht sagen. Es geht um eine strukturierte Fileablage und ein Konzept, das ich seit langer Zeit mit mir herumtrage und für mich selbst sehr erfolgreich einsetze. Siehe: https://github.com/Palmstroemen/FreeDMS Dabei organisiert man seine Fileablage in "Projekten". Wobei gilt: "Alles ist ein Projekt". Der Job, das Wohnen, die Familie, der Partner, jedes Kind, Urlaub, Katze, Hund, Oma. Im Computer sind das alles Projekte, die in Über- und Unterprojekte gegliedert werden. Also etwa /Familie/Kind, /Familie/Oma, usw.

Jedes Projekt enthält gewisse Standardordner wie /_communication, /_finance, /_infos, /_documentation ... (das sind bei mir nur etwa 8 auf der ersten Ebene. Aber dann geht's in der 2. Eben natürlich weiter.)

Der Vorteil dieser Standardordner ist, dass sie immer gleich heißen, und eine einfache Suche etwa nach /_finance es mir möglich macht, sämtliche Projekte nach finanziell relevanten Dateien zu durchsuchen. Und über die Pfade bekomme ich gleich meine gesamte Projektstruktur geschenkt. Ein anderer Vorteil ist, dass jeder (neue Mitarbeiter) sofort weiß, wo er in einem Projekt etwa. Rechnungen ablegen oder suchen soll. Diese Struktur ist also sowohl human-readable und leicht verständlilch als auch maschinen-readable weil standardisiert. (Es heißt nicht in einem Projekt /_finance und im nächsten /_finanzen und im wieder nächsten /_rechnungen sondern es heißt überall gleich.) Das bietet ganz unglaubliche Möglichkeiten.

Diese "Standardordner" bzw. eine ganze Struktur solcher Ordner und Subordner liegt irgendwo in einem Template also einer Vorlage. (Dort kann man diese Struktur auch ganz einfach bearbeiten und anpassen). Jetzt könnte ich beim Anlegen eines neuen Projektes diesen Templateordner duplizieren und umbenennen. Dann hätte ich einen neuen Projektordner vollgefüllt mit leeren Ordnern. Das ist unbrauchbar. Was ich mir wünsche wäre, dass mir Ordner aus dem Projekttemplate beim Ablegen von Dateien (also beim Speichern oder Verschieben) vorgeschlagen werden, falls sie noch nicht existieren. Visuell kann man sich das so vorstellen, dass in einem Filebrowser oder eben einem File-dialog nicht nur die real bereits existierenden Ordner angezeigt werden, sondern auch die aus dem Template passenden aber noch nicht existierenden. Diese könnten z.B. halbtransparent dargestellt werden um anzuzeigen, dass sie noch nicht existieren. Dennoch kann ich mein File darin ablegen und erst dann werden diese Ordner entsprechend auch erzeugt. Somit würden in einem neuen Projekt zunächst einmal gar keine leeren Ordner angelegt werden, wenn man aber Dokumente darin ablegen will sieht man die Standardordner aus dem Template bereits und weiß sofort: "Aha. Das ist eine Rechnung. Gehört wahrscheinlich unter /_finanz abgelegt. Und DIESE Funktionalität (noch nicht existierende Ordner aus dem Template halbtransparent bereits darzustellen) müsste ich sowohl im Filebrowser als auch in den File-Dialogen unterbringen und ich fürchte das übersteigt meine Kapazitäten und Möglichkeiten bei Weitem.

Ziel wäre irgendwann mal eine Distribution, die diese systematische Fileablage unterstützt. Die Vision wäre: Ich beginne ein neues Projekt (z.B. ziehe in eine neue Wohnung, bekomme ein Kind, mache eine Ausbildung, entwickle einen Fluxkompensator, ...). Dann lege ich mir 1x dieses neue Projekt in meinem Filesystem (am Computer, in der Cloud, für mich alleine, geteilt mit Anderen, ...) an und habe überall in allen Programmen dieses neue Projekt zur Verfügung. Ich muss mir nicht im Mailclient, in der Buchhaltung, in den Fotos, im Kalender, ... dieses neue Projekt anlegen. Beim Anlegen des Projektes werden für die einzelnen Ordner entsprechend dem Template Zugriffsrechte vergeben und schon haben alle Programme und Personen Zugriff auf die entsprechenden Daten und Files. Und will ich das Projekt mal sichern oder jemandem weitergeben ziehe ich es einfach auf einen USB-Stick und habe immer ALLES dabei. JEDES Mail, JEDEN Kalendereintrag, JEDEN Vertrag, JEDE Abrechnung, JEDES Foto, ...

Und EIN kleiner Baustein von diesem Konzept wäre eben die Veränderung der File-dialoge und File-Browser.

ChickenLipsRfun2eat Team-Icon

Supporter
Avatar von ChickenLipsRfun2eat

Anmeldungsdatum:
6. Dezember 2009

Beiträge: 12070

Deinen github-Link lese ich mir später durch, habe aber eine gute Vorstellung davon worauf du hinaus willst, da ich etwas ähnliches für meine Projekte verwendet hatte, allerdings wesentlich primitiver in Form eines Skeletons.

Und das wird tatsächlich nicht einfach umsetzbar. Du kannst ja mal mit einem Framework deiner Wahl anfangen (Qt oder GTK, weils die beiden großen sind). Die Gegenprüfung auf ordner.exists() und das Anzeigen nicht vorhandener Ordner ist gar nicht so schwer, wenn du die Rechte des oberen Ordners zwischenspeicherst, um zu ermitteln ob ein fehlendes Verzeichnis überhaupt angelegt werden kann.

Du brauchst allerdings eine Kennzeichnung des Basisordners, damit von diesem aus die Unterstruktur berechnet werden kann, damit dir nicht in jedem Unterordner immer alle Möglichkeiten angezeigt werden. Das ist ziemlich verwirrend für den Benutzer und fehlerträchtig, was das falsche Anlegen angeht. Vielleicht wäre es tatsächlich einfacher einfach alle Unterordner direkt anzulegen und lediglich deren Rechte zu prüfen. Du könntest sie mit 000 anlegen und bei „Aktivierung“ auf 700 ändern. Das würde viele Falschanlagen verhindern. Sind aber Details.

Was den FileDialog angeht: Da musst du natürlich einen eigenen schreiben. Schau dir mal plasma-xdg-desktop-portal-kde an, da bekommst du eine Vorstellung davon wie sich das dann integrieren ließe — vorausgesetzt xdg-portal wird vom System unterstützt.

ChickenLipsRfun2eat Team-Icon

Supporter
Avatar von ChickenLipsRfun2eat

Anmeldungsdatum:
6. Dezember 2009

Beiträge: 12070

Und mal was ganz anderes: Als Alternative zur starren Ordnerstruktur gibt es tag-basiertes. Baloo oder GNOME Tracker beispielsweise. Damit lassen sich sehr gut Detailsuchen machen, vorausgesetzt die Daten sind gepflegt. Vielleicht kannst du auch mit diesem Ansatz deine Organisation hinbekommen. Der Vorteil wäre, dass das bereits in die Desktopumgebung integriert ist. Wäre dann aber ein anderer Workflow.

Ich persönlich nutze fast nie Dateimanager, daher kann ich dir zwar grundlegend Hinweise geben, aber kein „best practice“.
Zum Projekte organisieren verwende ich org-mode. Da wirst du auch den ein oder anderen Denkanstoss finden, wie sich was kategorisieren lässt.

Palmstroem

(Themenstarter)

Anmeldungsdatum:
20. Juni 2016

Beiträge: 35

Danke, das sind sehr wertvolle Inputs. Freut mich sehr, dass du das Konzept begreifst und sogar selbst schon so etwas gemacht hast.

Bei meinem Projekt auf GitHub simuliere ich das nur mit Scripts. Bei der Installation legst er dir einen Master-Projekte-Ordner an in dem dann alle weiteren Projekte liegen werden. Das ist das Analogon zu "Meine Dokumente" auf Win. Ein Projektordner unterscheidet sich von einem normalen Ordner nur durch ein verstecktes Config-File. In dem Projektordner finden sich dann 2 ausführbare Scriptfiles mit passenden Icons, die direkt im Filebrowser anclickbar sind. Mit dem einen kannst du ein Subprojekt anlegen. Also einen neuen Ordner mit verstecktem Config-File. Mit dem anderen kannst du alle Ordner der nächsten Ebene hinzufügen und tauscht sich selbst gegen ein anderes Script aus. Jetzt kannst du deine Files einsortieren. In der nächsten Ebene findest du auch wieder diese beiden Scripts, die dir dann die entsprechend passenden Ordner hinzufügen bzw. Subprojekte erstellen. Sobald du mit Einsortieren fertig bist, kannst du auf der unstersten Ebene das ausgetauschte Script aufrufen das dann alle leeren Ordner über sich wieder weglöscht und sich selbst wieder mit dem Hinzufügen-Script austauscht. Du legst also temporär jeweils die Ordnerstruktur der nächsten Ebene an, sortierst deine Files ein, und löscht alle leeren Ordner wieder weg. Du kannst aber auch durch die Ebenen hindurchsteigen und dir beliebig tiefe Ordnerstrukturen anlegen.

So geht das. JFYI

Palmstroem

(Themenstarter)

Anmeldungsdatum:
20. Juni 2016

Beiträge: 35

Danke auch für den Hinweis. Diese ganze Tag-basierte Sache hat bei mir noch nie funktioniert, und ich habe auch noch nie wo gesehen, dass das funktioniert hätte. Files in Ordner ablegen versteht jeder. Tags vergeben vergisst jeder. 😉

Dakuan

Avatar von Dakuan

Anmeldungsdatum:
2. November 2004

Beiträge: 6234

Es gibt einerseits verschiedene Filemanager wie Nautilus, Dolphin, Caja usw. um Files zu manipulieren.

Eigentlich sollten diese die Dateien nicht selbst manipulieren. Aber sie sollten wissen, wer das kann. Normalerweise kann man das denen mittels *.desktop Dateien beibringen.

Allerdings gibt es da auch einen Graubereich, denn einige Bildbetrachter haben eine Oberfläche wie Dateimanager und können einfache Bildmanipulationen auch selber erledigen (z.B. Geeqie).

Wenn ich also etwa meinen Filemanager ändere, ändern sich dann auch die File-Selection-Dialoge in den Anwendungsprogrammen?

Die Frage ist etwas unscharf gestellt. Der Dialog selbst ändert sich nicht. Du meinst aber wahrscheinlich den angezeigten Inhalt. Der sollte bei komfortablen Programmen mit geringer Verzögerung aktualisiert werden.
Dafür gibt es im Betriebssystem die Funktionen inotify_*, mit denen sich Programme über Änderungen im Dateisystem benachrichtigen lassen können.

Wenn ich jetzt für meine Sache eine Funktionalität einem Filemanager hinzufügen möchte, dann könnte ich mit den Entwicklern reden, ...

Ich glaube nicht, dass die Entwickler solche Wünsche mit Begeisterung aufnehmen werden. Aber ChickenLipsRfun2eat erwähnte ja bereits die entsprechenden Dialoge in den Toolkits. Da lässt sich einigen anpassen. Üblicherweise kann man da Dateifilter einstellen, b.z.w. übergeben.

Oder sind diese File-Dialoge gar eine Betriebssystem-funktionalität, ...

Nein, die stellen normalerweise nur die Grundfunktionalität bereit. Dazu gehören Dinge wie opendir(), readdir() und closedir(). Damit kann man sich seinen eigenen Dialog bauen.

BTW, ich habe jetzt nur kurz überflogen was du da vor hast. Mein Ding wäre das nicht, was aber wohl mit meiner Denk- und Arbeitsweise zusammenhängen kann. Erinnert mich entfernt an MS Bob. Aber meine Sichtweise ist nicht maßgebend. Ich habe da selbst zu viele Sonderwünsche, die mit den üblichen Vorgehensweisen nicht immer harmonieren.

ChickenLipsRfun2eat Team-Icon

Supporter
Avatar von ChickenLipsRfun2eat

Anmeldungsdatum:
6. Dezember 2009

Beiträge: 12070

Dakuan schrieb:

…kann man das denen mittels *.desktop Dateien beibringen.

bzw. MIME-Type, um die entsprechenden Anwendungen zu öffnen.

Ich glaube nicht, dass die Entwickler solche Wünsche mit Begeisterung aufnehmen werden.

Würde ich nicht mal sagen. Für mich wäre das auch nichts, da bei mir starre Strukturen immer nur zu Teilprojekten passen. Wenn ich mich auf Plasma beschränke, kann ich mir eine solche Umsetzung aber schon vorstellen.

Dort wäre es ein „leichtes“ (im Sinne von: der Weg ist vorbereitet) das per Plugin (KService und/oder KPart) umzusetzen und ein paar Helfer-Plasmoide und angepasste Kontextmenüs beizusteuern.

Ist alles noch für Plasma5/Qt5, welches allerdings schon „tot“ ist. Falls du also rumspielst, fang gleich mit Qt6 an. Das ganze auf GTK-Basis kann ich nicht so eben runterbeten, aber auch da gibt es äquivalente Methoden.

Palmstroem

(Themenstarter)

Anmeldungsdatum:
20. Juni 2016

Beiträge: 35

Ok. Das muss ich mir ansehen. Herzlichen Dank für die sehr konkreten Vorschläge!! Und mit Bob hat das Ganze wirklich gar nichts zu tun.

Antworten |