Port Linux de Far Manager: progrès en 4 ans

La première publication du code source de far2l, un portage de Far Manager pour Linux - une pièce autrefois considérée comme fondamentalement impossible - a eu lieu le 10 août 2016. Puisque le développeur principal parle de la transition du projet vers le statut bêta , j'ai décidé d'écrire un article sur la façon dont les choses se passent là-bas et ce qu'ils ont accompli au cours des quatre dernières années.



Version console



La première question que tout le monde a posée ici , et sur l' ouverture , et sur la tradition - pourquoi pas dans la console? A l'origine far2l ne fonctionnait vraiment qu'en mode graphique, via wxWidgets. Cela s'est avéré être le moyen le plus simple d'obtenir rapidement un port fonctionnel avec toutes les commodités de l'utilisateur: un presse-papiers X et tous les raccourcis clavier, et avec la prise en charge des événements non seulement KeyDown, mais aussi KeyUp.



Cette limitation appartient désormais au passé: far2l se sent bien dans la console . De plus, les extensions terminales dites far2l y sont apparues ., donc si vous exécutez la console far2l dans la console graphique (par exemple, en allant quelque part via ssh), ils se "connectent" les uns aux autres, et le far2l interne verra également le presse-papiers (avec la permission de l'utilisateur, bien sûr) et toutes les touches de raccourci possibles. De plus, même un assemblage spécial de mastic a été réalisé , vous permettant de profiter de toutes ces astuces de Windows.



Ici, regardez, c'est far2l dans GNOME Terminal







Mais en mastic







Lettres russes en .zip "de Windows"



Croyez-le ou non, Windows, jusqu'à sept au moins, a créé des archives .zip, y enregistrant les noms de fichiers au format OEM (DOS)! La compatibilité fait peur. En conséquence, StackOverflow est plein de questions "comment puis-je décompresser correctement un zip avec krakozyabrami".



Dans far2l, nous l'avons corrigé. Dans le processus, un utilitaire de démonstration est né , qui montre comment travailler correctement avec des encodages en .zips pour qu'il n'y ait pas de "krakozyabrs" (utile aux auteurs des archiveurs), ainsi qu'un patch pour p7zip qui utilise un algorithme similaire. p7zip-with-patch est même emballé dans un .deb (ubuntu 20.04+, amd64), dont l'installation corrige le support de zip, par exemple, dans Engrampa utilisé dans MATE.







Ranger les dépendances



Initialement, le port portait un tas de code de bibliothèque, et sont donc présents dans le monde Linux dans des packages système: pcre, minizip, universal charset detecteur. Maintenant, tout cela a été remplacé par l'utilisation compétente des dépendances: les bibliothèques système sont utilisées partout où cela est possible (exception: 7z et unrar, les dernières bibliothèques y sont compilées statiquement pour prendre en charge les dernières fonctionnalités des formats).



Soutien humain .tar.gz



Le plugin multiarc que far2l utilise pour accéder aux archives nous est venu du monde Windows et ne savait pas comment percevoir .tar.gz comme une archive. Il a vu .gz et à l'intérieur .tar. Par conséquent, pour obtenir une liste de fichiers, vous deviez effectuer une décompression complète. Une telle expérience. Au cours du mois dernier, le multiarc a été considérablement amélioré et ce problème a disparu.



Belle fenêtre de console



Il y avait un problème dans la version graphique de far2l: les symboles de dessin de bordure étaient affichés avec une ligne pointillée ennuyeuse.



image



Il nous a fallu beaucoup de temps pour trouver la cause ou trouver les paramètres de rendu qui corrigent ce bug sans fin, jusqu'à ce que je regarde dans le code source des terminaux GNOME et KDE. Et là, il s'est avéré que, il y a longtemps, les symboles des cadres de dessin n'étaient pas rendus à partir de la police, mais manuellement, de sorte que les lignes soient claires et belles.



En conséquence, nous avons fait la même chose dans far2l, mais un peu mieux: ajouter l'anti-aliasing. Sinon, dans les terminaux KDE et GNOME, les lignes les plus contrastées sont trop gênantes à côté du texte anti-crénelé.



Dans le processus, j'ai dû comprendre les nuances psycho-visuelles de l'anti-aliasing, capturer des «pixels trop brillants» inexistants que les yeux voyaient obstinément. Détails .



image



Paquets de distribution



Nous ne sommes pas encore entrés dans les référentiels de nombreuses distributions ( et certaines y sont déjà arrivées !). Mais depuis longtemps, il existe des packages dans tous les principaux formats . Il existe même un script de construction pour Amazon Linux! Et, bien sûr, il existe un ppa pour * buntu - le moyen le plus pratique de "simplement allumer les lumières" pour la plupart des utilisateurs.



Colorant frais



far2l était issu de la branche Far 2, donc certains plugins nécessitaient des mises à jour urgentes. Récemment, une telle mise à jour a été effectuée: nous avons mis à jour le code de déballage de 7z et d'irar, ainsi que le jeu de couleurs de la syntaxe Colorer. Le reste des plugins portés ne contient pas de pièces régulièrement mises à jour, mais l'ancien "coloriage" et les nouvelles archives qui ne s'ouvrent pas étaient un réel problème. Ça y est, elle est partie!







Boîte à filet roches



C'était la deuxième question qui était habituellement posée dans kamenty: "et netboooooooooooooooooooo?". Non, il n'y aura pas de netbox! Il y a du mastic à l'intérieur, et faire glisser sa version linux vers far2l semblait être une idée étrange. Et le code netbox lui-même n'était pas très adapté au portage.



Par conséquent, l'auteur du port, l'excellent elfmz, a créé sa propre version du plugin réseau: NetRocks. Il y a tout ce dont vous pourriez avoir besoin - ftp [s], et scp, et sftp, et nfs, et webdav, et même samba! Tout fonctionne sur les bibliothèques Linux natives. Dans sftp, vous pouvez même exécuter des commandes distantes et accéder à la console distante.



NetRocks dispose également d'un plugin de fichiers pseudo-réseau qui vous permet de travailler avec le système de fichiers local. Pourquoi? Parce que NetRocks est bon pour les opérations en arrière-plan. Et la copie habituelle de fichiers Far - ne peut pas.







Qu'en est-il des plugins en général?



En plus de NetRocks, le kit comprend:



colorer (coloration syntaxique, fraîche!)

Multiarc (travail avec archives, archiveurs modifiés, frais!)

Tmppanel (panneau temporaire)

align block (blocs de mise en forme pour l'éditeur)

autowrap (auto-

wrap dans l'éditeur) drawline (dessin lignes dans l'éditeur)

editcase (convertir la casse dans l'éditeur)

SimpleIndent (travailler avec l'indentation dans l'éditeur)

comparer (version avancée de "comparer les dossiers")

éditeur autocomplete (autocomplete dans l'éditeur)

filecase (convertir la casse des noms de fichiers)

recherche incrémentale ("recherche rapide" dans éditeur) à l'

intérieur (montre ce qu'il y a à l'intérieur d'ELF et de certains autres formats)

et même un plugin pour écrire d'autres plugins en Python!



Il y en a quelques tiers, far2-gvfs et far2l-fuse , mais après l'apparition de NetRocks, ils ont quelque peu perdu de leur pertinence.



En général, un ensemble de base pour travailler confortablement avec des fichiers et archives locaux et distants, ainsi que pour écrire du code directement dans l'éditeur far2l est disponible :)



Et la stabilité? Quand est déjà la sortie?



Avec la stabilité, tout va bien: depuis 4 ans d'utilisation au travail (webdev + n'importe quel bureau) je n'ai pas "attrapé" une seule perte de données avec far2l. L'auteur du port est prêt à changer progressivement le statut de alpha à bêta, si des erreurs critiques ne se produisent pas dans un mois ou deux. Ensuite, on pourrait penser à soumettre des packages à un référentiel de distribution, par exemple.



Bonus n ° 1. Y a-t-il vraiment du vin sous le capot?



En partie :) Certains morceaux de traduction de WinApi dans l'API Linux native ont été extraits de Wine (conversion d'encodage, par exemple; en passant, ils ont récemment essayé de réécrire ce morceau en iconv, mais il s'est avéré que le code de Wine fait la même chose 4 fois plus rapidement ). Au fil du temps, les appels à ces fonctions, dispersés dans le code far2l, peuvent être progressivement remplacés par des appels directs aux fonctions natives. En attendant, cette conception fonctionne également très rapidement (la chose la plus lente sur laquelle ils ont essayé de fonctionner -  raspberry pi , le vol est normal) et assez fiable.



Bonus n ° 2. Arrêtez de souffrir des conneries, apprenez à la console, imbéciles!



Au cours de mon travail sur far2l (un testeur, et parfois j'envoie de simples patchs) j'ai appris plus sur la console Linux que dans toute ma vie d'avant :) Et je maitrise aussi progressivement le C, sur lequel je n'ai pas eu à coder depuis l'institut - il n'y avait aucune raison (en même temps , au fait, est passé à "vous" avec git). Alors attendez vite un article "comment le web macaque est enseigné en open source"!



Bonus n ° 3. Y a-t-il des fonds d'écran ennuyeux?



Il y a quelques années, j'aurais plutôt ri de cette question. Mais oui, si vous regardez en bleu toute la journée, cela devient en quelque sorte inconfortable (et vous pouvez directement sentir comment une barbe et un pull avec des cerfs repoussent). Par conséquent, à la fin, je me suis fait un coloriage dans l'esprit de Monokai, et je l'ai aménagé pour tout le monde , bien sûr. Nous avons l'open source, après tout.







Bonus n ° 4. Va-t-il décoller sur un coquelicot?



Décollage. La moitié des tickets sont écrits sur le bugtracker à partir de coquelicots. Et oui, cela fonctionne aussi sur BSD.



All Articles