CudaText Sublime Ideas

Desde 2012, uso os editores criados por Alexei Torgashin para visualizar e modificar quase todos os arquivos de texto, logs e códigos de programa nas linguagens VFP / JS / Python / XML / HTML : primeiro, foi o SynWrite , agora seu descendente CudaText . Ele escolheu deliberadamente seu editor da lista de testados, que incluía AkelPad , Notepad ++ e Sublime Text . A capacidade de resposta do suporte técnico foi decisiva - Alexey aceitou um grande número de desejos / reclamações dos usuários e os implementou rapidamente. Eu vou explicar O número de desejos / reclamações foi quase uniforme ao longo dos anos e, depois de mudar para o GitHub, há três anos, tornou-se mensurável e é estimado por mim como 400 desejos / ano e 100 bugs / ano. É surpreendentemente surpreendente que a expansão da funcionalidade a pedido dos trabalhadores não tenha afetado a confiabilidade do editor como um todo. E quando o recurso de desenvolvimento sustentável da SynWrite se esgotou, o CudaText surgiu.


Passo a palavra para Alexei.

Eu tenho conversas com Alexey sobre vários tópicos. Ele recentemente listou "o que falta ao sublime". Pareceu-me interessante e concordamos em apresentar essas idéias em Habré. Além disso, haverá uma apresentação de teses de Alexei na minha edição.


Depois de passar vários anos criando seu programa, você vê diferentemente os resultados de seus concorrentes. Você percebe nelas não apenas boas características (elas já as aplicaram ou deseja aplicá-las), mas também desvantagens. Mostrarei o que poderia ser melhorado no Sublime Text (a seguir designado Sublime ), se o compararmos com o meu CudaText (a seguir designado Cuda ). Ao mesmo tempo, enfatizo que meu editor surgiu quando o Sublimeestava disseminado, muitas de suas idéias eram básicas para Cuda :


  • Arquivos de configuração de texto
  • Configurações de sobreposição
  • Carruagens múltiplas
  • Plugins Python
  • A paleta de todas as equipes

O sublime impõe rigidamente um estilo de trabalho em equipe de texto.
Por exemplo.


  • Não há caixas de diálogo para configurar - existem apenas arquivos json (existem muitos).
  • Não há controles adicionais na caixa de diálogo Pesquisar por arquivo. Em vez disso, existe um "idioma" para preencher os campos de texto.

Esse estilo é eficiente, flexível e extensível, mas requer aprendizado contínuo do usuário. Para iniciantes, isso cria um limite de entrada perceptível.


Cuda está tentando ser uma ferramenta mais acessível. Isso é possível porque é criado no ambiente Lazarus , que fornece um rico arsenal de GUI e portabilidade entre o Win / Linux / Mac . Como resultado, a flexibilidade das configurações do json no Cuda é combinada com os plug-ins de diálogo, por exemplo, Pesquisar por arquivos (há uma visão geral do habr ), o editor de configurações e outros.
Vou tentar expressar algumas idéias sobre como melhorar o Sublime . Claro, essa é apenas minha opinião pessoal.


Barras de ferramentas


Não há barras de ferramentas no Sublime . Portanto, seu estilo de equipe de texto se manifesta. Aparentemente, supõe-se que um local útil para código editável seja mais importante. Você pode chamar todos os comandos no menu, na Paleta por nome ou por meio de teclas de atalho. Há uma desvantagem clara nessa abordagem: é necessário conhecer antecipadamente o nome da equipe ou sua tecla de atalho. Mas a existência da equipe certa e seu nome estão longe de ser sempre óbvios.
Uma barra de ferramentas personalizável, incluindo desconectável, é um dos detalhes que reduz o limite de uso.


O Cuda possui uma barra de ferramentas horizontal personalizada para chamar comandos e uma barra lateral vertical para alternar painéis: Árvore, Projeto, Console. A API é responsável pela configuração da barra de ferramentas, ou seja, é realizada por meio do plug-in. Novos botões podem aparecer na barra lateral se os plug-ins adicionarem novos painéis.


toolbar_sidebar


Adicionar uma barra de ferramentas ao Sublime não violaria nenhuma de suas tecnologias anteriores.


Barra de status


No Sublime, a barra de status é ruim.


sub_statusbar


