Porto Linux do Far Manager: progresso em 4 anos

A primeira publicação do código-fonte do far2l, um porte do Far Manager para Linux - uma peça que antes era considerada fundamentalmente impossível - ocorreu em 10 de agosto de 2016. Como o desenvolvedor principal está falando sobre a transição do projeto para o status beta , decidi escrever um artigo de revisão sobre como as coisas estão indo e o que eles alcançaram nos últimos quatro anos.



Versão do console



A primeira pergunta que todos fizeram aqui , na opennet e na tradição - por que não no console? Originalmente, o far2l realmente só funcionava no modo gráfico, via wxWidgets. Esta acabou por ser a maneira mais fácil de obter rapidamente uma porta funcional com todas as conveniências do usuário: uma área de transferência X e todos os atalhos de teclado, e com suporte para eventos não apenas KeyDown, mas também KeyUp.



Essa limitação agora é coisa do passado: far2l tem uma ótima sensação no console . Além disso, as chamadas extensões de terminal far2l apareceram lá ., então se você executar o console far2l dentro do gráfico (por exemplo, indo a algum lugar via ssh), eles "se conectam" um ao outro, e o far2l interno também verá a área de transferência (com a permissão do usuário, é claro) e todos os atalhos possíveis. Além disso, até uma montagem de massa especial foi feita , permitindo que você aproveite todos esses recursos do Windows.



Aqui, olhe, isso é far2l no Terminal GNOME







Mas em massa







Letras russas em .zip "do Windows"



Acredite ou não, o Windows, até pelo menos sete, criou arquivos .zip, gravando os nomes dos arquivos na codificação OEM (DOS) lá! A compatibilidade é assustadora. Como resultado, StackOverflow está cheio de perguntas "como posso descompactar corretamente um zip com krakozyabrami".



No far2l, nós consertamos. No processo, nasceu um utilitário de demonstração , que mostra como trabalhar corretamente com codificações em .zips para que não haja "krakozyabrs" (úteis para os autores de arquivadores), bem como um patch para p7zip que usa um algoritmo semelhante. O p7zip-with-patch é até compactado em um .deb (ubuntu 20.04+, amd64), a instalação do qual corrige o suporte a zip, por exemplo, no Engrampa usado no MATE.







Arrumando dependências



Inicialmente, o port carregava um monte de código de biblioteca e, portanto, estão presentes no mundo Linux em pacotes de sistema: pcre, minizip, detector universal charset. Agora, tudo isso foi substituído por um uso competente de dependências: as bibliotecas do sistema são usadas sempre que possível (exceção: 7z e unrar, as bibliotecas mais recentes são compiladas estaticamente para suportar os recursos mais recentes dos formatos).



Suporte humano .tar.gz



O plugin multiarc que far2l usa para acessar arquivos veio até nós do mundo do Windows e não sabíamos como perceber .tar.gz como um arquivo. Ele viu .gz e dentro dele .tar. Portanto, para obter uma lista de arquivos, era necessário fazer uma descompactação completa. Essa experiência. No mês passado, o multiarc melhorou significativamente e esse problema desapareceu.



Linda janela de console



Houve um problema na versão gráfica do far2l: os símbolos de desenho das bordas eram mostrados com uma linha pontilhada irritante.



imagem



Demoramos muito para encontrar a causa ou encontrar as configurações de renderização que corrigem esse bug sem fim, até que olhei o código-fonte dos terminais GNOME e KDE. E lá, ao que parece, há muito tempo, os símbolos para quadros de desenho não são renderizados a partir da fonte, mas manualmente, para que as linhas sejam claras e bonitas.



Como resultado, fizemos o mesmo em far2l, só que um pouco melhor: adicionando anti-aliasing. Caso contrário, nos terminais KDE e GNOME, as linhas mais contrastantes são muito perturbadoras para si mesmas ao lado do texto suavizado.



No processo, tive que entender as nuances psico-visuais do anti-aliasing, capturando "pixels muito brilhantes" inexistentes que os olhos teimosamente viam. Detalhes .



imagem



Pacotes de distribuição



Ainda não entramos nos repositórios de muitas distribuições ( e algumas já estão lá !). Mas há muito tempo existem pacotes em todos os principais formatos . Existe até um script de construção para Amazon Linux! E, claro, há um ppa para * buntu - a maneira mais conveniente de "simplesmente acender as luzes" para a maioria dos usuários.



Fresh Colorer



