CudaText Sublime Ideas

Depuis 2012, j'utilise les éditeurs créés par Alexei Torgashin pour visualiser et modifier presque tous les fichiers texte, journaux et codes de programme dans les langages VFP / JS / Python / XML / HTML : d'abord c'était SynWrite , maintenant son descendant CudaText . Il a délibérément choisi son éditeur dans la liste des testés, qui comprenait, notamment AkelPad , Notepad ++ et Sublime Text . La réactivité du support technique s'est avérée décisive - Alexey a accepté un grand nombre de souhaits / réclamations des utilisateurs et les a rapidement mis en œuvre. Je vais vous expliquer. Le nombre de souhaits / plaintes a été presque uniforme au fil des ans, et après le passage à GitHub il y a trois ans, il est devenu mesurable et est estimé par moi à 400 souhaits / an et 100 bogues / an. Il est agréablement surprenant que l'extension des fonctionnalités à la demande des travailleurs n'ait pas affecté la fiabilité de l'éditeur dans son ensemble. Et lorsque les ressources de développement durable de SynWrite ont été épuisées, CudaText est apparu.


Je passe la parole à Alexei.

J'ai des conversations avec Alexey sur divers sujets. Il a récemment énuméré «ce qui manque à Sublime». Cela m'a paru intéressant et nous avons accepté de présenter ces idées sur Habré. De plus, il y aura une présentation des thèses d'Alexei dans ma rédaction.


Après avoir passé plusieurs années à créer votre programme, vous regardez différemment les résultats de vos concurrents. Vous y remarquez non seulement de bons traits (ils les ont déjà appliqués, ou vous voulez les appliquer), mais aussi des inconvénients. Je montrerai ce qui pourrait être amélioré dans Sublime Text (ci-après Sublime ), si nous le comparons avec mon CudaText (ci-après Cuda ). En même temps, je souligne que mon éditeur est apparu lorsque Sublime était déjà répandu, beaucoup de ses idées étaient fondamentales pour Cuda :


  • Fichiers de configuration de texte
  • Paramètres de superposition
  • Multi chariots
  • Plugins Python
  • La palette de toutes les équipes

Sublime impose rigidement un style de travail en équipe de texte.
Par exemple.


  • Il n'y a aucune boîte de dialogue à configurer - il n'y a que des fichiers json (il y en a beaucoup).
  • Il n'y a pas de contrôles supplémentaires dans la boîte de dialogue Recherche par fichier - à la place, il existe une «langue» pour remplir les champs de texte.

Ce style est efficace, flexible et extensible, mais nécessite un apprentissage continu de l'utilisateur. Pour les débutants, cela crée un seuil d'entrée notable.


Cuda essaie d'être un outil plus abordable. Cela est possible car il est créé dans l'environnement Lazarus , qui fournit un arsenal d'interface graphique riche et une portabilité entre Win / Linux / Mac . En conséquence, la flexibilité des paramètres json dans Cuda est combinée avec des plug-ins de dialogue, par exemple, Recherche par fichiers (il y a une vue d'ensemble habr ), l'éditeur de paramètres et autres.
Je vais essayer d'exprimer quelques idées sur la façon d'améliorer Sublime . Bien sûr, ce n'est que mon opinion privée.


Barres d'outils


Il n'y a pas de barres d'outils dans Sublime . Donc, son style d'équipe de texte se manifeste. Apparemment, on suppose qu'un endroit utile pour le code modifiable est plus important. Vous pouvez appeler toutes les commandes soit à partir du menu, soit à partir de la palette par nom, soit par le biais de raccourcis clavier. Cette approche présente un inconvénient évident: vous devez connaître à l'avance le nom de l'équipe ou son raccourci clavier. Mais l'existence de la bonne équipe et son nom sont loin d'être toujours évidents.
Une barre d'outils personnalisable, y compris déconnectable, est l'un des détails qui abaisse le seuil d'utilisation.


Cuda possède une barre d'outils personnalisée horizontale pour appeler des commandes et une barre latérale verticale pour changer de panneau: arborescence, projet, console. L'API est responsable de la configuration de la barre d'outils, c'est-à-dire qu'elle est effectuée via le plugin. De nouveaux boutons peuvent apparaître dans la barre latérale si les plugins ajoutent de nouveaux panneaux.


toolbar_sidebar


L'ajout d'une barre d'outils à Sublime ne violerait aucune de ses technologies précédentes.


