I. Introduction▲
Afin de travailler efficacement et sereinement, tout développeur se doit de disposer d'un IDE agréable et performant.
Dans cette optique j'ai été amené à en tester un certain nombre. Mes critères se sont alors affinés au fur et à mesure :
- pas d' « usine à gaz » ;
- rapide à charger ;
- possibilité d'avoir des plugins, quitte à les créer moi-même ;
- multiplateformes ;
- gestionnaire de projet intégré ;
- coloration syntaxique ;
- autocomplétion minimale ;
- …
J'ai de fait essayé beaucoup d'IDE avec plus ou moins de succès, de satisfactions, mais le plus souvent de frustrations. Et après un certain nombre d'essais, je suis tombé sur Geanyhttp://www.geany.org/ que j'ai depuis lors adopté, également à titre professionnel.
Je vous invite ici à le découvrir, notamment dans le cadre de projet Python.
Geany est disponible sous Linux, Windows et Mac. Sous Linux, il est disponible dans les dépôts. Sous Windows, il existe également en version portable.
Je n'utilise Geany que pour Python (cas traité dans le cadre de ce tutoriel).
Cependant, il ne se limite pas à cela. Vous pourrez l'utiliser pour de nombreux autres langages (C, java, VHDL…).
II. Présentation▲
II-A. Historique▲
Historiquement apparu en 2005 (version 0.1), actuellement en version 1.24.1, Geany est un IDE multiplateforme écrit en C++ et en GTK.
Il est placé sous licence GPL V2.
II-B. Philosophie▲
Geany est un IDE qui n'a pas la prétention d'égaliser Eclipse ou Netbeans. Son but est de fournir un environnement de développement performant et agréable, sans superflu inutile, et avec un démarrage rapide et une interface épurée.
Afin de garantir une certaine adaptabilité, il est possible d'utiliser, voire de créer, des plugins.
III. Utilisation▲
III-A. Les différents menus▲
Nous supposerons ici que les plugins Gproject et Additions (et eux seuls) ont été installés.
III-A-1. Menu Fichiers▲
Le menu fichier est relativement simple et complet.
On trouve tout d'abord la création d'un nouveau fichier, totalement vierge, ou basé sur des modèles. Dans ce dernier cas, les informations présentes (nom entreprise, développeur…) sont paramétrables dans les préférences de Geany.
Vient ensuite la gestion des fichiers (ouvrir, documents récents, enregistrer, recharger avec un encodage identique ou différent).
Nous avons ensuite les propriétés du document ouvert. La gestion de l'impression, puis la gestion de fermeture des fichiers (fermer le fichier en cours, tous les fichiers excepté le fichier courant, fermer tous les fichiers) et enfin la fermeture même du logiciel.
III-A-2. Menu Éditer▲
Les premières entrées sont classiques et se passent de toute explication.
Vient ensuite la section « commandes ». Elle permet d'effectuer des actions vis-à-vis d'une sélection ou des lignes courantes.
La section « Format » permet de gérer lignes, et blocs, en agissant au choix sur le formatage, la casse, les commentaires ou encore l'indentation.
Les deux entrées suivantes vont vous permettre d'insérer facilement des entêtes spécifiques à une licence, ou encore une date préformatée.
Enfin, en bas nous trouvons le paramétrage « Préférences » pour Geany et les plugins.
Seuls les plugins autorisant du paramétrage seront listés ici. Pour les plugins dépendant de Geanypy, ils auront leur propre menu dans le menu « Outils ».
III-A-3. Menu Rechercher▲
Les trois premières entrées permettent une recherche spécifique au document courant. Les deux entrées suivantes visent plutôt l'ensemble des documents. Les deux entrées suivantes permettent de naviguer dans l'onglet « Messages » de la fenêtre de message en bas de Geany.
Les deux suivantes permettent de se déplacer entre les différents marqueurs. Vous pouvez en ajouter en cliquant à droite des numéros de ligne.
Je vous invite à modifier par la suite les raccourcis pour cette fonctionnalité.
Vient ensuite le saut de ligne (déjà en accès direct depuis la toolbar), et des fonctionnalités supplémentaires liées à la sélection d'un mot ou d'un ensemble de mots.
III-A-4. Menu Affichage▲
Ce menu permet de gérer tout ce qui concerne l'affichage, d'un point de vue logiciel, et pas seulement le code, même si ce dernier compose l'essentiel du menu.
Les premiers sous-menus concernent l'affichage même du code avec le choix de la police et du jeu de couleurs de l'interface.
Vient ensuite le choix d'afficher ou non certains éléments du code (numéro de ligne, caractères de fin de ligne…).
Ensuite, nous avons l'affichage ou non des différentes fenêtres/barres complémentaires de Geany, et la possibilité de passer en plein écran.
Enfin, nous avons la gestion du zoom sur le code (plus, moins, 100 %).
III-A-5. Menu Document▲
Le menu document rassemble l'ensemble des commandes liées au document ouvert. Ce menu est appelé à évoluer selon le type de fichier ouvert, et nous allons le décrire ici pour un fichier Python. Il se décompose en six sections.
La première concerne les sauts de ligne et l'indentation spécifique au document.
La seconde concerne le fichier même : type et BOM.
La troisième section concerne les fins de ligne ainsi que le type de fichier et son encodage. C'est là que vous pourrez définir le langage que vous désirez utiliser, s'il n'a pas déjà été automatiquement détecté.
Nous trouvons ensuite tout ce qui concerne la manipulation de fichiers.
La section suivante permet de manipuler d'un coup l'affichage des différentes fonctions et classes à l'écran.
Enfin, nous trouvons la suppression des marqueurs et des erreurs, servant pour du débogage.
III-A-6. Menu Projet▲
Le menu Projet de base offert par Geany est un peu déconcertant. C'est pourquoi nous aurons installé préalablement le plugin « GProject » permettant de rendre plus rationnelle et traditionnelle la gestion de projet.
Ce menu est décomposé en quatre sections.
En premier, la gestion globale de projet (nouveau, ouvrir, projets récents, fermer).
Vient ensuite l'indentation à utiliser : celle définie en global dans Geany, ou celle définie spécifiquement pour le projet. Si on remodifie l'indentation spécifique du projet, elle reprend le pas.
Ensuite les propriétés du projet (nom, description, indentation…).
Enfin la section navigation à travers les fichiers/dossiers du projet.
III-A-7. Menu Construire▲
Ce menu permet de regrouper l'ensemble des commandes utiles pour l'ensemble des étapes possibles d'une compilation ou d'une interprétation du code.
Les commandes sont entièrement personnalisables (de même que le nom des sous-menus) et de ce fait, nous ne pourrons détailler ici précisément le contenu de ce menu.
III-A-8. Menu Outils▲
Ce menu sert assez peu souvent et se décompose en trois sections.
En premier, les fichiers de configuration de Geany, que je vous recommande de ne pas toucher.
En second, quelques outils.
Enfin, la gestion des plugins. C'est ici que nous pourrons installer GProject et additions.
III-A-9. Menu Aide▲
Le menu Aide est décomposé en trois sections.
La première vous permet d'afficher l'aide du logiciel (format HTML), de gérer les raccourcis clavier et d'afficher la console de débogage.
La seconde vous permet d'afficher le site web de Geany, d'accéder directement au wiki, de rapporter un bogue ou encore de faire un don.
Enfin la troisième ne vous permettra que d'afficher la classique fenêtre « À propos de… ».
III-B. Paramétrage global de Geany pour Python▲
Rendez-vous dans le menu « Éditer », et cliquez sur « préférences ».
Le paramétrage des préférences disposant de nombreuses bulles d'aide, nous ne passerons en revue que les éléments importants dans le cadre d'un développement Python.
Cliquez sur l'onglet « Éditeur ». Sur le second sous-onglet, cochez «Espaces » à la place de « Tabulations ».
Sur le dernier sous-onglet, changez le 72 en 100 et cochez « Afficher les guides d'indentation » et « Afficher les espaces ».
Cliquez ensuite sur l'onglet « Fichier », et dans la section « Enregistrements des fichiers », cochez « Enlever les espaces et tabulations de fins » et « Remplacer les tabulations par des espaces ».
Cliquez ensuite sur l'onglet « Modèles » et renseignez les informations vous concernant. Ces informations sont partiellement reprises à la création d'un projet.
Il ne vous reste plus qu'à valider le tout et votre Geany est configuré.
III-C. Paramétrage de la PEP8 et de Pylint▲
La PEP8https://www.python.org/dev/peps/pep-0008/ permet de rallier l'ensemble des développeurs Python autour de règles fortement recommandées pour un code propre et efficace.
Pylinthttp://www.pylint.org/ permet de s'assurer du respect d'un certain nombre de règles complémentaires à PEP8, principalement sur la mise en forme du code.
En résumé donc, en intégrant le contrôle de ces règles directement dans Geany, nous avons la possibilité de nous assurer d'un minimum de qualité pour notre code.
Cependant, avant de voir comment faire, quelques petites précisions. Dans les deux cas, il est possible de spécifier des codes erreurs à ne pas tenir compte, de même que des conditions spécifiques.
Dans mon cas par exemple, voici les paramétrages et écarts de ma configuration :
- Ligne de 100 caractères maximum ;
- Ignorer l'erreur E251 (des espaces doivent exister autour de « = »).
Et voici pour Pylint :
- Ignorer l'erreur W0702 (spécifier le type d'exception) ;
- Ignorer l'erreur W0201 (toutes les variables d'une classe définies dans le init) ;
- Ignorer l'erreur C0325 (utilisation inutile de parenthèses) ;
- Ignorer l'erreur R0902 (trop d'attributs pour l'instance en cours) ;
- Ignorer l'erreur R0912 (trop de branches) ;
- Ignorer l'erreur R0914 (trop de variables locales).
Concernant Pylint, il vous faudra générer un fichier de configuration. Il faut utiliser la commande suivante :
pylint --generate-rcfile >
./my_rc_file.rc
Une fois le fichier standard généré, vous pourrez le personnaliser. Pour information, voici mon fichier :
Déposez ce fichier dans un endroit de votre choix. Pour la suite de notre démonstration, ce chemin sera « /home/lm17/pylint_config.rc ».
Maintenant, passons à la configuration dans Geany. Allez dans le menu « Construire » et cliquez sur « Définir les commandes de constructions ».
Nous allons modifier la section « Commandes pour Python ». En cliquant sur un bouton sur la gauche de la fenêtre, vous pourrez modifier le titre de la commande dans le menu.
Comme vous pouvez le constater, cette section dispose de quatre lignes. Voici ce qu'il faut alors saisir :
Titre |
valeur |
PEP8 |
pep8 --max-line-length 100 --ignore=E251 "%f" |
Pylint |
pylint -rcfile="/home/lm17/pylint_config.rc" --msg-template='{path}:{line}: [{msg_id}, {symbol}, {obj}] {msg}' "%f" |
Compiler |
python -m py_compile "%f" |
([^:]+):([0-9]+):([0-9:]+)? .* |
Voilà, Geany est maintenant configuré et vous trouverez les sous-menus mis à jour.
Comme vous pouvez le constater, un simple appui sur F8 et F9 vous permettra désormais de vérifier que votre code respecte la PEP8 et les règles de base, via Pylint.
Votre code n'en sera alors qu'amélioré.
Afin que tout fonctionne correctement, n'oubliez pas d'installer en sus PEP8 et Pylint sur votre machine.
III-D. Personnalisation de la coloration syntaxique▲
Geany est basé sur Scintilla. À ce titre, il hérite des lexershttp://foicica.com/scintillua/LexerList.html de ce dernier. Nous n'allons pas ici voir comment créer un lexer de toute pièce, car cela est assez complexe, et est plus lié à Scintilla qu'à Geany.
Cependant, nous allons aborder la personnalisation de lexer sous Geany. Entendez par là que nous allons hériter d'un lexer existant, et personnaliser les mots clés et les couleurs.
Pour cela, nous interviendrons à deux niveaux :
- le fichier de configuration filetypes.common ;
- un fichier, que nous créerons, filetypes.<nom_du_langage>.conf.
Avant de plonger plus avant dans ces fichiers, détaillons le fonctionnement de la coloration sous Geany.
À chaque type (commentaire, ligne de code, entête…) correspond un style. Ce style peut être détaillé ou tout ou partie hérité depuis un autre type. L'exemple qui suit sera plus parlant
2.
3.
4.
5.
6.
comment=0xd00000
comment_doc=0x3f5fbf
comment_line=comment
comment_line_doc=comment_doc
comment_doc_keyword=comment_doc,bold
comment_doc_keyword_error=comment_doc,italic
Dans cet exemple, le type comment possède un style simple correspondant juste à une couleur, de même que le type comment_doc. Les deux types suivants, héritent de comment et comment_doc, donc d'une simple couleur. Enfin, les deux derniers types héritent de comment_doc, et on précise en plus que l'un est en gras et l'autre en italique.
Concernant le style à appliquer, vous avez les possibilités suivantes :
Paramètres |
Description |
0xrrggbb |
Valeur d'une couleur RGB en hexadécimal |
bold |
Mettre le texte en gras |
italic |
Mettre le texte en italique |
Maintenant, voyons comment modifier le fichier « filetype_extensions.conf ». Pour l'ouvrir, rendez-vous dans le menu outils/Fichiers de configuration.
Afin de modifier ce fichier, il vous faudra bénéficier des droits root/administrateurs.
Dans la section [Extensions], veuillez renseigner le nom de votre langage, ainsi que l'extension ou les extensions admises pour les fichiers. Puis, renseignez le nom de votre langage dans la section [Groups], dans le groupe où vous désirez le voir apparaître.
Une fois tout cela fait, il ne vous reste plus qu'à enregistrer le fichier, cliquer sur « Mettre à jour la configuration » dans le menu « Outils », puis à redémarrer Geany.
Toutefois, ce n'est pas encore fini. Nous avons déclaré le langage auprès de Geany, mais il reste à créer le fichier de configuration pour notre langage.
Pour trouver l'emplacement sur votre OS, effectuez une recherche afin de trouver le fichier « filetypes.common ». En effet cet emplacement peut varier d'un PC à l'autre.
Créez ensuite un fichier texte nommé tel que précédemment indiqué.
Le contenu doit ensuite ressembler à ce qui suit :
[build-menu]
FT_00_LB=_Compiler
FT_00_CM=bash /home/kannagi/Documents/SDK/SNES/bin/sms.sh main
FT_00_WD=
EX_00_LB=_Exécuter
EX_00_CM=mednafen main.sms
EX_00_WD=
[styling=ASM]
#default=default
#comment=comment_line
#commentblock=comment
#commentdirective=comment
#number=number_1
#string=string_1
#operator=operator
#identifier=identifier_1
#cpuinstruction=keyword_1
#mathinstruction=keyword_2
#register=type
#directive=preprocessor
#directiveoperand=keyword_3
#character=character
#stringeol=string_eol
#extinstruction=keyword_4
[keywords]
variables=
functions=
labels=
userdefined=
primary=
instructions=adc add and bit call ccf cp cpd cpdr cpi cpir cpl daa dec di djnz ei ex exx halt im in inc inc ind indr ini inir jp jr ld ldd lddr ldr ldir neg nop or otdr otir out outd outi pop push res ret retn rl rla rlc rlca rld rr rra rrc rrca rrd rst sbc scf set sla sra srl sub xor
registers=a b c d e f h l ix iy sp pc hl af bc de
directives=.define .section .bank .org .include .ends .db .macro .endm .memorymap .endme .rombankmap .endro
[indentation]
#width=4
[settings]
extension=mnl
lexer_filetype=ASM
# single comments, like # in this file
comment_single=;
# multiline comments
comment_open=/*
comment_close=*/
Comme nous pouvons le constater, le fichier est décomposé en différentes sections.
Tout d'abord, [build-menu]. Ce menu permet d'indiquer des informations concernant notre langage. Il est défini selon un modèle GG_NN_FF, ou NN est un nombre décimal à deux chiffres, démarrant à 00, valant généralement 00.
GG |
|
Paramètres |
Description |
FT |
Filetype |
NF |
Non-filetype, independent (non utilisé en général) |
EX |
Execute |
FF |
|
Paramètres |
Description |
LB |
Label |
CM |
Command |
WD |
Working directory |
Vient ensuite la section [Styling]. Deux solutions ici. Hériter directement de la section mère, auquel cas laissez la section vide (sauf surcharge) et saisissez simplement « [Styling=<nom_du_langage_herité>] », ou bien définir ses propres styles. Dans ce dernier cas, il vous faudra saisir « [Styling] », puis définir simplement vos styles tel que vu précédemment.
La section [Keywords] va permettre de définir les différents mots clés de votre langage. Ils sont séparés par un espace. Les paramètres que l'on peut définir sont :
Paramètres |
variables |
functions |
labels |
userdefined |
primary |
instructions |
registers |
directives |
La section [indentation] permet de définir la valeur par défaut d'une indentation pour votre langage.
Enfin la section la plus importante, la section [Settings]. Cette section doit contenir l'extension de vos fichiers (les mêmes que déclarées dans filetypes.common), le langage hérité, via lexer_filetype, et optionnellement le paramétrage concernant les commentaires.
Une fois tout cela fait, un simple redémarrage de Geany suffira à prendre en compte votre nouveau langage.
III-E. Choix de la coloration syntaxique▲
Par défaut, Geany lira l'extension de votre fichier et appliquera la coloration syntaxique la plus adaptée. Cas échéant, il préférera n'appliquer aucune coloration.
Cependant, si le choix de Geany ne vous convenait pas, vous avez la possibilité de choisir/forcer une coloration syntaxique en particulier.
Pour cela, il faut vous rendre au menu « Document/Définir le type de fichier ». Les langages sont alors divisés en plusieurs catégories :
- Programmation ;
- Scripting ;
- Markup/Balisage ;
- Divers ;
- None.
None revient à n'appliquer aucune coloration syntaxique. Divers est un peu la catégorie joker, permettant de classer les langages n'entrant dans aucune des catégories précédentes.
Voici maintenant la liste complète des langages disponibles.
Programmation |
Scripting |
Cython |
Abaqus |
Go |
ActionScript |
Scala |
Cmake |
(O)Caml |
Erlang |
Ada |
Ferite |
Assembleur |
Forth |
C |
Javascript |
C# |
Lisp |
C++ |
Lua |
Cobol |
Matlab |
D |
Octave |
Fortran F77 |
NSIS |
Fortran F90 |
Perl |
FreeBasic |
PHP |
GLSL |
Python |
Haskell |
R |
Haxe |
Ruby |
Java |
Tcl |
Objective-C |
Makefile |
Pascal |
Script Shell |
Vala |
|
Verilog |
|
VHDL |
Markup |
Divers |
XML |
Abc |
Css |
Config |
AsciiDoc |
Gettext |
DocBook |
Diff |
HTML |
SQL |
Latex |
YAML |
MarkDown |
|
ReStructuredText |
|
Txt2tags |
S'il vous est possible de choisir votre coloration syntaxique pour un document vierge, Geany vous proposera également quelques fichiers préremplis, et ce pour plusieurs langages. Pour cela, rendez-vous dans le menu « Fichier=>Nouveau selon modèle »
IV. Plugins▲
À mes yeux, voici les trois principaux plugins utiles :
- Additions : permet d'ajouter des fonctionnalités supplémentaires à Geany ;
- GProject : s'interface avec Geany afin de proposer une meilleure gestion de projet ;
- Geanypy : permet la création et l'utilisation de plugins en langage Python.
IV-A. Le plugin GProject▲
Grâce à GProject, la gestion d'un projet est très simple.
Créez-vous un dossier où sera stocké votre projet. Puis ouvrez le menu « Projet », et cliquez sur « nouveau ».
Dans la fenêtre qui s'ouvre, renseignez le nom du projet, ainsi que le dossier que vous avez précédemment créé.
Dans le dossier ainsi créé, vous trouverez alors un fichier « .geany » qui contient le descriptif de votre projet.
J'ai personnellement l'habitude de créer à cet endroit un sous-dossier au nom du projet afin d'isoler le projet du fichier descriptif du projet.
Rendez-vous ensuite dans le menu « Projet », et cliquez sur « Propriétés ». Apparaît alors une fenêtre avec six onglets.
Sur le premier, vous pouvez paramétrer le nom du projet, son descriptif, son dossier de base, ainsi que les fichiers à prendre en compte (ex. : *.py, *.html, ou plus simplement *.*).
Sur le second vous retrouverez le paramétrage d'indentation pour votre projet. L'indentation doit être réglée sur espaces avec une valeur de 4.
Le troisième onglet sert au paramétrage de l'éditeur. Choisissez un indicateur à 100 caractères.
Le quatrième sert pour configurer l'assistance utilisateur pour les développements
L'onglet suivant sert à paramétrer les règles de construction de votre projet. Par défaut, il s'agit d'une copie des règles de Geany.
Enfin, le dernier onglet permet de paramétrer GProject pour la gestion du projet.
Validez afin de finir de paramétrer votre projet.
Une fenêtre sur votre gauche apparaît alors, onglet « Projet ».
Le bouton en bleu permet de recharger le contenu du dossier projet. Le bouton en vert permet de déplier tous les nœuds (répertoires) contenus dans le dossier Projet, tandis que le rouge permet de les plier. Enfin, le bouton orange, s'il est activé, permet au gestionnaire de projet de suivre sur quel fichier vous vous trouvez, et de le mettre en surbrillance.
IV-B. Le plugin Additions▲
Ouvrez le menu « Éditer », puis cliquez sur « Préférences des plugins ».
Sur la fenêtre qui s'ouvre, cochez alors « Marquer toutes les occurrences d'un mot lors d'un double-clic » et « Supprimer les lignes vides à la fin d'un document », puis validez.
Voilà, Geany est maintenant configuré.
IV-C. Création d'un plugin en Python avec Geanypy▲
IV-C-1. Présentation▲
Geanypy est un plugin Geany permettant de coder les plugins non pas en C, mais en Python.
La partie graphique repose sur PyGTK. Mais attention, car les fonctionnalités dépréciées génèrent des bogues à l'exécution. Je vous invite à regarder cette documentationhttp://python.developpez.com/tutoriels/python-en-bref/#LVI pour plus d'informations sur PyGTK.
Une fois le plugin Geanypy installé, un nouveau menu apparaît, sous le gestionnaire de plugins, lequel vous permet alors de gérer vos plugins Python.
Vous ne pouvez pas lancer le code de votre plugin à l'intérieur de Geany, cela ne fonctionnera pas. La meilleure méthode pour tester est d'activer votre plugin dans Geany, puis de lancer Geany depuis un terminal. Si des erreurs ont lieu, des messages s'afficheront alors. Si vous désirez plus d'infos encore, lancez « geany -v ».
IV-C-2. Installation▲
La procédure d'installation est indiquée ICIhttp://codebrainz.github.io/geanypy/.
git clone git://
github.com/
codebrainz/
geanypy
GEANY_PREFIX=
`pkg-
config --
variable=
prefix geany`
cd geanypy
./
autogen.sh
./
configure --
prefix=
$GEANY_PREFIX
make
sudo make install
Après l'installation, GeanyPy est alors disponible comme plugin, et si vous l'activez, un nouveau menu apparaîtra.
Il existe un boguehttps://github.com/codebrainz/geanypy/issues/13 connu faisant que GeanyPy se désactive à chaque démarrage. Pour pallier cela, repérez le « system plugin path » de Geany. Ouvrez simplement Geany, puis allez dans le menu « aide »/« message de débogage ». Le « system plugin path » y sera indiqué. Ensuite, copiez son contenu dans « /usr/lib/geany » dans le « system plugin path ».
IV-C-3. Emplacement des plugins▲
L'intégralité des plugins Python que vous développerez ou installerez seront à mettre dans : « /home/<user>/.config/geany/plugins/geanypy/plugins/<nom_du_plugin> ».
IV-C-4. Fichier principal : les bases▲
Quand vous allez écrire votre plugin, vous avez deux options : tout mettre dans un seul fichier ou alors, comme je le préfère, séparer les différents blocs de code par fonction.
Dans tous les cas, le fichier principal, qui sera appelé par Geany doit porter le nom de votre plugin et respecter la structure de base suivante.
#! /usr/bin/env PYTHON
# -*- coding: utf-8 -*-
import
geany
# =========================================================== #
class
<
nom_du_plugin>(
geany.Plugin):
__plugin_name__ =
"<nom_du_plugin>"
__plugin_description__ =
(
"<descriptif>"
)
__plugin_version__ =
"<version>"
__plugin_author__ =
"<prenom_auteur> <nom_auteur> <<mail>>"
# ex : __plugin_author__ = "Alexandre GALODE <ag@dvp.com>"
# ==================================== #
def
__init__
(
self):
"""
Init method
"""
# import externe autre que geany
geany.Plugin.__init__
(
self)
self.load_gui
(
)
# ==================================== #
def
load_gui
(
self):
"""
Allows to load the plugin's GUI
"""
pass
# ==================================== #
def
show_configure
(
self):
"""
Method called when we want to parameter the plugin
"""
pass
# ==================================== #
def
cleanup
(
self):
"""
Method called when we deactivate the plugin.
"""
pass
# =========================================================== #
if
__name__
==
"__main__"
:
pass
Voyons maintenant plus en détail cette structure de base.
Pour commencer, seul le module Geany est importé au début du fichier. Tout autre module externe (gtk, sqlite…) doit être importé dans le « __init__ », sans quoi vous aurez des erreurs au lancement du plugin.
Il doit y avoir une classe au nom de votre plugin et elle doit hériter de « geany.Plugin ». Cette classe possède quatre métadonnées qui permettent de connaître le nom du plugin, son descriptif, sa version et l'auteur.
Dans le « __init__ », hors de l'initialisation de la classe héritée, on appelle la méthode qui va permettre de créer le plugin (ici « load_gui »).
Les deux autres méthodes, dont vous ne pouvez modifier le nom, sont « show_configure » et « cleanup ». La première permet d'ajouter une fenêtre d'option pour paramétrer votre plugin. Si votre plugin n'a pas besoin d'être paramétré, vous pouvez omettre cette méthode.
La seconde, « cleanup » est OBLIGATOIRE. Si lorsque vous activez un plugin, le « __init__ » est appelé, lorsque vous le désactivez, c'est le cleanup qui est appelé.
À l'heure actuelle, vous devez importer les modules à l'endroit où vous voulez vous en servir. Cela a été remonté à l'équipe, qui travaille dessus.
IV-C-5. Les zones d'interactions possibles▲
Vous pouvez interagir avec l'IHM à cinq niveaux :
- les menus ;
- la toolbar ;
- la progressbar de Geany ;
- l'espace des fichiers ;
- le notebook côté gauche, nommé « sidebar_notebook » ;
- le notebook en bas de l'écran, nommé « message_window_notebook ».
Seuls quelques menus sont accessibles, via différents objets :
- « geany.main_widgets.tools_menu » pour le menu « Outils » ;
- « geany.main_widgets.project_menu » pour le menu « Projet » ;
- « geany.main_widgets.editor_menu » pour le menu « Éditer ».
La toolbar est accessible via l'objet « geany.main_widgets.toolbar ».
La progressbar de Geany est accessible via l'objet « geany.main_widgets.progressbar».
L'espace de fichiers est accessible via l'objet « geany.main_widgets.notebook ».
Le sidebar_notebook est accessible via un objet Geany « geany.main_widgets.sidebar_notebook ».
Le message_window_notebook est accessible via un objet « geany.main_widgets.message_window_notebook ».
IV-C-6. Obtenir de l'aide▲
Un des plugins livrés de base est un terminal Python dédié à GeanyPy. Vous pouvez y effectuer un « import geany », un « import gtk » et un « import pygtk ».
Vous avez alors la possibilité de créer des objets liés à Geany et de faire un appel au help() pour avoir plus d'informations.
La documentation de l'API n'étant pas encore très complète, c'est la meilleure façon d'obtenir actuellement de l'aide pour vos développements de plugins.
De plus, les méthodes associées aux widgets sont inspirées de celles de PyGTK. Si vous cherchez comment faire quelque chose, c'est une piste à suivre.
IV-C-7. Menu▲
Self.menu_outils =
geany.main_widgets.tools_menu
# Creation d'un item de classe
self.menu_item =
gtk.MenuItem
(
"Hello World"
)
# Ajout au menu
self.menu_outils.append
(
self.menu_item)
self.menu_item.show
(
)
# Connexion a une methode
self.menu_item.connect
(
"activate"
, self.clicked_menu)
# Suppression
self.menu_item.destroy
(
)
IV-C-8. Toolbar▲
geany_toolbar =
geany.main_widgets.toolbar
# Connaitre le nombre d'element dans la toolbar, separateurs compris
geany_toolbar.get_n_items
(
)
# Connaitre le ToolItem a une position precise
geany_toolbar.get_nth_item
(<
position>
)
# Connaitre la position d'un ToolItem
geany_toolbar.get_item_index
(<
gtk.ToolItem object>
)
# Connaitre le nom d'un ToolItem
<
gtk.ToolItem object>
.get_name
(
)
# Ajouter un ToollItem
geany_toolbar.insert
(<
gtk.ToolItem object>
, position)
# Enlever le 25e ToolItem, en partant de 0
geany_toolbar.remove
(
geany.main_widgets.toolbar.get_nth_item
(
25
))
# Enlever un ToolItem précis
geany_toolbar.remove
(<
gtk.ToolItem object>
)
IV-C-9. Progressbar▲
pb =
geany.main_widgets.progressbar
# Afficher la progressbar ou la cacher
pb.show
(
)
pb.hide
(
)
# Mettre a jour l'avancement, en %
pb.set_fraction
(
0.5
) # 50%
# Lire l'avancement de la progressbar
pb.get_fraction
(
)
# Signaler une progression sans pouvoir la quantifier
pb.set_pulse_step
(
0.1
)
pb.pulse
(
) # Chaque appel a pulse() fera bouger pb de 10 %
# a utiliser avec un timer ou dans une boucle
IV-C-10. Notebook▲
Pour rappel, il existe deux notebook principaux : la sidebar et la message_window.
# Sidebar
sidebar =
geany.main_widgets.sidebar_notebook
sidebar.append
(
widget, gtk.Label
(
titre))
sidebar.remove_page
(
n°_onglet) # si -1 enleve le dernier
# Message window
msgw =
geany.main_widgets.message_window_notebook
msgw.append
(
widget, gtk.Label
(
titre))
msgw.remove_page
(
n°_onglet) # si -1 enleve le dernier
# Connaitre le label du dernier onglet
msgw.get_tab_label_text
(
msgw.get_nth_page
(-
1
))
IV-C-11. Fichiers et espaces de fichiers▲
doc =
geany.document
# Ouvrir un fichier
doc.open_file
(
chemin_absolu)
# Lister les fichiers ouverts
list_doc =
doc.get_documents_list
(
)
# Connaitre le nom d'un document precis (avec son chemin absolu)
list_doc[0
].file_name
# Trouver une instance precise d'apres son chemin absolu
tmp =
doc.find_by_filename
(
chemin_du_fichier)
# Lire le contenu du fichier actif
tmp.editor.scintilla.get_contents
(
)
# Ecrire le contenu du fichier actif
tmp.editor.scintilla.set_text
(
"hello world"
)
# Sauver un fichier
tmp.save_file
(
)
IV-C-12. Projet▲
Cela ne fonctionnera que si vous avez un projet ouvert. Dans le cas inverse, le code suivant tombera en erreur.
project =
geany.project.Project
(
)
# Lecture du chemin du projet
BASE_PATH =
project.base_path
# Lecture du nom du projet
NAME_PJ =
project.name
# Lecture du descriptif du projet
DESCRIPTION =
project.description
# Lecture de l'auteur du projet
AUTHOR =
project.description
IV-C-13. Messages utilisateur▲
Geany autorise la création de fenêtres pop-up simplifiées.
diag =
geany.dialogs
# Demander a l'utilisateur de saisir quelque chose
# Retourne la valeur saisie
diag.show_input
(
titre,None
,label,valeur_par_defaut)
# Demander a l'utilisateur de saisir un nombre
# Retourne une valeur de type float
diag.show_input_numeric
(
titre,label,valeur_par_defaut,min,max,step)
# Afficher un message à l'utilisateur
dialogs.show_msgbox
(
texte,gtk.MESSAGE_INFO)
dialogs.show_msgbox
(
texte,gtk.MESSAGE_WARNINGc)
dialogs.show_msgbox
(
texte,gtk.MESSAGE_ERROR)
# Poser une question a l'utilisateur (retourne True ou False)
diag.show_question
(
"Appreciez vous ce tuto?"
)
IV-C-14. Interactions externes▲
Pour tout ce qui est programmation, hors spécificités Geany, cela reste du Python standard. Vous avez donc le loisir d'interagir à votre guise avec des modules externes tels la génération de rapport HTML, la génération PDF…
Votre principale limite reste alors votre imagination.
V. Liens utiles▲
http://codebrainz.github.io/geanypy/
https://media.readthedocs.org/pdf/geanypy/latest/geanypy.pdf
VI. Conclusion▲
Bien que relativement simpliste, Geany est un petit IDE fort agréable à utiliser dans la vie de tous les jours. Cette simplicité fait sa force et explique qu'il arrive à s'imposer aisément dans de nombreuses équipes face à des grands noms tels qu'Eclipse ou encore Netbeans.
Rapide à charger, léger, multiplateformes… cet IDE est rempli d'atouts, et bien qu'encore jeune, est promis à un bel avenir.
J'espère que cette présentation vous aura donné envie, ne serait-ce que d'essayer Geany afin de vous faire votre propre opinion et de visualiser le potentiel de ce logiciel qui m'est désormais indispensable. Peut-être même voudrez-vous maintenant développer vos propres plugins.
VII. Remerciements▲
Merci aux personnes suivantes pour leur aide :