Linux-Port von Far Manager: Fortschritte in 4 Jahren

Die erste Veröffentlichung des Quellcodes von far2l, einem Port von Far Manager für Linux - ein Teil, der einst als grundlegend unmöglich galt - fand am 10. August 2016 statt. Da der Hauptentwickler über den Übergang des Projekts zum Beta-Status spricht , habe ich beschlossen, einen Review-Beitrag darüber zu schreiben, wie die Dinge dort laufen und was sie in den letzten vier Jahren erreicht haben.



Konsolenversion



Die erste Frage, die alle hier , im Opennet und in der Überlieferung gestellt haben - warum nicht in der Konsole? Ursprünglich funktionierte far2l wirklich nur im grafischen Modus über wxWidgets. Dies stellte sich als der einfachste Weg heraus, schnell einen funktionierenden Port mit allen Benutzerfreundlichkeiten zu erhalten: einer X-Zwischenablage und allen Tastaturkürzeln und mit Unterstützung für Ereignisse nicht nur KeyDown, sondern auch KeyUp.



Diese Einschränkung gehört nun der Vergangenheit an: far2l fühlt sich in der Konsole großartig an . Darüber hinaus erschienen dort die sogenannten far2l-Terminalerweiterungen.Wenn Sie also die Konsole far2l in der grafischen Konsole ausführen (z. B. indem Sie über ssh irgendwohin gehen), "verbinden" sie sich miteinander, und die interne far2l sieht auch die Zwischenablage (natürlich mit Erlaubnis des Benutzers) und alle möglichen Hotkeys. Darüber hinaus wurde sogar eine spezielle Kitt-Baugruppe erstellt , mit der Sie all diese Tricks von Windows aus genießen können.



Hier, schau, das ist far2l im GNOME-Terminal







Aber in Kitt







Russische Buchstaben in .zip "von Windows"



Ob Sie es glauben oder nicht, Windows, bis zu sieben, hat ZIP-Archive erstellt und dort Dateinamen in OEM (DOS) -Codierung geschrieben! Kompatibilität ist beängstigend. Infolgedessen steckt StackOverflow voller Fragen: "Wie kann ich einen Reißverschluss mit Krakozyabrami richtig auspacken?".



In far2l haben wir es behoben. Dabei wurde ein Demo-Dienstprogramm entwickelt , das zeigt, wie man mit Codierungen in .zips richtig arbeitet, damit es keine "Krakozyabrs" gibt (nützlich für die Autoren von Archivierern), sowie einen Patch für p7zip , der einen ähnlichen Algorithmus verwendet. Das p7zip-with-Patch ist sogar in eine .deb- Datei (Ubuntu 20.04+, amd64) gepackt , deren Installation die Zip-Unterstützung beispielsweise in Engrampa, das in MATE verwendet wird , behebt .







Abhängigkeiten aufräumen



Anfänglich enthielt der Port eine Reihe von Bibliothekscodes und ist daher in der Linux-Welt in Systempaketen enthalten: pcre, minizip, universeller Zeichensatzdetektor. All dies wurde nun durch den kompetenten Einsatz von Abhängigkeiten ersetzt: Systembibliotheken werden nach Möglichkeit verwendet (Ausnahme: 7z und unrar, die neuesten Bibliotheken werden dort statisch kompiliert, um die neuesten Funktionen der Formate zu unterstützen).



Menschliche Unterstützung .tar.gz



Das Multiarc-Plugin, mit dem far2l auf Archive zugreift, kam aus der Windows-Welt und wusste nicht, wie man .tar.gz als ein Archiv wahrnimmt. Er sah .gz und darin .tar. Um eine Liste der Dateien zu erhalten, mussten Sie daher eine vollständige Dekomprimierung durchführen. Eine solche Erfahrung. Im letzten Monat wurde Multiarc erheblich verbessert und dieses Problem ist verschwunden.



Schönes Konsolenfenster



In der grafischen Version von far2l gab es ein Problem: Die Symbole für die Randzeichnung wurden mit einer störenden gepunkteten Linie angezeigt.



Bild



Wir haben lange gebraucht, um die Ursache oder die Rendering-Einstellungen zu finden, die diesen endlosen Fehler beheben, bis ich mir den Quellcode der GNOME- und KDE-Terminals angesehen habe. Und dort, so stellt sich heraus, werden die Symbole zum Zeichnen von Rahmen vor langer Zeit nicht aus der Schrift, sondern manuell gerendert, so dass die Linien klar und schön sind.



Infolgedessen haben wir dasselbe in far2l getan, nur ein wenig besser: Hinzufügen von Anti-Aliasing. Andernfalls lenken in den KDE- und GNOME-Terminals die kontrastreichsten Zeilen neben Antialias-Text zu sehr ab.



Dabei musste ich die psycho-visuellen Nuancen von Anti-Aliasing herausfinden und nicht existierende „zu helle Pixel“ einfangen, die die Augen hartnäckig sahen. Details .



Bild



Verteilungspakete



Wir sind noch nicht in die Repositories vieler Distributionen gelangt ( und einige sind bereits dort angekommen !). Aber seit langem gibt es Pakete in allen gängigen Formaten . Es gibt sogar ein Build-Skript für Amazon Linux! Und natürlich gibt es einen ppa für * buntu - für die meisten Benutzer die bequemste Möglichkeit, "nur die Scheinwerfer einzuschalten ".



Frischer Farbstoff