Barre d'état


Dans Sublime, la barre d'état est médiocre.


sub_statusbar


(1) Commutateur de fichier de console / recherche / remplacement / par panneau
(2) Message
(3) Encodage
(4) Type EOL
(5) Réglage des onglets
(6) Syntaxe
De ces six champs, seuls deux (Encoding et EOL) peuvent être masqués via la configuration, et dans le champ Message, les plugins peuvent ajouter / supprimer des paires clé = valeur. Vous ne pouvez pas masquer, réorganiser ou configurer les champs restants. Il est particulièrement étrange que des informations importantes sur le (s) chariot (s) / sélection (s) pénètrent dans le champ Message, où elles sont mélangées avec les textes des équipes.


Dans Cuda, un utilisateur peut dans user.json pour les champs de la barre d'état indiquer leur séquence, leur largeur et leur alignement:


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

et le remplissage du champ caret (informations sur les chariots / sélections) peut être configuré séparément en utilisant la macro substitution. Par exemple,


 "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}]", 

À la suite de ces paramètres, Cuda s'affiche dans la barre d'état


  • Si un chariot: 1crt
  • S'il y a quatre voitures: 4crt
  • Si la sélection verticale: vert

Cuda vous permet également de configurer la durée d'affichage du texte dans le champ Message.


Arbre de code


Le désir de Sublime de tout présenter sous forme de texte est compréhensible. Cependant, le rejet du panneau Arborescence, que l'on retrouve dans tous les IDE et éditeurs de texte avancés, est très douloureux. Vous pouvez utiliser l '«arbre de texte» placé dans un onglet normal (par exemple, avec le plugin Outline ), mais il est mal intégré à l'interface Sublime et n'est pas un remplacement à part entière.


Cuda dispose d'un panneau d' Code tree pour afficher les éléments de syntaxe du fichier actif: fonctions / classes / champs pour les langages de programme, balises / clés pour les langages de balisage.


arbre


Intégration:


  • L'affichage est synchrone, c'est-à-dire que l'arborescence affiche l'état du code immédiatement après sa modification (avec un délai personnalisé).
  • Le nœud d'arbre sélectionné est synchronisé avec la position du chariot dans le code.
  • Les nœuds d'arbre sont utilisés pour sélectionner des blocs, déplacer le chariot et d'autres opérations.

De plus, l'API Cuda vous permet de créer un nouveau panneau avec une arborescence et de le remplir. Le plugin Project Manager fait exactement cela.


Dossiers avec paramètres et plugins


Pour un utilisateur qui n'est pas profondément plongé dans les manuels Sublime , la situation avec le placement des paramètres / packages / plugins dans les dossiers semble déroutante. La première étape à l'intérieur de l'éditeur fraîchement installé est stupéfiante: par la commande de menu Preferences -- Settings deux fichiers s'ouvrent, dont l'un (paramètres par défaut) dans le titre de l'éditeur est visible comme (dans Win)
Sublime Text 3/Packages/Default/Preferences.sublime-settings
mais il n'y a pas un tel fichier ou dossier sur le disque. En général, la logique d'une telle astuce est devinée. Les paramètres par défaut doivent être câblés dans le code de l'éditeur, et ils seront dupliqués dans certains fichiers ou non - cela est à la discrétion du développeur. Sublime fait semblant d'être dans un dossier.


Dans Cuda, les paramètres par défaut sont également protégés, mais il existe un vrai fichier dans l'assemblage
settings_default\default.json
dans lequel ils sont dupliqués et commentés. La présence d'un tel fichier crée une commodité non seulement pour les utilisateurs, mais aussi pour les plug-ins. Par exemple, l'éditeur de paramètres extrait de ce fichier la liste des options elle-même, ainsi que des commentaires à leur sujet, et le balisage pour distribuer les options dans l'arborescence.


Des problèmes similaires se produisent avec les packages dans Sublime - vous les recherchez dans les Packages et ne les trouvez pas.


Bien que Cuda ne dispose pas d'une base de packages supplémentaires aussi puissante que Sublime , la logique de placement de Cuda est transparente. Par exemple, pour les plugins, il y a un dossier py dans lequel tout est visible - à la fois standard et pré-installé. Il existe un dossier data/themes pour les data/themes , data/snippets pour les data/snippets , data/lexlib pour les lexers.


Contrôle des packages