far2l bifurcado do branch Far 2, então alguns plugins exigiam atualizações urgentes. Recentemente, essa atualização foi realizada: atualizamos o código de descompactação de 7z e unrar, bem como o esquema de cores da sintaxe Colorer. O resto dos plug-ins portados não contém peças atualizadas regularmente, mas o antigo "colorido" e os novos arquivos que não abrem eram um problema real. É isso, ela se foi!







Líquidas de caixa de rochas



Esta era a segunda pergunta que costumava ser feita no kamenty: "e netboooooooooooooooooooo?". Não, não haverá netbox! Há massa dentro e arrastar sua versão linux para far2l parecia uma ideia estranha. E o código do netbox em si não era muito adequado para portabilidade.



Portanto, o autor do port, o excelente elfmz, fez sua própria versão do plugin de rede: NetRocks. Há tudo que você pode precisar - ftp [s], e scp, e sftp, e nfs, e webdav, e até mesmo samba! Tudo funciona em bibliotecas nativas do Linux. No sftp, você pode até mesmo executar comandos remotos e ir para o console remoto.



O NetRocks também possui um plug-in de arquivo de pseudo-rede que permite trabalhar com o sistema de arquivos local. Pelo que? Porque o NetRocks é bom em operações em segundo plano. E a cópia usual de arquivos Far - não pode.







E os plug-ins em geral?



Além do NetRocks, o kit inclui:



colorer (destaque de sintaxe, novo!)

Multiarc (trabalhando com arquivos, modificados, arquivadores novos!)

Tmppanel (painel temporário)

bloco de alinhamento (blocos de formatação para o editor)

autowrap (

quebra automática no editor) drawline (desenho linhas no editor)

editcase (converter caixa no editor)

SimpleIndent (trabalhar com recuo no editor)

compare (versão avançada de "comparar pastas")

editor autocomplete (autocomplete no editor)

filecase (converter a caixa dos nomes de arquivo)

pesquisa incremental ("pesquisa rápida" em editor)

dentro (mostra o que está dentro de ELF e alguns outros formatos)

e até mesmo um plugin para escrever outros plugins em Python!



Existem alguns de terceiros, far2-gvfs e far2l-fuse , mas após o surgimento do NetRocks, eles perderam um pouco sua relevância.



Em geral, está disponível um conjunto básico para trabalhar com facilidade com arquivos e arquivos locais e remotos, bem como escrever código diretamente no editor far2l :)



Que tal estabilidade? Quando já é o lançamento?



Com estabilidade está tudo bem: há 4 anos de uso no trabalho (webdev + any office) não "peguei" nenhuma perda de dados com far2l. O autor do port está pronto para mudar gradualmente o status de alfa para beta, se erros críticos não surgirem dentro de um ou dois meses. Então, pode-se pensar em enviar pacotes a um repositório de distribuição, por exemplo.



Bônus # 1. Existe realmente Vinho sob o capô?



Em parte :) Algumas partes da tradução WinApi para a API nativa do Linux foram retiradas do Wine (conversão de codificação, por exemplo; a propósito, eles recentemente tentaram reescrever esta parte para iconv, mas descobriu-se que o código do Wine faz a mesma coisa 4 vezes mais rápido ). Com o tempo, as chamadas para essas funções, espalhadas por todo o código far2l, podem ser gradualmente substituídas por chamadas diretas para funções nativas. Entretanto, este design também funciona muito rápido (a coisa mais lenta em que tentaram correr -  raspberry pi , o voo é normal) e bastante fiável.



Bônus # 2. Pare de sofrer besteira, ensine o console, seus idiotas!



Durante meu trabalho em far2l (um testador, e às vezes envio patches simples), aprendi mais sobre o console Linux do que em toda a minha vida anterior :) E também estou gradualmente dominando C, no qual não tive que codificar desde o instituto - não havia razão (ao mesmo tempo , a propósito, mudou para "você" com git). Então espere logo por um artigo “como o macaque si da web ensinava em código aberto”!



Bônus # 3. Existe algum papel de parede chato?



Alguns anos atrás, eu teria preferido rir dessa pergunta. Mas sim, se você ficar de azul o dia todo, fica um tanto desconfortável (e você pode sentir diretamente como uma barba e um suéter com veados voltam a crescer). Portanto, no final eu criei para mim um colorido no espírito de Monokai, e o coloquei para todos , é claro. Afinal, temos código aberto.







Bônus # 4. Vai decolar em uma papoula?



Descolar. Metade dos ingressos são escritos para o rastreador de bugs a partir das papoulas. E sim, funciona no BSD também.



All Articles