IT-Edit (Integrated Terminal Editor).
Salut les GTK,
je vient vous présenter ma dernière création, IT-Edit un éditeur de texte avec de multiples fonctionnalités. Créer avec GTK+3, gtksourceview3.0 et libvte.
Motivation pour l'écriture de IT-Edit (the Integrated Terminal Editor).
Ont peut diviser les programmeurs selon leur façon de travailler en 2 catégories:
* Ceux qui utilisent un IDE: un environnement de développement complet.
* Ceux qui travaillent avec des outils séparés: un éditeur de texte, usage du terminal et autres outils.
Comme je suis un programmeur de la deuxième catégorie et comme j'ai remarquer que j’utilisais souvent un client internet pour la doc HTML offline.
J'ai décidé d'écrire mon propre éditeur de texte qui me donne un accès directe a tous les outils dont j'ai besoin.
De cette idée est née IT-Edit.
Fonctionnalités de IT-Edit
IT-Edit implémente un éditeur de texte avec colorations syntaxique, affichage des numéros de lignes et la complétion automatique avec les fonctionnalités de base d'un éditeur de texte:
* Couper / Copier / Coller.
* Dupliquer la sélection ou de la ligne du curseur.
* Undo/Redo.
* Aller a une ligne donnée.
* Recherche et remplacement.
Pour la gestion de fichiers IT-Edit implémente:
* Ouvrir un fichier vierge.
* Ouvrir un fichier donnée.
* Ouvrir un fichier récent.
* Sauvegarder le contenus de l'éditeur.
* Sauvegarder le contenus de l'éditeur dans un fichier choisis.
* Sauvegarder tous les fichiers ouverts.
Il existe évidemment des raccourcis clavier pour ces fonctionnalités.
IT-Edit implémente 2 terminaux dans la fenêtre principale qui sont aisément déployables, repliables et peuvent être redimensionnées.
IT-Edit implémente une fonctionnalité pour exécuter une commande quelqu'onque dans un terminal dans une fenêtre toplevel qui est facilement maximisable, minimisable et redimensionnable.
NOTE: cette fonctionnalité était prévus pour la visualisation de manpages qui a été étendue a toutes sortes de commandes, sans restriction.
IT-Edit implémente un mécanisme d'enregistrement de fichiers quelquonque (doc html, pdf, ps ou musique, vidéo...)
un accès directe a tous les outils dont j'ai besoin
Qui seront après enregistrement lançable par le programme par défaut associé au type de fichier.
NOTE: cette fonctionnalités était prévus pour la visualisation de documentation offline HTML qui a été étendus.
Avec ses terminaux intégré IT-Edit vous fournis une environnement de développement, répondant a tout vos besoin.
Prenez la peine d'essayer de s'habituer a IT-Edit, vous allez sûrement l'adopter.
Le programme est distribuer sous forme de paquetage *.deb, si cela ne vous convient pas allez dans:
Programmes->Accéder a l'index->C->IT-Edit, vous y trouverez un tarball compatible Linux et BSD (non-testé).
Pour installer IT-Edit tapez:
$ ./configure
$ make
$ sudo make install
Je suis ouvert a toute formes de critiques, si vous avez des commentaires a faire sur le code, les fonctionnalités auquelles je n'ai pas penser etc...
PS: J'ai vraiment écrit ce pseudo IDE pour mes propres besoins, mais je tiens a vous en faire profiter, quand même, afin qu'il évolue selon les fondements du free-software.
Merci beaucoup pour votre intérêt porter au code source de IT-Edit
Merci beaucoup pour votre intérêt porter au code source de IT-Edit,
Citation:
Tu utilises les mots réservés bool, false et true. Compiles-tu en C++ ?
Non pas du tout ce sont des types C99 du fichier stdbool.h, qui implémentent le type booléen.
par exemple:
Code:
1 2 3 4
|
include <stdbool.h>
bool bool_value = true ; |
Citation:
Tu utilises un pointeur GError. Si la fonction g_file_get_contents(); retourne FALSE tu ne libères pas l'espace alloué par ce pointeur (avec g_error_free();).
ET bien il s'avère que je ne savait pas qu'il fallait que je libère les variables de type GError.
Ce n'est pas évident car on déclare un pointeur de type GError statiquement et qu'après on donne l'adresse de ce pointeur a une fonction g_* qui, elle donc alloue de l'espace dynamiquement. Je n'ai pas remarquer.
Et il est vrai que j'ai oublier de libérer la variable file_content en cas d'echec de g_file_get_content().
Chose qui devrai pas se produire souvent, a moins d'une erreur de manipulation, comme ouvrir une fichier exécutable dans l'éditeur par mégarde, se produise.
Citation:
Toujours au sujet de GError tu utilises g_strdup_printf(); pour afficher le message d'erreur. Tout d'abord c'est inutile de l'utiliser pour afficher le message et en plus tu as aussi une fuite mémoire à cette occasion, puisque g_strdup_printf(); alloue dans le tas.
Vous avez totalement raison il suffit de passer error->message comme message secondaire de la fenêtre d'erreur.
Note: Il y a la même fuite de mémoire avec g_strdup_printf() dans le fichier: /Callbacks/search_settings_callbacks.c
Mais dans ce cas je suis obliger de formater le message.
Et comme la fenêtre de message d'erreur est détruite par une fonction de timeout je ne peut que lui passer la variable de type GtkWidget *message_dialog comme argument afin que le callback détruise la fenêtre de message d'erreur.
J'ai bien essayer de faire autrement en déclarant une structure:
Code:
1 2 3 4
| typedef struct {
char *error_message ;
GtkWidget *error_msg_dialog ;
} Error_message ; |
Afin de pouvoir:
*) Libérer le message (car il faut libérer le string retourner par g_strdup_printf())
*) Détruire la fenêtre de message d'erreur.
Mais malheureusement cela faisait crasher l'application pendant les assertions (Regardez du coté About->Readme dans la section "Notes for C programmers", il y a un mot sur les 2 fonctions de débogage).
J'ai préférer avoir une petite fuite au lieu d'un crash de l'application.
Citation:
Attention ! g_locale_to_utf8(); alloue dans le tas. Lorsque tu initialises file_content avec g_file_get_contents(); il pointe sur un espace alloué dans le tas. Écrire ensuite file_content = g_locale_to_utf8 (file_content,...); te fait perdre le pointeur sur la première allocation.
Il va falloir que j'utilise une nouvelle variable pour le retour de g_locale_to_utf8() ;
Encore grand merci pour l'intérêt porté au code source de IT-Edit.
Car je n'ai personne pour me relire ou me corriger, je suis tout seul, heureusement qu'il existe des forums et des gens qui s'intéresse a ce que je fait, pour cela.
Sinon les erreurs détecter resterai non-corriger.
Je vais corriger ces erreurs dès que vous aurez finit avec les autres fichiers afin de uploader une version corriger sur le serveur.
Je tiens a vous cité comme correcteur dans les README, alors contacter moi si vous voulez que votre vrai nom y apparaisse ou si vous ne voulez pas être cité.
void duplicate(GtkWidget *button, gpointer user_data);
Tu utilises la fonction strcat(); dans void duplicate(GtkWidget *button, gpointer user_data); sur un buffer alloué par la fonction gtk_text_buffer_get_text();.
La documentation de strcat(); dit :
Citation:
DESCRIPTION
La fonction strcat() ajoute la chaîne src à la fin de la chaîne dest en
écrasant l'octet nul (« \0 ») final à la fin de dest, puis en ajoutant
un nouvel octet nul final. Les chaînes ne doivent pas se chevaucher, et
la chaîne dest doit être assez grande pour accueillir le résultat. Si
dest n'est pas assez grande, le comportement du programme est imprévi‐
sible. Les dépassements de tampon font partie des moyens préférés pour
attaquer les programmes sécurisés.
Tu ne modifies pas la taille du buffer pour ajouter le caractère d'échappement. ATTENTION ! DANGER ! Utilises en lieu et place la fonction de la Glib gchar *g_strconcat (const gchar *string1, ...);. Elle va allouer dans le tas pour toi un nouveau buffer à la bonne taille pour la concaténation désirée.
it-edit est maintennt introuvable
Hello luke spywoker,
les liens vers les sources tarball ne sont plus fonctionnels j'imagine que tu as pu changer d'herbergeur
j'utilise ton editeur pour mon projet en complément du reste.