Une situation étrange avec le plugin Package Control . D'une part, hors de la boîte, Sublime est livré sans ce plugin. En revanche, presque rien de sérieux ne peut être fait sans cela - sans ajouts, l'éditeur est très maigre. Même en plaçant le plugin dans le menu Preferences , et non dans Tools--Packages indique son statut spécial. Apparemment, certains «droits d'auteur» nous empêchent d'inclure ce plugin dans l'assemblage Sublime .


Cuda a plusieurs plugins (maintenant 10), dont Addons Manager , inclus dans la distribution.


Panneaux flottants


Sublime a une disposition de fenêtre monolithique, c'est-à-dire que la console et les groupes d'onglets sont situés ensemble. Vous pouvez exécuter plusieurs instances, mais chacune d'entre elles aura toujours des onglets et, peut-être, une console.


Cuda a des paramètres et des commandes pour afficher la console dans une fenêtre séparée. Cela vous permet de l'étirer facilement sans affecter la hauteur du texte principal et, par exemple, de le placer sur un deuxième moniteur. De plus, vous pouvez séparer le panneau avec l'arborescence afin de ne pas limiter la largeur du texte principal.
flow_panels


Soit dit en passant, les utilisateurs d' Atom (ou VS Code ) aimeraient avoir des panneaux flottants, mais les développeurs ont refusé, invoquant des restrictions dans Electron . Cela pourrait donc être l'avantage de Sublime sur ses concurrents directs.


Plugin de configuration


Sublime a plus d'une centaine de paramètres de noyau (107 dans la version 3.1.1) et six niveaux de chevauchement supplémentaires pour s'adapter aux valeurs modifiées:
(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>
Il est facile d'imaginer une situation où le suivi purement manuel d'une petite partie de 700 valeurs (100 touches à 7 niveaux) devient un problème.


Dans Cuda, il existe près de 300 paramètres de noyau et trois niveaux supplémentaires permettent de les chevaucher:
(1) settings/user.json
(2) settings/lexer <syntax>.json
(3) <File Settings>
Le problème est le même - trop de valeurs (jusqu'à 300 * 4) doivent être prises en compte. Pour aider les utilisateurs, il existe un plug-in qui affiche tous les paramètres à tous les niveaux dans un tableau, simplifiant la recherche et l'édition.
ops-dlg
Faites attention à la colonne Section - les paramètres sont affectés aux nœuds de l'arborescence. Cela donne un tri et des filtres supplémentaires. Le balisage pour la construction de cette arborescence est inclus dans les commentaires de paramètres dans le fichier settings_default\default.json . Par exemple, un commentaire


 // [UI/Listbox]` 

attribuera les options qui le suivent au nœud UI/Listbox . L'arbre entier peut également être vu
arbre des opérations


Pour Sublime, une boîte de dialogue similaire est possible:


  • Le nom et les sept niveaux de chevauchement ne sont que huit colonnes dans le tableau.
  • Le formulaire et les contrôles peuvent être extraits de Tk ou de la bibliothèque GUI Python plus avancée.
  • La modification des options peut entraîner des modifications dans les fichiers et leur rechargement lors de l'enregistrement.

Petites choses


Il y a plusieurs plaintes mineures, qui, bien sûr, ne sont pas au bon endroit ici, mais dans le forum de support technique Sublime . Qu'ils soient pour être complet.


  1. PgDn / PgUp ne fonctionnent pas dans les boîtes de dialogue de liste, par exemple, dans la palette de commandes.
  2. Souvent, vous devez insérer un caractère délicat , par exemple, une flèche ou une fraction. Il n'y a pas assez d'outil pour afficher / sélectionner tous les caractères Unicode. Dans Cuda, un tel outil se présente sous la forme d'une boîte de dialogue de Char map .
    char-map
  3. Il n'y a aucun moyen de définir des étiquettes de coloration individuelles. Lorsque de nombreux fichiers sont ouverts, on souhaite souvent coloriser les étiquettes de certains d'entre eux. Dans Cuda , la commande Set tab color... trouve dans le menu local au-dessus du raccourci. Les couleurs configurées de cette manière sont enregistrées dans la session.

Conclusion


Comme il est facile de donner des conseils!


Mais les considérations ci-dessus, à mon avis, ne sont pas sans bénéfice. Si quelque chose est utile dans la prochaine version de Sublime Text, ça va. Soit dit en passant, peut-être que quelqu'un traduira et transmettra des idées à Skinner (Jon Skinner).

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


All Articles