far2l wurde aus dem Far 2-Zweig entfernt, sodass einige Plugins dort dringend aktualisiert werden mussten. Kürzlich wurde ein solches Update durchgeführt: Wir haben den Entpackcode von 7z und unrar sowie das Farbschema der Colorer-Syntax aktualisiert. Die restlichen portierten Plugins enthalten keine regelmäßig aktualisierten Teile, aber die alte "Färbung" und die neuen Archive, die nicht geöffnet werden, waren ein echtes Problem. Das war's, sie ist weg!







Net Box rockt



Dies war die zweite Frage, die normalerweise in kamenty gestellt wurde: "und netboooooooooooooooooooo?". Nein, es wird keine Netbox geben! Im Inneren befindet sich Kitt, und das Ziehen der Linux-Version in far2l schien eine seltsame Idee zu sein. Und der Netbox-Code selbst war für die Portierung nicht sehr geeignet.



Daher hat der Autor des Ports, exzellent elfmz, seine eigene Version des Netzwerk-Plugins erstellt: NetRocks. Es gibt alles, was Sie brauchen - ftp [s] und scp und sftp und nfs und webdav und sogar samba! Alles funktioniert in nativen Linux-Bibliotheken. In sftp können Sie sogar Remote-Befehle ausführen und zur Remote-Konsole wechseln.



NetRocks verfügt außerdem über ein Pseudo-Netzwerk-Datei-Plugin, mit dem Sie mit dem lokalen Dateisystem arbeiten können. Wozu? Weil NetRocks gut im Hintergrund ist. Und das übliche Kopieren von Dateien weit - kann nicht.







Was ist mit Plugins im Allgemeinen?



Zusätzlich zu NetRocks enthält das Kit:



Colorer (Syntaxhervorhebung, frisch!)

Multiarc (Arbeiten mit Archiven, modifizierte, frische Archivierer!)

Tmppanel (temporäres Bedienfeld) Align

Block (Formatierungsblöcke für den Editor)

Autowrap (Auto-

Wrap im Editor) Drawline (Zeichnung) Zeilen im Editor)

editcase (Groß- und Kleinschreibung im Editor konvertieren)

SimpleIndent (Arbeit mit Einrückung im Editor)

compare (erweiterte Version von "Ordner vergleichen")

Editor Autocomplete (Autocomplete im Editor)

Filecase (Konvertierung des Falls von Dateinamen)

Inkrementelle Suche ("Schnellsuche" in editor)

inside (zeigt, was sich in ELF und einigen anderen Formaten befindet)

und sogar ein Plugin zum Schreiben anderer Plugins in Python!



Es gibt einige von Drittanbietern, far2-gvfs und far2l-fuse , aber nach dem Erscheinen von NetRocks haben sie etwas an Relevanz verloren.



Im Allgemeinen ist ein Basissatz für das komfortable Arbeiten mit lokalen und Remote-Dateien und -Archiven sowie für das Schreiben von Code direkt im far2l-Editor verfügbar :)



Wie wäre es mit Stabilität? Wann ist die Veröffentlichung schon?



Mit Stabilität ist alles in Ordnung: Für 4 Jahre Arbeit (webdev + jedes Büro) habe ich mit far2l keinen einzigen Datenverlust "gefangen". Der Autor des Ports ist bereit, den Status schrittweise von Alpha auf Beta zu ändern, wenn kritische Fehler nicht innerhalb von ein oder zwei Monaten auftreten. Dann könnte man zum Beispiel darüber nachdenken, Pakete an ein Distributions-Repository zu senden.



Bonus # 1. Gibt es wirklich Wein unter der Haube?



Teilweise :) Einige Teile der WinApi-Übersetzung in die native Linux-API wurden aus Wine abgerufen (z. B. Codierungskonvertierung; übrigens haben sie kürzlich versucht, dieses Teil in iconv umzuschreiben, aber es stellte sich heraus, dass der Code von Wine das Vierfache schneller macht ). Im Laufe der Zeit können Aufrufe dieser Funktionen, die über den far2l-Code verteilt sind, schrittweise durch direkte Aufrufe nativer Funktionen ersetzt werden. In der Zwischenzeit funktioniert dieses Design auch sehr schnell (das langsamste, auf dem sie versucht haben zu laufen -  Himbeer-Pi , der Flug ist normal) und ziemlich zuverlässig.



Bonus # 2. Hör auf, Bullshit zu leiden, lehre die Konsole, du Narren!



Während meiner Arbeit an far2l (einem Tester und manchmal sende ich einfache Patches) habe ich mehr über die Linux-Konsole gelernt als in meinem ganzen Leben zuvor :) Und ich beherrsche auch allmählich C, auf dem ich seit dem Institut nicht mehr programmieren musste - es gab keinen Grund (zur gleichen Zeit) übrigens mit git zu "du" gewechselt). Warten Sie also bald auf einen Artikel "Wie der Web-Makaken bei Open Source lehrte"!



Bonus # 3. Gibt es langweilige Tapeten?



Vor ein paar Jahren hätte ich über diese Frage lieber gelacht. Aber ja, wenn Sie den ganzen Tag blau aussehen, wird es irgendwie unangenehm (und Sie können direkt spüren, wie ein Bart und ein Pullover mit Hirsch nachwachsen). Deshalb habe ich mir am Ende eine Färbung im Geiste von Monokai gemacht und sie natürlich für alle ausgelegt . Wir haben schließlich Open Source.







Bonus # 4. Wird es auf einer Mohnblume abheben?



Ausziehen, starten, abheben, losfahren. Die Hälfte der Tickets wird von Mohnblumen in den Bugtracker geschrieben. Und ja, es funktioniert auch mit BSD.



All Articles