(1) Console / Pesquisar / Substituir / Por alternador de arquivos do painel
(2) Post
(3) codificação
(4) Tipo EOL
(5) Configuração da guia
(6) Sintaxe
Desses seis campos, apenas dois (Codificação e EOL) podem ser ocultados na configuração e, no campo Mensagem, os plug-ins podem adicionar / remover pares chave = valor. Você não pode ocultar, reorganizar ou configurar os campos restantes. É especialmente estranho que informações importantes sobre o (s) carro (s) / seleção (ões) cheguem ao campo Mensagem, onde são misturadas com os textos das equipes.


No Cuda, um usuário pode em user.json para os campos da barra de status indicar sua sequência, largura e alinhamento:


 "ui_statusbar_panels": "caret,L,250|msg,L,0|lexer,L,70|tabsize,L,70" 

e o preenchimento do campo de caret (informações sobre carros / seleções) pode ser configurado separadamente usando a substituição de macro. Por exemplo, então


 "ui_statusbar_no_sel": "r={y}/{count} c={xx}", "ui_statusbar_carets": "carets={carets} top/bot={y}/{y2}", "ui_statusbar_col_sel":"r={y}/{count} c={xx} s=[{sel} x {cols}]", 

Como resultado dessas configurações, o Cuda será exibido na barra de status


  • Se um carro: 1crt
  • Se houver quatro carruagens: 4crt
  • Se a seleção vertical: vert

O Cuda também permite que você configure quanto tempo leva para exibir o texto no campo Mensagem.


Árvore de código


O desejo do Sublime de apresentar tudo em forma de texto é compreensível. No entanto, a rejeição do painel Árvore, encontrada em todos os IDEs e editores avançados de texto, é muito dolorosa. Você pode usar a "Árvore de texto" colocada em uma guia regular (por exemplo, com o plug-in Outline ), mas está mal integrada à interface Sublime e não é uma substituição completa.


O Cuda possui um painel em Code tree para exibir os elementos de sintaxe do arquivo ativo: funções / classes / campos para linguagens de programas, tags / teclas para linguagens de marcação.


arvore


Integração:


  • A exibição é síncrona, ou seja, a árvore exibe o status do código imediatamente após a alteração (com um atraso personalizado).
  • O nó da árvore selecionado é sincronizado com a posição do carro no código.
  • Os nós da árvore são usados ​​para selecionar blocos, mover o carro e outras operações.

Além disso, a API Cuda permite criar um novo painel com uma árvore e preenchê-lo. O plugin Project Manager faz exatamente isso.


Pastas com configurações e plugins


Para um usuário que não está profundamente imerso nos manuais do Sublime , a situação de colocar configurações / pacotes / plugins em pastas parece confusa. A primeira etapa dentro do editor recém-instalado é impressionante: pelo comando do menu Preferences -- Settings dois arquivos são abertos, um dos quais (configurações padrão) no título do editor é visível como (no Win)
Sublime Text 3/Packages/Default/Preferences.sublime-settings
mas não existe esse arquivo ou pasta no disco. Em geral, a lógica desse truque é adivinhada. As configurações padrão devem ser conectadas ao código do editor e serão duplicadas em algum arquivo ou não - isso fica a critério do desenvolvedor. Sublime finge estar em um arquivo.


No Cuda, as configurações padrão também são protegidas, mas há um arquivo real na montagem
settings_default\default.json
em que eles são duplicados e comentados. A presença de um arquivo como esse cria conveniência não apenas para usuários, mas também para plug-ins. Por exemplo, o editor de configurações extrai desse arquivo a lista de opções em si, os comentários sobre elas e a marcação para distribuir opções pela árvore.


Problemas semelhantes acontecem com pacotes no Sublime - você os procura nos Packages e não os encontra.


Embora o Cuda não tenha uma base tão poderosa de pacotes adicionais como o Sublime , a lógica de posicionamento do Cuda é transparente. Por exemplo, para plugins, existe uma pasta py na qual tudo é visível - padrão e pré-instalado. Há uma pasta de data/themes para data/themes , data/snippets para data/snippets , data/lexlib para lexers.


Controle de pacote


Uma situação estranha com o plug-in Package Control . Por um lado, fora da caixa, o Sublime vem sem esse plugin. Por outro lado, quase nada sério pode ser feito sem ele - sem acréscimos, o editor é muito escasso. Mesmo colocando o plug-in no menu Preferences e não em Tools--Packages indica seu status especial. Aparentemente, alguns "direitos autorais" nos impedem de incluir este plug-in na montagem Sublime .


O Cuda possui vários plugins (agora 10), incluindo o Addons Manager , incluídos na distribuição.


Painéis flutuantes


O Sublime possui um layout de janela monolítico, ou seja, os grupos Console e guia estão localizados juntos. Você pode executar várias instâncias, mas cada uma delas sempre terá guias e, talvez, um console.


O Cuda possui configurações e comandos para exibir o console em uma janela separada. Isso permite esticá-lo convenientemente sem afetar a altura do texto principal e, por exemplo, colocá-lo em um segundo monitor. Além disso, você pode separar o painel com a Árvore para não limitar a largura do texto principal.
flow_panels


A propósito, os usuários do Atom (ou Código VS ) gostariam de ter painéis flutuantes, mas os desenvolvedores recusaram, citando restrições no Electron . Portanto, essa poderia ser a vantagem do Sublime sobre os concorrentes diretos.


Plugin de configuração


O Sublime possui mais de cem configurações de kernel (107 na versão 3.1.1) e seis níveis adicionais de sobreposição para acomodar os valores alterados:
(1) Packages/Default/Preferences (<platform>).sublime-settings
(2) Packages/User/Preferences.sublime-settings
(3) <Project Settings>
(4) Packages/<syntax>/<syntax>.sublime-settings
(5) Packages/User/<syntax>.sublime-settings
(6) <Buffer Specific Settings>
É fácil imaginar uma situação em que o rastreamento puramente manual de até uma pequena parte de 700 valores (100 chaves em 7 níveis) se torna um problema.


No Cuda, existem quase 300 configurações de kernel e há três níveis adicionais para sobreposição:
(1) settings/user.json
(2) settings/lexer <syntax>.json
(3) <File Settings>
O problema é o mesmo - muitos valores (até 300 * 4) devem ser levados em consideração. Para ajudar os usuários, existe um plug-in que exibe todas as configurações em todos os níveis em uma tabela, simplificando a pesquisa e a edição.
ops-dlg
Preste atenção na coluna Section - as configurações são atribuídas aos nós da árvore. Isso fornece classificação e filtros adicionais. A marcação para a construção dessa árvore está incluída nos comentários das settings_default\default.json arquivo settings_default\default.json . Por exemplo, um comentário


 // [UI/Listbox]` 

atribuirá as opções a seguir ao nó UI/Listbox . A árvore inteira também pode ser vista
árvore de operações


Para o Sublime, é possível um diálogo semelhante:


  • O nome e os sete níveis de sobreposição são apenas oito colunas na tabela.
  • O formulário e os controles podem ser obtidos no Tk ou na biblioteca mais avançada da GUI do Python.
  • A alteração das opções pode levar a alterações nos arquivos e a sua recarga quando salvas.

Pequenas coisas


Existem várias reclamações menores, que, obviamente, não estão no lugar certo aqui, mas no fórum de suporte técnico da Sublime . Deixe que eles sejam completos.


  1. PgDn / PgUp não funciona em caixas de diálogo de lista, por exemplo, na paleta de comandos.
  2. Muitas vezes, você precisa inserir algum caractere complicado , por exemplo, uma seta ou uma fração. Não há ferramenta suficiente para exibir / selecionar todos os caracteres Unicode. No Cuda, essa ferramenta está na forma de uma caixa de diálogo do Char map .
    char-map
  3. Não há como definir etiquetas coloridas individuais. Quando muitos arquivos estão abertos, geralmente existe o desejo de colorir os rótulos de alguns deles. No Cuda , o comando Set tab color... está no menu local acima do atalho. As cores configuradas dessa maneira são salvas na sessão.

Conclusão


Como é fácil dar dicas!


Mas as considerações acima, na minha opinião, não são sem benefícios. Se algo vier a calhar na próxima versão do Sublime Text, tudo bem. A propósito, talvez alguém traduza e repasse idéias para Skinner (Jon Skinner).

Source: https://habr.com/ru/post/pt427751/


All Articles